Я написал эту статью для себя, но подумал, что она будет полезна и начинающим айтишникам, и тем, кому необходимо освежить знания или быстро вспомнить основные вещи, не открывая полное руководство.

Ещё раз подчеркну, статья задумывалась как базовая памятка и помощь для начинающих, а никак не исчерпывающая документация. Многое я опускаю ввиду избыточности или неактульности, по крайней мере в моей работе.

Что это?

BPMN — это нотация (или метод, хотя почти везде пишут «система») моделирования или описания бизнес-процессов. Бизнес-процесс представляет из себя логику (алгоритм) работы системы для достижения поставленной задачи. Соответственно, BPMN-диаграмма — это диаграмма, которая описывает бизнес-процесс. Такие диаграммы довольно просто и интуитивно читаются, особенно если разработчик бизнес-процесса (тот, кто моделировал диаграмму) проектировал его по всем правилам и стандартам, а также старался не нагружать его лишней информацией.

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

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

Из чего состоит?

Основные элементы, из которых состоит BPMN-диаграмма: события (синий), действия (зелёный), шлюзы (красный) и потоки (желтый).

Основные элементы
Основные элементы

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

События (триггеры) используются для того, чтобы отобразить какое-то происшествие, например, приход сообщения в топик. События могут быть стартовыми, завершающими или промежуточными. Стартовые обозначают начало процесса, завершающие — его окончание, а промежуточные события могут приостанавливать выполнение процесса.

Обычно стартовые события имеют тонкую рамку, промежуточные — двойную, а завершающие жирную рамку:

Основные типы событий
Основные типы событий

В нотации BPMN 2.0 есть ещё и другие события. Точнее, стартовые и промежуточные разделены на подтипы. В моей практике всегда было достаточно событий базового типа, чтобы описать бизнес-процесс, поэтому на подтипах я останавливаться не буду, они больше нужны для разработки в специальных средах вроде Camunda BPM.

Помимо разделения на три основных типа, ещё есть разделение на типы по характеру работы события. Самые востребованные:

Основные типы событий по характеру работы
Основные типы событий по характеру работы
  • Пустое. Используется чаще всего в описании «подпроцесса» или когда проектировщик диаграммы просто поленился :) Иногда я сам так делаю, не судите строго ❤️

  • Сообщение. Используется в тех случаях, когда, например, инициатором запуска процесса выступает новое сообщение в топике, либо запрос.

  • Таймер. Почти все сценарии, которые связаны со временем. Например, запуск процесса в 12:00 каждый день.

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

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

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

  • Подпроцесс. Это действие используется, когда необходимо в описываемый процесс внедрить ещё один (который, например, уже описан) как его часть, либо для дальнейшей декомпозиции действия. Ознакомиться с использованием такого действия можно дальше в главе с примерами «Лента новостей своими руками».

Шлюзы — это элементы, которые используются для введения в процесс развилок, различных условий или дополнительной логики. Чаще всего используются три типа шлюзов: «исключающее ИЛИ», «И» и «включающее ИЛИ». По сути, они работают как и их одноимённые операторы. Опять же, типов куда больше, особенно в BPMN2.0, но практически всегда используются эти три (по крайней мере мной, и лишних вопросов от коллег не получаю).

Основные типы шлюзов
Основные типы шлюзов

«Исключающее ИЛИ». Такой шлюз требуется для разделения выполнения процесса на один из вариантов. То есть это работает как выбор, и в процессе выполняется либо одна ветка, либо другая. Примеры:

Пример 1
Пример 1
Пример 2
Пример 2

«И». Шлюз используется для распараллеливания процесса на две ветки, которые исполняются одновременно. Примеры:

Пример 1
Пример 1
Пример 2
Пример 2

«Включающее ИЛИ». Этот шлюз сочетает в себе функции двух вышеописанных: выполнение процесса может как распараллелиться на все ветви, так и разбиться на определённые, удовлетворяющие условию.

Пример с шлюзом “включающее ИЛИ”
Пример с шлюзом “включающее ИЛИ”

Примеры разделения потоков:

Пример
Пример

