BPMN, UML и C4
Какую диаграмму выбрать
| Задача | Диаграмма | Для кого |
|---|---|---|
| Показать бизнес-процесс с ролями и передачами работы | BPMN | Бизнес, аналитики |
| Показать, какие функции система даёт каким акторам | UML Use Case | Бизнес, команда |
| Показать алгоритм или поток действий с ветвлениями | UML Activity | Команда |
| Показать обмен сообщениями между системами во времени | UML Sequence | Разработчики, тестировщики |
| Показать жизненный цикл одного объекта (заказа, заявки) | UML State | Команда |
| Показать доменную модель: классы, атрибуты, связи | UML Class / ER | Разработчики, архитектор |
| Показать архитектуру на разных уровнях детализации | C4 | Все: от бизнеса до разработчиков |
BPMN
Основные элементы
- События (круги): стартовое (тонкая рамка), промежуточное (двойная), конечное (жирная). Типы: простое, сообщение, таймер, ошибка.
- Задачи (прямоугольники со скруглёнными углами): ручная, пользовательская (человек работает в системе), сервисная (автоматическая). Подпроцесс — задача, которая раскрывается отдельной диаграммой.
- Шлюзы (ромбы): XOR — ровно одна ветка по условию, AND — все ветки параллельно, OR — одна или несколько веток, событийный — ветка по тому событию, которое наступит первым.
- Пулы и дорожки: пул — участник (организация, система), дорожка — роль внутри пула.
- Потоки: поток управления — внутри пула, поток сообщений — между пулами.
- Артефакты: объекты данных, хранилища, аннотации.
Правила хорошей диаграммы
- Задачи называются «глагол + объект»: «Проверить заявку». События — в прошедшем времени: «Заявка поступила».
- Ветвление открывается и закрывается шлюзом одного типа. Если открыть AND, а закрыть XOR, действие после шлюза выполнится дважды. Если открыть XOR, а закрыть AND, процесс зависнет.
- Ветки после XOR подписываются условиями, одну можно отметить потоком по умолчанию.
- Успешное и неуспешное завершения показываются разными конечными событиями.
- Больше 15–20 элементов на диаграмме — повод вынести часть в подпроцесс.
Пример: обработка заявки
(Заявка поступила) → [Проверить заявку] → <XOR: данные полные?>
нет → [Запросить данные у клиента] → (таймер 3 дня) → ...
да → [Подготовить КП] → [Отправить КП] → <событийный шлюз>
(Клиент согласился) → [Сформировать договор] → (Договор заключён)
(Прошло 5 дней) → [Закрыть заявку] → (Заявка отклонена)
UML
Use Case
Акторы (человечки) вне границы системы, прецеденты (овалы) внутри. Связи: include — обязательное включение одного сценария в другой (оформление заказа всегда включает расчёт стоимости); extend — необязательное расширение (применить промокод при оплате). Это диаграмма-карта: подробности описываются текстом use case.
Activity
Похожа на блок-схему: действия, решения, слияния, развилки для параллельности, дорожки. Удобна для описания алгоритма внутри системы.
Sequence
- Участники сверху, линии жизни вниз, время идёт сверху вниз.
- Сплошная стрелка с закрашенным наконечником — синхронный вызов, открытый наконечник — асинхронное сообщение, пунктир — ответ.
- Фреймы:
alt— ветвление,opt— необязательный шаг,loop— цикл,par— параллельно,ref— ссылка на другую диаграмму,break— досрочный выход при ошибке. - Всегда показывайте ветку ошибки: таймаут, отказ внешней системы, невалидные данные.
@startuml
actor Покупатель
participant "Сайт" as Web
participant "Сервис заказов" as Orders
participant "Платёжный шлюз" as Pay
Покупатель -> Web: Оформить заказ
Web -> Orders: POST /orders
Orders --> Web: 201 Created (orderId)
Web -> Pay: Создать платёж
alt оплата успешна
Pay --> Web: success
Web -> Orders: PATCH /orders/{id} status=PAID
else отказ
Pay --> Web: declined
Web --> Покупатель: Оплата не прошла, попробуйте снова
end
@enduml
State
Жизненный цикл одного объекта. Пример для заказа: Создан → Ожидает оплаты → Оплачен → Собран → Передан в доставку → Доставлен, плюс переходы в «Отменён» из ранних состояний. На каждом переходе указывается событие и, при необходимости, условие.
Class
Классы с атрибутами и методами, связи: ассоциация, агрегация (пустой ромб — часть может жить отдельно), композиция (закрашенный ромб — часть живёт только вместе с целым), наследование, кратности (1, 0..1, 1..*, *).
C4
Модель Саймона Брауна для описания архитектуры на четырёх уровнях — как карта с разным масштабом:
- Context — система целиком, её пользователи и внешние системы. Понятна бизнесу.
- Container — отдельно разворачиваемые части: веб-приложение, мобильное приложение, сервисы, базы данных, брокеры. Это не Docker-контейнеры.
- Component — крупные логические части внутри одного контейнера.
- Code — классы и таблицы. Рисуется редко, обычно генерируется.
Правила: у каждого элемента есть название, тип и короткое описание; у контейнеров указана технология; каждая стрелка подписана (что и по какому протоколу).
Инструменты
- draw.io (diagrams.net) — универсальный бесплатный редактор, есть плагин для Confluence.
- bpmn.io, Camunda Modeler — BPMN.
- PlantUML — UML и C4 текстом, удобно хранить в Git рядом с кодом.
- Structurizr — C4 как код.
Вопросы для самопроверки
Чем BPMN отличается от UML Activity?
BPMN — нотация для бизнес-процессов организации: участники, роли, события, сообщения между организациями. Activity — часть UML для описания потока действий, чаще внутри системы. Они похожи визуально, но BPMN богаче событиями и лучше понятна бизнесу.
Чем include отличается от extend?
Include — базовый сценарий всегда вызывает включаемый. Extend — расширяющий сценарий выполняется только при определённом условии. Стрелка extend направлена от расширения к базовому сценарию.
Когда нужна sequence-диаграмма, а когда BPMN?
BPMN показывает, кто и в каком порядке выполняет работу в бизнес-процессе. Sequence показывает, какие системы какими вызовами обмениваются в рамках одного сценария и что происходит при ошибках.
Конспекты статей по теме
Подробные конспекты полезных статей. В конце каждого есть ссылка на оригинал и автора.
- Как начать моделировать бизнес-процессы в BPMN — Анна Вичугова (Systems_Education)
- Памятка по BPMN и BPMN-диаграммам — Николай Колесник (default_itshnik, Сбер)
- Как описать систему в UML: от Use Case до состояний — Анна Вичугова (Школа анализа и проектирования ИС)
- Проектирование sequence-диаграмм: руководство для системных аналитиков — Альфред Столяров
- Лучшие практики в sequence-диаграммах для системных аналитиков — Михаил Пискунов
- Пишу диаграммы последовательностей текстом (кодом) — Игорь Овчинин (Ростелеком)
- Как описать архитектуру продукта по нотации C4 — true_engineer (True Engineering, перевод)
- Применение модели C4 в работе системного аналитика — Яна (Совкомбанк Технологии)
- Нотация C4: полный гайд с примерами и разбором ошибок — Екатерина Ананьева (katherine_a, GetAnalyst)