А может есть инструмент, в котором можно поправить 10 диаграмм за раз? Давай поищем.
О каких диаграммах идет речь?
Системный аналитик в своей работе использует нотацию UML(Unified Modeling Language) для построения диаграмм процессов. Эти диаграммы помогают мне быстрее согласовывать документацию с архитектором и разработчиками, так как по ним скорее появляются вопросы, чем по текстовому описанию процесса.
Существует множество типов диаграмм, но в этой статье я остановлюсь на activity и sequence, которые чаще всего использую в работе.
activity. Использую, когда нужно показать бизнес заказчику, разработчикам, тестировщикам алгоритм процесса.
Например, фильтрация и поиск обучений на сайте.sequence. Использую, чтобы показать последовательность взаимодействия между участниками процесса в интеграционной цепочке.
Например, открытие страницы сайта со списком обучений.
Plantuml - что это?
Раньше я использовала для рисования диаграмм плагин в Confluence drawio или Microsoft Visio, который позволяет в графическом виде нарисовать диаграммы. Основная боль (для меня) у этих инструментов заключалась в том, чтобы поправить множество диаграмм надо открывать каждую, двигать элементы, стрелочки, а это время.
Изучив возможные решения, я пришла к plantuml. Это инструмент, который позволяет с помощью текста рисовать UML диаграммы. Его можно использовать через макрос в Confluence или плагин в Idea, что позволяет за раз править много диаграмм, так как это текст. Не верите? Давайте попробуем на примере.
Plantuml. Как им пользоваться?
Инструментом можно воспользоваться при помощи:
Онлайн редактора с синтаксисом plantuml https://www.planttext.com/ ;
Макроса в Confluence "PlantUML Macro";
Плагина "PlantUML Integration" для Idea, если пишите документацию рядом с кодом (скачать тут)
Поехали к практике!
Процесс:
После того, как пользователь выбрал конкретное обучение, он заполняет заявку на это обучение и записывается на обучение, если оно бесплатное. Если платное, то переходит на шаг оплаты обучения.
Для нашего процесса построим диаграммы activity и sequence, используя plantuml.
Activity diagram
Как построить диаграмму?
Любая activity диаграмма начинается с
@startuml
и заканчивается@enduml
;Дальше указываем начало
start
и окончания процессаstop
;Затем выделяем группы, которые будут участвовать в процессе (прим. группы удобны для визуального чтения диаграммы)
group... start ... end group
;Внутри группы описываем действия или условия:
действие без условия -
:действие
;действие с условием -
if (вопрос?) then (нет) ... else (да) ... endif
.
Для выделения жирным текстом используется <b>текст</b>
. Для переноса текста на новую строку используется \n
В нашей задаче будут группы:
выбор конкретного обучения;
заполнение заявки на обучение;
оплата обучения.
В группе "Заполнение заявки на обучение" у нас будет действие с условием платный или бесплатный курс.
@startuml
start
group <b>1.</b> Выбор конкретного обучения
:Пользователь выбрал конкретное обучение \nсм. Диаграмму процесса 1;
end group
group <b>2.</b> Заполнение заявки на обучение
:Пользователь заполнил данные \nв заявке на обучение (ФИО, email, телефон);
if (Обучение платное?) then (нет)
:Заявка на обучение принята;
else (да)
group <b>3.</b> Оплата обучения
:Переходим к оплате обучения \nсм. Диаграмму процесса 3;
end group
endif
end group
stop
@enduml
Sequence diagram
Как построить диаграмму?
Любая sequence диаграмма начинается с
@startuml
и заканчивается@enduml
.Задаем участников процесса:
Пользователь -
actor
;User Interface (UI) интерфейс (фронт сайта), Сервисы -
box и participant
. (прим. для баз данных -database
, очередей сообщений -queue
).
Выделяем группы процессов. Это опциональный шаг.
Описываем последовательность запросов с помощью конструкции
участник -> участник : действие
.Начинаем
activate участник
и заканчиваемdeactivate участник
линию жизни запроса (линия жизни запроса - это время).Описываем альтернативные сценарии, если они есть с помощью
alt...end
. Как правило это обработка ошибок.
В нашей задаче будут участники процесса:
Пользователь.
Сайт интерфейс - User Interface (UI).
Сайт - Сервис по работе с обучениями (Education).
Конструкция as
позволяет присвоить короткое название участнику процесса actor "Пользователь" as user
. Это удобно, когда надо поменять диаграмму для разных процессов или сократить количество символов в диаграмме.
Обозначения цвета в box
различными цветами (например, #AliceBlue
. Список html цветов тут) помогает выделить разные сервисы или обозначить, какой функционал относится к вашей команде, а что к другим командам.
Комментарий можно оставить с помощью синтаксиса note over участник: текст комментария
В нашей задаче будут группы:
выбор конкретного обучения;
заполнение заявки на обучение;
оплата обучения.
Также будет альтернативный сценарий на проверку запроса с данными по заявке. Например, пользователь ввел некорректный email или номер телефона, тогда заявка не будет сохранена, а вернется ответ с ошибкой, и в интерфейсе пользователя попросят исправить данные.
@startuml
actor "Пользователь" as user
box "Сайт" #AliceBlue
participant "UI" as UI
participant "сервис Education" as Education
end box
group <b>1.</b> Выбор конкретного обучения
note over user: см. Диаграмму процесса 1
end group
group <b>2.</b> Заполнение заявки на обучение
user -> UI: Заполнить данные в заявке на обучение
activate user
activate UI
UI -> Education: Отправить данные с заявкой на обучение
activate Education
Education -> Education: Проверка входящего запроса
alt
Education --> UI: Ответ с ошибкой
UI --> user: Показать страницу об ошибке
end
Education -> Education: Сохранить данные заявки \nв базе данных
Education --> UI: Ответ об успешном сохранении заявки
deactivate Education
group <b>3.</b> Курс платный, оплата обучения
note over UI: Переходим к оплате обучения \nсм. Диаграмму процесса 3;
end group
group <b>4.</b> Курс ,бесплатный
UI --> user: Показать, что пользователь \nуспешно записан на курс
deactivate user
deactivate UI
end group
end group
@enduml
Иногда нехватка времени стимулирует поиск более удобных инструментов для рисования диаграмм. Я такой для себя нашла, это plantuml.
А вы в чем рисуете или пишете текстом диаграммы UML?