Очень важно отметить, как двигается «токен» выполнения процесса по потоку и какие бывают нюансы. Это НЕ поможет на собеседовании (а может, и поможет), но позволит чётко и осознанно понимать работу шлюзов, как делать НАДО, как можно, но НЕ СТОИТ, а как точно НЕЛЬЗЯ.

  • Как делать НАДО (показано в примерах под каждым шлюзом). Корректнее использовать открывающие шлюзы и закрывающие одного типа, а также не использовать закрывающий шлюз сразу под раскрытие новых веток. Это необходимо для повышения читаемости и исключения различных ошибок (о них далее).

  • Как делать НЕ СТОИТ. Я бы не рекомендовал сочетать разные шлюзы при раскрытии веток и их объединении, так как это может запутать человека, который будет смотреть ваш процесс. Ещё такое сочетание разных шлюзов может привести к некорректной работе. В примере ниже действие под номером 4 выполнится дважды, хотя процесс был запущен один раз. Так произойдёт из-за того, что в процессе используется шлюз «И» как открывающий, он распараллеливает потоки, а закрывающий — шлюз «ИЛИ», который не собирает потоки воедино.

    Так делать НЕ СТОИТ
    Так делать НЕ СТОИТ

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

  • Как делать НЕЛЬЗЯ. Здесь также речь про сочетание разных шлюзов. В примере ниже действие под номером 4 не выполнится никогда, да и сам процесс тоже никогда не завершится. Произойдёт это из-за того, что в качестве закрывающего шлюза выбран «И», который ожидает токены из обеих веток для продолжения процесса, а их никогда не будет. Сочетание шлюзов в таком формате — грубая ошибка.

    Так делать НЕЛЬЗЯ
    Так делать НЕЛЬЗЯ

Потоки — тут всё очень просто: это стрелка, которая отображает последовательность действий в процессе.

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

Пример с дорожками
Пример с дорожками

Где и как пользоваться?

Есть довольно много вариантов, где и как можно пользоваться нотацией. Это могут быть упомянутые выше Tibco BPM, Camunda BPM, или же такие инструменты как ARIS, draw.io и т. д. Писать об этом подробно не буду, так как по большей части всё зависит от компании, в которой вы работаете. Либо вам предоставляют специальное ПО для проектирования бизнес-процессов, либо нет. Я предпочитаю в своей практике draw.io, так как он универсален и пользоваться им можно практически везде. Причём это может быть плагин, встроенный во всеми любимый (или нет) Confluence или в вашу любимую IDE. Кстати, при использовании IDE перед нами открывается могучий «docs-as-code».

При использовании плагина draw.io в Confluence работа выглядит так же, как и при использовании конструктора на сайте. Небольшой пример работы вы можете посмотреть в моей статье про диаграмму последовательности.

Для установки плагина в IDE — в моём случае это WebStorm от JetBrains — можете следовать этому руководству. Зайдите в настройках в меню Plugins, далее найдите во вкладке MarketPlace плагин «Diagrams.net Integration» и установите его:

Установка плагина
Установка плагина

 После этого вам станет доступно создание файла в формате, понятном для draw.io:

Лента новостей своими руками

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

Обращаю внимание, что все новые элементы выделены зелёным цветом для наглядности
Обращаю внимание, что все новые элементы выделены зелёным цветом для наглядности

У нас получился простой процесс из стартового, завершающего событий и четырёх действий:

  1. поиск друзей и интересов;

  2. отбор новых записей друзей и рекомендаций;

  3. отсечение лишних записей;

  4. сортировка записей по релевантности.

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

Добавим обработку запроса:

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

Предлагаю теперь немного ещё улучшить:

В новой версии процесса мы декомпозировали действия на отдельные ветки и добавили дополнительные условия.

И последнее улучшение: предположим, что архитектура нашего бэкенда состоит из микросервисов, и тогда будет удобнее раскидать все события и действия по отдельным «дорожкам». Каждая из них будет представлять из себя блок с определённым микросервисом:

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

Заключение

BPMN это мощный инструмент, который лично я, как системный аналитик, использую в своей работе практически каждый день. Если сам не проектирую бизнес-процесс, то, как минимум, изучаю документацию смежников. Очень рекомендую каждому аналитику, а также всем причастным к разработке освоить это дело.

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

Кстати, у меня есть Telegram-канал «Айтишник обыкновенный», где я делюсь опытом и знаниями из IT-индустрии. Лучшая поддержка — подписка на мой канал ❤️

А ещё рекомендую глянуть мою статью по диаграммам последовательности. Я уверен, что каждый найдёт для себя в ней что-то новое.

P.S. Возможно, про какие-то особенности я забыл написать или даже не знал. Поделитесь в комментариях, если пользуетесь чем-то ещё, что я не осветил в статье. Если будет что-то дельное, я обязательно добавлю, а также укажу вас как соавтора.

Всем добра!

