Моделирование реальных требований с помощью UML — практическое руководство
1. Введение
В современной разработке программного обеспечения диаграммы вариантов использованияявляются фундаментальным инструментом для фиксации функциональных требований с точки зрения пользователя. В данном кейс-стади представлен детальный анализ реалистичной диаграммы вариантов использованиядля доставки еды, используя синтаксис PlantUMLв качестве языка моделирования. Цель состоит не только в том, чтобы продемонстрировать какиеэлементы используются в диаграмме, но также почемуони выбраны — с акцентом на практические решения по моделированию, конвенциии типичные ошибки.
Данный кейс-стади полезен как новичкам, изучающим UMLтак и практикам, совершенствующим свои навыки моделирования. Он раскрывает каждый элемент диаграммы, объясняет его назначение и обсуждает практические последствия.
2. Обзор системы
Платформа доставки еды — это цифровая торговая площадка, соединяющая:
- Клиенты (лица, заказывающие еду),
- Рестораны (поставщики блюд),
- Водители (доставщики),
- Внешние платёжные шлюзы (системы сторонних организаций, обрабатывающие транзакции).
Платформа позволяет пользователям просматривать рестораны, оформлять заказы, отслеживать доставки, управлять платежами и применять промоакции. Система интегрируется с внешними сервисами, такими как платёжные процессоры, и не обрабатывает логику платежей внутри себя.
Код PlantUML:
@startuml
skinparam monochrome true
skinparam shadowing false
left to right direction
' Все акторы определены вне прямоугольника
actor Customer
actor "Зарегистрированный клиент" as RegCustomer
actor "Персонал ресторана" as Restaurant
actor Driver
actor "Платёжный процессор" as PaymentGW
rectangle "Платформа доставки еды" {
(Просмотр ресторанов)
(Оформление заказа)
(Отслеживание заказа)
(Управление меню)
(Принятие / Приготовление заказа)
(Доставка заказа)
(Обработка платежа)
(Оформление возврата)
(Применение промокода)
(Использование кошелька)
(Оплата картой)
(Оплата цифровым кошельком)
' Связи — стрелки пересекают границу
Customer --> (Просмотр ресторанов)
RegCustomer --> (Оформление заказа)
RegCustomer --> (Отслеживание заказа)
Restaurant --> (Управление меню)
Restaurant --> (Принятие / Приготовление заказа)
Driver --> (Доставка заказа)
PaymentGW --> (Обработка платежа)
PaymentGW --> (Оформление возврата)
' include
(Оформление заказа) ..> (Обработка платежа) : <<include>>
' extend
(Оформление заказа) <.. (Применение промокода) : <<extend>>
(Обработка платежа) <.. (Использование кошелька) : <<extend>>
' Обобщение
(Обработка платежа) <|-- (Оплата картой)
(Обработка платежа) <|-- (Оплата цифровым кошельком)
}
' Обобщение акторов (также вне прямоугольника)
Customer <|-- RegCustomer
note right of PaymentGW
Внешний платёжный шлюз
(Stripe, PayPal, Adyen, ...)
end note
note bottom of (Применение промокода)
Опционально — только при вводе действительного кода
end note
@enduml ✅ Ключевая идея: Диаграмма фокусируется на внешних взаимодействиях — она показывает, что система делает для своих пользователей и систем, а не как она реализована.
3. Элементы диаграммы: Подробный разбор с практическим смыслом
Ниже приведено подробное описание каждого элемента UML, использованного в диаграмме, вместе с его реальным толкованием и обоснованием моделирования.
| # | Элемент | Обозначение | Значение и назначение | Решение по моделированию / Комментарий |
|---|---|---|---|---|
| 1 | Границы системы | прямоугольник "Платформа доставки еды" |
Определяет областьмоделируемой системы. Все сценарии использования внутри являются частью этой системы. | Имя должно быть кратким, но информативным. В корпоративном контексте могут использоваться более длинные имена (например, «Система управления заказами клиентов»). |
| 2 | Основной человеческий актор | актор «Клиент», актор «Водитель» |
Представляет внешние роликоторые инициируют или участвуют в сценариях использования. | Имена должны быть простыми и интуитивно понятными. Избегать ненужных стереотипов, таких как <<человек>>если это не требуется для крупных моделей. |
| 3 | Актор с псевдонимом | актор «Персонал ресторана» как Restaurant |
Позволяет сократить длинное, описательное имя актора для ясности в связях. | Особенно эффективно, когда имена акторов содержат пробелы или являются слишком длинными. Уменьшает визуальный шум и улучшает читаемость. |
| 4 | Актор внешней системы | актор «Обработчик платежей» как PaymentGW |
Моделирует сторонние системыс которыми взаимодействует платформа. | Без стереотипа «система» используется — допустимо в лёгких диаграммах. Однако добавление “«система» может прояснить намерения в сложных системах. |
| 5 | Обобщение актора | `Клиент < | — РегКлиент` | Указывает, что зарегистрированный клиент является специализированной версией гостевого клиента. |
| 6 | Обычная ассоциация | Клиент --> (Просмотр ресторанов) |
Показывает, что актор запускает или участвует в сценарии использования. | Сплошная линия = взаимодействие. Направление подразумевается от актора к сценарию использования (стрелка не требуется). |
| 7 | Отношение «включение» | (Оформление заказа) ..> (Обработка платежа) : <<include>> |
Обработка платежа является всегда обязательным при оформлении заказа. |
Стрелка указывает от включающего → к включаемому. Это критично: Оформить заказ включает Обработка платежа как обязательный шаг. |
| 8 | Отношение «extend» | (Оформить заказ) <.. (Применить промокод) : <<extend>> |
Применение промокода является опциональным и происходит только при определённых условиях. | Стрелка указывает от расширения → к базовому. Базовый сценарий (Оформить заказ) может быть расширен условно. |
| 9 | Обобщение сценариев | `(Обработка платежа) < | — (Оплата картой)<br>(Обработка платежа) < |
— (Оплата через цифровой кошелек)` |
| 10 | Примечание | примечание справа от PaymentGWпримечание снизу от (Применить промокод) |
Предоставляет контекстуальное пояснение об реализации или бизнес-правилах. | Заметки используются недостаточно, но чрезвычайно ценны. Они предотвращают неверное толкование (например, уточняя, что PaymentGW является внешним). |
| 11 | Акторы за пределами границы | Все акторыобъявления предшествуют прямоугольнику |
Подчёркивает, что ни один актор не является частью системы — чёткое разделение ответственности. | Один из двух стандартных макетов. Предпочтителен, когда акторов много или они внешние. |
| 12 | Направление диаграммы | направление слева направо |
Улучшает макет, когда несколько акторов расположены слева. | Повышает читаемость. Особенно эффективно при 4–8 акторах. Альтернатива: макет сверху вниз для меньшего количества акторов. |
4. Ключевые решения моделирования и обоснование
✅ Почему акторы находятся за пределами границы системы
- Лучшая практика: Акторы представляют роли за пределами системы.
- Почему это важно: Предотвращает путаницу между компонентами системы и внешними сущностями.
- Пример:
Водительне является модулем платформы — это сторонняя роль, взаимодействующая с ней.
📌 Полезный совет: Если бы все акторы находились внутри границы, это подразумевало бы, что система их включает, что вводит в заблуждение.
✅ Зачем использовать Customer <|-- RegCustomer вместо дублирования связей
- Без обобщения вам пришлось бы нарисовать:
PlantUML Edit PlantUML in VPasCode
Customer --> (Browse Restaurants) RegCustomer --> (Browse Restaurants) RegCustomer --> (Place Order) - С обобщением вам потребуется только:
PlantUML Edit PlantUML in VPasCode
Customer <|-- RegCustomer Customer --> (Browse Restaurants) RegCustomer --> (Place Order) - Результат: Более чистая и поддерживаемая диаграмма.
📌 Лучшая практика: Используйте обобщение акторов, когда специализированный актор наследует все поведения более общего актора.
✅ Зачем <<include>> и <<extend>> используются правильно
| Связь | Цель | Направление | Пример |
|---|---|---|---|
<<включить>> |
Обязательный подпоток | От включая → включённый | Оформить заказ должен включить Обработать оплату |
<<расширить>> |
Дополнительное расширение | От расширение → основа | Применить промокод расширяет Оформить заказ только если код действителен |
❗ Распространённая ошибка: Разворот направления стрелки. Всегда помните:
включить:Основа ..> Включённыйрасширять:Расширение <.. База
✅ Почему Обработка платежа имеет обобщения
Оплата картойиОплата через цифровой кошелекявляются специализированными формамиОбработка платежа.- Это показывает, что платформа поддерживает несколько способов оплаты, но все они следуют одному и тому же основному потоку.
- Обобщение позволяет общее поведение и будущую расширяемость.
📌 Сценарий использования: Добавление нового способа оплаты (например, Apple Pay) будет просто ещё одним обобщением
Обработка платежа.
5. Реальные интерпретации и ответы на вопросы
Эта диаграмма — не просто визуальная помощь; она отвечает на критически важные бизнес- и технические вопросы:
| Вопрос | Ответ из диаграммы |
|---|---|
| Кто основные пользователи? | Клиенты, Зарегистрированные клиенты, Персонал ресторана, Водители, Платёжный шлюз |
| Могут ли незарегистрированные пользователи оформлять заказы? | ❌ Нет — только Зарегистрированный клиент может Оформить заказ. Клиент может только Просматривать рестораны. |
| Всегда ли требуется оплата? | ✅ Да — Оформить заказ включает Обработка платежа. Обязательно. |
| Могут ли клиенты применять промокоды? | ✅ Да — но только по желанию через <<расширение>>. Только если введён действительный код. |
| Какие способы оплаты поддерживаются? | Карта и цифровой кошелек (через обобщение). Фактическую обработку осуществляет внешняя система. |
| Кто обрабатывает оплату? | Внешняя PaymentGW — не является частью платформы. |
| Могут ли рестораны управлять своими меню? | ✅ Да — Ресторан актор взаимодействует с Управление меню и Принятие / Подготовка заказа. |
✅ Бизнес-ценность: Диаграмма чётко передаёт что делает система, кто её использует, и какое поведение является обязательным, а какое — опциональным.
6. Демонстрируемые общие рекомендации по моделированию
Диаграмма иллюстрирует несколько лучших практик в моделировании сценариев использования UML:
| Рекомендация | Как это применяется |
|---|---|
| Используйте названия сценариев использования, ориентированные на цель | Оформить заказ, Отследить заказ, Применить промокод — все начинаются с глагола и описывают цель пользователя. |
| Сохраняйте читаемость диаграммы | Только 10 сценариев использования показаны — это оптимально для большинства бизнес-доменов (рекомендуется 5–12). |
| Внешние системы как акторы | PaymentGW смоделирована как актор, а не как сценарий использования. Это корректно разделяет обязанности. |
| Используйте примечания для устранения неоднозначности | Примечания поясняют, что PaymentGW является внешней системой, а промокод — опционален — это критически важно для предотвращения неверного толкования. |
| Используйте обобщение акторов для уменьшения визуальной перегрузки | `Customer < |
Используйте include и extend корректно |
Чёткое разграничение между обязательным и опциональным поведением. |
📌 Предупреждение: Многие диаграммы некорректно используют
<<extend>>для обозначения «опциональности» без понимания условного характера расширений. Данная диаграмма избегает этой ошибки.
7. Потенциальные улучшения и критика
Хотя диаграмма сильная, вот конструктивные предложения для доработки:
🔧 1. Добавить стереотипы для ясности
actor "Payment Processor" as PaymentGW <<system>>
- Почему: Делает явным, что это внешняя система, а не роль человека.
- Преимущество: Снижает двусмысленность, особенно в больших моделях.
🔧 2. Уточнить Применить промокод Условие расширения
В настоящее время:
note bottom of (Apply Promo Code)
Optional – only when a valid code is entered
end note
- Лучше: Используйте обозначение условия или охрану в
<<extend>>стрелке:
(Оформить заказ) <.. (Применить промокод) : <<extend>> [действующий промокод]
- Почему: Более точно, чем примечание — напрямую связывает расширение с условием.
🔧 3. Рассмотреть добавление Просмотр истории заказов сценария использования
- В настоящее время отсутствует, но, вероятно, важен как для клиентов, так и для ресторанов.
- Может быть добавлен как
Регистрационный клиентсценарий использования.
🔧 4. Группировать связанные сценарии использования (необязательно)
Для больших диаграмм сгруппируйте сценарии использования в пакеты:
package "Управление заказами" {
(Оформить заказ)
(Отследить заказ)
(Применить промокод)
}
package "Оплата" {
(Обработать оплату)
(Использовать кошелек)
(Оплата картой)
(Оплата цифровым кошельком)
}
- Преимущество: Улучшает масштабируемость и читаемость.
8. Что дальше?
В данном кейсе показано, как хорошо структурированная диаграмма сценариев использования может чётко и лаконично отражать сложную бизнес-логику. Чтобы углубить ваше понимание, вот предлагаемые следующие шаги:
🔄 Вариант 1: Ресторанно-ориентированный взгляд
Смоделировать ту же область с точки зрения ресторана:
- Сосредоточиться на
Управление меню,Принятие / подготовка заказа,Просмотр заказов,Обновление статуса. - Показать
Ресторанв качестве основного актора. - Включить
Клиентв качестве вторичного актора (например,Клиентотправляет заказ →Ресторанполучает его).
✅ Преимущество: Раскрывает различные цели системы и роли акторов.
🔄 Вариант 2: Добавить больше точек расширения
Улучшить Оформить заказ с:
Применить купон(если промокод недействителен →<<extend>>с сообщением об ошибке)Запросить особые указания(необязательно)Запланировать заказ(для будущей доставки)
🔄 Вариант 3: Сравнить включить против расширить с примерами
| Сценарий использования | <<include>> |
<<extend>> |
|---|---|---|
Оформить заказ → Оплатить |
✅ Обязательно | ❌ Не является необязательным |
Оформить заказ → Применить промокод |
❌ Не обязательно | ✅ Условное |
Войти → Подтверждение личности |
✅ Всегда необходимо | ❌ Не применимо |
Оформление заказа → Применить скидку |
✅ Всегда | ✅ Только если существует скидка |
📌 Правило большого пальца:
- Используйте
<<включить>>когда поведение должно произойти.- Используйте
<<расширить>>когда поведение может произойти при определённых условиях.
🔄 Вариант 4: Преобразовать в диаграммы последовательности или деятельности
Для более глубокого анализа:
- Диаграмма последовательности: Показать поток
Оформить заказ→Обработка платежа→Оформить заказс сообщениями между акторами и системой. - Диаграмма деятельности: Моделировать точки принятия решений в
Обработка платежа(например, отказ в оплате картой → повторная попытка или переход на электронный кошелек).
9. Заключение
Настоящее исследование показывает, что грамотно составленная диаграмма вариантов использования — это гораздо больше, чем просто визуальный набросок; это стратегический инструмент коммуникации который:
- уточняет границы системы,
- фиксирует бизнес-правила,
- направляет разработку,
- предотвращает недопонимание.
Диаграмма платформы доставки еды является хорошим примером того, как:
- правильное использование нотации UML,
- обоснованные решения по моделированию,
- четкое разделение ответственности,
- эффективное использование примечаний и обобщений.
Следуя принципам, представленным здесь — целевому именованию, правильному использованию включать/расширять, обобщение актора, и стратегическое использование примечаний — вы можете создавать диаграммы вариантов использования, которые являются одновременно точными и практичными.
✅ Итоговые выводы
| Принцип | Применён здесь? | Почему это важно |
|---|---|---|
| Используйте названия вариантов использования, ориентированные на цели | ✅ Да | Повышает ясность и фокус на пользователе |
| Держите размер диаграммы в разумных пределах | ✅ Да (10 вариантов использования) | Предотвращает когнитивную перегрузку |
| Внешние системы как акторы | ✅ Да | Правильное разделение ответственности |
| Используйте примечания для контекста | ✅ Да | Предотвращает неверное толкование |
| Используйте обобщение для уменьшения избыточности | ✅ Да | Делает диаграмму масштабируемой и поддерживаемой |
Верно<<include>> и <<extend>> направление |
✅ Да | Обеспечивает точное моделирование поведения |









