Skip to content
IRC-CodingIRC-Coding
BPMNBusiness Process ModelМоделирование процессовEvents Gateways TasksОптимизация процессов

BPMN: основы моделирования процессов

BPMN - стандартная нотация для моделирования бизнес-процессов. Events, Gateways, Tasks, Pools, Lanes с примерами.

S

schutzgeist

5 min read
BPMN: основы моделирования процессов

BPMN: моделирование процессов, события, шлюзы и задачи

Материал посвящён Business Process Model Notation (BPMN) с практическими примерами и рекомендациями для профессиональной сертификации.

Краткое описание

BPMN — это графическая нотация для моделирования бизнес-процессов, которая предоставляет единый язык для бизнес-аналитиков, разработчиков и менеджеров.

Определение и назначение

Business Process Model Notation (BPMN) — международный стандарт графического представления бизнес-процессов, разработанный Object Management Group (OMG). Версия 2.0 доступна с 2011 года.

Основные цели:

  • Стандартизация: единая нотация для всех участников
  • Коммуникация: улучшенное взаимопонимание между бизнесом и IT
  • Автоматизация: основа для автоматизации процессов и workflow-engines
  • Оптимизация: визуализация для анализа и улучшения процессов

Ключевые элементы:

  • События: начальные, промежуточные и конечные события
  • Действия: задачи и подпроцессы
  • Шлюзы: условия и ветвления
  • Связи: потоки последовательности и сообщений
  • Бассейны и полосы: организационные единицы и зоны ответственности

BPMN охватывает полный жизненный цикл процессов: от анализа через внедрение к мониторингу и совершенствованию.

Важные элементы стандарта

  • Стандартная нотация для моделирования бизнес-процессов
  • События: стартовые, промежуточные и финальные с разными типами
  • Шлюзы: исключающие, параллельные, включающие для управления ходом процесса
  • Задачи: пользовательские, сервисные, скриптовые, ручные
  • Бассейны и полосы: организационная структура и ответственность
  • Поток последовательности: порядок выполнения шагов процесса
  • Поток сообщений: взаимодействие между бассейнами
  • Значение для сертификации: управление и оптимизация процессов

Основные компоненты

  1. События: круглые элементы для событий в процессе
  2. Действия: прямоугольные элементы для задач
  3. Шлюзы: ромбовидные элементы для принятия решений
  4. Связи: стрелки для потоков процессов и сообщений
  5. Бассейны: контейнеры для целых процессов
  6. Полосы: деление бассейнов по зонам ответственности
  7. Артефакты: документы, данные, группировки
  8. Объекты данных: информационные элементы в процессе

Практические примеры

1. Процесс заказа (простой пример)

<!-- BPMN 2.0 XML структура -->
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL">
  
  <!-- Бассейн для полного процесса -->
  <process id="bestellprozess" name="Bestellprozess">
    
    <!-- Start Event -->
    <startEvent id="start" name="Bestellung eingegangen"/>
    
    <!-- Task: проверка заказа -->
    <userTask id="pruefen" name="Bestellung prüfen">
      <documentation>Verfügbarkeit und Kundendaten prüfen</documentation>
    </userTask>
    
    <!-- Exclusive Gateway: решение -->
    <exclusiveGateway id="entscheidung" name="Verfügbarkeit prüfen"/>
    
    <!-- Task: отклонение заказа -->
    <userTask id="ablehnen" name="Bestellung ablehnen">
      <documentation>Kunde über Nichtverfügbarkeit informieren</documentation>
    </userTask>
    
    <!-- Task: обработка заказа -->
    <serviceTask id="bearbeiten" name="Bestellung bearbeiten">
      <documentation>Automatische Verarbeitung im System</documentation>
    </serviceTask>
    
    <!-- End Events -->
    <endEvent id="ende_ablehnung" name="Bestellung abgelehnt"/>
    <endEvent id="ende_erfolg" name="Bestellung bearbeitet"/>
    
    <!-- Sequence Flows -->
    <sequenceFlow sourceRef="start" targetRef="pruefen"/>
    <sequenceFlow sourceRef="pruefen" targetRef="entscheidung"/>
    <sequenceFlow sourceRef="entscheidung" targetRef="ablehnen">
      <conditionExpression xsi:type="tFormalExpression">${nichtVerfuegbar}</conditionExpression>
    </sequenceFlow>
    <sequenceFlow sourceRef="entscheidung" targetRef="bearbeiten">
      <conditionExpression xsi:type="tFormalExpression">${verfuegbar}</conditionExpression>
    </sequenceFlow>
    <sequenceFlow sourceRef="ablehnen" targetRef="ende_ablehnung"/>
    <sequenceFlow sourceRef="bearbeiten" targetRef="ende_erfolg"/>
    
  </process>
