Skip to content

BPMN 2.0 Model Quality

BPMN is a notation for drawing business processes. It is an OMG specification and also an ISO standard (ISO 19510). See “BPMN 2.0 Notation” for the notation itself.

Control-flow errors. Many process models contain errors that keep them from running properly. The BPMN specification describes a process run as tokens moving along arrows (sequence flows). It defines two key errors in these terms:

  • Deadlock: a reachable state where a token sits on an arrow and can never be removed. The process gets stuck. See “Deadlock in Process Models”.
  • Lack of synchronization: a reachable state where more than one token sits on the same arrow. See “Lack of Synchronization”.

Soundness. Checking a model for soundness means checking that neither error can occur. See “Soundness of Process Models”.

Automatic checking. Researchers checked 735 models derived from industrial practice, using three approaches. These were the tool Woflan, the Petri net model checker LoLA, and a technique based on decomposing models into single-entry, single-exit parts. The models were first translated into Petri nets, a formal notation that tools can analyze. The result: industrial models can be checked in a few milliseconds. Modeling can therefore be tightly combined with control-flow analysis. A more recent open-source tool checks soundness within 500 ms and suggests fixes.

Guidelines. The seven process modeling guidelines (7PMG) were proposed to give practitioners advice on model quality that rests on empirical evidence. For practical advice, see “BPMN Modeling Guidelines”.

A team models an order process. After “Receive order”, an exclusive gateway (a decision point) sends the flow to either “Ship from stock” or “Order from supplier”. The two paths then meet at a second exclusive gateway before “Close order”. Each token that enters leaves once, so the model has no deadlock and no extra tokens. If the paths met at a gateway that waits for both, the process would get stuck. A soundness check would report this while the team is still drawing.

Checking soundness covers control flow only. The facts here do not show that it covers naming, layout or other style questions, so guidelines such as 7PMG remain a separate effort. Automatic checks also need the model translated into a formal form such as a Petri net first.

A sound process: the exclusive split and the exclusive join match, so each token passes through once.

Diagram source
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" targetNamespace="http://example.org/quality">
<process id="order" isExecutable="false">
<startEvent id="s" name="Order received">
<outgoing>f1</outgoing>
</startEvent>
<exclusiveGateway id="split" name="In stock?">
<incoming>f1</incoming>
<outgoing>f2</outgoing>
<outgoing>f3</outgoing>
</exclusiveGateway>
<task id="stock" name="Ship from stock">
<incoming>f2</incoming>
<outgoing>f4</outgoing>
</task>
<task id="supplier" name="Order from supplier">
<incoming>f3</incoming>
<outgoing>f5</outgoing>
</task>
<exclusiveGateway id="join">
<incoming>f4</incoming>
<incoming>f5</incoming>
<outgoing>f6</outgoing>
</exclusiveGateway>
<endEvent id="e" name="Order closed">
<incoming>f6</incoming>
</endEvent>
<sequenceFlow id="f1" sourceRef="s" targetRef="split" />
<sequenceFlow id="f2" name="yes" sourceRef="split" targetRef="stock" />
<sequenceFlow id="f3" name="no" sourceRef="split" targetRef="supplier" />
<sequenceFlow id="f4" sourceRef="stock" targetRef="join" />
<sequenceFlow id="f5" sourceRef="supplier" targetRef="join" />
<sequenceFlow id="f6" sourceRef="join" targetRef="e" />
</process>
<bpmndi:BPMNDiagram id="BPMNDiagram_order">
<bpmndi:BPMNPlane id="BPMNPlane_order" bpmnElement="order">
<bpmndi:BPMNShape id="BPMNShape_s" bpmnElement="s">
<dc:Bounds x="80" y="102" width="36" height="36" />
<bpmndi:BPMNLabel>
<dc:Bounds x="68" y="143" width="60" height="28" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_split" bpmnElement="split" isMarkerVisible="true">
<dc:Bounds x="216" y="95" width="50" height="50" />
<bpmndi:BPMNLabel>
<dc:Bounds x="208" y="76" width="66" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_stock" bpmnElement="stock">
<dc:Bounds x="366" y="80" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_supplier" bpmnElement="supplier">
<dc:Bounds x="366" y="240" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_join" bpmnElement="join" isMarkerVisible="true">
<dc:Bounds x="566" y="95" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_e" bpmnElement="e">
<dc:Bounds x="716" y="102" width="36" height="36" />
<bpmndi:BPMNLabel>
<dc:Bounds x="691" y="143" width="87" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="BPMNEdge_f1" bpmnElement="f1">
<di:waypoint x="116" y="120" />
<di:waypoint x="216" y="120" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_f2" bpmnElement="f2">
<di:waypoint x="266" y="120" />
<di:waypoint x="366" y="120" />
<bpmndi:BPMNLabel>
<dc:Bounds x="304" y="98" width="25" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_f4" bpmnElement="f4">
<di:waypoint x="466" y="120" />
<di:waypoint x="566" y="120" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_f6" bpmnElement="f6">
<di:waypoint x="616" y="120" />
<di:waypoint x="716" y="120" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_f3" bpmnElement="f3">
<di:waypoint x="241" y="145" />
<di:waypoint x="241" y="280" />
<di:waypoint x="366" y="280" />
<bpmndi:BPMNLabel>
<dc:Bounds x="247" y="206" width="18" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_f5" bpmnElement="f5">
<di:waypoint x="466" y="280" />
<di:waypoint x="591" y="280" />
<di:waypoint x="591" y="145" />
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>
  • Process models in the documentation have been checked for deadlock and lack of synchronization (soundness).
  • The team uses an automated tool to check soundness, for example by translating models to Petri nets.
  • The team names the modeling guidelines it follows for model quality, such as 7PMG.