Кейс-стади: Диаграмма вариантов использования для платформы доставки еды

Моделирование реальных требований с помощью 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 вместо дублирования связей

📌 Лучшая практика: Используйте обобщение акторов, когда специализированный актор наследует все поведения более общего актора.


Зачем <<include>> и <<extend>> используются правильно

Связь Цель Направление Пример
<<включить>> Обязательный подпоток От включаявключённый Оформить заказ должен включить Обработать оплату
<<расширить>> Дополнительное расширение От расширениеоснова Применить промокод расширяет Оформить заказ только если код действителен

Распространённая ошибка: Разворот направления стрелки. Всегда помните:

  • включить: Основа ..> Включённый
  • расширять: Расширение <.. База

Почему Обработка платежа имеет обобщения

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

📌 Сценарий использования: Добавление нового способа оплаты (например, Apple Pay) будет просто ещё одним обобщением Обработка платежа.


5. Реальные интерпретации и ответы на вопросы

Эта диаграмма — не просто визуальная помощь; она отвечает на критически важные бизнес- и технические вопросы:

Вопрос Ответ из диаграммы
Кто основные пользователи? Клиенты, Зарегистрированные клиенты, Персонал ресторана, Водители, Платёжный шлюз
Могут ли незарегистрированные пользователи оформлять заказы? ❌ Нет — только Зарегистрированный клиент может Оформить заказ. Клиент может только Просматривать рестораны.
Всегда ли требуется оплата? ✅ Да — Оформить заказ включает Обработка платежа. Обязательно.
Могут ли клиенты применять промокоды? ✅ Да — но только по желанию через <<расширение>>. Только если введён действительный код.
Какие способы оплаты поддерживаются? Карта и цифровой кошелек (через обобщение). Фактическую обработку осуществляет внешняя система.
Кто обрабатывает оплату? Внешняя PaymentGW — не является частью платформы.
Могут ли рестораны управлять своими меню? ✅ Да — Ресторан актор взаимодействует с Управление меню и Принятие / Подготовка заказа.

Бизнес-ценность: Диаграмма чётко передаёт что делает система, кто её использует, и какое поведение является обязательным, а какое — опциональным.


6. Демонстрируемые общие рекомендации по моделированию

Диаграмма иллюстрирует несколько лучших практик в моделировании сценариев использования UML:

Рекомендация Как это применяется
Используйте названия сценариев использования, ориентированные на цель Оформить заказ, Отследить заказ, Применить промокод — все начинаются с глагола и описывают цель пользователя.
Сохраняйте читаемость диаграммы Только 10 сценариев использования показаны — это оптимально для большинства бизнес-доменов (рекомендуется 5–12).
Внешние системы как акторы PaymentGW смоделирована как актор, а не как сценарий использования. Это корректно разделяет обязанности.
Используйте примечания для устранения неоднозначности Примечания поясняют, что PaymentGW является внешней системой, а промокод — опционален — это критически важно для предотвращения неверного толкования.
Используйте обобщение акторов для уменьшения визуальной перегрузки `Customer <
Используйте include и extend корректно Чёткое разграничение между обязательным и опциональным поведением.

📌 Предупреждение: Многие диаграммы некорректно используют <<extend>> для обозначения «опциональности» без понимания условного характера расширений. Данная диаграмма избегает этой ошибки.


7. Потенциальные улучшения и критика

Хотя диаграмма сильная, вот конструктивные предложения для доработки:

🔧 1. Добавить стереотипы для ясности

  • Почему: Делает явным, что это внешняя система, а не роль человека.
  • Преимущество: Снижает двусмысленность, особенно в больших моделях.

🔧 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>> направление ✅ Да Обеспечивает точное моделирование поведения