分岐

分岐とは、1つのパス（経路）を複数のパスに分割するメカニズムをいう. Split.

分岐の概要
一般に、分岐が行われる場所では、1つの道が2つ以上の道に分かれている. 分岐点から別々になったすべての道へ向かうのか、それともなんらかの条件に合った道を選択して進んでいくのかで、その後の結果は大きく影響される.

BPMNにおいて、「道」はシーケンスフローが、「分岐点」はアクティビティまたはゲートウェイがそれぞれの役割を担っている.

BPMNでは、大きく分けて2種類の分岐のメカニズムがある. の2つである.
 * 並列分岐（AND分岐）
 * 判断分岐（OR分岐、XOR分岐）

並列（Parallel）分岐
分岐点で別々になったすべてのシーケンスフローにトークンが流れ、同時並列に次のアクティビティが実行されるメカニズム. トークンの流れ方が「フォーク」のようであるから、「フォーク」（Forking Flow）とも呼ばれる. AND分岐（AND-Split）が、これに該当する.

出力されるシーケンスフローには、すべて非制御シーケンスフロー（Uncontrolled Sequence Flow）が用いられる.

ゲートウェイを用いて表記する場合、ひし形（◇）の中に十字型のマーカーを書き入れ、並列ゲートウェイ（Parallel Gateway）であることを明示する必要がある.

判断（Decision）分岐
まず、分岐点で別々になったシーケンスフローのそれぞれに付されている条件が評価される. その結果「真」と判断されたフローだけにトークンが流れ、次のアクティビティが実行される. がこれに当たる. 出力されるシーケンスフローは、制御シーケンスフロー（Conditioned Sequence Flow）またはデフォルトシーケンスフロー（Default Sequence Flow）が用いられる. ただし、デフォルトシーケンスフローは、複数個用いることはできない.
 * OR分岐（OR-Split）
 * XOR分岐（XOR-Split）

OR分岐
同一の分岐点上において、条件式に適合したすべてのフローが選択される（包含的判断）. したがって、適合する条件式が1つならトークンは分割されず、2つ以上ならトークンはその数だけ分割される.

OR分岐では、まず最上位の条件式から順番に判断される. デフォルト以外のすべての条件式について判断が行われた結果として、
 * 「真」と判断された条件式が少なくとも1つある場合
 * 「真」となる条件式をもつフローすべてにトークンが流れる. デフォルトフローは無視される.
 * すべての条件式が「偽」と判断された場合
 * トークンはデフォルトフローのみに流れる.

ゲートウェイを用いて表記する場合、ひし形（◇）の中に"O"字型のマーカーを書き入れ、包含ゲートウェイ（Inclusive Gateway）であることを明示する必要がある.

XOR分岐
同一の分岐点上において、フローが1つだけ選択される（排他的判断）. したがってトークンは分割されない.

XOR分岐では、まずデフォルト以外の条件式が最上位のものから順番に判断されるが、その際、
 * 「真」と判断された条件式がある場合
 * その条件式を持つシーケンスフローだけにトークンが流れ、その次のアクティビティが実行に移される. 「排他的」であるため、そのフローよりも下位にある条件式は評価・判断する必要がなく、無視される. 


 * すべての条件式が「偽」と判断された場合
 * トークンはデフォルトフローのみに流れる.

ゲートウェイを用いて表記する場合、ひし形（◇）の中に"X"字型のマーカーを書き入れ、データ準拠の排他ゲートウェイ（Exclusive Data-based Gateway）であることを明示する必要がある.

条件式はデータ入力されるため、このゲートウェイが用いられる.

無限ループの危険
分岐メカニズムを用いることで、特定の条件が満たされるまで一連のアクティビティを繰り返すループ構造を作ることができる. ループ構造をしたプロセス図には、通常、ループ構造から抜け出すために「ブレイク（Break）」となる条件が、分岐点において設けられる. ところが、このブレイクが有効に機能しない場合がある.
 * ブレイクの条件が、現実には実現不可能または実現が困難なものである場合
 * モデリングされたプロセス図が、ループのブレイクを困難にさせるものである場合

このとき、一連のアクティビティが半永久的にループを続けてしまう現象（「無限ループ」）が発生する. プロセスモデルの作成者は、プロセスが無限ループ状態になっていないかどうか逐一チェックをし、プロセス改善を常に心がける必要がある.

ループ中分岐によるトークン増殖の危険
ループ構造の中に分岐メカニズムを含んでいる例は多数見られる. ただし、それがOR分岐またはXOR分岐である場合、「トークン増殖」を発生させてしまう可能性があり、注意が必要である. プロセス図の設計者は、「トークン増殖」が回避されるような手立てを施すべきであり、一方、BPMS（BPM Suite）においてもアラート（警告）が出されるべきであると言える. QBPMS（Questetra BPM Suite）では、ループ中の分岐メカニズムにおいて「トークン増殖」の恐れがある場合、アラートが表示される仕組みになっている.

関連記事

 * BPMN
 * アクティビティ
 * ゲートウェイ
 * フロー
 * シーケンスフロー
 * 制御シーケンスフロー
 * デフォルトシーケンスフロー
 * AND分岐
 * OR分岐
 * XOR分岐
 * ループ
 * 併合
 * 結合

参考文献

 * BPMN1.1仕様（2008-01-17）