BPMN 2.0 Model Quality
Explanation
Section titled “Explanation”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”.
Example
Section titled “Example”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.
Trade-offs
Section titled “Trade-offs”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.
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>Checks
Section titled “Checks”- 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.
Related
Section titled “Related”- Soundness of Process Models
- Deadlock in Process Models
- Lack of Synchronization
- Errors in Process Models
- BPMN Modeling Guidelines
- Structured Process Modeling with Fragments
- BPMN 2.0 Notation
- BPMN Gateway Mismatch Antipatterns
Sources
Section titled “Sources”- BPMN 2.1 RTF — Open Issues - OMG Issue Tracker — issues.omg.org, accessed 2026-11-09
- fahlandfjkfvw_2009_bpm - Theoretische Informatik - Universität Rostock — theo.informatik.uni-rostock.de, accessed 2026-11-09
- Seven process modeling guidelines (7PMG) — Eindhoven University of Technology Research Portal — research.tue.nl, accessed 2026-11-09
- Business Process Model and Notation - Wikipedia — en.wikipedia.org, accessed 2026-11-08
- [2407.03965] Instantaneous, Comprehensible, and Fixable Soundness Checking of Realistic BPMN Models — arxiv.org, accessed 2026-11-09