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