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

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


                        [3]
                 language) 是一种广泛采纳的可执行的服务组装语言, 从工作流的角度协调参与业务流程的外部                           Web  服务, 而实
                 现的流程本身可以看作一个新的            Web  服务. 以这样的方式, BPEL    可以支持不同粒度、复杂的服务组合. 与传统
                 的  C、C++、Java 程序相比, BPEL   程序具有以下特点      [3] .
                    (1) BPEL  程序支持显式的    Web  服务组装方式, 而传统程序侧重于各种计算.
                    (2) BPEL  程序采用伙伴链接活动调用        Web  服务, 这些服务可能由不同的编程语言实现.
                    (3) BPEL  程序呈现为  XML  文件, 不同于传统应用程序.
                    (4) BPEL  程序用带有  link  的  flow  活动来支持并发同步机制, 传统程序通过多线程的方式实现并发机制.
                    程序调试    [4] 旨在排除软件测试阶段检测的故障, 包括故障定位和故障修复. BPEL                 程序的特点使得其调试面临
                 新挑战  [5] . 具体来说: (1) BPEL  程序侧重服务之间的交互与协调, 而传统程序侧重于数据的操作与存储, 导致在编
                 程模型、语法格式、执行方式等方面区别于传统程序; (2) BPEL                 程序以  XML  格式呈现, 而针对     XML  程序调试的
                 研究工作并不多见; (3) BPEL     程序将结构信息和交互信息同时嵌入到              XML  程序中. 上述    BPEL  程序的新特点使
                 得面向传统程序的调试技术难以直接应用于                BPEL  程序. 为此, 人们提出了一些面向        BPEL  程序的故障定位技术,
                 主要包括: 1) 基于块结构的      BPEL  程序故障定位技术      [6] : 利用程序频谱应用于    BPEL  程序块结构, 计算每个语句块
                                                        Web
                 的故障怀疑度; 2) 基于谓词切换与程序切片相结合的               BPEL  程序故障定位技术      [7] : 采用程序切片技术分析与关键
                 谓词切换相结合法给方式定位           BPEL  程序的故障片段; 3) 基于变异分析的         BPEL  程序故障定位技术      [8] : 通过变异
                 获得  BPEL  故障程序所有变异体, 统计每个语句块对应变异体集的执行信息并结合怀疑度计算公式计算语句块故
                 障可能性. 上述技术中, 基于变异分析的           BPEL  程序故障定位技术具有较好的定位精度与定位效率, 因此本文采用
                 该技术确定故障语句块位置. 现有           BPEL  程序故障修复方面的主要工作包括: 1) 使用正确             BPEL  程序代替存在故
                 障的  BPEL  程序  [9] . 此类方法假设存在正确的     BPEL  程序版本; 2) 基于   BPEL  语言异常处理机制的故障修复技
                 术  [10,11] : 人为预先定义程序故障时执行的特定操作, 包括终止、重做、回滚、警报、替换以及其他补偿操作. 此类
                 方法提供了一种增强       BPEL  程序鲁棒性的机制, 但是需要人工设计相关的修复操作.
                    本文提出了一种基于模板匹配的            BPEL  程序故障修复方法. 首先将语句块类型信息与变异算子组合构造修复
                 模板. 之后, 利用   BPEL  程序的故障语句块类型信息选取对应的修复模板, 结合修复模板中的变异算子对故障语句
                 块执行变异操作生成候选补丁程序, 最后执行测试用例集验证补丁程序的正确性. 为了解决补丁生成、补丁验证
                 等过程开销高的问题, 本文从补丁生成、测试用例选择及终止条件                       3  个角度提出了    7  种优化策略. 开发了一个
                 BPEL  故障修复支持工具, 提高故障修复的自动化程度与效率. 采用                 6  个程序实例的    403  个故障版本, 验证本文所
                 提故障修复技术及优化策略的有效性.
                    本文第   1  节介绍基础知识, 包括     BPEL  程序、变异分析和       BPEL  变异算子. 第  2  节介绍基于模板匹配的故障
                 修复技术及优化策略. 第       3  节对所提技术与优化策略的有效性进行实验评估. 第                4  节介绍基于搜索的故障修复与
                 BPEL  程序的故障定位研究现状. 最后总结全文.

                  1   背景知识

                    本节介绍    BPEL  程序、变异分析和      BPEL  程序的变异算子.
                  1.1   BPEL  程序
                    BPEL  程序以  XML  的格式呈现, 显式地组合            服务并实现具体的业务逻辑. 具体说来, 通过              BPEL  活动
                 (activity) 将流程中的每个组件依据业务逻辑进行连接, 形成完整的业务流程. 主要的组件类型如下.
                    ● 伙伴链接: 描述    BPEL  程序与关联   Web 服务间关系, 包括调用外部        Web  服务或自身对外提供的        Web  服务.
                    ● 变量: 定义  BPEL  程序使用的数据, 负责存储与        Web  服务交互过程中的输入和输出数据.
                    ● 补偿处理: 如果    BPEL  程序中的某一个活动发生异常, 撤销该活动之前的活动任务, 实现业务回滚.
                    ● 错误处理: 通过定义适当的错误处理机制, 捕获到异常并作处理, 保证业务流程正常进行.
                    BPEL  程序的活动负责业务流程的具体执行, 分为基本活动                 (basic activity) 和结构化活动  (structured activity),
                 见表  1. 其中, 基本活动描述业务流程的基本简单步骤, 而结构化活动用于管理业务流程的控制流逻辑.
   264   265   266   267   268   269   270   271   272   273   274