業務流程模型和標記法

業務流程模型和標記法（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中創建你自己的流對象、器物類型，使圖更好理解。

### 流對象與連接對象

- 事件 Event
- 活動 Activity
- 網關 Gateway
- 連接 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）用點線表示。它用於建立器物或文本到流對象的聯繫，並且可以用空心箭頭標明某種方向性（指向器物表示結果，源自器物表示輸入，同時出現則表示讀和更新）。當器物或文本聯繫到順序或消息流時，關聯無需標明方向（那些流已經顯示了方向）。

### 泳道與器物

- 泳道 Swimlanes
- 數據對象 Data objects
- 組 Groups
- 注釋 Annotation

泳道（Swimlanes）是從視覺上對活動加以組織或分類的機制。它基於交叉功能流程圖基礎，在BPMN中有兩種類型：

池（Pool）：表示流程中的主要參與者，典型地，用來分開不同的組織。一個池可容納一個或多個道（像真實的泳池一樣）。當池為展開的（顯示出內部細節），繪做大的矩形；若為收起的（隱藏起內部細節），繪做沿著圖的長或寬伸展的空的矩形。

道（Lane）：在池中，用於活動按職能或角色歸類。繪做按池的長或寬展開的矩形。道包含流對象、連接對象和器物。

器物（Artifacts）使開發者可以帶給模型／圖更多的資訊，通過這一方式，使模型／圖更可讀。預定的三種器物如下：

數據對象（Data Objects）：「數據對象」向讀者顯示在活動中需要或產生哪些數據。

組（Group）：組表現為虛線的圓角矩形。組用來將不同的活動分組，但不影響圖中的流。

注釋（Annotation）：注釋為模型／圖的讀者增加可理解性。

### 業務流程圖的類型

- 帶正常流的流程
- 討論循環
- 電子郵件投票流程
- 採集投票

在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