Кладовочка

О разном, чтобы было под рукой онлайн

Use Case диаграмма: элементы, правила построения и пример UML

Use Case диаграмма — это способ показать на одной картинке, кто и зачем использует систему. Актёры стоят снаружи, варианты использования — внутри границы системы, а линии между ними показывают, кто инициирует какое поведение. Диаграмма не рассказывает, как система устроена внутри: она фиксирует рамки и ключевые результаты применения. В этой статье разбираем элементы UML use case diagram, правила построения, отношения include и extend, даём use case пример для интернет-магазина и банка, сравниваем с sequence и activity и показываем инструменты вроде PlantUML, draw.io и Mermaid.

О чём эта статья

Диаграмма вариантов использования (Use Case Diagram) — один из видов диаграмм UML, который показывает взаимодействие внешних действующих лиц с системой через её варианты использования. Это диаграмма обзора: она отвечает на вопросы «кто пользуется системой» и «какие значимые результаты она им даёт», но не описывает порядок шагов и внутреннюю логику. Порядок шагов раскрывается отдельно — в текстовой спецификации, которую часто называют сценарием использования.

Термин Оригинал Определение
Актёр Actor Роль человека, внешняя система или устройство вне границы системы
Вариант использования Use Case Значимый результат, который система даёт актору
Границы системы System Boundary Прямоугольник, отделяющий систему от внешних акторов
Ассоциация Association Линия между актором и вариантом использования
Включение Include Обязательный подчинённый вариант использования
Расширение Extend Необязательное поведение при выполнении условия
Обобщение Generalization Наследование между акторами или вариантами использования
Субъект Subject Система, поведение которой описывает диаграмма

Для кого эта статья. Она будет полезна системным и бизнес-аналитикам, архитекторам, продакт-менеджерам, разработчикам и QA-инженерам. Отдельно — студентам и готовящимся к собеседованию, которым нужно уверенно объяснить разницу между видами UML-диаграмм и построить корректную use case diagram.

Что вы узнаете:

  • зачем нужна диаграмма вариантов использования и что она не показывает;
  • полный набор элементов: актёр, вариант использования, границы, ассоциации;
  • чем отличаются include, extend и обобщение и когда их применять;
  • пять базовых правил построения корректной диаграммы;
  • примеры для интернет-магазина и банка с готовой нотацией;
  • чем use case отличается от sequence и activity диаграмм;
  • какие инструменты использовать: PlantUML, draw.io, Mermaid и другие;
  • шаблон для заполнения и разбор типичных ошибок.

Зачем нужна диаграмма вариантов использования

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

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

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

Элементы use case диаграммы

Актёр (Actor). Обозначается фигуркой человечка и представляет роль, а не конкретного сотрудника. Один и тот же человек может быть разными актёрами в разных сценариях: он же «покупатель», он же «модератор отзывов». Актёрами бывают и внешние системы: платёжный шлюз, антифрод-сервис, служба доставки, а также устройства и время как источник событий. Актёров всегда размещают снаружи границы системы.

Вариант использования (Use Case). Обозначается эллипсом с коротким названием, которое описывает значимый результат. Формулировать нужно глагольной фразой с точки зрения актора: «Оформить заказ», «Перевести средства», «Восстановить доступ». Не «Форма заказа», не «Модуль оплаты» и не «Нажать кнопку». Название должно читаться как цель, которую актор хочет достичь за один присест.

Границы системы (System Boundary). Прямоугольник с названием системы в верхней части. Внутри — все варианты использования, снаружи — все актёры. Эта рамка дисциплинирует: она отвечает на вопрос «что именно мы разрабатываем». Всё, что оказалось снаружи, — либо интеграция, либо ручной процесс, который система не автоматизирует.

Ассоциации. Сплошная линия между актором и вариантом использования означает участие: актор инициирует или получает результат. Если направление важно, добавить стрелку не запрещено, но в UML ассоциация по умолчанию коммуникационная и однонаправленность часто опускают.

Комментарии и примечания. Заметки-«стикеры» позволяют добавить бизнес-правило или источник требования, не перегружая название варианта использования.

Отношения: ассоциация, include, extend, обобщение

Главный источник ошибок — отношения между вариантами использования. Разберём каждое.

Include (включение). Пунктирная стрелка со стереотипом <<include>> означает, что один вариант использования обязательно вызывает другой как часть своего поведения. Классический пример: «Оформить заказ» включает «Авторизоваться» и «Оплатить заказ». Включение применяют, когда поведение повторяется в нескольких сценариях и его не нужно дублировать. Базовый сценарий без включённого работать не может.

Extend (расширение). Пунктирная стрелка со стереотипом <<extend>> означает необязательное поведение, которое выполняется только при определённом условии. Пример: «Оплатить заказ» расширяется вариантом «Применить промокод». Расширение не запускается само по себе; базовая функциональность работает и без него. Стрелку ведут от расширяющего варианта к базовому и сопровождают условием в примечании.

