业务流程模型和标记法

<image>

业务流程模型和标记法（BPMN, Business Process Model and Notation）译注1是一套图形化表示法，用于以业务流程模型详细说明各种业务流程。

它最初由业务流程管理倡议组织（BPMI, Business Process Management Initiative）开发，名称为"Business Process Modeling Notation"，即“业务流程建模标记法”。BPMI于2005年与对象管理组织（OMG, Object Management Group）合并。2011年1月OMG发布2.0版本，同时改为现在的名称。

## 概述

业务流程模型和标记法（BPMN, Business Process Model and Notation）译注1是对象管理组织（OMG, Object Management Group）维护的关于业务流程建模的行业性标准。它建立在与UML的活动图非常相似的流程图法（flowcharting）基础上，为“业务流程图”（BPD, Business Process Diagram）中的特定业务流程提供一套图形化标记法。BPMN的目标是，通过提供一套既符合业务人员直观又能表现复杂流程语义的标记法，同时为技术人员和业务人员从事业务流程管理提供支持。BPMN规范还提供从标记法的图到执行语言基础构造的映射，尤其是业务流程执行语言（BPEL）。

BPMN的首要目的是提供全体业务相关者易于理解的标准标记法。业务相关者包括创造与梳理流程的业务分析师、负责实施流程的技术开发者、以及管理和监督流程的经理人。BPMN旨在充当公共语言，跨越业务流程设计和实施之间常见的鸿沟。

当前有多种竞争的业务流程建模语言标准供建模过程和工具选用。广泛采用BPMN将有助于统一基本的业务流程概念的表达（例如：公共或私有的流程、编排），就像一些高级的业务概念一样（例如：例外处理、事务补偿）。

## 历史

BPMN最初由业务流程管理倡议组织（BPMI, Business Process Management Initiative）开发，该组织于2005年与对象管理组织（OMG, Object Management Group）合并，从那时起，由OMG维护。BPMN最初的名称为"Business Process Modeling Notation"，即“业务流程建模标记法”，2011年1月OMG发布2.0版本，同时改为现在的名称。1

## BPMN基本话题

### 范围

BPMN仅限于支持对业务流程有用的建模概念。这意味着组织所做的非业务目的其他类型建模将排除在BPMN之外。例如，以下方面的建模不属于BPMN的一部分：

- 组织结构
- 职能分解
- 数据模型

此外，虽然BPMN会显示数据的流（消息）以及活动与数据器物的关联，但它并非数据流图（data flow diagram）。

### 要素

BPMN用很小一套图形要素做简单的图来建模，这将令业务用户与开发者一样容易理解其中的过程和流。它的四种基本要素如下：

流对象（Flow Object）：事件（Events），活动（Activities），网关（Gateways）

连接对象（Connecting Objects）：顺序流（Sequence Flow），消息流（Message Flow），关联（Association）

泳道（Swimlanes）：池（Pool），道（Lane）

器物（Artifacts/Artefacts）：数据对象（Data Object），组（Group），注释（Annotation）

这四大类对象令我们有机会做出简单的业务流程图（BPD, business process diagram）。同时，BPMN也允许在BPD中创建你自己的流对象、器物类型，使图更好理解。

### 流对象与连接对象

<image>

- 事件 Event

<image>

- 活动 Activity

<image>

- 网关 Gateway

<image>

- 连接 Connections

流对象（Flow Objects）是BPMN的主要描述对象，由三种核心要素（事件、活动、网关）组成。

事件（Event）：“事件”（Event）以圆环表示，指发生的事情（区分于“活动”代表所做的事情）。圆环中的图标代表事件的类型（例如：信封为消息，时钟为时间）。事件也被分为“捕获”（Catching，例如捕获输入的消息而开始一个流程）或“抛出”（Throwing，例如在流程结束抛出消息）。

开始事件（Start event）：作为流程的触发器；以细单线标明，并且只能“捕获”（Catch），所以它显示为空心（轮廓）的图标。

结束事件（End event）：表现流程的结果；以粗单线标明，且只能“抛出”（Throw），所以显示为实心图标。

