UML (текущая версия 2.5.1) содержит 14 видов диаграмм, но аналитику на практике нужны четыре-пять. На собесе спрашивают, когда какую рисовать, и просят набросать последовательность для интеграции.
Диаграмма последовательностей (sequence)
Показывает, кто кому и в каком порядке отправляет сообщения. Главная диаграмма интеграционного аналитика.
Клиент -> API Gateway: POST /orders
API Gateway -> Order Service: создать заказ
Order Service -> Payment Service: зарезервировать оплату
Payment Service --> Order Service: 201 reserved
Order Service --> API Gateway: 201 Created
API Gateway --> Клиент: 201 Created
Элементы:
- Линия жизни (lifeline): участник, вертикальная пунктирная линия.
- Синхронное сообщение: сплошная стрелка с закрашенным наконечником, отправитель ждёт ответа.
- Асинхронное сообщение: открытый наконечник, отправитель не ждёт.
- Ответ: пунктирная стрелка.
- Комбинированные фрагменты:
alt(ветвление, if/else),opt(необязательный блок),loop(цикл),par(параллельно).
Описывают их часто в PlantUML или Mermaid: текст лежит в репозитории рядом с требованиями.
Диаграмма активности (activity)
Похожа на блок-схему: действия, решения (ромб), параллельные ветки (fork/join), дорожки (partitions). Подходит для алгоритма или процесса внутри системы. Для бизнес-процессов с участием многих ролей чаще берут BPMN.
Диаграмма состояний (state machine)
Описывает жизненный цикл объекта: в каких состояниях он бывает и какие события переводят его между ними.
[*] --> Новый
Новый --> Оплачен : оплата прошла
Новый --> Отменён : отмена клиентом
Оплачен --> Собран : склад собрал
Собран --> Доставлен : курьер вручил
Оплачен --> Отменён : отмена [до сборки] / возврат денег
Запись перехода: событие [условие] / действие. Диаграмма сразу показывает недопустимые переходы: из «Доставлен» в «Новый» нельзя. Из неё получаются проверки в коде и тест-кейсы.
Диаграмма классов (class)
Классы с атрибутами и операциями и отношения:
- Ассоциация: связь, «знает о».
- Агрегация (пустой ромб): целое и части, части живут отдельно (команда и сотрудники).
- Композиция (закрашенный ромб): части не живут без целого (заказ и строки заказа).
- Обобщение (наследование, треугольник).
- Зависимость (пунктир со стрелкой): временно использует.
- Кратность:
1,0..1,*,1..*.
Аналитик чаще рисует доменную модель: классы-понятия предметной области без методов. Это близко к ER-диаграмме.
Диаграмма вариантов использования (use case)
Акторы (человечки) и варианты использования (овалы), связи include (всегда входит) и extend (расширяет при условии). Даёт обзор границ системы, но сценарии всё равно пишут текстом.
Диаграмма компонентов и развёртывания
Компоненты показывают, из каких частей состоит система и через какие интерфейсы они общаются. Развёртывание: на каких узлах что работает. Для этих задач всё чаще используют C4-модель (контекст, контейнеры, компоненты, код).
Какую выбрать
| Вопрос | Диаграмма |
|---|---|
| Кто кого вызывает в интеграции? | последовательностей |
| Какие статусы у заявки? | состояний |
| Как устроен алгоритм расчёта? | активности |
| Какие сущности в домене? | классов или ER |
| Что вообще умеет система и для кого? | вариантов использования |
Частые ошибки
- Рисовать всё подряд «для полноты». Диаграмма нужна, когда отвечает на конкретный вопрос.
- Путать синхронный вызов с асинхронным на sequence.
- Состояния называть действиями («Оплатить» вместо «Оплачен»).
- Забывать ошибочные ветки (
altдля таймаута и отказа).
Что спросят на собесе
- Какие диаграммы UML используешь и для чего?
- Нарисуй sequence для оплаты заказа через внешний эквайринг.
- Чем агрегация отличается от композиции?
- Опиши статусную модель заявки диаграммой состояний.
- Чем диаграмма активности отличается от BPMN?