Pull to refresh

Проектирование Sequence-диаграмм: руководство для системных аналитиков

Level of difficultyMedium
Reading time14 min
Views4.9K

Привет, коллеги! Меня зовут Юля, я системный аналитик в компании EvApps.

Сегодня поговорим о sequence-диаграммах (диаграммы последовательности) – одном из способов моделирования взаимодействий между объектами в системе. В этой статье мы рассмотрим преимущества использования sequence-диаграмм, типичные ошибки при их создании, а также пример их проектирования. Ключевая идея – показать мыслительный процесс, а не просто шаблонное описание. Статья будет полезна прежде всего системным аналитикам, а также тем, кто участвует в проектировании и разработке программного обеспечения.

Как избежать «телепатической» коммуникации и бесконечных уточнений?

Некоторые недооценивают sequence-диаграммы, считая их сложными и ненужными. Однако, умение их проектировать – это важный скилл для системного аналитика, который упрощает коммуникацию и помогает минимизировать ошибки на этапах разработки. Уместное использование диаграмм последовательности позволяет уменьшить возможность недопонимания в команде разработки, помогает говорить на одном языке и минимизирует необходимость в бесконечных уточнениях и переписке.

Вместо многословных описаний, сложных схем и попыток «телепатического» понимания sequence-диаграмма предоставляет наглядное и понятное представление о взаимодействии объектов системы. Это более важно в крупных проектах с множеством участников и сложной логикой. Экономия времени и ресурсов, достигаемая благодаря ясности и четкости, может перевешивать затраты на создание диаграмм.

Преимущества использования Sequence-диаграмм

Визуализация сложных процессов.
Sequence-диаграммы наглядно представляют взаимодействие объектов во времени. Они помогают понять сложные процессы, выявить узкие места и потенциальные проблемы на ранней стадии разработки, экономя время и ресурсы.

Чёткие требования.
Графическое представление помогает более точно сформулировать требования, минимизируя вероятность недопонимания и последующих переделок. Это особенно ценно при работе с распределенными командами, или когда в проекте участвуют специалисты с разным техническим бэкграундом.

Мост между аналитиком и разработчиком.
Диаграммы служат инструментом коммуникации, делая процесс обсуждения понятным и продуктивным для обеих сторон. Они сокращают количество созвонов и переписок, посвященных уточнению требований.

Рабочая документация.
Sequence-диаграммы являются понятным отражением логики взаимодействия процессов и компонентов. При этом изменения легче внести на диаграмме, в отличие от текстовых описаний.

Упрощение тестирования.
Для тестировщиков диаграммы служат отличной основой для разработки тестовых сценариев, обеспечивая более полное покрытие и выявление потенциальных багов.

Почему выбираем именно sequence-диаграммы и какие у них есть альтернативы?

Хотя sequence-диаграммы широко используются в системном анализе, они не единственный способ описания взаимодействия в системе. Важно понимать, чем они лучше или хуже других подходов в зависимости от ситуации:

- Activity diagrams (диаграммы активности) – подходят для описания общего потока выполнения, особенно если акцент на действиях и логике принятия решений, но они слабо передают взаимодействие между участниками.

- State diagrams (диаграммы состояний) – подходят для отображения жизненного цикла объекта, но не показывают взаимодействие между объектами.

- BPMN (Business Process Model and Notation)
– подходят для бизнес-аналитиков, отображают процессы с акцентом на роли, события, потоки, но не фиксируют последовательность вызовов между системами и компонентами.

Sequence-диаграммы фокусируются на временной оси и конкретных взаимодействиях между участниками. Это позволяет:

1. Чётко понять, кто с кем и в какой момент взаимодействует, фиксируя порядок вызовов и ответов.

2. Отразить сложные сценарии с ветвлениями, параллельными процессами и обработкой ошибок в контексте реального времени.

3. Показать взаимодействия сразу всех участников, включая фронтенд, бэкенд, внешние сервисы, интеграционные точки, что важно для сложных распределенных систем.

4. Сформировать единое общее видение для разных ролей: системных аналитиков, разработчиков, тестировщиков.

Пример: бизнес-аналитик может использовать BPMN для описания процесса покупки товара, но системному аналитику и разработчику sequence-диаграмма будет полезнее, чтобы увидеть, как фронт взаимодействует с бэком, когда вызывается сервис оплаты и как обрабатываются ошибки.

Sequence-диаграммы не заменяют другие инструменты, но в ситуациях, когда важна последовательность событий и точность коммуникации между компонентами, они являются более предпочтительным вариантом.