</definitions>

2. Процесс согласования с параллельными этапами

<process id="genehmigungsprozess" name="Genehmigungsprozess">
  
  <!-- Start Event -->
  <startEvent id="start" name="Antrag eingegangen"/>
  
  <!-- User Task: проверка заявки -->
  <userTask id="antragPruefen" name="Antrag prüfen">
    <potentialOwner>
      <resourceAssignmentExpression>${manager}</resourceAssignmentExpression>
    </potentialOwner>
  </userTask>
  
  <!-- Parallel Gateway -->
  <parallelGateway id="parallelStart" name="Parallelprüfung beginnen"/>
  
  <!-- Параллельные задачи -->
  <serviceTask id="finanzPruefung" name="Finanzprüfung">
    <documentation>Budget und Kosten prüfen</documentation>
  </serviceTask>
  
  <userTask id="rechtlichePruefung" name="Rechtliche Prüfung">
    <documentation>Rechtliche Aspekte prüfen</documentation>
  </userTask>
  
  <!-- Parallel Gateway объединение -->
  <parallelGateway id="parallelEnd" name="Ergebnisse zusammenführen"/>
  
  <!-- Exclusive Gateway: решение -->
  <exclusiveGateway id="genehmigungsEntscheidung" name="Genehmigung"/>
  
  <!-- Задачи -->
  <userTask id="genehmigen" name="Antrag genehmigen">
    <documentation>Genehmigung erteilen und umsetzen</documentation>
  </userTask>
  
  <userTask id="ablehnen" name="Antrag ablehnen">
    <documentation>Ablehnung begründen und kommunizieren</documentation>
  </userTask>
  
  <!-- End Events -->
  <endEvent id="genehmigt" name="Antrag genehmigt"/>
  <endEvent id="abgelehnt" name="Antrag abgelehnt"/>
  
  <!-- Sequence Flows -->
  <sequenceFlow sourceRef="start" targetRef="antragPruefen"/>
  <sequenceFlow sourceRef="antragPruefen" targetRef="parallelStart"/>
  
  <!-- Параллельные ветви -->
  <sequenceFlow sourceRef="parallelStart" targetRef="finanzPruefung"/>
  <sequenceFlow sourceRef="parallelStart" targetRef="rechtlichePruefung"/>
  
  <sequenceFlow sourceRef="finanzPruefung" targetRef="parallelEnd"/>
  <sequenceFlow sourceRef="rechtlichePruefung" targetRef="parallelEnd"/>
  
  <sequenceFlow sourceRef="parallelEnd" targetRef="genehmigungsEntscheidung"/>
  
  <!-- Принятие решения -->
  <sequenceFlow sourceRef="genehmigungsEntscheidung" targetRef="genehmigen">
    <conditionExpression>${genehmigt}</conditionExpression>
  </sequenceFlow>
  <sequenceFlow sourceRef="genehmigungsEntscheidung" targetRef="ablehnen">
    <conditionExpression>${abgelehnt}</conditionExpression>
  </sequenceFlow>
  
  <sequenceFlow sourceRef="genehmigen" targetRef="genehmigt"/>
  <sequenceFlow sourceRef="ablehnen" targetRef="abgelehnt"/>
  
</process>

3. Многобассейновый процесс (кроссфункциональный)

<!-- Бассейн 1: отдел продаж -->
<pool id="vertrieb" name="Vertrieb">
  <lane id="vertriebLane" name="Vertriebsmitarbeiter">
    
    <startEvent id="angebotErstellen" name="Angebot erstellen"/>
    <userTask id="angebotErstellenTask" name="Angebot ausarbeiten"/>
    <endEvent id="angebotGesendet" name="Angebot gesendet"/>
    
    <sequenceFlow sourceRef="angebotErstellen" targetRef="angebotErstellenTask"/>
    <sequenceFlow sourceRef="angebotErstellenTask" targetRef="angebotGesendet"/>
    
  </lane>
</pool>

<!-- Бассейн 2: управление -->
<pool id="management" name="Management">
  <lane id="managementLane" name="Manager">
    
    <intermediateCatchEvent id="angebotErhalten" name="Angebot erhalten"/>
    <userTask id="angebotPruefen" name="Angebot prüfen"/>
    <exclusiveGateway id="genehmigungsGateway" name="Genehmigung"/>
    
    <sequenceFlow sourceRef="angebotErhalten" targetRef="angebotPruefen"/>
    <sequenceFlow sourceRef="angebotPruefen" targetRef="genehmigungsGateway"/>
    
  </lane>
