Время прочтения: 9 мин.

Практически каждому из нас в работе когда-нибудь приходилось описывать какие-либо процессы, включающие в себя взаимодействие нескольких участников со специфическими ролями, находящихся в разных подразделениях или на разных территориях, использующих разнообразные способы коммуникации и передачи данных, документов и других артефактов. Если процесс достаточно простой, его можно описать в текстовом виде, разделяя по пунктам. Но если процесс сложный, с большим количеством участников, промежуточных задач и подпроцессов, имеющий разные варианты прохождения (ветвления), то для его понимания требуется дополнительная визуализация, т. е. построение схемы. Как правило, под схемой процесса мы подразумеваем блок-схему. При этом схема должна быть интуитивно понятной неподготовленному человеку.  Для этой цели необходимо наличие стандартизованного набора условных обозначений, понятных всем пользователям: аналитикам, менеджерам, техническим специалистам и др. На сегодняшний день существует несколько стандартов спецификаций для моделирования бизнес-процессов. Одним из них является BPMN (Business Process Model and Notation) — модель и нотация(описание) бизнес-процесса. Стандарт BPMN получил широкое распространение благодаря нескольким факторам:

— Наличие небольшого перечня интуитивно понятных условных обозначений, позволяющих описывать широкий спектр сложных процессов.

— Переносимость схемы. BPMN-схема, созданная в одном редакторе, может быть загружена и обработана в любом другой редакторе или системе, поддерживающей BPMN стандарт.

— Так как концепция BPMN предъявляет строгие требования к XML-описанию модели, BPMN может быть интегрирована с разными BPM — системами (Business Process Management System), позволяющими управлять и анализировать созданные модели и даже автоматически создавать исполняемые приложения.

Существует множество редакторов и приложений, в которых можно создавать BPMN-схему или иначе: BPMN-диаграмму. В этой статье я пошагово покажу, как я создала необходимую мне схему через бесплатный on-line ресурс https://storm.bpmn2.ru/. Несмотря на то, что BPMN-схема предназначена для описания бизнес-процессов, например, таких, как оплата бронирования билетов картой, заказ пиццы в интернет-магазине, обработка и отгрузка заказа, я использовала этот инструмент для описания взаимодействия процессов внутри программного обеспечения. Действительно, не имеет значения, являются ли участниками процесса люди с определенными ролями (менеджер, кладовщик и т д) или сервисы.

Итак, мне необходимо описать задачу формирования и отправки уведомлений клиентам о состоянии их депозитов.

Краткое описание процесса: по заданному расписанию происходит запуск сервиса нотификации клиентов из базы данных либо о состоянии всех их депозитов, либо о депозитах с истекающим и/или завершенным сроком.

Начнем создание BPMN — диаграммы.

Сначала определим список участников процесса. В моем случае – это 3 сервиса:

  • Job-ы запуска задач по расписанию
  • Сервис отправки уведомлений клиентам
  • Сервис формирования сообщений

Участники (роли) указываются на диаграмме Пулами и Дорожками. Создаю пул задачи, перетаскивая соответствующий значок из набора инструментов, и делю его на 3 дорожки по числу участников. Подписываю дорожки (для входа в режим подписи – двойной клик на области подписи дорожки).

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

Подписываю эти события (помните? -Дабл-клик на объекте).

Задачи-таймеры запускают Сервис отправки уведомлений, поэтому создаю еще одно начальное событие на 2-ой дорожке. Меняю его тип на «Промежуточное событие-иницииатор», и затем на тип «Промежуточное событие-обработка таймера». Устанавливаю связи между событиями – это совсем просто: выбираю возле объекта значок со стрелками и протягиваю его к связанному объекту. Выравниваю стрелки, как мне нравится. В итоге у меня получилась следующая картинка:

Продолжаю создание диаграммы. Добавляю задачу – «Считать данные администратора сервиса отправки». В обучающих роликах и документации по BPMN рекомендуется называть задачи с использованием глагола в неопределенной форме + существительное, т. е. «Получить отчет…», «Сформировать заказ…» и т. д.

Моя задача «Считать данные администратора…» может закончиться неудачно, этот вариант тоже надо указать на диаграмме, для чего создаю промежуточное прикрепленное событие – круг с двойной границей – и располагаю его на контуре задачи. Меняю тип прикрепленной задачи на «Прикрепленное событие – ошибка» (напомню: выбор нового типа инициируется нажатием на значок гаечного ключа).

Добавляю завершающее событие в случае ошибки – круг с толстой границей. Подписываю его.  Также добавляю комментарий к задаче выбором соответствующего значка из контекстного меню.

Следующий шаг – создаю новую задачу и использую еще один элемент – артефакт – значок Базы данных, показывающий, откуда беру данные. Аналогично предыдущему шагу протягиваю стрелки – связи от БД к нужным объектам.