Для каких задач используются Sequence-диаграммы

Описание интеграций. Диаграммы отображают взаимодействие между различными системами, показывая обмен данными и вызовы API. 

Пример: диаграмма может показать, как мобильное приложение взаимодействует с платежной системой через  REST API (Representational State Transfer), отображая запросы, ответы и обработку ошибок для всех участников (на картинке приведена общая диаграмма последовательности, при необходимости можно ее декомпозировать или упростить).

Моделирование бизнес-процессов. Sequence-диаграммы могут быть использованы для моделирования бизнес-процессов, показывая взаимодействие между различными участниками.

Пример: диаграмма может отобразить процесс обработки заказа в интернет-магазине, показывая взаимодействие между клиентом, системой обработки заказов, складом и службой доставки.

Примечание: выбор между Sequence-диаграммами и BPMN зависит от уровня детализации, необходимого для моделирования. Если требуется показать детальное взаимодействие между компонентами системы, Sequence-диаграмма будет более эффективна. Если же необходимо моделировать бизнес-процесс с акцентом на потоках работ и бизнес-правилах, то лучше использовать BPMN.

Взаимодействие компонентов. Sequence-диаграммы наглядно показывают, как взаимодействуют между собой различные компоненты системы (объекты, классы, подсистемы) во времени. 

Пример: диаграмма может показать, как запрос пользователя на вывод баланса счета проходит через сервер, сервис обработки платежей и базу данных, отображая передачу данных и вызовы методов на каждом этапе.

Элементы Sequence-диаграммы: Основа визуализации

Прежде чем приступить к созданию диаграммы, необходимо знать основные элементы UML (Unified Modeling Language - унифицированный язык моделирования) для sequence-диаграмм. Рассмотрим их более подробно: 

Участники (объекты). Диаграммы последовательности используют различные типы участников для моделирования взаимодействия в системе: 

  • Акторы - представляют внешние сущности, взаимодействующие с системой, например, пользователей или другие системы. Они инициируют запросы и получают ответы от системы.

  • Границы - определяют точки взаимодействия системы с внешним миром, например, пользовательский интерфейс или API.

  • Контроллеры - управляют потоком данных и логикой системы, обрабатывая запросы от акторов и направляя их к соответствующим сущностям.

  • Сущности - представляют данные и состояние системы, часто реализованные в виде баз данных или других хранилищ данных.

На диаграмме последовательности каждый объект изображается вертикальной линией времени, показывающей период его существования и активности. Взаимодействия между объектами отображаются сообщениями (стрелками), которые могут передавать данные и информацию о состоянии объекта. 

Линия жизни. Вертикальная пунктирная линия, отображающая существование и участие объекта во взаимодействии. Она начинается с создания объекта и заканчивается его удалением или завершением взаимодействия. На линии жизни могут быть указаны активности, состояния и временные метки для уточнения последовательности событий.

Сообщения. Горизонтальные стрелки, отображающие взаимодействие между участниками. Они показывают передачу данных или вызов метода. Сообщения могут быть разных типов:

  • Синхронные сообщения: сплошная стрелка с закрашенным наконечником, указывающая, что отправитель ожидает ответа от получателя для продолжения. Например, вызов функции, который блокирует выполнение до получения результата.

  • Асинхронные сообщения: сплошная стрелка с незакрашенным наконечником, указывающая, что отправитель не ожидает немедленного ответа. Например, отправка сообщения в очередь или запрос, обработка которого происходит в фоновом режиме.

  • Возвратные сообщения: пунктирная стрелка с незакрашенным наконечником, идущая от получателя к отправителю, отображающая возвращаемое значение функции или метода.

Активация. Прямоугольники на линиях жизни, отражающие период активности объекта. Они указывают на то, когда объект выполняет некоторую операцию или метод. 

Примечания. Используются для добавления пояснений или дополнительной информации к диаграмме. Они помогают улучшить читабельность и понятность. Обозначаются прямоугольником с загнутым краем, соединенным пунктирной линией с соответствующим элементом диаграммы.