Комментарии (27)


  1. Batorskylab
    14.08.2024 19:16
    +1

    Спасибо, было интересно и познавательно.


  1. nlinker
    14.08.2024 19:16
    +1

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


  1. orchanin
    14.08.2024 19:16

    Спасибо, а уточните какой софт использовали для запуска диаграмм? В dwawio такой фичи не видел.


    1. default_itshnik Автор
      14.08.2024 19:16

      Это Camunda modeler


  1. AATs
    14.08.2024 19:16

    Хм... Автор очевидно изучал BPMN по Википедии :-) BPMN содержит ещё модели, которые логически связаны между собой. Описана только модель типа "оркестровка". В отрыве от других типов моделей - это только красивая картинка. Коллеги, почитайте нотацию на первоисточнике на сайте OMG.


    1. default_itshnik Автор
      14.08.2024 19:16

      Автор рассказал на собственном примере как использует BPMN в своей работе, а также подсветил это несколько раз)

      Естественно, если ты хочешь разобраться от корки до корки в этой теме, то тебе надо идти и изучать мануал, я написал свое видение, а не исчерпывающую документацию другими словами)


  1. Dolby
    14.08.2024 19:16

    Хорошо все описано, но думаю было бы неплохо добавить что-то про call activity элементы. Очень полезная штука, особенно для однотипных подзадач - один раз описал потом переиспользуешь в любом месте схемы


    1. default_itshnik Автор
      14.08.2024 19:16

      В моем понимании это важно, когда ты ведешь разработку, используя bpmn, то есть, например, разрабатываешь процесс в Camunda Modeler'е каком-нибудь. А я описывал с упором на создание аналитики. Надеюсь, я тебя правильно понял, спасибо за совет!


  1. Igorgro
    14.08.2024 19:16
    +3

    Есть хороший специализированный редактор BPMN-диаграмм: bpmn.io


    1. vdshat
      14.08.2024 19:16

      Camunda - его разработчик.

      Camunda Modeler и Activiti используют его под капотом.


  1. itGuevara
    14.08.2024 19:16
    +1

    При использовании плагина draw.io в Confluence работа выглядит так же, как и при использовании конструктора на сайте. 

    1 Как составить дерево процессов из схем в drawio, но желательно не в платном Confluence, а в Open source? Дерево процессов, как в aris publisher, см. пример

    в левом верхнем углу раскрываем treeview и пробегая по дереву процессов справа видим соответствующую схему процесса. treeview + интерактивное отображение выбранного в нем элемента.

    2 Как отображать добавленные в схему drawio атрибуты как к смехе (автор), так и к элементу схемы? Также как в п. 1, но значения из "Object", см. тот же пример

    Речь про метаданные - пользовательские свойства — дополнительная информация к фигурам, см. shape-metadata, но отображение их не в схеме, а в publisher (в идеале еще импорт \ экспорт данных фигур = метаданных в excel, как это штатно умеет visio).

    В целом 1 + 2 - как сделать publisher для схем drawio?

    3 Один из мифов BPMN показал тут


    1. default_itshnik Автор
      14.08.2024 19:16

      Согласен, это все очень здОрово и вполне справедливо звучит, но зачем? Чтобы что?

      Например, передо мной стоит задача расписать алгоритм какого-то нового процесса для фичи вместе со всеми интеграциями внутри.

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

      1)Для чего мне дерево процессов в рамках фичи? Я могу ссылаться на отдельные страницы с аналитикой, если нужно.

      2)Зачем мне вообще работать со схемой drawio? Чтобы что?

      3)Это аналитика, а не разработка. В аналитике наличие бизнес процесса для наглядности довольно хорошо позволяет погружаться в задачу, тратя меньше времени.

      Возможно я, конечно, где-то не так тебя понял и ты имел в виду что-то другое, если так, то сори) Но в любом случае спасибо за развернутый коммент ❤️


      1. itGuevara
        14.08.2024 19:16
        +1

        3)Это аналитика, а не разработка. В аналитике наличие бизнес процесса для наглядности довольно хорошо позволяет погружаться в задачу, тратя меньше времени.

        Возможно я, конечно, где-то не так тебя понял и ты имел в виду что-то другое, если так, то сори) Но в любом случае спасибо за развернутый коммент

        Мир BPM зародился давно (ARIS и ранее, включая bpwin) и в нем те вещи, про которые я указал выше, считаются базовыми. В ARIS все это хорошо сделано - это был и остается инструмент №1 для аналитика процессов. Много по нему информации и хорошо показана идеология BPM, см. "BPM-библия" из Подборка ссылок.

        Все объекты схемы (операции, события \ шлюзы), их дублирование в других схемах (заимствование подпроцессов), атрибуты, взаимосвязи и т.п. Единое дерево всех процессов компании и т.п. Поиск и сортировка по миллионам объектов, размазанным по тысячам схем (в масштабах сбера - еще больше) и т.п.

        Даже выделение трех подпроцессов нагляднее смотрится в виде дерева из трех веток (в дополнение к интерактивному раскрытию их на схеме BPMN).

        system analyst - sberdata - bpmn\ aris:


        1. default_itshnik Автор
          14.08.2024 19:16

          Я не спорю, aris крутой, даже удалось в нем немного поработать в своё время, но еще раз повторюсь, я проецирую в первую очередь свой опыт. Эта вещь все-таки субъективная. В текущей ситуации, когда везде есть конфлюенс и далеко не везде есть арис, я вижу использование bpmn в таком виде, как описал в статье.

          К сожалению, мы не в идеальном мире живем(


  1. Iana_Bakh
    14.08.2024 19:16

    Спасибо за статью!

    Для отрисовки использую https://demo.bpmn.io/ (даже draw.io не нужно).

    По содержательной части. У меня возникли сложности с пониманием шлюзов "И" и "ИЛИ".

    Реально хорошо поняло только "Исключающее ИЛИ". Придется gpt-тить примеры кейсов на шлюзы "И" и "ИЛИ" с оговоркой "простым языков", "элементарные примеры".

    Ну и поскольку не до конца врубилась в шлюзы, на практике в "Лента новостей своими руками" понимала содержимое схемы до картинки 4 (добавление новой ветки для восприятие уже стало сложным).

    ИМХО: хороший материал для "самых маленьких". На работе не использую инструмент, но мечтаю освоить хотя бы на базовом уровне


    1. default_itshnik Автор
      14.08.2024 19:16

      Спасибо❤️


  1. Zelebublik
    14.08.2024 19:16

    Дорожки - зло.
    Семантика кривовата.
    Для показать бизнесу - сойдет.


    1. default_itshnik Автор
      14.08.2024 19:16

      Почему дорожки зло? Разрабам очень нравится на основе дорожек быстро и четко осознавать о каком сервисе речь и что он выполняет в рамках общего процесса.


  1. RMV1983
    14.08.2024 19:16
    +1

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


    1. itGuevara
      14.08.2024 19:16
      +1

      Aris пишите. Это точно надо. Лучше сразу semantic aris.


      1. RMV1983
        14.08.2024 19:16
        +1

        Надо будет почитать про него. Спасибо за совет.


        1. itGuevara
          14.08.2024 19:16
          +1

          Может быть вам сюда:

          Алогичный пример планируется повторить на drawio, кому интересно — присоединяйтесь. Вообще, через выгрузку в RDF можно собирать единый Semantic Repository процессов из схем, сделанных в любых редакторах (visio, drawio) и в разных нотациях (VAD, EPC).


  1. vesh95
    14.08.2024 19:16

    Да где же, черт побери, делают эти ваши BPMN диаграммы? Сколько работаю разработчиком ещё ни разу не встречался с ними, обычно в /issue все текстом прописано что нужно сделать, с разговоров про что-то новое всё начинается и текстом все заканчивается. Хотя всё это я изучал в технаре, но никогда не пригодилось даже знание этих диаграмм, даже не по себе от этого, как будто мне всё обучение мимо темы прошло.(

    Если где-то в компаниях это используют отзовитесь, посмотрю хоть на вас.


    1. default_itshnik Автор
      14.08.2024 19:16

      Мы активно в команде используем. Почти во всех задачах, если, конечно, задача не про добавление 2 новых полей и смену кнопки в интерфейсе))

      Делаем конкретно мы в конфлюенсе, так как встроен плагин с draw.io, и диаграммы красиво выстраиваются в аналитику.


      1. vesh95
        14.08.2024 19:16

        Это круто. Как мне кажется некоторые компании зря не используют это. Как правило в таких компаниях ещё и перестройки крупные для проектов требуются, а без диаграмм опорной точкой становится именно кодовая база, это тоже самое что пытаться узнать как выглядит динозавр, глядя на его кости.


        1. default_itshnik Автор
          14.08.2024 19:16

          Ну да, реверсинжениринг – почти всегда самое сложное в работе, раньше даже в консалтингах за такую работу больше денег просили и им платили))


    1. itGuevara
      14.08.2024 19:16

      Год назад им первое место дали:

      https://youtu.be/V2eaihzQCl8?si=vFw2Fa1JMxeFers3

      Полагаю, что bpmn сейчас используют в каждом крупном банке.