А вот следующим шагом мне надо добавить большой повторяющийся блок действий, т.е. подпроцесс, в котором будут задействованы два участника (2 сервиса). Выбираю на панели инструментов значок подпроцесса, растягиваю его на обе дорожки. Чтобы показать, что процесс повторяющийся, в контекстном меню можно выбрать несколько вариантов:

  • параллельное выполнение действия несколько раз
  • последовательное выполнение действия несколько раз
  • цикличное выполнение действия, пока верно некоторое условие

Выбираю вариант цикличного действия, т.к. мне необходимо повторять обработку данных каждого клиента из считанного списка. Начинаю заполнение диаграммы подпроцесса. Добавляю стартовое событие для подпроцесса. В данном случае выбираю для него тип – «начальное событие по условию» и подписываю это условие: «считанный клиент не является администратором», т.е. если считали данные администратора, подпроцесс обработки данных не запустится, а перейдет к следующей итерации цикла, т.е. к обработке следующей записи из списка.

Далее добавляю ветвление, для этого выбираю соответствующий элемент с панели инструментов – значок ромба, для которого существует несколько типов: ветвление «и», «и/или», «исключающее И». В данном случае выбираю вариант «и», т.к. в моем алгоритме должны обязательно выполниться две задачи. При выборе такого условия, ветки должны сходиться в такой же значок ветвления – шлюз, т.е. значки ветвления «и» всегда идут парным шлюзом, при этом нужно соблюдать условие: сколько ветвей вышло из первого шлюза, столько же должно прийти в закрывающий шлюз.

Заполняю диаграмму подпроцесса уже знакомыми элементами: задачами и объектами ветвления. На следующих шагах мне понадобились обычные операторы ветвления «или, исключающее и». Обратите внимание, что этот оператор не требует парного шлюза.

Новые элементы:

-добавила артефакты – документы, т.е. данные, которые передаются между задачами.

— в последнем ветвлении указала ветку по умолчанию, т.е. процесс, соответствующий основному сценарию. Выбирается как обычно из контекстного меню нажатием на гаечный ключ.

— в последней задаче выбрала тип – Отправка сообщения, и на задаче появилась соответствующая метка — значок конверта.

Обратите внимание: задачи и объекты расположены на разных дорожках в соответствии с тем, какой процесс исполняет тот или иной этап процесса или подпроцесса.

Добавила штрихи – подписи, сноски-комменатарии, завершающее событие. В завершающем событии после ошибки поменяла тип на «Завершающее событие-останов». И вот, вроде бы, моя диаграмма завершена.

Хотелось бы понять, насколько она корректна с точки зрения концепции BPMN. Для этого на сайте https://storm.bpmn2.ru/, где я создала свою BPMN – диаграмму, есть удобная «фича»: проверка корректности диаграммы. Для этого на верхней панели надо нажать на «галочку»:

Нажимаю и получаю результат – 7,4 балла из 10. Приемлемым считается 8 баллов из 10. Получилось не так уж плохо (самая первая моя попытка была оценена в 0 баллов из 10). Ошибки подсвечиваются разными цветами, определяющими их критичность:

  • Красные — серьезные формальные ошибки.
  • Желтые — рекомендуется исправить.
  • Синие — желательно исправить для улучшения читаемости диаграммы.

Попытаюсь улучшить результат. Первой, конечно, исправляю ошибку, подсвеченную красным: добавляю завершающее событие для подпроцесса. Баллы в результате увеличились, но появилось новое предупреждающее (желтое) сообщение о том, что процесс должен идти слева направо, а не сверху вниз.

Это просто поправить: располагаю завершающее событие подпроцесса справа, а не снизу от задачи. Теперь результат еще ближе к отличному:

Улучшу еще чуть-чуть, исправляю замечание, указанное голубым цветом: «много входящих потоков в задаче». Это уже из области красоты диаграммы, а не функциональности. Добавляю шлюз, и получаю уже 9,4 из 10 баллов.

Важное замечание об отсутствии потока по умолчанию в ветвлении исправлять не буду: мои потоки (ветки) равнозначны, и выбор ветки зависит от переданного параметра.

Пожалуй, оставлю вою диаграмму в таком виде. Остальные непринципиальные замечания исправлять не буду (наличие нескольких стартовых событий и предложение не использовать дорожки).

Скачиваю и сохраняю свою диаграмму в разных форматах, нажав на соответствующий значок из панели в верхнем левом углу:

Можно сохранить схему как картинку в растровом (.jpeg) или векторном (.svg) формате, а также в формате. bpmn

Теперь у меня есть диаграмма, которую я могу использовать, как мне удобно: вставлять в презентацию или другие приложения, пересылать по почте, а при необходимости ее можно будет закачать и отредактировать в любом редакторе, работающем с BPMN.

Итак, описать процесс блок-схемами с использованием нотаций BPMN, немного попрактиковавшись, оказалось совсем несложно. Наверное, моя схема получилась неидеальной. Посмотрев ретроспективно, думаю, правильней было бы поменять дорожки местами, чтобы стартовый процесс был сверху. Тем не менее, схема получилась наглядной и читаемой, а сервис ресурса https://storm.bpmn2.ru/  помог мне исправить логические и семантические ошибки. Желаю удачи в описании Ваших процессов с использованием BPMN.