Для эффективной реализации бизнес-логики ее необходимо предварительно корректно описать, а для этого нужно средство, позволяющее выполнить описание логики бизнес-процессов.
Нотация BPMN (Business Process Model and Notation) — это система условных обозначений и их описания средствами языка разметки XML для моделирования бизнес-процессов. Разработана Business Process Management Initiative (BPMN.org) и поддерживается Object Management Group, после слияния обеих организаций в 2005 году. Последней версией BPMN на текущий момент является 2.0 (2.0.2).
BPMN позволяет не только описать бизнес-логику выполнения действий в виде наглядной диаграммы, но и запустить отрисованный бизнес-процесс на исполнение. Для этого используются специализированные системы BPMS (Business Process Modelling System), поддерживающие эту нотацию. Такие системы могут автоматически перевести схему бизнес-процесса в исполняемый код и создать веб-приложение, которое будет обрабатывать данные, введённые пользователями и сторонними сервисами. Такая концепция называется Low Code/No Code (создание программного обеспечения без разработки кода) и отлично подходит для автоматизации офисных процессов.
Создание визуальных моделей процессов помогает каждому лучше понимать, обсуждать и запоминать процессы. Поскольку BPMN представляет процесс графически, люди с разным опытом работы могут ознакомиться с моделью.
Визуальное представление сложного процесса помогает устранить барьеры между тем, что необходимо бизнесу, и тем, что технически осуществимо. Это позволяет командам согласовать выбранный дизайн перед написанием любого кода. Опираясь на эту основу, команды могут итеративно улучшать процесс, используя данные из самого процесса.
Бизнес-процессы часто сталкиваются со схожими проблемами независимо от отрасли или среды использования. В результате было создано несколько методик и шаблонов документооборота, которые могут решить эти проблемы.
Эти шаблоны управляют сложной логикой бизнес-процессов на нескольких конечных точках, таких как параллельное выполнение потоков процессов, корреляция сообщений, эскалация событий или устранение фатальной ошибки.
Пример диаграммы BPMN
Это часто цитируемый пример BPMN, разработанный OMG для демонстрации взаимодействия различных участников процесса. Поскольку мы хотим четко смоделировать взаимодействие между клиентом, заказывающим пиццу, и поставщиком, который ее производит, мы классифицируем их как участников и выделяем каждому отдельный пул. Так у нас есть клиент, заказывающий пиццу, клерк, получающий заказ, повар, который готовит и доставщик пиццы.
![](https://habrastorage.org/getpro/habr/upload_files/dfb/182/8f1/dfb1828f136024fae05c6ac029a531b3.png)
На диаграмме представлены различные события и действия, связанные с получением заказа, готовкой пиццы и ее доставкой. Рассмотрим более подробно основные сущности, которые мы видим на диаграмме.
Пулы и зоны
Начнем с рассмотрения рабочих зон и пулов, используемых для построения диаграмм. Пулы представляют собой внешний контейнер для процессов, которые выполняются различными участниками, в то время как зоны представляют собой внутренние контейнеры, которые помогают разделить процесс на различные этапы выполнения. Каждая диаграмма BPMN должна содержать по крайней мере один пул с одной зоной. Но в нашем примере есть два контейнера Pizza Customer и Pizza Vendor, и второй контейнер содержит целых три зоны, связанные с различными исполнителями.
События
Любая диаграмма начинается и заканчивается событиями. События в кружочках обозначают то, что происходит в ходе процесса.
Простой кружочек
![](https://habrastorage.org/getpro/habr/upload_files/9d4/128/4fe/9d41284fe955e699d02fb99c606be4fd.png)
обозначает событие запуска, то есть событие, инициирующее процесс. Событие запуска, содержащее значок конверта,
![](https://habrastorage.org/getpro/habr/upload_files/cfe/9b6/a34/cfe9b6a3487990a7fb32d79bfc1dd3e2.png)
указывает на то, что пришло сообщение и запускает процесс.
В нашем примере с диаграммой доставкой пиццы у нас присутствует такой значок, когда приходит заказ, клиент спрашивает, где его пицца, и когда он ее наконец получает. При этом, в первом случае происходит обращение к параллельному шлюзу, о котором мы поговорим чуть позже, во втором запускается процесс “успокаивания” клиента клерком. А во третьем случае запускается процесс оплаты.
Также, на нашей диаграмме присутствует событие ожидания
![](https://habrastorage.org/getpro/habr/upload_files/ef8/992/070/ef89920703b9f3e6d671f54ebc39c5ab.png)
представленное в виде кружочка со стрелками. Для такого события обязательно указывается временной интервал.
И наконец, события завершения. Кружочек с жирной линией
![](https://habrastorage.org/getpro/habr/upload_files/da3/f54/af0/da3f54af0b9c27f405ff46ab7bfc2fee.png)
обозначает завершение процесса на стороне клиента. А закрашенный кружочек с жирной линией
![](https://habrastorage.org/getpro/habr/upload_files/fef/1db/e5d/fef1dbe5dc98da3900d3a33825aa9062.png)
это соответственно, полное уничтожение процесса. Таким образом мы описали основные события. Однако у нас на диаграмме есть еще и другие сущности, например - шлюзы.
Типы шлюзов
На нашей схеме представлен только два типа шлюзов - это параллельный и инклюзивный шлюзы, однако в своем описании мы не будем ограничиваться только им и также рассмотрим другие варианты.
Итак, параллельный шлюз
![](https://habrastorage.org/getpro/habr/upload_files/398/bd5/846/398bd584600ce9a86102ec06c3009154.png)
используется для представления двух параллельных задач в бизнес-потоке. В нашей диаграмме этот шлюз распараллеливает задачи по приготовлению и последующей доставки пиццы и успокаивание клиента.
Эксклюзивный шлюз
![](https://habrastorage.org/getpro/habr/upload_files/adf/8d3/cac/adf8d3cac9e506d014ebd129ca289796.png)
оценивает состояние бизнес-процесса и, основываясь на этом состоянии, распределяет поток по одному из двух или более взаимоисключающих путей.
В примере ниже в зависимости от того, что будет передано после шага Go to Old North Chrunch, Land или Sea, с помощью эксклюзивного шлюза будет выбран вариант дальнейших действий.
![](https://habrastorage.org/getpro/habr/upload_files/b75/bf5/3f7/b75bf53f7aec110d9a017415b7935916.png)
В отличии от параллельного шлюза, который распараллеливает задачи, эксклюзивный шлюз распределяет поток строго по одному из двух путей.
Еще один шлюз, представленный на схеме это инклюзивный шлюз
![](https://habrastorage.org/getpro/habr/upload_files/7c7/56a/788/7c756a78846a5918653eae1820e9f21c.png)
. Принцип работы инклюзивного шлюза – логическая операция ИЛИ.
![](https://habrastorage.org/getpro/habr/upload_files/7dc/330/f42/7dc330f4295f86f8f41664a9eab19506.png)
Также стоит упомянуть параллельный шлюз, основанный на событиях
![](https://habrastorage.org/getpro/habr/upload_files/6f3/b6c/47b/6f3b6c47b430aa5524cb580da963f6a2.png)
. Данный шлюз позволяет выполнять несколько процессов одновременно, но, в отличие от параллельного шлюза, здесь процессы зависят от определенных событий. Вы можете рассматривать параллельный шлюз, основанный на событиях, как неисключительный шлюз, основанный на событиях, где несколько событий могут запускать несколько процессов, но эти процессы по-прежнему зависят от определенных событий.
![](https://habrastorage.org/getpro/habr/upload_files/310/0c6/391/3100c6391420485b4cda82f48a30338a.png)
Соединители
Также на диаграмме мы можем наблюдать различные линии со стрелками на конце. Это соединители, которые отображают переход от одного элемента диаграммы BPMN к следующему. Различные текстуры линий указывают на различие между потоком действий и потоком сообщений. В нашем случае пунктирные линии обозначают связь между различными пулами, а обычные линии связывают сущности внутри одного пула.
![](https://habrastorage.org/getpro/habr/upload_files/79f/846/067/79f84606778918ab64b95dd9b93da705.png)
Создание диаграммы
Прежде чем приступить к созданию диаграммы BPMN, определите область применения процесса, который вы собираетесь смоделировать. Определите уровень детализации, который необходимо включить. Первая фигура в диаграмме должна быть начальным событием. Поскольку вы знаете, что ваша диаграмма завершится конечным событием, вы также можете сразу ее разместить на диаграмме. В стандартном обозначении событий как мы уже говорили, для начальных событий требуется тонкая граница, для конечных событий - толстая граница, а для промежуточных событий - двойная окружность. В дополнение к событиям на диаграмме обязательно должны быть действия, обычно их называют в формате глагол+существительное, например Выбрать пиццу.
![](https://habrastorage.org/getpro/habr/upload_files/1de/b55/845/1deb55845949a2ed6a0ce53085685b7f.png)
Далее можно работая с теми сущностями BPMN, которые мы сегодня рассмотрели построить диаграмму, отражающую бизнес процесс, возможно даже достаточно сложный.
Заключение
В этой небольшой статье мы рассмотрели основные сущности BPMN на примере готовой диаграммы и использованных в ней элементов. Конечно, это не очень сложный пример, но он дает базовое понимание принципов работы с BPMN.
Как нарисовать процесс в бесплатном сервисе BPMN.IO? Узнаем на открытом уроке 15 августа. В результате этого занятия вы научитесь применять нотацию BPMN в своей работе и освоите сервис BPMN.IO.
Записаться на урок можно на странице онлайн-курса «BPMN: Углубленная практика».
Комментарии (5)
itGuevara
14.08.2024 05:46Кроме спорного вопроса, что BPMN это действительно low code/no code (см. выше), популярен миф, что BPMN - схема исполняемого приложения (программы) – это и есть "хорошая" документация на нее. Из практики: разработчики программ на BPMN обычно концентрируются только на исполняемой части (чтобы "работало"), но не добавляют на схему «лишние» элементы, например, документы и их статусы, которые помогли бы понять суть происходящего в части docflow. Для корректной работы программы не обязательна декомпозиция (процессы - подпроцессы), возможность печати на А4 и т.п.
Изначально была вера в концепт BPMN - как язык для машин и людей, т.е. «схема = документация» («чертеж» программы), но обычно для документирования процесса (бизнес-процесса) исполняемую схему приходится переписывать или в той же нотации BPMN, но уже как неисполняемую, добавляя в схему (обогащая) упомянутый docflow и другие данные, или в нотации EPC, которая еще более наглядна (интуитивно понятнее). При этом теряется ключевое свойство What You See Is What You Get — Что видишь то и получишь (точнее: что видишь, то и исполнится bpmn-engine), которое должно было позволить «визуальное программирование», «программирование без программирования» и подобные концепты на основе генерации исполняемого кода по нарисованной схеме, - понятной рядовому бизнес-пользователю (участнику процесса) и полностью описывающей его процесс.
Т.е. в схеме на как бы «low code» BPMN мы не только не видим реального «много кода», который дописывают программисты (без него бизнес-логика неполная), чтобы схема все же заработала (обогащение схемы кодом), но и для понимания работы схемы мы саму схему обогащаем информацией, делая новую схему процесса, но более понятную - обогащая схему деталями, например, документами (точнее docflow, включая изменение статусов документов) и комментариями, которые поясняют логику «много кода», спрятанного под капотом low code.
shamhalov
14.08.2024 05:46Плохо описана разница между эксклюзивным и инклюзивным шлюзами. Судя по тексту они оба подходят под критерий логического или.
andrewzaitsev
14.08.2024 05:46Это не описание, а просто скопированный текст из нотации. На первой схеме цикл, который не понятно как решать. И откуда взята эта схема я думаю все знают
oragraf
Такими темпами вы книжку долго копипастить сюда будете. Начали бы с самого интересного - запустить ваш простенький процесс. Это бы хоть теме статьи соответствовало. Тут и возникают нюансы и приходит понимание, что все эти low code/no code нифига не low и, тем более, не no.
itGuevara
Миф о low-no-code видимо можно показать, если сравнить реализацию простейшего калькулятора (даже проще, чем штатный в windows и телефоне) на нескольких BPMN - платформах, включая camunda и runabase.ru
И потом сравнить с "много кода" в 30 строчек.