Фрейм. Специальные блоки, позволяющие структурировать сложные взаимодействия, такие как циклы, альтернативные варианты выполнения или параллельные процессы. Примеры фреймов и их обозначения:

  • alt (условное выполнение) - обозначает ветвление логики в зависимости от условия. Содержит два или более фрагмента, один из которых выполняется в зависимости от результата проверки условия.

  • opt (опциональное выполнение) - обозначает блок, который может быть выполнен или пропущен в зависимости от условия.

  • loop (цикл) - обозначает повторяющийся блок действий. Включает условие выхода из цикла.

  • par (параллельное выполнение) - обозначает параллельное выполнение нескольких блоков. 

  • ref - обозначает ссылку на другую диаграмму последовательности. Используется для упрощения сложных диаграмм путем разбиения их на более мелкие, более управляемые части. Это позволяет избежать излишнего усложнения основной диаграммы.

  • neg - обозначает альтернативный сценарий, который не должен выполняться. Обычно используется для моделирования ошибок или исключительных ситуаций.

Уничтожение объекта. Элемент обозначающий конец его линии жизни в этом взаимодействии – момент, когда объект перестает иметь значение в последовательности. 

Создаем sequence-диаграмму: пошаговое руководство с примером авторизации пользователя в мобильном приложении

Перейдем от теории к практике и создадим sequence-диаграмму, иллюстрирующую процесс авторизации пользователя в мобильном приложении:

1. Определение цели и контекста.  Что и зачем мы моделируем?

Первым шагом является четкое определение цели. Что именно мы хотим показать с помощью sequence-диаграммы? В нашем случае, цель – отобразить взаимодействия процесса авторизации, учитывая требования. Важно ограничить область действия. Сосредотачиваемся только на самом процессе авторизации, игнорируя всё, что происходит после успешного входа. Это предотвращает создание перегруженной диаграммы. Формулируем при этом вопрос: что необходимо для отображения взаимодействий внутри процесса авторизации? Для отображения взаимодействий внутри процесса авторизации необходимо определить участников, последовательность действий, границы, сообщения. 

2. Определение участников. Кто участвует в процессе?

Следующий шаг – идентификация участников описываемого взаимодействия. Здесь важно избежать избыточности. Включим только те объекты, которые действительно участвуют в процессе авторизации:

  • Пользователь - актор, инициирующий процесс авторизации.

  • Мобильное Приложение - объект, взаимодействующий с сервером от имени пользователя.

  • Сервер - объект, обрабатывающий запросы аутентификации и авторизации.

  • База Данных - объект, хранящий данные пользователей и их права доступа.

Почему мы не включаем другие объекты в диаграмму последовательности? Например, разделение объекта «Сервер» на «Сервер аутентификации» и «Сервер авторизации», усложнило бы ее, не привнося существенной информации для понимания процесса авторизации. Поэтому мы сосредоточились на ключевых взаимодействиях, при этом следуя требованиям.

3. Последовательность действий. Разберем основные и альтернативные сценарии

Теперь рассмотрим самое сложное: определение последовательности действий и проработка альтернативных сценариев. Зададим себе вопросы:

  • Какие данные передаются? (Логин, пароль, токен доступа, сообщения об ошибках)

  • Где происходит каждая операция? (Валидация ввода – в мобильном приложении; проверка данных – на сервере)

  • Какие ошибки могут возникнуть? (Неверный логин, неверный пароль, сервер недоступен и т.д.)

  • Как обрабатываются ошибки? (Выдача соответствующих сообщений пользователю)

Систематическое продумывание всех возможных сценариев, включая ошибки, позволит создать полную и понятную диаграмму последовательности. Это поможет избежать проблем, с которыми сталкиваются начинающие системные аналитики. Разберем пошагово процесс, учитывая все варианты развития событий.

Запишем пошагово действия, включая обработку успешной и неудачной авторизации:

  1. Пользователь вводит логин и пароль в мобильное приложение.

  2. Мобильное приложение выполняет валидацию введенных данных. Если ввод некорректен, выводит сообщение об ошибке и останавливает процесс.

  3. Мобильное приложение отправляет запрос на сервер с логином и паролем.

  4. Сервер получает запрос от мобильного приложения.

  5. Сервер обращается к базе данных с запросом на получение информации о пользователе по указанному логину.

  6. База данных возвращает данные пользователя (или сообщение об отсутствии пользователя) серверу.

  7. Сервер проверяет, был ли найден пользователь в базе данных. Если нет, возвращает ошибку «Пользователь не найден» мобильному приложению и останавливает процесс.

  8. Сервер проверяет правильность введенного пароля, сравнивая его с хэшем, хранящимся в базе данных.

  9. Сервер если пароль неверен, возвращает ошибку «Неверный пароль» мобильному приложению и останавливает процесс.

  10. Сервер генерирует токен доступа.

  11. Сервер обращается к базе данных для определения прав доступа для пользователя.

  12. База данных возвращает информацию о правах доступа серверу.

  13. Сервер сохраняет сгенерированный токен и информацию о правах доступа.

  14. Сервер возвращает токен доступа и информацию о правах доступа мобильному приложению.

  15. Мобильное приложение сохраняет полученный токен и информацию о правах доступа.

  16. Мобильное приложение уведомляет пользователя об успешной авторизации.

