劉 宇,李 新
(汕頭大學工學院計算機系,廣東 汕頭 515063)
在工作流模式中,文獻[1]通過抽象多個組織中的實際業務需求,總結了20 種常見的工作流模式.對工作流模式的支持,代表了工作流管理系統在控制流方面的表達能力.現有的形式化建模方法對基本的工作流模式大多可以進行形式化地描述,但對一些復雜的工作流模式進行形式化描述時存在有歧義、無法寫出文法規則、不利于解釋實現的問題,因此現有的工作流系統對一些復雜的工作流模式尚不能很好地支持.UML AD[2-3]和EPC[4-5]能直觀地表示業務流程,但它們是圖形化的建模方式,缺少嚴格的語義定義.Petri[6-8]網適合建模基于狀態的工作流模式,但對一些高級模式,Petri 網顯得力不從心.YAWL[9]提出基于Petri 網的新的建模語言YAML,SNP[10]利用尖峰神經P 系統對20 種工作流模式建模,但它們的實際應用效果還需要進一步驗證.Pi-演算[11-13]是一種進程代數,具有嚴格的數學基礎,可以用于業務流程的建模.
本文提出了一種形式化的工作流建模方法,并選取了部分工作流模式為例,給出了具體的表達方式,最后以一個業務過程的建模實例驗證了該方法的可行性.
數理邏輯可以用全稱量詞、存在量詞和相等性描述數量概念.
例如,“不多于兩個學生”這句話可以表示為: x,y,z:student x=y y=zz=x
“恰好有一個”的概念則需要同時借助全稱量詞、存在量詞以及相等性.例如,“恰好有一個學生參加活動”可以表示為,x:student p y:student p[y/x]→y=x
從上面的描述可以看出,當要表達“不超過10 個”、“至少10 個”或者“n 個中恰好有5 個”這樣的概念時,用數理邏輯去描述,表達方式將會非常冗長并且難以看懂.從以往的經驗中可以看出,這一點明顯妨礙了數理邏輯在工作流形式化描述領域的應用.
為了對工作流模式進行更好的形式化描述,本文提出了一種新的選擇邏輯(SelectLogic),其基本形式如下,
SelectLogic(Set,m,n)
表示在一個 Set 中可以選擇出 number 個元素(m≤number≤n)時,SelectLogic(Set,m,n)取值為真.
當 m=n 時,SelectLogic(list,m,m)簡寫為 SelectLogic(list,m).
選擇邏輯涵蓋了基本的數理邏輯運算和數量表達功能,能夠方便地應用于工作流的形式化描述領域.下邊是基本邏輯運算在選擇邏輯中的表達形式,
1.與運算
A∧B,對應的 SelectLogic 表達式為,SelectLogic({A,B},2).
2.或運算
A∨B,對應的 SelectLogic 表達式為,SelectLogic({A,B},1,2).
3.異或運算
(?A∧B)∨(?B∧A),對應的 SelectLogic 表達式為,SelectLogic({A,B},1).
4.非運算
?A,對應的 SelectLogic 表達式為,SelectLogic({not A},1).
選擇邏輯能夠表達基本的邏輯運算,而且對于復雜的運算也能以簡單的形式表示如下.
5.數量選擇,“恰好有n 個”
數理邏輯表達形式見前文,需要引入量詞的形式,而對應的SelectLogic 表達式為,SelectLogic(list,5),形式簡單得多.
6.數量選擇,“至少m 個,不超過n 個”
數理邏輯需要組合全稱量詞、存在量詞和相等性等概念,表達形式顯得繁瑣和冗長,在此略過.而對應的 SelectLogic 表達式為,SelectLogic(list,m,n).
綜上所述,選擇邏輯(SelectLogic)相對于數理邏輯,其形式更加簡單,且易于理解,因此,更適合應用在工作流建模的環境中.
工作流模式是經常在業務流程建模中使用的重復出現的問題的解決方案,從控制流的角度系統地描述了過程定義語言需要滿足的業務需求,與特定的工作流語言無關.下圖是兩種常見的工作流模式:順序模式和并行分支模式(見圖1),這兩種模式表示當前一個活動狀態為完成時,后一個或者后一組活動可以開始啟動.
圖1 兩種工作流模式示意圖
現有的工作流技術把工作流模式作為工作流建模的基本構造單元,但其實,過程邏輯可以被劃分為更小的單元,如圖2 所示.
圖2 過程邏輯分解示意圖
圖中存在兩組活動集,活動集1 經過某種邏輯進行匯合,又經過分支邏輯將流程轉移到活動集2.匯合邏輯和分支邏輯的組合即是過去被看作一個整體單元的工作流模式.匯合邏輯和分支邏輯的內容有所不同,匯合邏輯中的內容是活動的狀態,而分支邏輯中的內容是活動的動作.這樣做的好處是可以對過程邏輯的性質進行更細致的分析,以便對過程邏輯進行更好的抽象.一個工作流模式即可表示為,匯合邏輯->分支邏輯.
下邊對常見的一些工作流模式運用選擇邏輯進行形式化描述,
1 順序模式
順序邏輯是最簡單的過程邏輯形態,它表示在流程中,只有前一個任務執行完畢了,后一個任務才能開始執行.其流程圖如圖1a 中所示.
選擇邏輯的表達形式為:
SelectLogic({A},1})->SelectLogic({B},1}).
2 并行模式
并行模式表示在流程中,需將單進程的某控制點分成可并行執行的多進程控制,于是允許任務同時執行或以任何順序執行.其流程圖如圖1b 中所示.
選擇邏輯的表達形式為:
SelectLogic({A},1})->SelectLogic({B,C},2}).
3 同步模式
同步模式表示在流程中的某個點,有多個并行的子流程或者任務合并成一個流程.“同步”指這個流程必須等待所有的分支都執行完成后,才能激活后面的任務.其流程圖如圖3 所示,
圖3 同步模式
選擇邏輯的表達形式為:
SelectLogic({A,B},2})->SelectLogic({C},1}).
4 獨占式選擇模式
獨占式選擇模式表示當一個任務完成后,可以有多個分支進行選擇,但是只能選擇其中一個分支,其他的分支將不會進行下去,即多選一.其流程圖如圖4 所示:
圖4 獨占式選擇模式
選擇邏輯的表達形式為:
SelectLogic({A},1})->SelectLogic({B,C,D},1}).
5 簡單合并模式
簡單聚合模式表示多個可以選擇的分支在某一點合并成一個分支,但是只有一個分支可以被接受,遵循先到先得的原則.其流程圖如圖5 所示:
圖5 簡單合并模式
選擇邏輯的表達形式為:
SelectLogic({A,B,C},1})->SelectLogic({B,C,D},1}).
6 多重選擇模式
多重選擇模式表示當一個任務完成后,有多個分支進行選擇,可以選擇其中的一個或多個分支.其流程圖如圖6 所示:
圖6 多重選擇模式
選擇邏輯的表達形式為:
SelectLogic({A},1})->SelectLogic({B,C},1,2}).
通過引入適當的系統函數對選擇邏輯加以擴展,還可以形式化的描述更多、更復雜的工作流模式,帶有系統函數的選擇邏輯大致形式為:
SelectLogic(list,m,n,sysfunc*).
其中,*表示0 個或多個.
文法是語言結構的描述工具,定義句型的結構,能夠用有限的規則把語言的無限句子集合描述出來.下邊是選擇邏輯文法規則(因篇幅所限只列出部分內容),由于文法符號較多,用符號A、B、C 不易理解、容易產生混亂,因此采用文字加下劃線的方法表示文法符號.
分支邏輯的邏輯結構和匯合邏輯是類似的,不同的是匯合邏輯表示的是活動的狀態,分支邏輯表示的是活動的動作.因此在文法規則里,分支邏輯用“動作集合”代替匯合邏輯中的“狀態表達式集合”.
值得注意的是,雖然匯合邏輯和分支邏輯的宏觀文法結構類似,但是“狀態”和“動作”的文法結構卻完全不同,尤其是,兩者的語義處理大相徑庭.因此,從文法結構清晰和未來語義處理易于實現的角度,Selectlogic 文法中沒有將匯合邏輯和分支邏輯合并表示而是分別表示,分開處理.
定義了規則文法之后,即可根據文法規則寫出規則解釋器,并進而構建工作流引擎,在此由于篇幅限制,以上內容省略.
假如銀行小額貸款金額最高為v,則銀行的貸款審批流程如下:1.客戶提出貸款申請;2.如果是小額貸款(貸款金額≤v),由銀行業務員對客戶進行信用審核;如果信用審核通過,則貸款申請通過;如果信用審核不通過,則貸款申請不通過;3.如果是大額貸款(貸款金額>v),由銀行業務員對客戶同時進行信用審核和資產審核;若信用審核和資產審核都通過,則貸款申請通過;若信用審核或資產審核未通過,則貸款申請不通過.
使用工作流模式對貸款審批流程建模,示意圖如圖7 所示:
圖7 貸款審批過程示意圖
其中,由于大額貸款審核時有兩個并行的審核活動,為了滿足工作流模式,需要添加一個分支活動使審核活動分為信用審核和資產審核,還需要添加一個匯聚活動使兩個審核活動匯合.在對圖7 中的工作流模式進行實現時,許多工作流平臺會要求用戶編寫特定的程序代碼,例如,按照貸款金額大小區分貸款審核途徑等涉及業務數據的環節,可能需要通過程序代碼來實現.
采用選擇邏輯表達式建模,示意圖如圖8 所示,流程如下.
圖8 貸款審批過程結構示意圖
1.狀態定義:
申請貸款金額:ActApply.money
信用審核狀態:ActCreditAudit.state
資產審核狀態:ActAssetsAudit.state
2.規則與規則群的定義:
用于表達活動間過程邏輯的一條或多條規則構成一個規則群,
規則群1 包含兩條規則:
規則1—小額貸款申請:
SelectLogic({Actapply.money≤v},1)->
SelectLogic({ActCreditAudit.start()},1)
其中,Actapply 表示貸款申請活動,ActApply.money 表示貸款金額;ActCreditAudit表示信用審核活動.
規則2—大額貸款申請:
SelectLogic({Actapply.money>v},1)->
SelectLogic({ActCreditAudit.start(),ActAssetsAudit.start()},2)
其中,ActAssetsAudit 表示資產審核活動.
規則群2 中包含三條規則:
規則1—小額貸款審核通過:
SelectLogic({Actapply.money≤v,ActCreditAudit.state=pass},2)->
SelectLogic({ActApplyPass.start()},1)
其中,ActApplyPass 表示貸款審核通過活動.
規則2—大額貸款審核通過:
SelectLogic({Actapply.money>v,ActCreditAudit.state=pass,
ActAssetsAudit.state=pass},3)->SelectLogic({ActApplyPass.start()},1)
規則3—審核不通過:
SelectLogic({ActCreditAudit.state=reject,
ActAssetsAudit.state=reject},1,2)->
SelectLogic({ActApplyNotPass.start()},1)
其中,ActApplyNotPass 表示貸款審核不通過活動.
和圖7 相比,可以看到運用選擇邏輯所建立的業務過程模型得到了明顯的簡化,活動數量大為減少,并且不需要用戶編寫任何程序代碼,過程邏輯和業務邏輯兩者均統一在邏輯規則這種形式化表示方法中.
本文利用選擇邏輯對工作流模式進行了描述,這種方法是完全形式化的,有效消除了自然語言和圖形中可能存在的歧義.相比傳統的數理邏輯,本文提出的選擇邏輯極大地簡化了過程建模的形式.同時,這種形式化方法可以直接寫出對應的文法結構,這對于工作流引擎的實現具有重要意義.目前工作流領域其它的形式化方法尚未見到和文法結構相關聯的文獻資料,意味著其它的形式化方法沒有提及如何把形式化表示方法和工作流引擎的技術實現聯系起來.本文在這方面進行了開拓性的探索.通過文中的業務建模實例驗證了選擇邏輯的建模能力和所具有的靈活性.下一步將著重研究復雜工作流模式的形式化表示方法.