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 研究动机示例
   266   267   268   269   270   271   272   273   274   275   276