4. Визуализация sequence-диаграммы

После проработки всех предыдущих шагов приступим к проектированию sequence-диаграммы. Объекты будут представлены прямоугольниками, акторы – человечками, а взаимодействия – сообщениями между ними. Важно четко отобразить последовательность действий и передаваемые данные. Рассмотрим несколько ключевых моментов:

  • Отображение передаваемых данных. На сообщениях между объектами указывайте передаваемые данные (например, логин, пароль, токен доступа, сообщения об ошибках). Это делает диаграмму более информативной и понятной.

  • Определение границ участников. Важно четко показать, где происходит каждая операция. Например, валидация введенных данных происходит в мобильном приложении, а проверка пароля на сервере.

  • Отображение альтернативных сценариев. Используйте фреймы на диаграмме, чтобы показать, как приложение реагирует на различные входные данные и возникающие ошибки. Например, отдельные ветви для случаев «верный логин/пароль», «неверный логин», «неверный пароль» и «сервер недоступен».

Используя последовательность действий из п.3, создайте диаграмму с помощью предпочитаемого инструмента (например, PlantUML, draw.io, Lucidchart и др.). Следуйте общепринятым стандартам UML для обеспечения согласованности и понятности, используя соответствующие элементы. Диаграмма должна быть легко читаемой и понятной.

На примере sequence-диаграмма спроектирована в PlantUML.

@startuml
actor Пользователь
participant "Мобильное Приложение" as MobileApp
participant "Сервер" as Server
participant "База Данных" as DB
Пользователь -> MobileApp: Ввод логина и пароля
activate MobileApp
MobileApp -> MobileApp: Валидация ввода
alt Ввод корректный
 MobileApp -> Server: Запрос авторизации: логин, пароль
 activate Server
 Server -> DB: Запрос данных пользователя
 activate DB
 alt Логин найден
 DB --> Server: Данные пользователя
 deactivate DB
 Server -> Server: Проверка пароля
 alt Пароль верный
  Server -> Server: Генерация токена
  Server -> DB: Определение прав доступа для пользователя
  activate DB
  DB --> Server: Права доступа
  deactivate DB
  Server -> Server: Сохранение токена и прав доступа в сессии/хранилище
  Server --> MobileApp: Токен и права доступа
  MobileApp -> MobileApp: Сохранение токена и прав доступа
  MobileApp -> Пользователь: Успешная авторизация
  deactivate MobileApp
 else Пароль неверный
  Server --> MobileApp: Ошибка авторизации: неверный логин или пароль
  MobileApp -> Пользователь: Ошибка авторизации
  deactivate MobileApp
 end
 else Логин не найден
 DB --> Server: Пользователь не найден
 deactivate DB
 Server --> MobileApp: Ошибка авторизации: пользователь не найден
 MobileApp -> Пользователь: Ошибка авторизации
 deactivate MobileApp
 end
 deactivate Server
else Ввод некорректный
 MobileApp -> Пользователь: Ошибка ввода
 deactivate MobileApp
end
@enduml

5. Анализ и уточнение

После построения диаграммы последовательности необходимо провести тщательный анализ. Задайте себе вопросы:

  • Ясно ли показан процесс авторизации?

  • Соответствует ли требованиям спроектированная диаграмма последовательности?

  • Учтены ли все важные сценарии?

  • Нет ли избыточных элементов?

  • Понятна ли диаграмма для других людей?

По возможности, покажите диаграмму другим аналитикам, разработчикам для обратной связи. При необходимости внесите корректировки в диаграмму. Этот итеративный процесс поможет создать более точную и понятную модель взаимодействий процесса авторизации.

Типичные ошибки при создании sequence-диаграмм

Чтобы создать понятную sequence-диаграмму, избегайте следующих распространенных ошибок:

Слишком много деталей. Диаграмма должна быть понятной и не перегруженной, так как избыток деталей затрудняет восприятие. Лучше создать несколько более мелких диаграмм, сосредоточенных на конкретных аспектах взаимодействий, чем одну большую и сложную.

