Как использовать PlantUML для построения диаграмм последовательностей
Что проверяют
Умеете ли вы описать взаимодействие систем так, чтобы разработчик по диаграмме понял порядок вызовов, ответы и ветки ошибок. Инструмент тут вторичен. Обычно просят сразу набросать сценарий, например оплату заказа, и спрашивают, как показать асинхронный вызов через очередь.
Как отвечать
Опишите каркас: диаграмма живёт между @startuml и @enduml, это обычный текст, который хранится в репозитории рядом с требованиями и ревьюится как код. Для рендера нужна Java или готовая интеграция: плагины для IntelliJ IDEA и VS Code, макрос в Confluence, поддержка в GitLab, если её включил администратор.
Основные элементы:
- участники:
actorдля человека,participantдля сервиса, отдельные типыdatabase,queue,boundary,control,entity. Длинные имена сокращают черезas; - стрелки:
->синхронный вызов,-->пунктирный ответ,->>асинхронное сообщение без ожидания; - активация:
activateиdeactivateили короткая запись++и--показывают, когда участник занят обработкой; - фрагменты:
alt/elseдля веток,optдля необязательного шага,loopдля повторов,parдля параллельных вызовов,breakдля прерывания; - оформление:
autonumberнумерует шаги,note overдобавляет пояснение,== Этап ==делит сценарий на части,ref overссылается на другую диаграмму.
Хороший ответ показывает, что вы рисуете не только успешный путь. Для интеграции аналитик показывает, что происходит при тайм-ауте, ошибке валидации и повторной отправке, и кто за что отвечает. Общие куски выносят в отдельный файл и подключают через !include.
Где спотыкаются
Рисуют только успешный сценарий. Разработчик всё равно придёт с вопросом «а если сервис не ответил», и ответ на него должен быть на диаграмме в блоке alt.
Путают синхронный и асинхронный обмен. Сообщение в брокер рисуют как вызов с ответом, хотя отправитель ответа не ждёт, а сама очередь должна быть отдельным участником.
Делают одну диаграмму на тридцать участников. Её невозможно читать и поддерживать: сценарий режут на этапы через ==, group и ref, а в репозитории держат исходник, а не картинку.