为工作流平台即服务挖掘变更操作
摘要
工作流平台即服务(WaaS)允许用户定义、集成和运行基于工作流的应用程序,随着云计算的快速发展,它正变得越来越流行。然而,对于一个支持工作流的应用程序而言,单一的工作流模型无法满足不同用户的多样化需求。因此,许多工作流平台提供了可供用户修改工作流模型的工具。本文提出了一种挖掘用户工作流变更操作的方法,通过该方法可以发现变更规则,并在未来自动配置工作流模型时加以重用。首先介绍了获取变更操作的方法,并给出了一个变更规则挖掘算法;然后描述了应用变更规则来配置工作流模型的过程;最后展示了一个原型系统和一个案例研究。
关键词
平台即服务 . 工作流平台即服务 . 变更操作 . 变更规则 . 过程结构树
1 引言
平台即服务(PaaS)是一种云计算服务类别,它将计算平台和解决方案堆栈作为服务提供[34]。由于PaaS使用户能够快速创建Web应用程序,而无需承担购买和管理任何软件/硬件的成本和复杂性,因此它变得越来越受欢迎。PaaS的快速发展将影响大多数基础架构软件市场的传统供应商格局[7]。
工作流是业务流程的计算机化支持或自动化[33]。为了在组织内管理工作流,工作流管理平台长期以来已被企业广泛应用,几乎所有的企业都已部署了工作流管理平台[16]。许多商业和开源的工作流管理平台也均可获得。
随着云计算的发展,一些云服务提供商开始提供工作流平台即服务(WaaS)。例如,Amazon 提供简单工作流服务(Amazon SWF)作为构建可扩展分布式应用程序[3]的编排服务。同时,一些传统工作流管理平台供应商利用云计算提供在线工作流服务。此外,一些软件即服务(SaaS)供应商基于 WaaS 提供其软件服务,以提高软件服务的灵活性。例如,Salesforce.com 向用户提供了名为可视化流程管理器的工具,以便他们可以配置自己的业务流程[24]。
在提供支持工作流的应用服务之前,应预先定义其对应的工作流模型。该工作流模型将由订阅了此应用服务的用户调用并执行。通常,在Web应用服务中,一个工作流模型会被大量用户调用,这意味着单个工作流模型必须满足各种不同的需求。显然,这非常困难甚至不可能实现。
有几种方法可以提高工作流模型的灵活性。一种方法是将条件分支和复杂流程结构添加到模型[9] 中,以便根据运行时的上下文信息确定特定的执行路径或具体模型。另一种方法是定义多个版本的工作流模型,并将其管理在仓库[35]中。然而,这两种方法都存在一个问题,即它们仅针对已知需求进行设计。此外,如果试图满足越来越多的需求,模型或仓库将变得越来越复杂。来自人工智能领域的一些技术也被应用于工作流,特别是规划技术[8]。通过应用规划算法,可以动态生成满足需求的工作流模型。然而,规划问题是 NP完全 的,难以适用于复杂情况。
因此,为了满足不断出现的新需求,仍然需要对工作流模型进行手动更改(例如,添加或删除活动)。工作流变更已得到系统性的研究,包括变更类型、变更后模型的正确性、变更检测以及变更重用。然而,关于如何挖掘可供未来使用的变更规则的研究仍显不足。一些研究人员已应用流程挖掘技术来分析变更日志,并可生成变更过程模型以展示变更行为之间的顺序关系。但对于如何生成用于自动修改原始流程模型的变更操作应用规则,尚缺乏进一步的研究。
本文提出了一种支持WaaS变更规则挖掘与重用的方法。论文其余部分组织如下:第2节简要介绍了该框架;第3节定义了工作流模型和过程结构树;第4节提出了变更规则挖掘算法;第5节介绍了变更重用方法,详细讨论了变更操作之间的关系以及如何在可能的变更操作基础上生成新的变更序列;第6节介绍了验证该方法的原型系统和一个案例研究;第7节讨论了相关工作;第8节对全文进行了总结。
2 面向Web应用服务的变更规则挖掘与复用框架
我们提出了一种用于变更规则挖掘与复用的框架(见图1)。该框架大致分为三个阶段。第一阶段,针对支持工作流的应用服务,由应用服务提供商根据需求分析和领域知识指定并部署原始工作流模型到Web应用服务中。第二阶段是变更规则挖掘。当请求一个应用服务时,其工作流将被执行。尽管原始工作流模型在大多数情况下可以正常运行,但在情况不同于常规时仍需要进行变更。随后,变更操作将被检索并保存,从中可以发现变更规则。在第三阶段,将根据上下文信息自动应用变更规则来配置原始工作流模型。第二阶段和第三阶段相互交织。
在接下来的章节中,我们将讨论如何记录变更操作、变更规则挖掘算法以及变更规则重用方法。
3 工作流模型和过程结构树
3.1 工作流模型
支持工作流的应用服务的工作流模型可以表示为 ,其中Cd用于描述上下文,P是在正常情况下有效的流程模型。
3.1.1 上下文信息描述
上下文定义了事件发生时的环境。Web应用服务中的上下文定义了工作流模型有效的场景。我们使用上下文模板(CT)来定义上下文表示的数据结构。一个上下文模板由一组上下文参数(CP)组成,即 CT={CP1, CP2,…, CPi, …, CPn}。D={D1, D2,…, Dn} 是一组离散的有限变量域,其中 Di 是对应于 CPi 的变量域。每个上下文参数都有一个默认值域。对于一个上下文,当其所有上下文参数的取值均来自各自的默认值域时,该上下文称为默认上下文,记为 Cd。
例如,表1显示了制造产品理赔结算工作流的上下文模板定义的一部分,带星号 * 的值为默认值。
3.1.2 工作流的流程模型表示
流程由一组活动及其依赖关系组成。这些依赖关系规定了流程内活动之间的顺序关系。流程模型通常表示为图,且正确的流程模型总能转换为等价的结构良好模型,即具有对称块的图[31]。这些块可分为四种类型,即顺序块、并行块、异或块(替代块)和循环块(循环块)。在结构良好流程模型中,这些块可以任意嵌套,但不能重叠。图2展示了一个理赔结算的结构良好流程模型。
已证明,一个结构良好的流程模型可以转换为树结构,这种树结构称为过程结构树(PST)[32]。例如,图2中的流程模型可以转换为图3中所示的PST。
由于我们的讨论基于PST结构,以下将介绍一些关于树结构和相关树问题的符号。这些定义大多基于文献[27]。
设T=(V, E)为一个有根树,其中V(T)和E(T)分别表示T的节点集和边集。T的根记为root(T)。T的大小记为size(T)。令t[i]表示在T的前序遍历中位置为i的节点,i是节点t[i]的编号。当i<j时,节点t[i]位于节点t[j]的左侧。用label(t[i])表示节点 t[i]的标签。用T[i]表示以节点t[i],为根的T的子树。parent(t[i])表示节点t[i],的父节点,children(t[i])表示节点t[i]的子节点集合。如果每个节点的子节点相对顺序是固定的(非固定的),则称树T为有序(无序)树。在有序树T中,当i<j时,节点t[i]位于节点t[j]的左侧,而t[j]位于t[i]的右侧。
树也可以用序列来表示。例如,图2中的树可以表示为<序列,{记录理赔,加入理赔队列,工程师审核,经理审核,异或,{序列,{计算损失金额,发送支付信,支付},发送拒赔信}}>。如果节点的编号已确定,则也可以表示为 。这两种序列表示方法分别称为树的标签序列表示(LSRoT)和树的ID序列表示(ISRoT)。
表1 理赔结算工作流程的上下文模板
| 参数 | 取值范围 | 描述 |
|---|---|---|
| 客户星级 | {1*, 2, 3} | 客户星级,星级越高表示越重要 |
| 客户所在地 | {国内*, 国外} | 客户来自国内或国外 |
| 产品成本 | {<10,000, 10,000‐50,000*, >50,000} | 产品成本 |
| 购买日期 | {7天内,在保修期内*, 超出保修期} | 产品已购买多久 |
| 索赔类型 | {Money*, Product, Repair} | 客户想要退款、换新产品或维修它 |
如果半有序树(PST)中的一个非叶节点 v 的标签为“Sequence”或“Loop”,则其子节点 children(v) 是有序的;如果 v 的标签为“XOR”或“Parallel”,则 v 的子节点是无序的。换句话说,PST 是一种半有序树[21]。
根据PST的节点类型,可以将其分为两种类型:
(1) 当且仅当过程结构树T被称为弱过程结构树(WPST)时:
&在T中的非叶节点v只能被标记为“Sequence”、“XOR”、“Parallel”或 “Loop”;
& T中的叶节点v表示一个活动。因此,除了标记为“Sequence”、“XOR”、“Parallel”或“Loop”的叶节点外,T中的其他叶节点应具有唯一的标签。
(2) 当且仅当过程结构树T被称为严格过程结构树(SPST)时:
& T 是一个 WPST;
&所有叶节点具有唯一的标签,且不能标记为“Sequence”、“XOR”、“Parallel”或“Loop”;
&除了标记为“Loop”的节点外,T 中的非叶节点 v 至少有两个子节点。
假设所有原始和修订的PSTs均为SPST,且规则挖掘和配置过程中的所有临时 PSTs可以为WPST。
4 变更操作获取与变更规则挖掘
要配置流程模型,通常需要对流程图执行基本编辑操作。尽管我们可以记录所有基本编辑操作,但这些信息很难被由于多种原因,这些操作被分析和重用。首先,在大多数情况下,需要记录的操作太多。例如,当你向模型中添加新活动时,除了绘制该活动外,还必须绘制表示到其他活动的控制流的连线。其次,可能会记录冗余操作,需要花费精力进行删除。例如,某个活动可能先被添加,随后又被删除。
为了以形式化的方式表示模型变更,我们将通过比较原始模型和变更后的模型来检索应用于PST的变更操作。由于这些变更被精心组织,变更重用变得更加容易。本节首先讨论如何比较两个PST,然后介绍变更操作、变更操作检索算法以及变更规则挖掘算法。
4.1 PST 比较
4.1.1 最大公共子树
为了检测两个PST之间的差异,应找到最大的公共子树,这被称为最大公共子树同构(MCSI)问题[27]。然而,PST是一种半有序树,因此我们需要对MCSI采用不同的定义。
当存在一个映射 M⊆V1×V2 ,并且满足以下条件时,过程结构树 PST1=(V1, E1)与另一个过程结构树 PST2=(V2, E2) 的自顶向下子树同构:
root(PST1), root(PST2))∈M;
对于所有非根节点 v∈V1 和 w∈V2:如果 (v, w)∈M,且 (parent(v), parent(w))∈M;
对于所有节点 v1, v2, v3∈V1; w1, w2, w3∈V2; parent(v1)=parent(v2)=v3, parent(w1)=parent(w2)=w3; (v1, w1)∈M 且 (v2, w2)∈M:若 label(v3) 和 label(w3) 为“Sequence”或“ Loop”,并且 v1 在 v2, 的左侧,则 w1 必须在 w2 的左侧。
标签“
”表示树之间的自顶向下子树关系,即对于所有树T1和T2,,如果T1是T2,的自顶向下子树,则记作T1
T2。基于上述讨论,以下结论对所有类型的树均成立:
(1) 对于树 T1=(V1, E1)、T2=(V2, E2)、T3=(V3, E3),如果 V1=V2, T1
T3 且 T2
T3,T1 与 T2 同构;
(2) 如果 T1 是通过删除 T2, 的一些节点得到的,则 T1 必须是 T2 的自顶向下子树。在删除过程中,对于所有非叶节点 w ∈ V2,,如果删除 w,则必须同时删除 children(w),即如果删除 w,则以 w 为根的整个子树 T[w] 都必须被删除;
(3) 假设 T1
T2,,则 size(T1)≤size(T2);如果 T1≠T2,,即 T1 与 T2, 不同构,则 size(T1)<size(T2);
(4) 如果 T2 是一个 WPST 且 T1
T2,,则 T1 是一个 WPST。
有序(无序)树T1 =(V1 , E1)与另一有序(无序)树T2 =(V2 , E2)的自上而下公共子树是一个结构(X1 , X2 , M)。其中X1 =(W1 , S1)是T1 ,的一个自顶向下有序(或无序)子树,X2 =(W2 , S2) 是T 2 ,的一个自顶向下有序(或无序)子树,且M∈W1 ×W2 是X 1 到X 2 =的一个有序(或无序)树同构。当不存在另一个大小满足size(X1) <size(X1 ’)的自上而下公共子树(X1 ’, X 2 ’, M’)时,自上而下公共子树(X1 , X2 , M)是最大的。MCSS(T1 , T2 ,)表示最大尺寸,且MCST(T1, T2)表示T1和T2具有最大尺寸的公共子树,称为T1和T2的最大公共子树。
4.1.2 对应关系识别
对应关系用于表达模型元素x在另一版本中具有相同功能的对应元素y。由于PST既不是有序树也不是无序树,现有的MCST同构算法无法直接使用。A. Ouangraoua和P. Ferraro设计了一种算法,用于计算两个半有序树[21]之间的约束编辑距离。我们对其进行了修改,以解决PST的自顶向下MCST同构问题。与其他MCST计算算法[27],类似,其基本思想是从PSTb中以节点v的子节点为根的每个子树到PSTr中以节点w的子节点为根的各个子树的MCST同构出发,构建PSTb到 PSTr的自顶向下MCST同构。本节介绍一种计算PSTb和PSTr的自顶向下MCST同构大小的解决方案,该大小记为MCSS(PSTb, PSTr),然后通过追踪MCSS的计算过程即可容易地获得MCST。
计算PSTb和PSTr的MCSS的关键在于使用分治技术来分解问题。假设v是PSTb中的一个节点,节点w是PSTr中的一个节点,则我们有以下规则:
规则4.1:如果label(v)!=label(w),则MCSS(v, w)=0;
规则4.2:如果label(v)=label(w)且v、w为叶节点,则MCSS(v, w)=1;
规则4.3:如果label(v)=label(w)且v、w为分支节点,令p表示PSTb中节点v的子节点数量,q表示PSTr中节点w的子节点数量。设v1,…, vp和w1,…, wq分别为节点v和w的子节点;若label(v)=label(w)=XOR或Parallel,表示v和w的子节点无序,则在p+q个顶点上构建一个二分图G=({v1,…, vp},{w1,…,wq}, E),当且仅当以节点vi为根的PSTb子树与以节点wj为根的PSTr子树的最大公共子树(MCST)具有非零尺寸时,边(vi,wj)∈E存在,并在此情况下,以该非零尺寸作为边(vi, wj)∈E的权重。
如果 label(v)=label(w)=Sequence 或 Loop,这意味着 v 和 w 的子节点是有序的,则在 p+q 个顶点上构建一个二分图 G=({v1,…, vp},{w1,…,wq}, E),其中边 (vi,wj)∈E 当且仅当:
&以节点vi为根的PSTb子树和以节点wj为根的PSTr子树的MCST大小为非零尺寸,并且在这种情况下,边(vi, wj)∈E的权重为该非零尺寸;
&所有边均不交叉。
然后,无论是在无序还是有序的情况下,子树 T(v) 和子树 T(w) 的最大公共子树的大小等于图 G 中最大权二分匹配的权重加一。
最后,PSTb到PSTr的MCST的大小为MCSS(root(PSTb),root(PSTr))。
假设原始流程模型已更改为图4所示的模型,该模型可转换为图5 所示的 PST(“r” 编号中表示其为修订版PST)。然后,可采用上述方法获取PSTs的最大公共子树。
在计算分支节点的子树的最大公共子结构时,有以下几点:
(1) 计算最大公共子结构(T(b1),T(r1))
当 v=b1, w=r1,标签(v)=序列为,标签(w)=序列为时,满足规则4.2,二分映射如图 6所示。注意映射线不交叉。该二分映射包含两个叶节点映射和一个分支节点映射。
MCSS(T(b1), T(r1)) = 1 + 2 + MCSS(T(b6), T(r4)) = 3 + MCSS(T(b6), T(r4))
(2) 计算T(b6)和T(r4)的最大公共子结构
当v=b6, w=r4,标签(v)=异或,标签(w)=异或时,满足规则4.1,可得到两个二分映射,如图7所示。注意映射线是交叉的。
MCSS(T(B6), T(R4)) = 1 + 1 + MCSS(T(B7), T(R6)) = 2 + MCSS(T(B7), T(R6))
(3) 计算T(b7)和T(r6)的最大公共子结构
当 v=b7, w=r6,标签(v)=序列为,标签(w)=序列为,满足规则4.2,可得到两个二分映射,如图8所示。注意匹配线未交叉。两个映射均包含两个叶节点映射。
MCSS(T(B7), T(R6)) = 1 + 2 = 3:
, T(r1))的二分映射)
, T(r4)))
, T(r6))的二分映射)
(4) 最后,我们得到:
MCSS(T(b1), T(r1)) = 3 + MCSS(T(b6), T(r4)) = 3 + 2 + MCSS(T(b7), T(r6)) = 3 + 2 + 3 = 8
为了追踪计算过程,我们可以很容易地获得两个PST的概率后缀树的最大公共子树。图9展示了通过上述方法得到的MCST。ID对用于表示MCST中的节点,该节点由PSTb和PSTr中的节点ID组成。需要注意的是,在计算MCSS(T(b7),T(r6))时,我们得到了两个不同的二分映射,但具有相同的映射权重(如图8所示)。这种情况仅可能出现在规则4.2中。为了保持一致性,在这种情况下,原始PST中具有较小ID的节点具有更高的选择优先级。因此,我们选择(b9, r9)作为公共节点对,而不是(b10, r11),因为 9<10。
4.2 基于自顶向下的最大公共子树的变更操作检索
检索PST变化是一个树编辑距离(TED)问题[4]。由于我们工作的目的是重用变更,因此通过应用每个变更操作所得到的PST应为一个
WPST。遗憾的是,传统的基于TED的方法无法满足这一要求。例如,如果“Pay Out” 活动需要移动到“Send Payment Letter”的紧后位置,通过基于TED的方法得到的树编辑序列为“Relabel(Pay Out, Send Payment Letter), Relabel(Send Payment Letter, Pay Out)”,其中第一个编辑操作会导致修改后的PST出现两个标签为“Send Payment Letter”的叶节点,这与我们的假设相冲突。本节介绍一种通过比较修订前后PST来获取PST变更序列的方法。
4.2.1 PST 变更操作
设PST0, PST1,…,PSTn表示过程结构树,Δ0、Δ1、Δ2、…、Δn−1表示PST变更操作:
Δ0被称为PST0的可行变更操作,如果 Δ0的前提条件可以被满足,即PST0可以通过 Δ0变更为WPST,记作 Δ0(PST0)∈WPST。特别地,如果新的PST是 PST1,则Δ0被称为将PST0变更为PST1,的可行变更操作,记作Δ 0(PST0)=PST1。
对于PST PST0,,如果Δn−1(…Δ1(Δ0(PST0))…))∈WPST,则有序序列SΔ=<Δ0,Δ 1,Δ 2, …, Δ n-1>是PST0,的可行变更序列,记为SΔ(PST0) ∈WPST。如果Δ 0(PST0)=PST1;Δ 1(PST1)=PST2;…;Δ n-1(PSTn-1)=PSTn,则SΔ是将PST0变更为PSTn的可行变更序列,记为SΔ(PST0)=PSTn。序列
被称为从PST0到PSTn经过SΔ的过程结构树序列,记为Spst(SΔ, PST0, PSTn)以下是我们在方法中使用的两种基本PST变更操作,包括子树的删除和插入 (假设PSTb表示原始PST,PSTr表示修订后的PST,PSTc表示当前PST):
1) 删除(DT)
&效果:从PSTc中删除子树DT&参数:DT是PSTb和PSTc的自底向上子树[27]
2) 插入(IT, p, lfs, rfs, 偏移量)
&效果:将IT插入到由p、lfs、rfs和off定位的位置处的PSTc中&参数:IT是用 LSRoT方法表示的WPST。若IT中的叶节点表示一个活动,则该活动不应存在于PSTc中。.p、lfs、rfs和off用于确定插入位置。p、lfs、rfs是MCST(PSTb, PSTr)中的节点;p是lfs和rfs的父节点;lfs和rfs在MCST(PSTb, PSTr)中为直接兄弟节点;off是插入后从lfs到根节点(IT)的偏移量。此外,
(1) 如果节点p的标签为“XOR”或“Parallel”,则其子节点无序,此时使用lfs=Φ、rfs=Φ和off=0;
(2) 如果节点p的标签为“Sequence”或“ Loop”,则其子节点有序。此时,lfs=Φ(rfs=Φ)表示根节点(IT)在 MCST(PSTb, PSTr)中位于p的最左(最右)子节点的左侧(右侧)。
4.2.2 变更检索算法
变更操作检索基于以下假设:所有删除操作必须先于所有插入操作。该假设有助于避免检索到冗余操作。我们使用以下算法来获取变更序列:
算法1(检索算法) 输入:PSTb是原始PST,PSTr是修订后的PST;PSTb和PSTr均为SPST 输出:从PSTb到PSTr的树编辑序列SΔ
挖掘面向工作流平台即服务的变更操作
(1) 初始化:SΔ:= ∅;
(2) 找到PSTb和PSTr的自顶向下的最大公共子树;
(3) 删除存在于PSTb但不存在于MCST中的所有断开的子树,并将所有这些删除操作记录到SΔ中;
(4) 自顶向下插入存在于PSTr但不存在于MCST中的所有断开的子树,并将所有这些插入操作记录到SΔ中;
(5) 返回SΔ;
结束 我们仍以理赔管理流程为例:
(1)匹配 PSTb和 MCST 之间的节点。这很容易,因为 PSTb和 PSTr的 ID信息均保留在 MCST 中(见图 10);
(2)按 ID 顺序删除存在于 PSTb但不存在于 MCST 中的所有子树,并记录删除操作。对于该示例,可获取以下删除序列:
< Delete(T(b3)); Delete(T(b4)); Delete(T(b10)) >
(3) 匹配PSTr和MCST之间的节点。如图11所示,所有匹配的节点都用ID对标注;
(4) 按自顶向下的顺序插入所有存在于PSTr但不存在于MCST中的子树,并记录这些插入。如果两个插入的位置参数中除“off”外均相同,则应先执行具有较小偏移量的插入。对于该示例,可检索到以下插入序列:
< Insert({Record Result}; b1; b6; null; 1); Insert({Pay Out}; b7; b8; b9; 1) >
(5) 将插入序列追加到删除序列,我们将获得将PSTb更改为PSTr的变更序列SΔ;
4.3 变更规则挖掘
变更数据可用于挖掘流程模型配置的规则。决策树算法基于条件概率生成规则,这些规则是条件语句,便于人类理解并易于使用[26]。对于单个变更操作,我们可以构建一个决策树以生成其复用规则。决策树的一条路径可转换为一条规则。该规则的前提条件是某些上下文参数值的合取形式,结论是是否执行该变更操作。步骤如下所示:
(1) 将上下文信息和变更记录到日志中;
假设支持工作流的应用服务的原始PST为PSTb,已变更m次,对应的上下文信息为{CD1,CD2,…,CDm},得到m个PST编辑序列{SΔ 1, SΔ 2,…, SΔ m}。对于第i个配置,其变更日志为:
LΔi = {Lid;PSTb;< CP1 = cpvi 1; CP2 = cpvi 2;…; CPj = cpvi j;…>; SΔi}
其中Lid是日志ID,CPj=cpv i j表示第i个配置中第j个参数的值,SΔi =< Δi 1; …; Δi Num(SΔi) >是第 i个变更序列,Num(SΔi)是该变更序列中的变更操作数量。
(2) 预处理变更日志并将不同变更操作放入Δall;
(3) 为每个变更操作生成决策树Δall;
假设 Δall={Δ1, Δ2, …Δs},我们对 Δall中的每个变更操作应用C4.5算法[22] ,生成s个决策树。每条以“是”结尾的路径表示一条激活变更操作的规则,如下所示:
IF CPj = cpvj and CPt = cpvt; THEN perform Δk
5 变更规则复用
当新用户订阅支持工作流的应用服务并发现对应的原始流程模型需要配置时,在获取上下文信息后,可找到RΔ中的所有匹配规则。假设所有可能的操作为Δpossible={Δ1, Δ2, …, Δp}。这些操作存在相互依赖关系,我们需要对其进行合理调度。
5.1 变更操作关系
两个变更操作根据其前提条件和效果具有三种关系。假设PST0是执行两个变更操作 Δ1和 Δ2的PST:
Δ 1和 Δ 2存在冲突(记为X(Δ1, Δ 2, PST0)),当且仅当:根据检索约束,在任何将 PST0更改为其他任意PST的可行变更序列SΔ中, Δ 1和 Δ 2不能同时出现在SΔ中;
Δ2依赖于Δ1在PST0中(记作D(Δ1,Δ2, PST0)或RD(Δ2,Δ1, PST0)),当且仅当:对于所有将PSTΔ更改为任意PST的变更序列S0,如果Δ1和Δ2均出现在SΔ中,则Δ1必须在Δ2之前;
Δ1和Δ2在PST0中是可交换的(即它们互不影响)(记作M(Δ1,Δ2, PST0)),当且仅当:对于任意两个满足以下条件的变更序列SΔ1和SΔ2,都有PST1=PST2(即PST1与PST2同构)。
Δ2 SΔ2 Δ1 SΔ1 PST0()()()() = PST1 and Δ1 SΔ2 Δ2 SΔ1 PST0()()()() = PST2
表2 变更操作冲突(Δi≠Δj,将在Δj之前执行)
| Δj | 删除(T1) | 插入(T1, p1, lfs1, rfs1, off1) |
|---|---|---|
| 删除(T2) | 如果 T1 和 T2 具有共同的节点,它们存在冲突 | 不可能的删除应在所有插入之前执行 |
| 插入(T2,p2,lfs2, rfs2,偏移量2) | 如果 p2, lfs2或 rfs2 是一个节点 T1,它们存在冲突 | (1)如果T1和T2具有表示活动的共同节点,它们存在冲突;(2)如果 p1=p2, lfs1=lfs2, rfs1=rfs2, 且 off1=off2,,即位置两个插入的参数相同,它们处于相互冲突;(3) 如果 p1, lfs1, rfs1(p2, lfs2, rfs2) 的任意节点是右兄弟节点 lfs2(lfs1) 的左兄弟和 rfs2(rfs1) 的左兄弟,以及子节点 p2(p1) 的顺序是有序的,它们彼此之间存在冲突 |
表3 变更操作依赖关系(Δi和 Δ j 无冲突,Δ i先执行)
| Δ i | 删除(T1) | 插入(T1 ,p1 ,lfs1 ,rfs1 ,off1) |
|---|---|---|
| 删除(T2) | 无依赖关系 | 不可能 |
| 插入(T2 ,p2 ,lfs 2 , rfs 2 ,off 2 ) | 如果root(T1) 是lfs 2 的右兄弟,则 root(T1) 是 rfs2 的左兄弟,Δ j 是依赖于Δ i | 如果 p1 =p2 , lfs 1 =lfs 2 , rfs1 =rfs2 , 且 off 1 <off 2 ,,即由T 1 表示的子流程应被执行早于由T 2 ,表示的子流程 并且它们具有相同的左右固定兄弟节点,Δ j 依赖于Δ i |
该规则也很简单。两个无冲突的删除操作会从PSTb中移除两个互不相交的子树,因此它们彼此不受影响,即可交换的。类似地,两个无冲突的插入操作会将两个互不相交的子树插入到PSTb中。如果它们的位置相关,则它们是相关的;否则,它们是可交换的。
5.2 变更串联
我们应该安排 Δpossible 中的变更操作,以便应用可行变更序列来配置原始流程模型。与变更检索约束类似,我们也存在以下变更串联约束。
变更串联约束:设 SΔ C 表示一个拼接的变更序列:
&所有变更操作均来自Δpossible;
&所有删除操作均在插入之前;
& SΔ C(PSTb)∈WPST。
SΔ C是在当前上下文CDc下满足所有拼接约束的PSTb的变更序列(CS),记作CS(SΔ C, PSTb, CDc)=true。
设SΔ F表示可由条件TC触发的PSTb的一个变更序列。如果在当前CDc下,TC为真,则称SΔ F为上下文CDc中PSTb的一个可行变更片段(FCF)(记作FCF(SΔ F, PSTb, TC, CDc)=为真)当且仅当:
&所有插入依赖于每次删除;
&所有插入依赖于其前置的插入;
&包含在Δpossible中的所有其他变更操作与SΔ F中的某些变更存在冲突或可交换。
设Num(SΔ F)表示SΔ F中的变更操作数量。
假设 SΔ1 F 和 SΔ2 F 表示上下文 CDc 中 PSTb 的两个变更片段,
SΔ1 F和SΔ2 F是冲突的(记作X(SΔ1 F, SΔ2 F, PSTb)),当且仅当:存在一个变更操作Δi属于SΔ1 F ,以及一个变更操作Δ j属于SΔ2 F ,且Δi与Δ j发生冲突;
SΔ1 F和SΔ2 F是可交换的(记作M(SΔ1 F, SΔ2 F, PSTb)),当且仅当:对于SΔ1 F中的任意变更操作 Δi以及SΔ2 F中的任意变更操作 Δ j , Δi与 Δ j是可交换的。
规则5.3(变更片段连接的可行性)。假设SΔ1 F 、SΔ2 F 、…、SΔn F表示在上下文CDc中针对PSTb的n个可行变更片段,这些变更片段相互可交换。当SΔ C是一个拼接的变更序列时,若SΔ C满足条件,则CS(SΔ C, PSTb, CDc)=为真。
SΔ C 包含来自 SΔ1 F 、SΔ2 F 、…、SΔn F 的所有变更操作;
所有删除操作都在插入之前进行;
插入 Δi 在 SΔ C 中先于插入 Δj ,当且仅当 Δi 在片段 FΔk(1≤k≤n) 中先于 Δj 。
可以证明,SΔ C满足所有拼接约束条件:
SΔ1 F 、SΔ2 F 、…、SΔn F中的所有变更操作均来自Δ possible ,因此SΔ C中的所有变更操作均来自Δ possible ; 由于S Δ1 F 、S Δ2 F 、…、S Δn F是可交换的,因此S Δn F (…(SΔ2 F (SΔ1 F (PSTb))) ∈WPST。由于在S Δ C中所有删除操作都在所有插入之前,且在同一可行变更片段中的所有插入操作保持其在 SΔC 中的顺序,变更操作之间的依赖关系不会被破坏,SΔC(PSTb)∈WPST。
基于上述讨论,设计了一种算法以从可能的变更操作中获取CS。首先,该算法在当前上下文中找出所有可行的变更片段,并将其保存到集合FSFΔ中。其次,找到具有最大Num(SΔi F)的片段SΔi F。如果SΔi F与SΔi F中的所有片段均可交换,则将其追加到SΔC中,并从FSΔ F中删除SΔi F的所有冲突片段。重复此步骤,直到FSΔ F为空。最后,将FSΔ F中的所有删除操作移至所有插入操作之前,得到SΔ C。
算法2(拼接算法)
输入: PSTb是原始PST;CDc是当前上下文;R是触发变更操作的规则集
输出: SC 是用于变更 PSTb 的拼接的变更序列 伪代码:
开始
(1) 初始化:SC=∅
(2) 获取当前上下文中的变更片段集 FSF;
(3) 当 (FSF!=∅) 时执行
(4) S t F:=∅;// 假设 Num(∅)=0
(5) 对于 FSF 中的每个 S i F
(6) 如果 Num(S i F)>Num(S t F)
(7) S t F:=S i F ;
(8) 结束如果
(9) 结束循环
(10) 如果 (S t F与 SC中的所有片段可交换)
(11) 将 S t F追加到 S t F的末尾;
(12) 从 FSF中删除与 S t F冲突的所有变更片段;
(13) 结束如果
(14) 从 FSF 中删除 S t F;
(15) EndWhile
(16) 将 SC 中的所有删除操作 移动到所有插入的前面;
(17) 返回 SC。
End
该算法试图找到最长变更片段。一种可能的扩展是为每个变更操作定义业务价值,以便我们尝试找到具有最大总业务价值的变更片段。
表4 理赔处理流程的变更规则
| 变更操作 | 触发条件 |
|---|---|
| 删除 (T (b3)) | 客户星级=2 客户星级=3 客户星级=1&产品成本=”>50 ,000” |
| Delete (T (b4)) | 客户星级=3 |
| Delete (T (b8)) | 索赔类型=产品 |
| Delete (T (b9)) | 索赔类型=产品 |
| Delete (T (b10)) | 索赔类型=金钱 索赔类型=产品 |
| 插入 ({Customer Deliver Product}, b1 , b3 , b4 , 1) | 客户所在地=国外 |
| 插入 ({Notify Manufacture Dept.}, b7 , null, b 8 , 1) | 购买日期=7天内 |
| 插入 ({支付}, b7 , b8 , b9 , 1) | 索赔类型=金钱 |
| 插入 ({Send New Product}, b7 , null,null, 1) | 索赔类型=产品 |
| 插入 ({发送交货函}, b7 , null,null, 2) | 索赔类型=产品 |
6 实现与案例研究
已实现一个原型以验证此方法。该原型使用Java开发。图12展示了原型的框架,其由三层组成:用户层、持久层和引擎层:
(1) 用户层提供用于描述上下文和设计原始流程模型的工具,同时支持以图形化方式修改流程模型。
(2) 持久层存储所有日志及其他信息,包括工作流实例的运行日志、领域专家定义的原始流程和上下文模板、流程变更日志以及检索得到的变更规则。
(3) 引擎层是系统的核心部分。除了传统的工作流执行模块外,该层还包含一个变更管理模块,由四个组件构成:变更检索组件负责比较原始流程与修订后的流程,以检索出变更序列;变更规则检索组件通过决策树模型分析上下文与变更操作之间的关系,从变更日志中挖掘变更规则;变更规则复用组件根据新的流程上下文将变更操作组合成可行变更序列,并生成建议的流程模型;上下文描述组件用于记录或获取当前上下文信息。
索赔结算的原始流程模型和上下文模板已设计完成,如图13所示。
我们模拟了不同的工作流配置,并将其保存到数据库中。然后应用C4.5来挖掘变更规则。表4展示了从PST变更日志中挖掘出的变更规则。
表5 理赔结算的上下文信息
| 参数 | 值 |
|---|---|
| 客户星级 | 2 |
| 客户所在地 | 国外 |
| 产品成本 | 10,000‐50,000 |
| 购买日期 | 在保修期内 |
| 索赔类型 | 产品 |
表6 当前上下文中的可能变更操作
| ID | 变更操作 | 触发条件 |
|---|---|---|
| Δ 1 | 删除 (T (b3)) | 客户星级=2 |
| Δ 2 | 删除 (T (b8)) | 索赔类型=产品 |
| Δ 3 | 删除 (T (b9)) | 索赔类型=产品 |
| Δ 4 | 删除 (T (b10)) | 索赔类型=产品 |
| Δ 5 | 插入 ({Customer Deliver Product}, b1 , b3 , b4 , 1) | 客户所在地=国外 |
| Δ 6 | 插入 ({Notify Manufacture Dept.}, b7 ,null, b 8 , 1) | 购买日期=7天内 |
| Δ 7 | 插入 ({Send New Product}, b7 , null,null,1) | 索赔类型=产品 |
| Δ 8 | 插入 ({Send Delivery Letter}, b7 , null,null,2) | 索赔类型=产品 |
我们输入了如表5所示的上下文信息。表6显示了基于变更规则的所有可能变更。这些变更操作之间的关系如表7所示。
表7 可能的变更操作之间的关系
| Δ1 | Δ2 | Δ3 | Δ4 | Δ5 | Δ6 | Δ7 | Δ8 | |
|---|---|---|---|---|---|---|---|---|
| Δ1 | X | M | M | M | X | M | M | M |
| Δ2 | M | X | M | M | M | X | D | D |
| Δ3 | M | M | X | M | M | M | D | D |
| Δ4 | M | M | M | X | M | M | D | D |
| Δ5 | X | M | M | M | X | M | M | M |
| Δ6 | M | X | M | M | M | X | X | X |
| Δ7 | M | RD | D | D | M | X | X | D |
| Δ8 | M | RD | D | D | M | X | RD | X |
表8 可行的变更片段
| 触发条件 | 变更操作 |
|---|---|
| S Δ1 F | 客户星级=2 |
| S Δ2 F | 索赔类型=产品 |
| S Δ3 F | 客户所在地=国外 |
| S Δ4 F | 购买日期=7天内 |
表9 变更片段之间的关系
| SΔ1 F | SΔ2 F | SΔ3 F | SΔ4 F | |
|---|---|---|---|---|
| SΔ1 F | X | M | X | M |
| SΔ2 F | M | X | M | X |
| SΔ3 F | X | M | X | M |
| SΔ4 F | M | X | M | X |
根据拼接算法,首先找到片段 SΔ2 F并将其追加到 SΔ C;然后,由于 SΔ4 F与 SΔ2 F存在冲突而被删除;继续此步骤,将所有删除操作移至所有插入操作之前,得到的拼接的变更序列是:
SΔ =< Δ1; Δ2; Δ3; Δ4; Δ7 Δ8>
7 相关工作
工作流变更作为一种提高过程执行灵活性的方式,已讨论了数年[11, 12, 28, 31]。
如何记录用户的手动更改并利用这些更改是近期受到关注的问题。为了比较流程模型之间的差异,已提出多种度量指标[25, 26]。尽管这种比较能够显示两个模型之间的差异,但无法提供如何将一个模型更改为另一个模型的信息。一些研究者建议直接记录变更操作[10]。然而,这些变更操作可能存在冗余和噪声,例如,用户可能在插入某个活动后又将其删除。为避免此问题,已提出一些基于过程比较的变更检索方法。例如,李等人使用顺序矩阵来自动生成高层级两个工作流图之间的变更操作序列[18]。J. M. 库斯特等人还将流程转换为PSTs, 并逐层比较这些PSTs以获得分层变更日志[12]。然而,他们记录的变更操作包含移动操作,这些操作在后续重新配置流程模型时很难复用。在我们的方法中,变更操作以更易于复用的形式生成和记录。
流程挖掘是一种流程管理技术,它允许基于事件日志分析业务流程[29, 30]。大多数流程挖掘方法旨在通过挖掘作业执行日志来发现通用的流程模型,尤其是在缺乏参考流程的情况下[6, 15]。还有一些方法试图通过挖掘轨迹日志来改进现有流程模型或检查流程状态[1, 2, 5]。
显然,变更挖掘与流程挖掘不同。李等人比较了流程挖掘与流程变更挖掘的区别[17]。他们还提出了一种方法,从流程变体中推导出通用参考模型,使得参考模型与流程变体之间的平均距离最小化[19]。在[10],中,采用了一种变更挖掘方法, 以提供迄今为止所有变更的聚合概览。
变更之间的关系已在[14, 23]中讨论。为了生成正确的流程模型,应满足这些关系约束。然而,目前仅有在如何将一组变更应用于原始流程模型以适应当前上下文方面,已有少量研究。在 [20],中提出了一种上下文驱动的流程变更重用框架。其上下文定义与我们的相似。但在他们的框架中,只能基于基于案例推理的方法使用整个已变更的流程模型。而我们的框架可以从多个实例中学习变更规则,并综合运用这些规则,根据当前上下文信息来配置流程模型。
8 结论和未来工作
工作流平台即服务(WaaS)由于云计算的快速发展而变得日益普及。流程变更挖掘方法可以提高WaaS的工作流可配置性。该方法可分为三个步骤:第一步是通过比较原始PST和修订的PSTs来获取变更序列;第二步是挖掘流程变更与上下文信息之间的关系,从而发现变更规则;最后一步是应用这些规则创建适用于当前上下文的已配置的流程模型。该方法使WaaS能够持续从用户中获取知识。
本文提出的方法主要关注流程模型的控制结构变更。然而,在某些情况下,工作流中的数据模型也需要进行配置。当同时考虑结构变更和数据变更时,问题会变得更加复杂。另一个重要问题是,在挖掘变更规则时如何将时间因素纳入模型,例如,与很久以前的变更相比,近期的变更应给予更多关注。
76

被折叠的 条评论
为什么被折叠?



