Заметки бизнес-аналитика
Главная › Системный анализ

BPMN, UML и C4

Какую диаграмму выбрать

ЗадачаДиаграммаДля кого
Показать бизнес-процесс с ролями и передачами работыBPMNБизнес, аналитики
Показать, какие функции система даёт каким акторамUML Use CaseБизнес, команда
Показать алгоритм или поток действий с ветвлениямиUML ActivityКоманда
Показать обмен сообщениями между системами во времениUML SequenceРазработчики, тестировщики
Показать жизненный цикл одного объекта (заказа, заявки)UML StateКоманда
Показать доменную модель: классы, атрибуты, связиUML Class / ERРазработчики, архитектор
Показать архитектуру на разных уровнях детализацииC4Все: от бизнеса до разработчиков
Классическая ошибка на собеседовании — отнести C4 к BPMN или UML. C4 — отдельная модель описания архитектуры, она не входит ни в UML, ни в BPMN.

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

Модель Саймона Брауна для описания архитектуры на четырёх уровнях — как карта с разным масштабом:

  1. Context — система целиком, её пользователи и внешние системы. Понятна бизнесу.
  2. Container — отдельно разворачиваемые части: веб-приложение, мобильное приложение, сервисы, базы данных, брокеры. Это не Docker-контейнеры.
  3. Component — крупные логические части внутри одного контейнера.
  4. 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 показывает, какие системы какими вызовами обмениваются в рамках одного сценария и что происходит при ошибках.

Конспекты статей по теме

Подробные конспекты полезных статей. В конце каждого есть ссылка на оригинал и автора.