刘 宇,李 新
(汕头大学工学院计算机系,广东 汕头 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 相比,可以看到运用选择逻辑所建立的业务过程模型得到了明显的简化,活动数量大为减少,并且不需要用户编写任何程序代码,过程逻辑和业务逻辑两者均统一在逻辑规则这种形式化表示方法中.
本文利用选择逻辑对工作流模式进行了描述,这种方法是完全形式化的,有效消除了自然语言和图形中可能存在的歧义.相比传统的数理逻辑,本文提出的选择逻辑极大地简化了过程建模的形式.同时,这种形式化方法可以直接写出对应的文法结构,这对于工作流引擎的实现具有重要意义.目前工作流领域其它的形式化方法尚未见到和文法结构相关联的文献资料,意味着其它的形式化方法没有提及如何把形式化表示方法和工作流引擎的技术实现联系起来.本文在这方面进行了开拓性的探索.通过文中的业务建模实例验证了选择逻辑的建模能力和所具有的灵活性.下一步将着重研究复杂工作流模式的形式化表示方法.