</pool>

<!-- Message Flow между бассейнами -->
<messageFlow id="angebotFlow" sourceRef="angebotGesendet" targetRef="angebotErhalten"/>

Элементы BPMN подробно

События

○ Start Event          ○ Intermediate Event     ● End Event
  (пустой круг)           (круг с символом)        (толстая линия)
  
Типы:
- Timer Event (⏰)
- Message Event (✉)
- Error Event (❌)
- Signal Event (📡)
- Terminate Event (⏹)

Задачи

□ User Task           ◇ Service Task          ◈ Script Task
  (пользователь)       (автоматическая)        (скрипт)
  
Типы:
- Manual Task (ручная)
- Receive Task (получение)
- Send Task (отправка)
- Business Rule Task (правила)

Шлюзы

◇ Exclusive Gateway   + Parallel Gateway      ○ Inclusive Gateway
  (исключающее ИЛИ)      (параллельное И)        (включающее ИЛИ)
  
Типы:
- Complex Gateway (сложный)
- Event Gateway (событийный)

Пулы и дорожки

┌─────────────────────────────────────┐
│ Pool (организационная единица)     │
├─────────────────────────────────────┤
│ Lane (сфера ответственности)        │
│ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐    │
│ │Task │ │GW   │ │Task │ │End  │    │
│ └─────┘ └─────┘ └─────┘ └─────┘    │
└─────────────────────────────────────┘

Преимущества и недостатки

Преимущества BPMN

  • Стандартизация: единая нотация для всех участников
  • Визуализация: интуитивное представление сложных процессов
  • Автоматизация: прямая реализация в движках workflow
  • Документация: живая документация процессов
  • Анализ: основа для оптимизации процессов

Недостатки

  • Сложность: при очень больших процессах становится трудночитаемым
  • Кривая обучения: требует освоения нотации
  • Over-Engineering: чрезмерно детальная модель может быть контрпродуктивна
  • Поддержка: изменения требуют обновления моделей

BPMN на практике

Оптимизация процессов

  1. Анализ As-Is: смоделировать текущий процесс
  2. Выявление узких мест: найти затруднения и дублирование
  3. Проектирование To-Be: разработать оптимизированный процесс
  4. Внедрение: запустить новые процессы
  5. Мониторинг: измерять результаты и вносить корректировки

Автоматизация

// Пример Camunda BPM Engine
import org.camunda.bpm.engine.*;

@Service
public class BestellService {
    
    @Autowired
    private RuntimeService runtimeService;
    
    @Autowired
    private TaskService taskService;
    
    public void starteBestellprozess(Bestellung bestellung) {
        // Запустить процесс
        Map<String, Object> variables = new HashMap<>();
        variables.put("bestellung", bestellung);
        variables.put("kundenId", bestellung.getKundenId());
        
        ProcessInstance process = runtimeService.startProcessInstanceByKey(
            "bestellprozess", variables);
        
        System.out.println("Процесс запущен: " + process.getId());
    }
    
    public void bearbeiteAufgabe(String taskId, Map<String, Object> variables) {
        // Завершить пользовательскую задачу
        taskService.complete(taskId, variables);
    }
}

Часто встречающиеся вопросы на экзаменах

  1. В чём разница между пулом и дорожкой? Пул представляет организационную единицу, дорожка разделяет пул по сферам ответственности.

  2. Объясните различные типы шлюзов! Exclusive Gateway (исключающее ИЛИ), Parallel Gateway (параллельное И), Inclusive Gateway (включающее ИЛИ).

  3. Когда использовать Message Flow вместо Sequence Flow? Message Flow для взаимодействия между пулами, Sequence Flow внутри одного пула.

  4. Какова цель BPMN в разработке программного обеспечения? Основа для автоматизации workflow и внедрения процессов.

Основные источники

  1. https://www.omg.org/spec/BPMN/2.0/
  2. https://de.wikipedia.org/wiki/Business_Process_Model_and_Notation
  3. https://www.bpmn.io/

Дополнительные статьи по BPMN

BPMN является стандартом моделирования бизнес-процессов. Следующие статьи помогут разобраться со всеми аспектами BPMN и применять его на практике.

Основы и концепции

Назад к блогу
Share:

Похожие статьи