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

孙昌爱 等: 基于模板匹配的       BPEL  程序故障修复及优化技术                                          2849


                    定义  3. 修复操作, OP. 基于故障程序生成候选补丁程序的代码修改规则.
                    修复操作主要基于       BPEL  程序所适用的变异算子. 由于部分变异算子所描述的代码修改规则不可逆, 无法修
                 复由自身产生的变异体故障. 例如           BPEL  变异算子  EEU (移除表达式中的一元减法运算符) 是一个无法修复的操
                 作, 因为无法修复因      EEU  而出现的故障, 且无其他变异算子进行有效修复. 为此, 本文对不可逆变异算子进行了扩
                 展, 扩展的结果如表      3  所示.

                                               表 3    扩展的  BPEL  变异算子描述

                           Category           Mutation operator                Description
                                                  EEU        Remove or add the unary subtraction operator from an expression
                                                  EMD        Substitute duration by 0, half of it or twice of it
                       Expression mutation
                                                  EMF        Substitute cut-off time by 0, half of it or twice of it
                                                  EAP        Add or remove absolute values from an expression
                                                  ACI        Replace the value of createInstance attribute with “yes” or “no”
                                                             Change sequential forEach activity to concurrent or concurrent to
                   Concurrency-independent activity  AFP
                                                              ∅
                                                             sequential
                           mutation
                                                  ASF        Swap a flow activity and a sequence activity
                                                  AIS        Replace the value of the isolated attribute with “yes” or “no”
                  Concurrency-related activity mutation  AWR  Swap a repeatUntil activity and a while activity

                    定义  4. 修复模板, FP. 给定类型为     BT  的基本语句块    B, 所有适用于   BT  的修复操作的集合      (能为该  BT  生成变
                 异体的变异算子集) 称为       BT  的修复模板, 记为    FP→BT. 对任意   BT, 有且仅有一个用于指导修复过程的           FP.
                    定义  5. 修复操作集, S OP . 给定一个语句块, 适用该语句块的所有           OP  的集合称为修复操作集, 记为        S OP.  对于一
                 个给定的语句块, 其     S O 由自身与内嵌的所有语句块类型对应的              FP  组成.
                                  P
                    分析图   1  中语句块的树形结构, 可确定        literal 语句块的修复操作集为      S OP =FP(literal), from  语句块的修复操
                 作集为   S OP =FP(from)∪FP(literal), 以此类推, copy 语句块的修复操作集为  S OP =FP(copy)∪FP(from)∪FP(literal)∪
                 FP(to). 分析每种基本语句块的类型        BT  适用的修复操作并构造修复模板          FP, 在确定故障语句块后, 根据故障语句
                 块的修复操作集      S O 调用相应修复模板.
                                P
                  2.3   故障修复算法
                    本节介绍    BPELRepair 的故障修复算法. 算法的输入包括存在故障             BPEL  程序  P、测试用例集     T、测试用例
                 预期输出   E  和修复模板集    S FP . 如果修复成功, 输出为修复成功后的程序         R; 否则, 输出为空集. 具体步骤如算法         1.

                 算法  1. BPELRepair 算法.

                 输入: P = {b 1 , b 2 ,…, b m }, T = {t 1 , t 2 ,…, t n }, E={e 1 , e 2 ,…, e n }, S FP ;
                 输出: R.

                 1. Initialize ER = EI = SUS = BL = TR = R = blockTypeSet =
                 2. Send T to execute P and get results ER, P
                 3. for each b i  in P do
                 4.  sus(b i ) ← formula(Method, P, ER)
                 5. end for
                 6. BL ← Rank(SUS) decrease
                 7. for each b i  in BL do
                 8.  OperatorSet ←   ∅
                 9.  blockTypeSet ← GetAllBlockType(b i )
   268   269   270   271   272   273   274   275   276   277   278