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

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


                  3.4   实验结果与分析
                    从修复成功率和计算开销两方面来评估              BPELRepair 及其优化策略的有效性.
                  3.4.1    BPELRepair 的有效性  (RQ1)
                    6  个实验程序的故障修复评估结果见表            7. 其中, faults 栏表示总的故障数量, faults successfully repaired  栏表示
                 成功修复的故障数量, PF      栏表示故障修复的成功率.

                                                   表 7    故障修复评估结果

                             Subject program     Faults      Faults successfully repaired  PF (%)
                               CarEstimate        23                 6                 26.09
                              LoanApproval        64                 26                40.63
                              QuoteProcess        78                 50                64.10
                               SmartShelf         78                 38                48.72
                             SupplyCustomer       50                 31                62.00
                              TravelAgency        110                62                56.36

                                 Total            403               213                52.85

                    由表  7  可知, BPELRepair 在  QuoteProcess 程序上的效果最好, 故障修复成功率可达        64.1%; 在  CarEstimate 上
                 修复的效果最差, 故障修复成功率为             26.09%; BPELRepair 的平均故障修复成功率为        52.85%. 上述结果表明,
                 BPELRepair 可以修复  50%  以上的  BPEL  程序故障.
                    进一步分析故障修复较低的原因时发现: 相比变异分析方式生成的故障而言, 人工植入方式生成的故障难以
                 采用现有变异算子进行修复. 由于           CarEstimate 与  LoanApproval 中存在较多的人工植入故障类型, 因此故障修复
                 成功率相对较低. 举例说来, 图        4  示意了一个程序及其故障版本. 故障程序图            4(b) 在第  4  行与第  15  行出现了两种
                 错误且都无法采用现有变异算子修复: 1) nsl 的           name 赋值错误   (“cookie”→“tns:name”): 当修复程序定位到该故障
                 时, 将使用变异算子      ISV (相同类型的变量标识符替换) 修复, 根据上下文找出相同类型的变量标识符并替换生成
                 变异体, 但正确程序实际上使用了上下文没有出现过的新字符串, 因此修复失败; 2) nsl 的                     amount 赋值错误   (“6060”
                 → “6000”): 当修复程序定位到该故障时, 将使用         ECN (增加或减小一个数字常量的值, 添加或移除一个数字)、EAP
                 (用表达式的绝对值替代该表达式)、EAN (用表达式的绝对值的负值替代该表达式) 等变异算子修复, 然而这些变
                 异算子并不能将数值       6 000  成功修复为  6 060.
























                                     (a) 正确程序                               (b) 故障程序
                                                   图 4 故障修复失败示例
   275   276   277   278   279   280   281   282   283   284   285