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 故障修复失败示例