中间事件（Intermediate event）：表现发生在开始和结束事件之间的事；以双线标明，可以是“抛出”或“捕获”（相应采用实心或空心图标）。例如，一任务流到一事件，抛出一个消息到另一个池，然后由下一个事件守候，捕获其回应。

活动（Activity）：“活动”（Activity）用圆角矩形表示，并描述必需做的工作的种类。

任务（Task）：任务代表单一工作单元，它不会或不能被分解为更深层次上的业务流程细节，而不包含操作程序步骤的图示（此非BPMN的目的）。

子流程（Sub-process）：用于隐藏或显露深层业务流程细节——收起时，在矩形底部用加号标明子流程；展开时，在矩形内显示全部的流对象、连接对象及器物。

子流程自含开始及结束事件，来自“父”流程的顺序流不可跨过其边框。

事务（Transaction）：子流程的一种形式，其所包含的全部活动必须作为一个整体对待，即它们必须完全结束以满足目标，其中任何一个失败就必须全部偿还（撤回）。事务作为扩展的子流程，用双线环绕。

网关（Gateway）：“网关”（Gateway）用菱形表示，基于所示条件决定路径的分流与合并。

“流对象”通过“连接对象”（Connecting objects）互相连接。连接对象包括三个类型（顺序、消息、关联）：

顺序流（Sequence Flow）：“顺序流”用实心线和箭头表示，显示活动进行的顺序。“顺序流”还可以在开始端带有符号，以小菱形标明其中一些发自活动的“条件流”（conditional flow），同时以对角斜线标明发自活动或决定，带条件流的“默认流”（default flow）。

消息流（Message Flow）：“消息流”用虚线表示，起始端有一个空心圆圈，终端是一个空心箭头。它告诉我们哪些消息流跨过组织的边界（即介于池之间）。消息流不可用于在同一个池中连接活动或事件。

关联（Association）：“关联”（Association）用点线表示。它用于建立器物或文本到流对象的联系，并且可以用空心箭头标明某种方向性（指向器物表示结果，源自器物表示输入，同时出现则表示读和更新）。当器物或文本联系到顺序或消息流时，关联无需标明方向（那些流已经显示了方向）。

### 泳道与器物

<image>

- 泳道 Swimlanes

<image>

- 数据对象 Data objects

<image>

- 组 Groups

<image>

- 注释 Annotation

泳道（Swimlanes）是从视觉上对活动加以组织或分类的机制。它基于交叉功能流程图基础，在BPMN中有两种类型：

池（Pool）：表示流程中的主要参与者，典型地，用来分开不同的组织。一个池可容纳一个或多个道（像真实的泳池一样）。当池为展开的（显示出内部细节），绘做大的矩形；若为收起的（隐藏起内部细节），绘做沿着图的长或宽伸展的空的矩形。

道（Lane）：在池中，用于活动按职能或角色归类。绘做按池的长或宽展开的矩形。道包含流对象、连接对象和器物。

器物（Artifacts）使开发者可以带给模型／图更多的信息，通过这一方式，使模型／图更可读。预定的三种器物如下：

数据对象（Data Objects）：“数据对象”向读者显示在活动中需要或产生哪些数据。

组（Group）：组表现为虚线的圆角矩形。组用来将不同的活动分组，但不影响图中的流。

注释（Annotation）：注释为模型／图的读者增加可理解性。

### 业务流程图的类型

<image>

- 带正常流的流程

<image>

- 讨论循环

<image>

- 电子邮件投票流程

<image>

- 采集投票

在BPMN的三种子模型之内和之间，可以创建各种类型的图。以下列出的是能够用BPMN建模的业务流程类型（其中带星号的可能无法映射到执行语言）：

- 高层次私有流程的活动（非职能分解）*
- 细节私有流程（Detailed private business process）
- 当前或过往的业务流程*
- 未来或新业务流程
- 与一个或多个外部实体互动的细节私有业务流程（或“黑盒子”流程）
- 两个或更多细节私有业务流程的交互作用
- 细节私有业务流程到抽象流程的联系
- 细节私有业务流程到协作流程的联系
- 两个或更多抽象流程*
- 抽象流程与协作流程的关系*
- 单独的协作流程（例如：ebXML BPSS或RosettaNet）*
- 两个或更多细节私有业务流程通过抽象流程的交互作用
- 两个或更多细节私有业务流程通过一个协作流程的交互作用
- 两个或更多细节私有业务流程通过抽象与写作流程的交互作用

