Event Storming with Archi

Автор раздела: Ivan Zakrevsky

Обзор инструментов

PlantUML достаточно быстро исчерпал свои возможности и диаграммы стали нечитаемыми и неуправляемым. Попытки выровнять диаграмму штатными средствами оказались безуспешниыми. На разных серверах диаграмма отображалась по-разному.

Сервис Miro вынуждает архитектурно-значимую информацию покидать периметр безопасности, образует лицензионную зависимость и находится под давлением геополитических факторов. Как и PlantUML, не позволяет находить границы микросервисов ввиду отсутствия в нем модели.

Неплохие надежды подает domorobo.to, но он пока еще сыроват.

Archi

В процессе поиска внимание привлекла внимание диаграмма на "Figure 13: Event Storming Model" of "Agile Architecture Modeling Using the ArchiMate® Language" (см. здесь, здесь или здесь).

Model used by Jean-Baptiste Sarrodie for presentation "Enterprise Architecture Modelling with ArchiMate in an Agile at Scale Programme"

Попробовал сделать Event Storming в Archi, и обнаружил, что он делается с такой же легкостью, как и в Miro. Разве что для публикации своих изменений другим участникам нужно сделать 5 кликов мышкой. Технически, это можно автоматизировать по регулярному расписанию, используя jArchi. А вот изменения других участников уже и так подтягиваются по настраиваемому регулярному расписанию фоновым процессом.

Нотации (т.е. цвета) Event Storming практически идентичны нотациям "C.1.10 Business Process Cooperation Viewpoint".

Достоинства Archi для Event Storming

  1. On-Premise. Архитектурно-значимая информация не покидает закрытый периметр безопасности.

  2. Open Source under MIT License

  3. Наличие модели позволяет:

    1. Определять границы не только Ограниченных Контекстов, но и Микросервисов. Это является следствием наличия модели и возможности классифицировать связи, выделять из них связи, образующие Сoupling & Сohesion, и с математической точностью определять наилучшую форму границ микросервисов.

    2. Рассматривать любой элемент диаграммы в различных представлениях, например, мгновенно перейти с Context Map на Event Storming. См. вкладку "Properties" выбранного элемента, секция "Analisis".

    3. Отслеживать трассировку как до выбранного элемента, так и после него. См. окно Window-Navigator и две кнопки: "Show target relations" и "Show source relations".

    4. При разбиении большой диаграммы на части по некому признаку (например, по базовым сценариям использования), изменение в одной диаграмме (например, изменение целевого элемента связи) будет автоматически отражено на всех остальных диаграммах, что удешевляет сопровождение таких диаграмм. А при добавлении нового элемента из модели в диаграмму, вместе с ним добавляются и все существующие в модели его связи к уже добавленным в диаграмму элементам.

  4. Использование Git открывает следующие возможности:

    1. Историрование. Возможность восстановления одного из предыдущих состояний. Журналирование изменений.

    2. Версионирование и ответвления - параллельная разработка различных версий решения.

    3. Коллективная разработка. Доступ к информации задается обычной конфигурацией git-сервера (обычно средствами GitHub и GitLab).

  5. Использование Motivation Elements (Stakeholder, Driver, Assessment, Goal, Outcome, Principle, Requirement, and Constraint) позволяет осуществлять визуализацию факторов влияния на решение, а также фиксацию трассировки требований. Возможность воплощения принципов Twin Peak Model. В процессе проработки одной из альтернатив, обнаруживаются ее ограничения и новые драйверы, которые влияют на требования. В визуальном виде аналитическая информация воспринимается намного легче, чем обычная свалка требований в PBI.

  6. Богатое интеграционное API позволяет использовать модель для автоматизированной её сверки с реализацией или для генерации кода.

  7. В Archi можно также делать C4 Model, используя единую модель и для C4 Model, и для Event Storming.

  8. В Archi можно сделать Context Map, используя единую модель с Event Storming.

Недостатки

Резольв конфликта слияния через GUI для каждой отдельной диаграммы возможен только путем выбора одной из двух версии целиком - либо своей, либо сливаемой. При просмотре версий диаграммы их различия никак визуально не выделяются и не подсвечиваются.

Сама модель сохраняется в файл .git/temp.archimate. Преобразуется она в файлы Git репозитория только в момент коммита. Этот момент нужно учитывать, т.к. изменения модели в Archi не отражаются мгновенно в файлах Git репозитория и, наоборот, изменения в файлах Git репозитория не отражаются мгновенно в модели Archi.

