Что описывает sequence диаграмма
Что проверяют
Умеете ли вы описать взаимодействие систем так, чтобы по диаграмме можно было писать код и тесты. Следом обычно просят показать, чем на ней отличается синхронный вызов от асинхронного и где рисовать обработку ошибок.
Как отвечать
Sequence диаграмма из UML показывает, кто кому и в каком порядке отправляет сообщения в рамках одного сценария. Время идёт сверху вниз, но без масштаба: важен порядок, а не длительность.
Основные элементы:
- линия жизни (lifeline): участник сценария, то есть актор, фронтенд, сервис, база или внешняя система;
- синхронное сообщение: сплошная линия с закрашенной стрелкой, отправитель ждёт ответа, например HTTP-запрос к API;
- асинхронное сообщение: открытая стрелка, отправитель не ждёт, например публикация события в Kafka;
- ответ: пунктирная линия, её рисуют для синхронных вызовов;
- активация: узкий прямоугольник на линии жизни, пока участник выполняет работу;
- комбинированные фрагменты:
altдля ветвлений,optдля необязательного шага,loopдля повторов,parдля параллельных веток,refдля ссылки на другую диаграмму.
Аналитик рисует её, когда описывает интеграцию: пользователь нажимает «Оплатить», фронт вызывает сервис заказов, тот идёт в платёжный шлюз, а результат приходит вебхуком. На такой схеме сразу видны таймауты, повторы и места, где нужна идемпотентность. Инструменты: PlantUML, Mermaid (sequenceDiagram), draw.io, Enterprise Architect.
Полезно сравнить с соседями: activity диаграмма показывает логику действий и условия, но не отвечает, кто кого вызывает, а BPMN описывает бизнес-процесс с ролями людей.
Где спотыкаются
Рисуют только успешный сценарий. Разработчику и тестировщику важнее всего ветки alt с ошибкой, таймаутом и повторной отправкой.
Смешивают уровни: на одной диаграмме клик пользователя, SQL-запрос и вызов стороннего API. Лучше держать один уровень и выносить детали в отдельную диаграмму через ref.
Путают синхронные и асинхронные стрелки или рисуют ответ на асинхронное сообщение так, будто отправитель его ждал. По такой схеме разработчик сделает блокирующий вызов там, где нужна очередь.