BPMN的设计目标是允许上述全部类型的图。然而，需要小心的是，包含了太多的子模型类型，例如三种或更多的私有流程之间都有消息流连接，这样的图可能会变得难以理解。因而，我们建议建模者为诸如私有流程、协作流程的BPD建立明确的目标。

### BPMN 2.0

BPMN 2.0为新的业务流程模型和标记法建立单一规范，对标记法、元模型和交换格式做出界定。2.0版的名称有所修改，但仍会维持“BPMN”这个标志。特征包括：

- 结合BPMN和业务流程定义元模型（BPDM），形成单纯一致的语言
- 使能在建模工具间交换业务流程模型及其布局，以保持语义完整性
- 扩充BPMN以允许将模型配置与编排成独立或集成的模型
- 支持模型上不同透视法的显示和交替，令用户可以聚焦于特定的关注点
- 串行化BPMN，为模型转换提供XML方案（schemes），向执行决策支持方向扩展业务模型。

BPMN 2.0在2011年1月发布。

## BPMN的使用

业务流程建模用于传达广泛而多样的信息给广泛而多样的受众。BPMN的设计就是为了覆盖这种广泛的用途，并且允许端到端的业务流程建模，从而令图的观察者能够方便地区分一个BPMN图上的不同部分。在一个端到端的BPMN模型中有三种基本的子模型：“私有”（内部的）业务流程、“抽象”（公共的）流程，和“协作”（全局的）流程：

私有（Private；内部的）业务流程：私有业务流程是指特定组织内部且通常被称为工作流或业务流程管理（BPM）流程的一类流程。如果用了泳道，则一个私有业务流程将包容在单个的池中。该流程的顺序流完全包含在其池之中，不可跨越边界。消息流可以跨越池的边界，显示不同的私有业务流程间的交互作用。

抽象（Abstract；公共的）流程：表示私有业务流程与其它流程或参与者之间的交互。只有那些通讯范围超出私有业务流程的活动包括在抽象流程中。剩下那些私有业务流程的“内部”活动不显示在抽象流程中。即，抽象流程向外部世界显示消息序列，这些消息序列是与其业务流程交互所必须的。抽象流程可包含在一个池中并单独建模，或包含在一个大的BPMN图中显示抽象流程活动与其它实体之间的消息流。如果一抽象流程与其对应的私有流程在同一个图中，则其活动对可关联的流程双方是共用的。

协作（Collaboration；全局的）流程：协作流程刻画两个或更多业务实体之间的交互作用。这些交互作用定义为活动序列，这些活动序列表示所涉及实体之间的消息交换模式。协作流程也可能包容在一个池中，不同参与者的业务交互作用显示为该池中的道。在这种情形下，每个道将代表两个参与者和他们之间的移动方向。它们也可以显示为两个或更多的抽象流程，通过消息流交互作用（如上一节所描述）。这些流程可以独自建模，或者在一个大的BPMN图中显示协作流程活动和其它实体间的关联。如果协作流程在同一个图中作为协作的私有业务流程，则其活动对可关联的流程双方是共用的。

## BPMN的弱点

BPMN的弱点涉及以下方面：

- 在共享的BPMN模型中的歧义与混淆
- 对例行工作的支持
- 对知识工作的支持
- BPMN模型到执行环境的转换

## 译注

- 译注1译注1这里"Notation"在中文有多种译名，例如"标注"。《UML参考手册》中译作“表示法”。根据BPMN的内容，和建模领域背景的考量，这里暂时译作“标记法”。
- 译注2Organization是拥有业务的实体，可包括任何类型——非商业的、政府的、民间的；对于组织，Function在汉语中通常应该是“职能”而非“功能”。
- 译注3按照BPMN的基本理解，这里的participant（参与者）、function（职能，功能）、role（角色），都不一定是“人的”（组织、职能与业务人员），也可以是计算机的（应用系统、功能、代理程序），这在中文更精确的表达中，造成一定的困惑。

## 外部链接

- BPMN Information Home Page OMG information page for BPMN.
- BPMN 1.1 Poster - Poster showing all BPMN constructs