Перейти к содержимому

Сценарии, потоки и исключения

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

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

  • пользователь выбирает услугу;
  • система проверяет доступные интервалы;
  • пользователь подтверждает запись;
  • система создаёт заявку и отправляет уведомление.

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

Основной поток описывает наиболее простой успешный путь к цели. Он нужен как скелет сценария: если этот поток непонятен, альтернативы и ошибки только усложнят модель.

Основной поток лучше записывать как нумерованный список:

  1. Актор инициирует действие.
  2. Система запрашивает или показывает необходимые данные.
  3. Актор вводит или подтверждает данные.
  4. Система проверяет условия.
  5. Система фиксирует результат.
  6. Актор получает подтверждение.

Это не универсальный шаблон, а типовая форма. В конкретной системе шагов может быть больше или меньше, но каждый шаг должен быть осмысленным и проверяемым.

Например, для варианта использования “Оформить заказ” основной поток может включать выбор товаров, проверку наличия, подтверждение адреса, создание заказа и отправку подтверждения. На этом уровне не нужно описывать конкретные кнопки интерфейса или SQL-запросы. Важно показать, как актор и система совместно приходят к результату.

Альтернативный поток описывает допустимое отклонение от основного сценария. Цель всё ещё может быть достигнута, но путь отличается.

Примеры альтернатив:

  • пользователь выбирает другой способ оплаты;
  • система предлагает ближайшее свободное время вместо выбранного;
  • актор изменяет данные до подтверждения;
  • система находит уже существующую запись и предлагает её использовать.

Альтернативы удобно привязывать к конкретным шагам основного потока. Например, 3a означает альтернативу к шагу 3, а 5a - альтернативу к шагу 5. Если альтернатива может возникнуть почти в любой момент, её можно описать как глобальную.

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

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

Примеры исключений:

  • введённые данные не проходят проверку;
  • внешний сервис недоступен;
  • объект уже изменён другим пользователем;
  • у актора нет прав на действие;
  • бизнес-правило запрещает продолжение процесса.

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

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

Шаги сценария обычно нумеруются так, чтобы было понятно, к какому месту относится отклонение. Основной поток можно обозначать числами 1, 2, 3. Альтернативы и исключения удобно записывать как 2a, 2b, 4a. Глобальные ошибки, которые могут возникнуть почти в любой момент, можно описывать отдельно, но всё равно нужно указать, как они влияют на результат сценария.

Диаграмма деятельности появляется из сценария, а не заменяет его. Основной поток становится основной цепочкой действий. Альтернативные и исключительные потоки превращаются в ветвления, guards, flow final или activity final. Данные, документы и события из шагов сценария становятся object flow или кандидатами в классы.

Если на диаграмме деятельности есть ветка, которой нет в сценарии, это повод уточнить спецификацию use case. Если в сценарии есть условие, которого нет на диаграмме, модель процесса неполна.