Page 271 - 《软件学报》2024年第6期
P. 271
孙昌爱 等: 基于模板匹配的 BPEL 程序故障修复及优化技术 2847
表 2 BPEL 程序变异算子描述 (续)
Category Mutation operator Description
XMF Remove the “catch” or “catchall” elements from error handlers
XMC Remove the definition of a compensation handler
Exception and event XMT Remove the definition of a termination handler
mutation XTF Substitute the thrown fault with a throw activity
XER Remove a rethrow activity
XEE Remove the onEvent element from an event handler
AEL Remove an activity
AIE Remove the “elseIf” or “else” element from an if activity
AWR Substitute a while activity with a repeatUntil activity
Concurrency-independent
AJC Remove the joinCondition element
activity mutation
ASI Exchange two child activities within a sequence activity
APM Remove the onMessage element of a pick activity
APA Remove the onAlarm element that can be associated to a pick activity
ACI Change the value of createInstance attribute from “yes” to “no”
Concurrency-related AFP Change a sequential forEach activity to parallel
activity mutation ASF Substitute a sequence activity with a flow activity
AIS Change the isolated attribute of a scope to “no”
2 基于模板匹配的 BPEL 程序故障修复技术
本节提出一种基于模板匹配的 BPEL 程序故障修复技术, 首先介绍该技术的基本原理, 包括方法框架、故障
修复规则与算法等, 然后讨论优化策略, 最后用一个例子演示方法的使用.
2.1 基于模板匹配的故障修复方法框架
通常说来, 基于变异分析的故障修复技术的基本思想是: 通过对故障程序执行变异操作生成可能正确的程序.
该方法基于如下假设 [17] : 如果一个真实的错误来自于一个正确程序的微小修改, 那么一个故障程序的修改则有可
能产生正确的修复. 图 1 示意一个故障程序 (变异体) 及其正确的修复版本. 故障程序可以看作是 BPEL 变异算子
ISV (相同类型的变量标识符替换) 生成的变异体, 即将对变量 b 的赋值错误写成对变量 a 的赋值; 而故障修复则
可以看成是上述变异分析的逆过程, 即将变量 a 修改为变量 b. BPEL 程序由若干个语句块组成, 每个语句块属于
特定的语句块类型. 而不同的语句块类型仅能适用特定类型的 BPEL 变异算子. 例如, 由于图 1 示例的程序不包
含 sequence, 因此 BPEL 变异算子 ASF (将 sequence 活动替换为 flow 活动) 不适用. 利用全部变异算子对故障语句
块进行故障修复时, 仅有少数几个变异算子是有效并能产生候选补丁程序. 因此, 通过分析语句块类型与每种
BPEL 变异算子的匹配关系, 即每种语句块类型能够适用哪些变异算子, 从而构造修复模板; 然后利用这些修复模
板, 可以避免不必要的变异算子搜索匹配过程.
(a) 故障程序 (b) 修复程序
图 1 研究动机示例