Моделирование и нотации
Моделирование в UML и BPMN — виды диаграмм и их применение, элементы и шлюзы BPMN, sequence-диаграммы, use case против user story и нотации моделирования.
20 вопросов
JuniorТеорияОчень частоНазовите основные элементы нотации BPMN.
Назовите основные элементы нотации BPMN.
В BPMN четыре базовые категории элементов: События (Event) — моменты, когда что-то происходит (старт, промежуточные, конец); Задачи (Task) — выполняемые активности; Шлюзы (Gateway) — точки ветвления и слияния потока; Потоки (Flow) — связи, задающие порядок.
Типичные ошибки
- ✗Путать элементы BPMN с частями диаграммы классов UML
- ✗Забывать шлюзы как отдельную категорию элементов
- ✗Считать потоки бессмысленными стрелками, а не упорядоченными sequence flow
Уточняющие вопросы
- →Чем событие отличается от задачи в BPMN?
- →Зачем в процессе нужен шлюз, а не просто две стрелки?
JuniorТеорияОчень частоКакие основные виды диаграмм должны быть в документации системы?
Какие основные виды диаграмм должны быть в документации системы?
Диаграммы: схема бизнес-процесса (BPMN), sequence (взаимодействие во времени), классов (структура), ER-модель (данные и связи), компонентов (развёртываемые части), стейт-машина (состояния) и use-case (цели акторов).
Типичные ошибки
- ✗Путать, что показывает каждая диаграмма (структуру, взаимодействие, данные)
- ✗Называть один вид диаграммы под все цели
- ✗Смешивать ER-модель с диаграммой классов
Уточняющие вопросы
- →Когда вы выберете sequence-диаграмму вместо диаграммы классов?
- →Что показывает диаграмма компонентов, чего не показывает класс-диаграмма?
JuniorТеорияОчень частоКакие нотации вы используете при моделировании?
Какие нотации вы используете при моделировании?
Основные нотации — UML (структура и поведение: классы, sequence, состояния, use-case), BPMN (бизнес-процессы: события, задачи, шлюзы, потоки) и разметка doc-as-code, например PlantUML, хранящая диаграммы как текст под контролем версий.
Типичные ошибки
- ✗Путать UML (структура/поведение) с BPMN (бизнес-процессы)
- ✗Не знать, что диаграммы можно хранить как текст через doc-as-code
- ✗Считать PlantUML рисовалкой, а не языком разметки
Уточняющие вопросы
- →Чем хорош подход doc-as-code для диаграмм?
- →Для какой задачи вы выберете BPMN, а не UML?
JuniorТеорияОчень частоЧто такое use case и из чего он состоит?
Что такое use case и из чего он состоит?
Use case — формализованное описание того, как актор взаимодействует с системой ради цели. Он называет актора и цель, перечисляет шаги с реакциями системы и структурирует их в основной (успешный) поток плюс альтернативные потоки и исключения, с пред- и постусловиями. Он фиксирует детальное «как» взаимодействия, а не только пожелание.
Типичные ошибки
- ✗Путать use case с однострочной user story или пожеланием
- ✗Опускать альтернативные потоки, исключения или пред/постусловия
- ✗Забывать назвать актора и цель
Уточняющие вопросы
- →Чем альтернативный поток отличается от исключения в use case?
- →Зачем use case нужны предусловия и постусловия?
JuniorТеорияЧастоВ чём разница между моделями AS-IS и TO-BE, и зачем вообще рисовать AS-IS?
В чём разница между моделями AS-IS и TO-BE, и зачем вообще рисовать AS-IS?
AS-IS моделирует процесс таким, как он работает сегодня; TO-BE — целевой процесс после изменения. AS-IS рисуют, чтобы согласовать текущую реальность, вскрыть узкие места и скрытые правила и задать базу, на которой строится TO-BE — по фактам, а не догадкам.
Типичные ошибки
- ✗Путать, где текущий (AS-IS), а где целевой (TO-BE)
- ✗Пропускать AS-IS и сразу рисовать TO-BE, упуская реальные узкие места
- ✗Считать AS-IS формальностью, а не базой для сравнения улучшений
Уточняющие вопросы
- →Когда допустимо пропустить модель AS-IS?
- →Как использовать AS-IS и TO-BE для обоснования изменения стейкхолдерам?
JuniorТеорияЧастоКакие нотации моделирования существуют и как выбирать между BPMN, UML и DFD под задачу?
Какие нотации моделирования существуют и как выбирать между BPMN, UML и DFD под задачу?
Основные нотации — UML (структура и поведение системы), BPMN (бизнес-процессы с участниками и потоком) и DFD — data-flow diagram, как данные движутся между процессами и хранилищами. Выбирайте по цели: BPMN для процесса, UML для структуры ПО, DFD для движения данных.
Типичные ошибки
- ✗Считать BPMN, UML и DFD взаимозаменяемыми, а не заточенными под свою цель
- ✗Выбирать нотацию по инструменту или привычке, а не по тому, что нужно показать
- ✗Не знать, что DFD — про движение данных, а не про последовательность шагов
Уточняющие вопросы
- →Для какой задачи вы выберете DFD, а не BPMN?
- →Можно ли сочетать две нотации для одной системы и как?
JuniorТеорияЧастоЧто показывает sequence-диаграмма и из каких элементов состоит?
Что показывает sequence-диаграмма и из каких элементов состоит?
Sequence-диаграмма (UML) показывает взаимодействие во времени: участники — колонки с вертикальными линиями жизни, горизонтальные стрелки — сообщения между ними, читаемые сверху вниз. Она фиксирует, кто кого вызывает и в каком порядке.
Типичные ошибки
- ✗Путать sequence-диаграмму (взаимодействие во времени) с диаграммой классов (структура)
- ✗Забывать линии жизни и порядок времени сверху вниз
- ✗Смешивать её с потоком процесса BPMN
Уточняющие вопросы
- →Как на sequence-диаграмме показать таймаут или альтернативный ответ?
- →Когда sequence-диаграмма яснее текстового сценария?
MiddleТеорияЧастоКакие виды шлюзов есть в BPMN и в чём их семантика?
Какие виды шлюзов есть в BPMN и в чём их семантика?
Шлюзы BPMN: Исключающий (XOR) — выбирается ровно один путь; Параллельный (AND) — все пути идут одновременно; Неисключающий (OR) — один или несколько по условиям; Событийный — путь выбирает первое событие; Сложный — для невыразимой иначе логики.
Типичные ошибки
- ✗Менять местами семантику исключающего (один путь) и параллельного (все пути)
- ✗Забывать, что событийный шлюз выбирает по первому событию
- ✗Путать неисключающий (один или несколько) с исключающим (ровно один)
Уточняющие вопросы
- →Когда вы примените неисключающий шлюз вместо исключающего?
- →Что произойдёт, если параллельный шлюз разветвил поток, но слияния нет?
MiddleТеорияЧастоКакие четыре уровня у модели C4 и какие из них аналитик реально рисует?
Какие четыре уровня у модели C4 и какие из них аналитик реально рисует?
У C4 четыре уровня приближения: Context (система в окружении), Container (развёртываемые единицы — приложения, сервисы, БД), Component (блоки внутри контейнера) и Code (классы). Аналитик рисует Context и Container; Component и Code — территория разработчиков.
Типичные ошибки
- ✗Не знать, что четыре уровня — Context, Container, Component, Code
- ✗Думать, что аналитик рисует нижний уровень Code до классов
- ✗Считать C4 инструментом для UI или кода, а не видами архитектуры
Уточняющие вопросы
- →Что попадает на диаграмму Context, а что на Container?
- →Почему уровень Code (модель C4) на практике обычно пропускают?
MiddleТеорияЧастоЧто такое DFD, какие типы элементов он использует и что показывает такого, чего нет в BPMN?
Что такое DFD, какие типы элементов он использует и что показывает такого, чего нет в BPMN?
DFD (data-flow diagram) моделирует, как данные движутся через систему. Четыре его элемента — внешние сущности (источники/приёмники), процессы, хранилища данных и потоки данных. В отличие от потока управления BPMN, DFD показывает, где данные возникают, хранятся и используются.
Типичные ошибки
- ✗Думать, что DFD показывает время или порядок шагов как BPMN
- ✗Путать элементы DFD с пулами/задачами BPMN или классами UML
- ✗Забывать, что DFD сфокусирован на данных, а не на потоке управления
Уточняющие вопросы
- →Что такое контекстная диаграмма (DFD уровня 0) и зачем начинать с неё?
- →Когда DFD полезнее, чем процессная модель BPMN?
MiddleТеорияЧастоЧто такое пулы, дорожки и потоки сообщений в BPMN, и когда нужен второй пул?
Что такое пулы, дорожки и потоки сообщений в BPMN, и когда нужен второй пул?
Пул — один участник; дорожки (lanes) делят его на роли или системы. Потоки сообщений (message flow, пунктир) пересекают границы пулов; sequence flow (сплошные) — внутри пула. Второй пул нужен для независимого участника вне вашего контроля — внешней системы или партнёра.
Типичные ошибки
- ✗Путать message flow (между пулами) с sequence flow (внутри пула)
- ✗Считать дорожку отдельным процессом, а не делением одного пула
- ✗Заводить второй пул для внутренних ролей вместо дорожек
Уточняющие вопросы
- →Может ли sequence flow пересекать границу пула и почему?
- →Как смоделировать запрос во внешнюю систему, которая не отвечает?
MiddleТеорияЧастоЧем различаются use case, user story и job story и где их применять?
Чем различаются use case, user story и job story и где их применять?
User story — краткая потребность пользователя: «Как <роль>, я хочу <цель>, чтобы <ценность>» — про «что» и «зачем». Job story задаёт её через ситуацию. Use case — детальное «как»: актор, цель, шаги, альтернативные потоки и исключения.
Типичные ошибки
- ✗Считать use case и user story одним уровнем детализации
- ✗Путать рамку job story «когда ситуация» с обычной user story
- ✗Применять use case там, где уместна лёгкая история, и наоборот
Уточняющие вопросы
- →Запишите user story для оформления заказа в нужном шаблоне.
- →Когда вы предпочтёте job story user story?
MiddleТеорияИногдаКакие типы событий определяет BPMN 2.0 и что меняет прерывающее граничное событие?
Какие типы событий определяет BPMN 2.0 и что меняет прерывающее граничное событие?
По позиции BPMN 2.0 имеет события start, intermediate, boundary и end; по триггеру каждое несёт message, timer, error или signal. Прерывающее граничное событие отменяет активность и уводит её токен в поток-исключение; непрерывающее порождает параллельный токен.
Типичные ошибки
- ✗Забывать про ось позиции (start/intermediate/boundary/end) или ось триггера
- ✗Думать, что прерывающее граничное событие оставляет активность работать
- ✗Менять местами прерывающее и непрерывающее поведение
Уточняющие вопросы
- →Когда вы выберете непрерывающее граничное событие?
- →Чем событие start по message отличается от start по timer?
MiddleТеорияИногдаЧто такое EPC (событийная цепочка процессов) и чем она отличается от BPMN?
Что такое EPC (событийная цепочка процессов) и чем она отличается от BPMN?
EPC — событийная цепочка процессов — нотация, где функции и события строго чередуются. Ветвление задаётся коннекторами AND, OR, XOR. По сравнению с BPMN она проще и событийна, без пулов; BPMN — более богатый исполняемый стандарт.
Типичные ошибки
- ✗Забывать обязательное чередование функций и событий в EPC
- ✗Считать EPC и BPMN взаимозаменяемыми синонимами
- ✗Ожидать пулы или потоки сообщений, которых в EPC нет
Уточняющие вопросы
- →Почему EPC должна начинаться и заканчиваться событием?
- →Когда сегодня вы всё же выберете EPC вместо BPMN?
MiddleТеорияИногдаЧто такое IDEF0, что означают четыре стороны блока (ICOM) и где он до сих пор обязателен?
Что такое IDEF0, что означают четыре стороны блока (ICOM) и где он до сих пор обязателен?
IDEF0 — нотация функционального моделирования: каждый блок — функция, а стрелки крепятся к четырём сторонам по роли — Inputs, Controls, Outputs, Mechanisms, сокращённо ICOM. Он до сих пор обязателен в российских госзаказах и оборонке по стандартам ГОСТ.
Типичные ошибки
- ✗Читать четыре стороны ICOM как четыре равнозначных входа
- ✗Путать функции IDEF0 с активностями BPMN или таблицами БД
- ✗Не знать, что ГОСТ до сих пор требует функциональные модели в духе IDEF0
Уточняющие вопросы
- →Чем Control в IDEF0 отличается от Input?
- →Почему IDEF0 декомпозируют строго сверху вниз из контекстного блока?
MiddleТеорияИногдаКакие фрагменты поддерживает sequence-диаграмма UML (alt, opt, loop, par) и как показать асинхронный вызов?
Какие фрагменты поддерживает sequence-диаграмма UML (alt, opt, loop, par) и как показать асинхронный вызов?
Комбинированные фрагменты оборачивают сообщения: alt (взаимоисключающие ветви), opt (необязательный блок), loop (повторение) и par (параллель). Асинхронный вызов рисуют открытой тонкой стрелкой, он не блокирует отправителя; синхронный — закрашенной стрелкой со стрелкой возврата.
Типичные ошибки
- ✗Путать, какой фрагмент означает ветвление, опцию, повтор или параллелизм
- ✗Путать открытую (async) и закрашенную (sync) стрелки
- ✗Думать, что sequence-диаграмма не умеет выражать ветви или циклы
Уточняющие вопросы
- →Чем opt отличается от alt с одной ветвью?
- →Как показать вызов объектом самого себя на линии жизни?
SeniorТеорияИногдаНеисключающий шлюз-разветвитель запустил две из трёх ветвей. Как сходящийся неисключающий шлюз узнаёт, сколько токенов ждать?
Неисключающий шлюз-разветвитель запустил две из трёх ветвей. Как сходящийся неисключающий шлюз узнаёт, сколько токенов ждать?
Он не ждёт фиксированное число. Сходящийся неисключающий шлюз смотрит на состояние процесса выше по потоку и синхронизирует только токены, что ещё способны до него дойти, и срабатывает, когда не может ни одна. Если разветвитель запустил две ветви, слияние сольёт ровно эти две.
Типичные ошибки
- ✗Считать, что неисключающее слияние всегда ждёт все входящие ветви
- ✗Думать, что оно использует фиксированное число токенов из этапа проектирования
- ✗Путать его с событийным шлюзом, срабатывающим по первому токену
Уточняющие вопросы
- →Какой риск взаимоблокировки возникает, если логика выше по потоку не видна слиянию?
- →Чем это отличается от слияния параллельного (AND) шлюза?
SeniorТеорияИногдаЧто такое токен в BPMN, и что произойдёт, если параллельное разветвление слить исключающим шлюзом?
Что такое токен в BPMN, и что произойдёт, если параллельное разветвление слить исключающим шлюзом?
Токен — метка на sequence flow, отмечающая активное состояние экземпляра процесса; параллельное разветвление выпускает по токену на ветвь. Исключающий (XOR) шлюз не синхронизирует — он пропускает каждый токен насквозь, поэтому экземпляр может завершиться несколько раз.
Типичные ошибки
- ✗Считать токен физической записью или действующим пользователем
- ✗Думать, что исключающее слияние синхронизирует токены как параллельное
- ✗Упускать, что поток после XOR-слияния выполняется по разу на токен
Уточняющие вопросы
- →Как правильно сливать параллельное разветвление вместо этого?
- →Какой симптом в работающем процессе выдаёт эту ошибку моделирования?
MiddleДизайнРедкоНа sequence-диаграмме UML смоделируйте клиента, вызывающего внешний платёжный сервис по REST. Вызов может завершиться успехом, тайм-аутом или бизнес-ошибкой. При тайм-ауте клиент повторяет попытку до трёх раз, затем сдаётся; при бизнес-ошибке (например, недостаточно средств) он не повторяет, но обязан показать ошибку пользователю. Покажите, как вы изобразите счастливый путь, поведение «тайм-аут с повтором» и ветвь неповторяемой ошибки, и какие конструкции sequence-диаграммы (фрагменты, стрелки) примените для каждого.
На sequence-диаграмме UML смоделируйте клиента, вызывающего внешний платёжный сервис по REST. Вызов может завершиться успехом, тайм-аутом или бизнес-ошибкой. При тайм-ауте клиент повторяет попытку до трёх раз, затем сдаётся; при бизнес-ошибке (например, недостаточно средств) он не повторяет, но обязан показать ошибку пользователю. Покажите, как вы изобразите счастливый путь, поведение «тайм-аут с повтором» и ветвь неповторяемой ошибки, и какие конструкции sequence-диаграммы (фрагменты, стрелки) примените для каждого.
Нарисуйте клиента и платёжный сервис линиями жизни с синхронным вызовом. Оберните повтор-по-тайм-ауту во фрагмент loop, ограниченный тремя итерациями, с alt внутри, разделяющим успех и тайм-аут. Бизнес-ошибку вынесите в отдельную ветвь alt, которая её показывает и не зациклена.
Типичные ошибки
- ✗Брать par (параллель) для повторов вместо ограниченного loop
- ✗Гнать бизнес-ошибку через цикл повторов, будто она повторяема
- ✗Пытаться выразить повторы и ветви обычными текстовыми заметками
Уточняющие вопросы
- →Как ограничить цикл и показать сообщение «сдаюсь» после трёх попыток?
- →Куда на диаграмме добавить длительность тайм-аута или backoff?
SeniorДизайнРедкоСмоделируйте шаг оплаты заказа в BPMN 2.0. После оформления заказа процесс ждёт оплату от клиента. Оплата может прийти в любой момент, но если она не пришла за 15 минут, заказ нужно автоматически отменить и уведомить клиента; если оплата пришла раньше — заказ идёт в исполнение. Возможен лишь один из двух исходов — поздняя оплата после отмены приниматься не должна. Какие конструкции BPMN (события, шлюзы, потоки) вы примените, куда их прикрепите и как гарантируете взаимоисключаемость двух исходов?
Смоделируйте шаг оплаты заказа в BPMN 2.0. После оформления заказа процесс ждёт оплату от клиента. Оплата может прийти в любой момент, но если она не пришла за 15 минут, заказ нужно автоматически отменить и уведомить клиента; если оплата пришла раньше — заказ идёт в исполнение. Возможен лишь один из двух исходов — поздняя оплата после отмены приниматься не должна. Какие конструкции BPMN (события, шлюзы, потоки) вы примените, куда их прикрепите и как гарантируете взаимоисключаемость двух исходов?
Смоделируйте оплату как receive task с прерывающим таймерным граничным событием на 15 минут. Если таймер срабатывает, он отменяет задачу и уводит токен на путь отмены-и-уведомления; иначе поток идёт дальше. Так как событие прерывающее, два исхода остаются взаимоисключающими.
Типичные ошибки
- ✗Брать непрерывающее граничное событие, из-за чего оба исхода завершаются
- ✗Думать, что обычный шлюз сам умеет измерять прошедшее время
- ✗Моделировать тайм-аут отдельным процессом, который не координируется
Уточняющие вопросы
- →Как событийный шлюз выразит ту же гонку тайм-аут-против-оплаты?
- →Куда добавить шаг компенсации, если оплата уже была списана?