Generalization (обобщение). Стрелка с полым треугольником означает наследование: дочерний элемент (специализация) наследует связи родительского актёра или поведение базового варианта использования, а остриё треугольника всегда указывает на родителя. Пример: «Зарегистрированный покупатель» — специализация «Покупателя»; «Оплатить картой» — специализация «Оплатить заказ». Стрелку ведут от наследника к родителю.

Отношение Нотация Обязательность Когда применять
Ассоциация Сплошная линия Всегда Связь актора с вариантом использования
Include Стрелка <<include>> от базового к включаемому Обязательное Повторяющееся поведение в нескольких сценариях
Extend Стрелка <<extend>> от расширения Необязательное Поведение по условию, не ломающее основной поток
Generalization Стрелка с полым треугольником к родителю Наследование Общие черты актёров или вариантов использования

Правила построения

  1. Сначала актёры, потом варианты использования. Найдите роли и внешние системы, затем для каждой роли — её цели. Актёр без варианта использования и вариант без актёра — сигнал ошибки.
  2. Одна диаграмма — одна граница системы. Не смешивайте на одном листе несколько систем: непонятно, что именно проектируется. Для обзорной диаграммы это правило особенно важно.
  3. Названия — цели актора, а не операции CRUD. «Управлять товарами» на верхнем уровне лучше, чем четыре овала «создать/прочитать/обновить/удалить».
  4. Не превращайте диаграмму в блок-схему. Если появились ромбы условий, стрелки «далее» и порядок шагов, вы строите activity diagram, а не use case.
  5. Не детализируйте интерфейс. Никаких экранов, кнопок и полей ввода. Диаграмма отвечает на вопрос «что», а не «как».
  6. Сохраняйте читаемость. Размещайте главного актора слева, второстепенных — справа, связанные варианты использования — рядом. Добивайтесь, чтобы диаграмма помещалась на один экран.
  7. Держите уровень абстракции единым. Не смешивайте крупные цели и мелкие операции на одном листе.

Пример: интернет-магазин

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

flowchart LR buyer([Покупатель]) admin([Администратор]) psp([Платёжная система]) subgraph SHOP["Интернет-магазин"] browse(Просмотреть каталог) checkout(Оформить заказ) auth(Авторизоваться) pay(Оплатить заказ) promo(Применить промокод) manage(Управлять товарами) end buyer --- browse buyer --- checkout admin --- manage checkout -. include .-> auth checkout -. include .-> pay promo -. extend .-> pay pay --- psp

Что здесь важно: покупатель связан с двумя независимыми целями — посмотреть каталог и оформить заказ. Оформление заказа включает авторизацию и оплату, а оплата расширяется промокодом, который не обязателен. Платёжная система — актёр, а не внутренний модуль, потому что магазин её не разрабатывает. Текстовая спецификация для этого сценария с шагами и расширениями приведена в статье User Story vs Use Case.

Пример: банк

Второй пример — интернет-банк. Здесь появляется внешняя антифрод-система и важное включение «Проверить операцию». Клиент инициирует перевод, а система обязана проверить операцию и сформировать квитанцию — это части основного поведения, а не отдельные цели.

@startuml
left to right direction
actor Клиент as client
actor "Антифрод-система" as fraud
rectangle "Интернет-банк" {
  usecase "Перевести средства" as UC1
  usecase "Аутентифицироваться" as UC2
  usecase "Проверить операцию" as UC3
  usecase "Сформировать квитанцию" as UC4
}
client --> UC1
UC1 ..> UC2 : <<include>>
UC1 ..> UC3 : <<include>>
UC1 ..> UC4 : <<include>>
UC3 --> fraud
@enduml

Направленные ассоциации (client --> UC1, UC3 --> fraud) в примере показаны для наглядности: в UML ассоциация по умолчанию коммуникационная, направление у неё необязательно — можно ограничиться простыми сплошными линиями.

На этой диаграмме видно, что цель клиента одна — перевести средства, а внутренние обязательные шаги вынесены во включаемые варианты использования. Такой приём позволяет переиспользовать «Аутентифицироваться» в других сценариях, например в «Оплатить услугу».

Чем отличается от sequence и activity

Диаграмму вариантов использования часто путают с другими диаграммами UML, потому что все они описывают поведение. Разница — в фокусе.

Критерий Use Case Sequence Activity
Отвечает на вопрос Кто и зачем использует систему Как объекты обмениваются сообщениями Какой порядок действий и решений
Фокус Цели акторов и рамки Взаимодействие во времени Поток управления с условиями
Элементы Актёры, эллипсы, границы Линии жизни, сообщения Действия, ромбы, потоки
Уровень Обзор функциональности Детализация сценария Логика процесса или алгоритма
Когда применять Рамки и состав функций Проектирование взаимодействия Описание бизнес-процесса или алгоритма

