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”活
                 动返回.
   270   271   272   273   274   275   276   277   278   279   280