Детализация вариантов использования является критической фазой в жизненном цикле разработки программного обеспечения, особенно в контексте инженерии требований и объектно-ориентального анализа и проектирования. Она устраняет разрыв между высоким уровнем вариантов использования и подробными спецификациями системы, позволяя разработчикам, аналитикам и заинтересованным сторонам понятькаксистема ведет себя в ответ на конкретные цели пользователя.
Это руководство предоставляет всесторонний обзордетализации вариантов использования, включая его цель, ключевые концепции, пошаговую методологию, лучшие практики и реальные примеры.
Детализация вариантов использования — это процесс уточнения высокого уровня варианта использования до подробного, действенного описания поведения системы. Он преобразует простой рассказ о взаимодействии пользователя в точную, проверяемую и реализуемую спецификацию.

✅ Цель: определитьчтосистема должна делать,каккак она должна это делать, ипри каких условияхс достаточной детализацией для разработки и тестирования.
Снижает неоднозначность: Предотвращает неправильное толкование требований.
Улучшает отслеживаемость: Связывает требования с проектированием, кодом и тестовыми случаями.
Поддерживает проектирование и реализацию: Обеспечивает основу для диаграмм классов, последовательности и проектирования баз данных.
Обеспечивает тестирование: Облегчает создание сценариев тестирования и критериев приемки.
Улучшает сотрудничество: Обеспечивает общее понимание между заинтересованными сторонами, разработчиками и тестировщиками.
Сценарий использования описывает последовательность действий, которые система выполняет для получения ценного результата для актора (пользователя или внешней системы).
Пример: «Снять наличные» с банкомата.
Внешняя сущность, взаимодействующая с системой. Может быть пользователем, другой системой или временным триггером.
Пример: Клиент, банкомат, платёжный шлюз.
Основной актор: Инициирует сценарий использования.
Вспомогательный актор: Поддерживает основного актора (например, сервер банка).
Условия, которые должны быть истинными до начала сценария использования.
Пример: Пользователь должен иметь действительную карту и правильный PIN.
Условия, которые должны быть истинными после завершения сценария использования.
Пример: Выданы наличные, баланс счёта обновлён.
Наиболее распространённый путь через сценарий использования, приводящий к успеху.
Пример: Вставить карту → Ввести PIN → Выбрать снятие → Ввести сумму → Получить наличные.
Ветви в сценарии использования, обрабатывающие исключения, ошибки или вариации.
Пример: Неверный PIN → Повторить или отменить.
Точки в основном потоке, где можно вставить альтернативное поведение (например, с помощью «<>» в UML).
Пример: «<>: Уведомить банк о подозрительной деятельности.»
Ограничения поведения системы (например, производительность, безопасность, удобство использования).
Пример: «Транзакция должна быть завершена за 3 секунды.»
Начните с высокого уровня варианта использования (например, «Сделать заказ»).
Используйте шаблон:
Название варианта использования: Сделать заказ
Основной участник: Клиент
Заинтересованные стороны: Клиент, система управления заказами, платёжный шлюз
Перечислите все условия, которые должны быть выполнены до начала варианта использования.
Клиент авторизован.
В корзине покупок содержится хотя бы один товар.
Способ оплаты сохранён.
Укажите, что должно быть верным после завершения варианта использования.
Заказ создан в системе.
Инвентарь обновлён.
Оплата обработана.
Отправлено письмо подтверждения.
Опишите идеальный, успешный путь.
Клиент выбирает «Оформить заказ» из корзины покупок.
Система отображает сводку заказа.
Клиент подтверждает адрес доставки.
Покупатель выбирает способ оплаты.
Система обрабатывает оплату.
Оплата подтверждена.
Система создает заказ и генерирует подтверждение.
Подтверждение отображается, и отправляется электронное письмо.
Перечислите возможные отклонения от основного потока.
Альтернативный поток A: Недостаточный остаток на складе
Система проверяет наличие товара.
Товар отсутствует на складе.
Система отображает сообщение: «Товар недоступен».
Покупатель может удалить товар или продолжить без него.
Альтернативный поток B: Оплата отклонена
Оплата отклонена.
Система отображает ошибку: «Оплата отклонена».
Покупатель может повторить попытку или выбрать другой способ оплаты.
Альтернативный поток C: Неверный адрес доставки
Система проверяет адрес.
Адрес недействителен.
Система предлагает покупателю исправить его.
Используйте расширения в стиле UML для отображения опционального поведения.
<>: Уведомить систему учета запасов
Событие: Когда товар отсутствует на складе при оформлении заказа.
Цель: Уведомить склад о пополнении запасов.
<>: Применить купон на скидку
Событие: Покупатель вводит действительный код купона.
Цель: Снизить общую стоимость.
Включить ограничения системы.
Заказ должен быть обработан в течение 5 секунд.
Оплата должна быть зашифрована с использованием TLS 1.3.
Система должна поддерживать 10 000 одновременных пользователей.
Сотрудничайте со заинтересованными сторонами, чтобы обеспечить полноту и точность.
Спросите: «Охватывает ли это все цели пользователя?»
Спросите: «Рассмотрены ли все крайние случаи?»
Спросите: «Может ли разработчик создать на основе этого?»
| Инструмент/метод | Цель |
|---|---|
| Диаграмма случаев использования (UML) | Визуализировать участников и случаи использования. |
| Диаграмма последовательности | Показать поток сообщений между объектами во время использования. |
| Диаграмма деятельности | Моделировать сложные рабочие процессы и точки принятия решений. |
| Картирование пользовательских историй | Связать случаи использования с путем пользователя и приоритетами. |
| Таблицы решений | Уточнить сложную логику (например, правила скидок). |
Сохраняйте пользовательскую направленность случаев использования: Сосредоточьтесь на целях пользователя, а не на функциях системы.
Используйте единообразное наименование: Используйте формат глагол-существительное (например, «Обновить профиль»).
Избегайте технической терминологии: Пишите для не технических заинтересованных сторон.
Используйте простой язык: Будьте ясными и краткими.
Итерировать: Уточняйте случаи использования по мере роста понимания.
Связать с другими артефактами: Связывайте случаи использования с диаграммами классов, тестовыми случаями и пользовательскими историями.
Приоритизировать: Сначала сосредоточьтесь на случаях использования с высокой стоимостью или высоким риском.
Основной участник: Клиент
Второстепенный участник: Сервер банка, система обнаружения мошенничества
Клиент авторизован.
На исходном счете достаточно средств.
Лимит перевода не превышен.
Средства переведены с исходного счета на целевой.
Транзакция зафиксирована в обоих счетах.
Уведомление отправлено обеим сторонам.
Клиент выбирает «Перевод денег» на панели управления.
Система отображает форму перевода.
Клиент вводит целевой счет и сумму.
Система проверяет счет и сумму.
Клиент подтверждает перевод.
Система проверяет правила обнаружения мошенничества.
Транзакция одобрена и выполнена.
Показывается сообщение подтверждения.
A1: Недостаточно средств
→ Система отображает: «Недостаточно средств.»
→ Клиент может отменить или изменить сумму.
A2: Обнаружена мошенничество
→ Система блокирует перевод и отправляет оповещение.
→ Клиент должен подтвердить через двухфакторную аутентификацию или связаться со службой поддержки.
A3: Неверный счет получателя
→ Система отображает: «Счет не найден.»
→ Клиент может повторно ввести данные или воспользоваться поиском счета.
<>: Отправить уведомление получателю
Событие: Перевод завершен.
Цель: Уведомить получателя.
<>: Начислить комиссию за перевод
Событие: Сумма перевода > 1000 долларов США.
Цель: Списать комиссию в размере 5 долларов.
Все переводы должны быть зафиксированы и подлежать аудиту.
Время отклика ≤ 2 секунды.
Данные зашифрованы при передаче и в состоянии покоя.
| Ошибки | Решение |
|---|---|
| Слишком общие формулировки (например, «Система должна обрабатывать заказы») | Используйте конкретные, измеримые действия. |
| Избыточно технический язык | Используйте естественный язык; избегайте терминов программирования или баз данных. |
| Отсутствуют альтернативные пути обработки ошибок | Используйте альтернативные потоки для покрытия сбоев. |
| Нет четких критериев успеха | Четко определите постусловия. |
| Отсутствует обзор заинтересованных сторон | Привлекайте пользователей, тестировщиков и бизнес-аналитиков. |
Разработка сценариев использования — это не просто упражнение по документированию, а стратегический процесс, который обеспечивает соответствие системы реальным потребностям пользователей с ясностью, точностью и полнотой. Систематически расширяя высокий уровень сценариев использования до подробных, выполнимых спецификаций, команды снижают риски, улучшают коммуникацию и создают прочную основу для успешной разработки программного обеспечения.
✅ Последний совет: Рассматривайте разработку сценариев использования как итеративный диалог, а не одноразовую задачу. Уточняйте его по мере того, как вы узнаете больше о системе и ее пользователях.
# Название сценария использования: [например, Обновить профиль]
**Основной участник**: [например, Клиент]
**Второстепенные участники**: [например, База данных, Сервис электронной почты]
**Заинтересованные стороны**: [например, Клиент, Команда поддержки]
### Предусловия
- [Список условий]
### Постусловия
- [Список результатов]
### Основной сценарий успеха (основной поток)
1. [Шаг 1]
2. [Шаг 2]
...
### Альтернативные потоки
- **A1: [Название]**
1. [Шаг]
2. [Шаг]
- **A2: [Название]**
...
### Расширения (<<extend>>)
- **<<extend>>: [Название]**
- Триггер: [Когда]
- Цель: [Зачем]
### Нefункциональные требования
- [Производительность, безопасность, удобство использования и т.д.]
### Примечания
- [Дополнительный контекст или предположения]
Следуя этому руководству, команды могут овладеть искусством разработки сценариев использования и создавать системы, которые не только функциональны, но и полностью соответствуют ожиданиям пользователей.
Снять наличные
Клиент (владелец банковского счета)
Банкомат
Сервер банка (система основного банковского обслуживания)
Платежный шлюз (для обработки транзакций)
Система обнаружения мошенничества
Принтер (для генерации чека)
Клиент: Хочет снять наличные безопасно и эффективно.
Банк: Обеспечивает целостность транзакций, предотвращение мошенничества и точное обновление счетов.
Оператор банкомата: Обеспечивает доступность машины и наличие наличных.
Группа безопасности: Отслеживает подозрительное поведение и предотвращает мошенничество.
У клиента есть действительная банковская карта, вставленная в банкомат.
Клиент успешно прошел аутентификацию (ввел правильный PIN).
Счет клиента активен и не заблокирован.
В банкомате достаточно наличных денег в хранилище.
На счете клиента достаточно доступного остатка.
Дневной лимит снятия не превышен.
Клиенту выдан запрашиваемый объем наличных.
Остаток на счете клиента уменьшается на сумму снятых средств.
В системе банка создается запись о транзакции.
Выдается чек (при необходимости).
Банкомат регистрирует транзакцию для аудита и сверки.
| Шаг | Действие системы | Отклик участника |
|---|---|---|
| 1 | Банкомат выводит: «Введите свой PIN». | Клиент вводит PIN. |
| 2 | Банкомат проверяет PIN на сервере банка. | Система подтверждает, что PIN правильный. |
| 3 | Банкомат отображает главное меню: «Снять наличные, Проверить баланс, Перевод, Выход». | Клиент выбирает «Снять наличные». |
| 4 | Банкомат выводит: «Введите сумму для снятия». | Клиент вводит сумму (например, 100 $). |
| 5 | Банкомат проверяет: |
Сумма находится в пределах дневного лимита.
На счете достаточно средств.
В банкомате достаточно наличных. | Система подтверждает действительность. |
| 6 | Банкомат запрашивает авторизацию у сервера банка. | Сервер банка одобряет транзакцию. |
| 7 | Банкомат выдает наличные из хранилища. | Клиент получает наличные. |
| 8 | Банкомат предлагает: «Хотите чек?» | Клиент выбирает «Да» или «Нет». |
| 9 | Если «Да»: банкомат печатает чек с:
Дата/время
Сумма снятия
Остаток на счете
Номер транзакции | Клиент получает чек. |
| 10 | Банкомат отображает: «Спасибо. Пожалуйста, извлеките карту». | Клиент извлекает карту. |
| 11 | Банкомат возвращается в режим ожидания. | Система сбрасывается. |
✅ Успешный результат: Клиент получает наличные и (по желанию) чек. Счет обновляется.
Триггер: Клиент три раза вводит неверный PIN-код.
Действие системы: Банкомат блокирует карту и отображает: «Карта заблокирована. Обратитесь в свой банк.»
Действие пользователя: Клиент уходит и обращается в банк.
Постусловие: Карта временно заблокирована; транзакция зарегистрирована.
⚠️ Примечание: Это мера безопасности, предназначенная для предотвращения несанкционированного доступа.
Событие: Клиент вводит сумму, превышающую доступный остаток.
Действие системы: ATM отображает: «Недостаточно средств. Текущий остаток: $X».
Действие актера: Клиент выбирает «Отмена» или вводит меньшую сумму.
Постусловие: Наличные не выданы; изменений в счете нет.
Событие: Клиент вводит действительную сумму, но в хранилище банкомата пусто или ниже минимального уровня.
Действие системы: ATM отображает: «Наличные недоступны. Пожалуйста, попробуйте позже.»
Действие актера: Клиент отменяет операцию или возвращается позже.
Постусловие: Операция не обработана; изменений в счете нет.
Событие: Клиент пытается снять сумму, превышающую дневной лимит (например, 1000 $).
Действие системы: ATM отображает: «Превышен дневной лимит снятия. Попробуйте меньшую сумму.»
Действие актера: Клиент уменьшает сумму или отменяет операцию.
Постусловие: Операция не обработана.
Событие: Банковский сервер отклоняет транзакцию (например, из-за предупреждения о мошенничестве, заморозки счета).
Действие системы: ATM отображает: «Транзакция отклонена. Пожалуйста, свяжитесь со своим банком.»
Действие участника: Клиент отменяет операцию и обращается в банк.
Постусловие: Наличные не выданы; изменений на счете нет.
| Расширение | Событие | Цель |
|---|---|---|
| <>: Уведомить систему обнаружения мошенничества | Когда снятие средств производится в иностранной стране или превышает типичное поведение | Отметить подозрительную активность для проверки |
| <>: Отправить SMS-оповещение клиенту | После успешного снятия средств | Уведомить клиента о транзакции (повышенная безопасность) |
| <>: Начислить комиссию за снятие средств | Для неосновных держателей счетов или определенных типов счетов | Начислить плату за определенные услуги |
| <>: Распечатать историю транзакций | Если клиент выбирает «Распечатать историю» в меню | Предоставить распечатанное резюме последних транзакций |
| Категория | Требование |
|---|---|
| Производительность | Транзакция должна быть обработана в течение 3 секунд. |
| Безопасность | Все коммуникации зашифрованы (TLS 1.3). PIN никогда не хранится и не передается в открытом виде. |
| Надежность | Банкомат не должен выдавать наличные, если сервер банка не подтвердит авторизацию. |
| Пользовательский интерфейс | Интерфейс должен быть доступным (например, крупные кнопки, голосовое руководство для слабовидящих). |
| Доступность | Банкомат должен быть в рабочем состоянии 99,9% времени. |
| Аудит и соответствие | Все транзакции должны быть зафиксированы и подлежать отслеживанию в течение 7 лет (в соответствии с банковскими регуляторными требованиями). |
Банкомат должен регулярно обслуживаться для обеспечения наличия наличных и надежности оборудования.
Если карта не будет извлечена в течение 30 секунд после завершения транзакции, она будет автоматически задержана (функция защиты от краж).
Система поддерживает несколько валют и расчеты курсов обмена (при необходимости).
[Пользователь] --(Снять наличные)--> [Банкомат]
[Банкомат] --(Проверка PIN)--> [Сервер банка]
[Банкомат] --(Проверка средств)--> [Сервер банка]
[Банкомат] --(Выдача наличных)--> [Сейф с наличными]
[Банкомат] --(Печать чека)--> [Принтер]
[Банкомат] --(Уведомление системы мошенничества)--> [Система обнаружения мошенничества]
(Примечание: в полной диаграмме UML отношения между вариантами использования, такие как <> и <>, будут отображены.)
Этоподробный вариант использованиядля «Снятие наличных» предоставляет четкое, структурированное и проверяемое описание, которое:
Фиксирует цели пользователя и поведение системы.
Обрабатывает реальные исключения.
Поддерживает безопасность, соответствие и удобство использования.
Является основой для проектирования, тестирования и реализации.
Он подходит для использования в рамках агILE-спринтов, документации по проектированию системы или формальных спецификаций требований.
📘 Следующие шаги:
Преобразуйте это вдиаграмму последовательностипоказать взаимодействие объектов.
Создатьтестовые случаина основе каждого потока (основного и альтернативного).
Ссылка надиаграммы классов (например,Счет, Транзакция, Банкомат, Система обнаружения мошенничества).