BPMN gateways на собеседовании системного аналитика
Карьерник — Duolingo для аналитиков: 10 минут в день тренируй SQL, Python, A/B, статистику, метрики и ещё 3 темы собеса. 1500+ вопросов в Telegram-боте. Бесплатно.
Содержание:
Зачем спрашивают на собесе SA
Gateways — главный механизм управления потоком в BPMN. На собесе SA: «отличие XOR и OR», «когда event-based», «как сходить параллельные ветки».
Виды gateways в BPMN 2.0
| Gateway | Символ | Применение |
|---|---|---|
| Exclusive (XOR) | ромб с X | Одна ветка из нескольких |
| Parallel (AND) | ромб с + | Все ветки одновременно |
| Inclusive (OR) | ромб с O | Несколько веток (1+) |
| Event-based | ромб с пятиугольником | Ветка по первому событию |
| Complex | ромб со * | Сложная логика |
XOR (Exclusive)
«Одна из двух / нескольких веток».
<amount > 1000?>
/ \
[yes] [no]
↓ ↓
[Approval] [Auto-charge]Правила:
- Условия взаимоисключающие.
- Ровно одна ветка выбирается.
- Default flow (стрелка с косой чертой) — если ни одно условие не сработало.
Объединение (XOR merge) — несколько веток сходятся, не ждёт все. Первая пришедшая — продолжает.
AND (Parallel)
«Все ветки одновременно».
━━ AND fork ━━
↓ ↓ ↓
[Email][SMS][Push]
↓ ↓ ↓
━━ AND join ━━
↓
[Логировать]Правила:
- Все исходящие потоки активны параллельно.
- AND join ждёт все потоки и потом продолжает.
- Без условий на стрелках.
OR (Inclusive)
«Один или несколько потоков».
OR gateway
/ | \
[is_premium] [is_corporate] [in_loyalty]
↓ ↓ ↓
[Discount A][Discount B] [Discount C]Правила:
- Каждое условие проверяется независимо.
- Активируется одна или несколько веток (где условия true).
- OR join — ждёт все активированные ветки (не все исходящие).
Сложность: OR join требует от движка знать, какие ветки активны. На реальных engine'ах (Camunda) надёжно работает только при честно сформулированных условиях.
Часто проще выразить через XOR с явными branches.
Event-based gateway
«Жди первое из событий».
[Event-based]
/ | \
Message Timer Cancel
arrives 30d signal
↓ ↓ ↓
[Process] [Reject][Abort]Правила:
- Каждый исходящий путь ведёт к ивент-узлу (message, timer, signal, etc).
- Активируется тот путь, чей event пришёл первым.
- Остальные cancellable.
Применение:
- Ожидание ответа от внешней системы с таймаутом.
- Долго работающий процесс с возможностью cancel.
Complex gateway
Custom условия слияния / разветвления, не выражаемые стандартными gateways.
[3 of 5 approvers approved] → continueНа практике — редко используется. Чаще декомпозируют на проще gateways.
Частые ошибки
Перепутать XOR и OR. XOR — ровно одна ветка. OR — одна или несколько.
AND join без AND fork. Если поток прошёл AND join, но не было AND fork — может зависнуть в ожидании несуществующих потоков.
Условия на AND стрелках. AND не имеет условий — все потоки активны всегда.
XOR без default. Если ни одно условие не выполнилось — поток зависает. Всегда default flow.
OR join вместо XOR join. OR join сложнее, движок может не справиться.
Слишком много gateways. 10 gateways в одной диаграмме — нечитаемо. Декомпозиция на subprocess.
Использовать complex gateway. Чаще можно выразить проще.
Mixing-merging без правильного gateway. Неявные сходимости (несколько потоков в один activity) — не рекомендуется. Всегда явный gateway-join.
Связанные темы
- UML и BPMN на собесе SA
- UML Activity на собесе SA
- UML Sequence на собесе SA
- 2PC vs Saga на собесе SA
- Подготовка к собесу системного аналитика
FAQ
XOR vs UML decision?
Семантически равны (одна из веток). XOR — BPMN-нотация, decision (ромб) — UML.
Можно ли в BPMN gateway без условий?
XOR/OR — нет, нужны условия. AND — да, никогда нет условий.
Что такое diverging vs converging gateway?
Diverging — разветвление потоков. Converging — слияние. На диаграмме часто это один и тот же символ, но разная семантика.
Это официальная информация?
Нет. Статья основана на спецификации BPMN 2.0 (OMG).
Тренируйте системный анализ — откройте тренажёр с 1500+ вопросами для собесов.