Плохой пример. Одна огромная диаграмма, отображающая весь процесс от входа пользователя до завершения работы приложения, с множеством мелких деталей, включая обработку каждого отдельного события (например, каждое нажатие кнопки). Читатель теряется в деталях и не может уловить общую картину.

Хороший пример. Несколько диаграмм: одна показывает общий процесс оформления товара, другая – детально описывает обработку платежа, третья – взаимодействие с отдельным компонентом.

Неправильное определение участников. Важно точно определить участников и их роли в процессе. Все объекты должны иметь понятные наименования, отражающие их функции.

Плохой пример: Участники обозначены как «Объект А», «Объект B», без описания их функций. Или используются слишком общие названия, например, «Сервис», без указания конкретного сервиса (например, «Сервис доставки»).

Хороший пример. Участники четко названы: «Мобильное приложение», «Сервер», «База данных». Названия отражают их функции и не вызывают неоднозначности.

Несоответствие временной последовательности. Убедитесь, что действия на диаграмме отображаются в правильной временной последовательности. Проверьте порядок вызовов и взаимодействия между участниками.

Плохой пример. На диаграмме показано, как сервер отправляет ответ до того, как клиент отправил запрос. Или действия изображены в неправильном порядке, нарушая логику процесса.

Хороший пример. Действия строго упорядочены во времени, соблюдается логическая последовательность вызовов и ответов.

Неправильная обработка ошибок или ее отсутствие. Учитывайте возможные ошибки и исключения, добавляя их обработку на диаграмме. Чаще всего неправильно применяют фреймы (alt, opt, loop, par, ref`, neg).

Плохой пример. Диаграмма показывает только успешный сценарий авторизации, игнорируя возможные ошибки (например, неверный логин или пароль).

Хороший пример. Диаграмма включает ветвление для обработки ошибок, используя фреймы для показа вариантов развития событий в зависимости от результата проверки учетных данных.

Недостаточная или чрезмерная детализация. Найдите баланс. Диаграмма должна быть достаточно детализирована для понимания всех требований, но не должна быть перегружена ненужной информацией.

Плохой пример. Слишком общая диаграмма, не показывающая важных деталей взаимодействия, или, наоборот, перегруженная диаграмма с избытком ненужной информации.

Хороший пример. Диаграмма содержит достаточное количество деталей для понимания процесса, но без избыточной информации. Уровень детализации подобран оптимально для целевой аудитории.

Где можно проектировать sequence-диаграммы?

Выбор инструмента для проектирования диаграмм последовательностей зависит от сложности описываемого взаимодействия, принятого стандарта описания в команде и личных предпочтений. Рассмотрим несколько популярных вариантов:

1. UML-редакторы (PlantUML, Enterprise Architect, Visual Paradigm). Эти инструменты специально разработаны для создания и редактирования UML-диаграмм, включая диаграммы последовательностей. Они предлагают удобный интерфейс, поддержку различных нотаций и возможностей экспорта в различные форматы. 

Преимущества: широкие возможности редактирования, поддержка различных нотаций UML, экспорт в различные форматы (PNG, SVG и др.). 

Недостатки: требуется установка для Enterprise Architect, Visual Paradigm. 

PlantUML позволяет создавать диаграммы непосредственно в текстовом формате, также есть возможность интеграции с Confluence с помощью макроса.

2. Онлайн-сервисы (draw.io, Lucidchart и др.). Онлайн-сервисы позволяют создавать и редактировать диаграммы в браузере, без необходимости установки дополнительного программного обеспечения. 

Преимущества: доступность, не требует установки, часто предлагают бесплатные планы, есть возможность интеграции с Confluence с помощью макросов.

Недостатки: функциональность может быть ограничена, зависимость от интернет-соединения.

3. Графические редакторы (Microsoft Visio и др.). Хотя они не специально предназначены для UML, эти инструменты можно использовать для создания простых диаграмм последовательностей. 

Преимущества: широкая доступность, простота использования. 

Недостатки: отсутствие специфической поддержки UML-нотаций, ограниченные возможности для сложных диаграмм.

Итоги

В этой статье мы разобрали назначение sequence-диаграмм, пошаговое руководство по их созданию и типичные ошибки при проектировании. Главная цель sequence-диаграммы – обеспечить чёткое понимание логики описываемого процесса всеми участниками. 

В комментариях можете поделиться, с какими сложностями вы чаще всего сталкиваетесь при построении sequence-диаграмм, и как вы их преодолеваете? 

Надеюсь, эта статья оказалась для вас полезной! Спасибо за чтение!

Tags:
Hubs:
+5
Comments6

Articles