Мне известны два способа слить диаграммы в случае конфликта без утраты изменений обоих её версий.

Средствами Git

Резольва конфликта слияния средствами Git на уровне текстовых файлов" (см. описание GRAFICO format). Не самый простой, но самый действенный вариант. Впрочем, к нему быстро привыкаешь.

Чаще всего конфликты возникают в файлах диаграмм (Views), и их резольв усложняется тем, что в них присутствуют только идентификаторы конфликтующих элементоа. И эти идентификаторы не сообщают никакой информации о своих элементах. Чтобы определить смысл элемента по его идентификатору, можно предварительно (т.к. в процессе слияния элемент может быть уже удален из модели) заэкспортировать модель в *.CSV файлы. Как вариант, можно также сохранить модель в *.archimate файл, если модель относительно небольшая, и затем использовать поиск по файлу. Можно создать копию файловой структуры Git репозитория перед слиянием и грепать по её файлам.

Штатный механизм слияния модели

Сохраняем модель одного бранча в *.archimate файл, а затем импортируем её в выбранную модель другого бранча. Этот вариант дает меньше контроля над процессом слияния, но и уменьшает вероятность допущения ошибки.

Избегание конфликтов

Резольв конфликта в Archi нетривиальный, и лучше его избегать. На практике обычно кто-то один управляет доской в один момент времени, и, в случае необходимости, передает управление другому участнику.

Частые интеграции и блокировки организационными мерами позволяют снизить вероятность возникновения конфликта.

Установка

Дистрибутив: https://www.archimatetool.com/download/

Документация Archi.

Плагин коллективной разработки coArchi (Source Code). Документация к плагину.

Актуальное руководство по генерации RSA-ключей.

Определение границ микросервисов

Изначально мы допускаем, что один микросервис == один агрегат. Находим "болтливые" микросервисы. Пробуем объединить болтливые микросервисы в общий микросервис и сравниваем, как изменились совокупный Coupling (внешние связи микросервиса(ов)) & Cohesion (к-т реиспользования агрегатов внутри одного микросервиса). Например, если у нас совокупный Coupling упал на 5 единиц, при этом Cohesion возрос, то объединение микросервисов оправдано.

Для этого, в каждом микросервисе выделяем отдельную директорию _coupling и _cohesion. А также создаем отдельную директорию для каждого агрегата и связанной с ним логикой (той самой, которая будет вынесена из текущего микросервиса вместе с агрегатом, если такое понадобится, например, все представления (ReadModels) агрегата).

Дополнительная информация:

Интеграция

Из коробки Archi уже поддерживает экспорт модели в *.CSV файл.

Существует ряд плагинов, которые облегчают интеграцию:

С помощью этих плагинов Archi позволяет выгружать свою модель в RDBMS, в Excel, а также позволяет обращаться к модели через консольный интерфейс, используя SQL-подобный синтаксис.

С помощью этих плагинов очень легко генерировать PBI, Acceptance Criteria, BDD-specification или тестовые кейсы из требований модели, а из диаграммы Event Storming и C4 Model - генерировать код микросервисов или автоматизировать сверку модели с кодом.

Archimatetool использует Grafico format файлов:

📝 "GRAFICO stands for "Git Friendly Archi File Collection" and is a way to persist an ArchiMate model in a bunch of XML files (one file per ArchiMate element or view)."

https://github.com/archi-contribs/archi-grafico-plugin/wiki/GRAFICO-explained

Генерация документации

Стикеры

В Archi есть доска со стикерами (см. New Sketch View на стр. 110 документации).

Можно делать Event Storming обычными стикерами, а не только используя "C.1.10 Business Process Cooperation Viewpoint".

Можно проводить сеанс Example Mapping и автоматизировать генерацию BDD-specification или тестовых кейсов.

C4 Model

Event Storming гармонично сочетается с C4 Model, о чем говорил Сергей Баранов в своем докладе. И вот тут еще одно интересное открытие - Simon Brown собственноручно ссылается на статью Jean-Baptiste Sarrodie о том, как делать C4 Model в Archi.

Там же Simon Brown ссылается на Guide Agile Architecture Modeling Using the ArchiMate® Language на сайте OMG о том, как использовать C4 Model и Event Storming в Open Agile Architecture, используя Archi. Jean-Baptiste Sarrodie собственноручно выложил демонстрационную модель C4 Model и Event Storming в Archi.

Archimatetool troubleshooting