Page 272 - 《软件学报》2024年第6期
P. 272

2848                                                       软件学报  2024  年第  35  卷第  6  期


                    从变异分析的角度, 我们提出了基于模板匹配的                BPEL  程序故障修复技术, 简称为        BPELRepair. 图  2  示意了
                 BPELRepair 的方法原理, 包含如下     4  个步骤.

                               ① Template                        ② Fault
                               extraction                        location


                                 BPEL block          Mutation          Suspicious
                                   types             operators         calculator
                                                Template
                               ③ Patch
                               generation
                                                                            BPEL block
                                           Patch                            types traces
                                          generator
                                                     Suspicious fault
                                                       phrases
                                           程序中的语句块是以
                               ④ Program        Collection of
                               verification   candidate programs
                                                        Program
                                                        validator
                                                                        Test cases  Faulty programs



                                                                            Valid candidates
                                                图 2 BPELRepair 的方法原理图

                    (1) 模板抽取: 在分析    BPEL  程序的特点的基础上, 将语句块类型和与其适用的所有变异算子组合得到                        BPEL
                 故障修复模板.
                    (2) 故障定位: 使用测试用例集执行故障程序, 收集执行结果与执行轨迹, 利用这些信息并结合怀疑度计算公
                 式  (本文选用  Tarantula 、DStar 、CBI [18] 和  Ochiai [18] ) 计算每个语句块的故障怀疑度, 最后依照故障怀疑度进行
                                  [8]
                                          [8]
                 排序.
                    (3) 补丁生成: 补丁生成器      (patch generator) 利用故障定位阶段的语句块排序结果, 依次针对可疑语句块展开
                 修复. 首先, 确定可疑语句块及其嵌套的语句块的类型, 找到这些语句块类型所对应的修复模板; 然后, 获取修复模
                 板内的修复操作集合; 最后, 对相关语句块的代码进行搜索匹配以确定修复操作的适用性, 使用适用的修复操作对
                 该语句块执行变异生成补丁程序集合.
                    (4) 程序验证: 程序验证器      (program validator) 使用测试用例集检验每个补丁程序. 若某个补丁程序通过了所
                 有测试用例的测试, 表明该补丁程序对原有故障的修复符合规约, 故障修复成功并终止修复过程; 否则, 继续验证
                 剩余的补丁程序. 如果未发现有效补丁程序并且当前语句块的所有补丁程序完成了检验, 则对下一个语句块重复
                 步骤  (2) 和步骤  (3).
                  2.2   相关定义
                    定义  1. 基本语句块, B. BPEL                   XML  标签为界定的一组语句. 基本语句块指不包含其他
                 语句的语句块.
                    例如, 图  1  中第  11  行和第  12  行是一个基本语句块; 而第    1–13  行为以  XML  标签<bpel:assign> 为界定的语句
                 块, 内嵌套<bpel:copy><bpel:from> 等, 不属于基本语句块.
                    定义  2. 基本语句块的类型, BT. 基本语句块的         XML  标签名中不含前缀的部分为基本语句块的类型.
                    例如, 图  1  中第  11  行和第  12  行的基本语句块的类型为“to”.
   267   268   269   270   271   272   273   274   275   276   277