Page 276 - 《软件学报》2024年第6期
P. 276
2852 软件学报 2024 年第 35 卷第 6 期
Bill→WholeSaler→Assign→Ship→Verify→Flow→Assign2Res.
图 3 SupplyCustomer 的 BPEL 流程图
假设在 SupplyCustomer 程序实例中存在一个 ERR 类型的故障, 即“If_checkStock”语句块的条件表达式为“$check-
StockResponse.parameters/ns4:checkStockReturn != ‘yes’”, 而正确程序应为“$checkStockResponse.parameters/
ns4:checkStockReturn = ‘yes’”. 本文提出的 BPELRepair 工作过程如下.
步骤 1. 对待修复的故障程序 SupplyCustomer 执行配套的测试用例集, 获得每个测试用例的执行轨迹信息以
及实际输出结果. 将实际运行结果与预期输出进行比对, 确定测试用例是否执行成功.
步骤 2. 选择故障定位算法, 依据步骤一的信息, 对程序中的所有语句块进行怀疑度计算并排序. 本例使用
Ochiai 公式得到怀疑度列表中语句块顺序为: If_checkStock→CheckStock→Assign2Result→InitialAssign→OrderPass→
步骤 3. 顺序遍历步骤 2 得到的语句块列表, 首先选择“If_checkStock”语句块. 该语句块嵌套多层语句块, 包含
的基本语句块类型有 if、condition、sequence、else.
步骤 4. 从修复模板集合中, 找到步骤 3 语句块类型集合所对应的语句块模板并统计修复操作集. 涉及的修复
操作包括 AIE, CFA, EAA, EEU, ERR, ELL, ECC, ECN, EIN, CDE, CCO, CDC, ASF, ASI.
步骤 5. 递归遍历“If_checkStock”语句块中所有基本语句块, 应用步骤 4 中获得的修复操作集合, 变异生成关
于该语句块的所有补丁程序.