Page 275 - 《软件学报》2024年第6期
P. 275
孙昌爱 等: 基于模板匹配的 BPEL 程序故障修复及优化技术 2851
提出如下故障修复的优化策略.
2.4.1 补丁生成优化策略
● 模板匹配优化策略 (TMS): 目前已定义了 34 种适用于 BPEL 程序的变异算子, 而故障语句块可能只适用于
其中几种变异算子. 为了减少无效的搜索匹配过程, 将 BT 和变异算子组合得到修复模板 FP. 在补丁生成时, 应用
该策略后只选取 BT 所适用的部分变异算子, 从而提高搜索匹配的效率.
● 修复操作子集优化策略 (OPSS): 我们的前期研究工作 [19] 发现, BPEL 程序的变异算子存在包含关系, 即
AIE⊆AEL、CFA⊆AEL、ASI⊆ASF、CCO⊆CDC、CDE⊆CDC、EIN⊆ERR, 每一组中的变异算子能够产生相同
或等价的变异体. 基于上述包含关系, 将变异算子由原先的 34 种缩减为 28 种. 通过减少修复操作 OP 的数量, 可
以有效减少变异体的数量 (即减少补丁程序的数量), 从而缩减程序验证过程的开销.
● 历史修复操作优化策略 (HOPS): 为了更快地找到有效的修复, 给予由历史修复操作 OP 变异生成的补丁程
序更高的优先级. Le 等人 [20] 认为历史故障信息能够指导后续的故障修复工作, 即假设曾经出现过故障类型可能还
会发生并且概率大于少见故障类型. 通过保存历史修复报告, 给予由这些历史 OP 生成的补丁程序更高的优先级,
将这些补丁程序排在候选补丁程序集合的头部, 程序验证时优先检查这些补丁程序.
语句块百分比对应语句块的位置为故障修复终止位置.
2.4.2 测试用例选择优化策略
验证补丁程序时, 需要执行测试用例以验证补丁程序中的修复是否有效. 当补丁程序无法通过某一个测试用
例时, 也即修复无法满足程序规约, 终止该补丁程序的检验. 在此过程中, 通过优先使用高故障检测率的测试用例,
能够更快地检测出无效的补丁程序, 从而减小测试用例的执行次数并提升故障修复的效率. 相应地, 本文提出以
下 3 种测试用例选择优化策略.
● 故障定位阶段错误测试用例优先策略 (DFTS): 结合故障定位阶段测试用例的测试结果, 给予检出故障的测
试用例更高的执行优先级. 其核心思想是: 故障定位阶段能够检出故障的测试用例, 在补丁程序验证阶段通常也具
有较大的揭示无效修复的能力.
● 覆盖故障语句块优先策略 (CSS): 结合故障定位阶段测试用例的执行覆盖情况, 给予覆盖故障语句块的测试
用例更高的执行优先级. 如果在故障定位阶段某个测试用例覆盖执行了故障语句块, 那么在验证补丁程序阶段该
测试用例通常也可以覆盖被修复的语句块, 因而可以快速地验证故障修复是否有效. 不同测试用例覆盖的语句块
存在差异, 并且故障语句块是根据怀疑度列表的检查进度不断变化的, 因此测试用例的优先级随着修复过程发生
变化.
● 验证阶段错误测试用例优先策略 (VFTS): 结合程序验证阶段测试用例的执行情况, 给予可以揭示无效修复
的测试用例更高的优先级. 当执行完一次程序验证后, 如果补丁程序无法通过某个测试用例, 则表明该测试用例揭
示了无效的修复; 那么, 该测试用例在未来也有较大可能揭示其他无效的修复.
2.4.3 终止条件设定策略
在故障修复过程中, 如果已经检查过真正错误的语句块之后仍未生成有效的修复程序, 那么后续的修复过程
无法产生正确修复程序. 因此, 应当及时终止修复验证过程, 从而减少故障修复的开销.
定义 6. 故障修复终止位置. 终止位置指存在故障的语句块在怀疑度列表中的位置.
一般说来, 怀疑度列表中终止位置之后的语句块通常无法修复故障. 相应地, 提出以下终止条件优化策略.
● 最大语句块百分比终止策略 (SCTS): 通过设定要检查修复的语句块的最大百分比提前终止故障修复, 最大
2.5 方法示例
本节采用一个 BPEL 程序示例本文提出的故障修复技术 BPELRepair. SupplyCustomer 程序是一个商家订单
管理系统. 图 3 示意了 BPEL 流程, 根据用户输入的商品信息和地址选择不同的处理方式, 当地址合法并且商品有
库存时进行扣款业务和商品邮递业务. 其中扣款服务和商品邮寄服务并发执行, 最终的结果通过“replyOutput”活
动返回.