Практическое правило: use case показывает, что система делает для актора; sequence — как объекты системы общаются между собой, реализуя это поведение; activity — в каком порядке выполняются шаги и где возникают развилки. Эти три вида дополняют друг друга, а не заменяют.

Инструменты: PlantUML, draw.io, Mermaid

PlantUML — текстовый инструмент, который компилирует описание в картинку. Идеален для хранения диаграмм в репозитории и ревью через diff. Поддерживает актёров, варианты использования, include, extend и стереотипы.

draw.io (diagrams.net) — бесплатный графический редактор с готовой палитрой UML. Удобен для быстрых набросков и презентаций, поддерживает экспорт в SVG и PNG, хранит файлы локально или в облаке.

Mermaid — формат диаграмм как код, встроенный в GitHub, GitLab и многие wiki. Нативной нотации use case у него нет, поэтому диаграмму собирают через flowchart с эллипсами и пунктирными стрелками, как в примере выше. Для «диаграмм как код» это самый доступный вариант.

StarUML, Visual Paradigm, Enterprise Architect — тяжёлые CASE-средства для крупных проектов. Они поддерживают полный UML 2.5, генерацию документов и трассируемость, но избыточны для небольших задач.

Инструмент Формат Плюсы Ограничения
PlantUML Код Версионирование, diff, полный UML Нужна сборка или сервер
draw.io Графика Быстро, бесплатно, экспорт Ручная синхронизация с текстом
Mermaid Код Встроен в wiki и репозитории Нет нативной нотации use case
Visual Paradigm Графика + код Полный UML 2.5, трассируемость Платная лицензия, вес

Шаблон

Чтобы не забыть элементы, заполняйте диаграмму по чеклисту. Ниже — таблица для самопроверки.

Поле Что указать Пример
Система Название в границе Интернет-магазин
Primary Actor Главный актор слева Покупатель
Secondary Actors Внешние системы и роли Платёжная система, Администратор
Use Cases Цели акторов глагольной фразой Оформить заказ, Оплатить заказ
Include Обязательные подчинённые Авторизоваться
Extend Необязательные ветки Применить промокод
Generalization Наследование Зарегистрированный покупатель
Условия Примечания к extend Сумма заказа больше нуля
Вне границ Что не автоматизируем Доставка курьером

Алгоритм работы: выпишите актёров, для каждого соберите цели уровня Primary Task, поместите цели внутрь границы, свяжите ассоциациями, вынесите повторяющееся поведение в include, условное — в extend, проверьте единый уровень абстракции и читаемость. После этого переходите к текстовым спецификациям — например, по гайду Собеседование системного аналитика, где разбираются вопросы по требованиям.

Частые ошибки

Ошибка Причина Решение
Вариант использования назван существительным Автор думает о модуле, а не о цели Называйте глагольной фразой: «Оформить заказ»
Актёр нарисован внутри границы системы Смешение роли и внутреннего компонента Всегда размещайте актёров снаружи прямоугольника
На диаграмме нет границ системы Забыли про Subject Добавьте прямоугольник с названием системы
Include и extend перепутаны Непонимание обязательности Include обязателен, extend — по условию
Стрелка extend направлена не в ту сторону Ошибка в нотации Ведите стрелку от расширяющего варианта к базовому
Диаграмма превращена в блок-схему Хотят показать порядок шагов Порядок описывайте в activity или sequence
Слишком много мелких вариантов использования Включили CRUD-операции Оставляйте цели уровня Primary Task
Группировка CRUD в один вариант Подмена цели набором действий Формулируйте цель, а не список операций
На одной диаграмме несколько систем Нет чётких рамок Одна диаграмма — одна граница системы
Нечитаемая «паутина» из стрелок Нет компоновки Главный актор слева, связанные варианты рядом
Актор без единой связи Забыли цель или добавили лишнюю роль Уберите актёра или найдите его вариант использования
Диаграмма оторвана от текста Нет спецификаций Для каждого варианта напишите сценарий
Уровни абстракции смешаны Крупные цели рядом с операциями Разделите обзорную и детальную диаграммы
Названия на русском и английском вперемешку Нет единого глоссария Зафиксируйте язык и термины проекта

Ресурсы

  • Стандарт OMG UML 2.5 — официальное определение актора, варианта использования и отношений include, extend, generalization.
  • Алистер Коберн, «Writing Effective Use Cases» — уровни целей, шаблон спецификации и связь с диаграммой.
  • Айвар Якобсон, «Object-Oriented Software Engineering: A Use Case Driven Approach» — первоисточник метода вариантов использования.
  • Мартин Фаулер, «UML Distilled» — краткое и точное описание нотации UML, включая use case диаграммы.
  • Крейг Ларман, «Applying UML and Patterns» — применение диаграмм в итеративном процессе.
  • Документация PlantUML и Mermaid — синтаксис построения диаграмм как кода.

Что дальше