Page 176 - 《软件学报》2026年第7期
P. 176
宋壹 等: 基于异常检查点植入的软件缺陷定位方法 2861
3.2 参数设置
如第 2.4.2 节所述, INSPECT 采用 SBFL 技术为每条程序语句 s 计算辅助风险值 Assist_Sus . 在实验中, 选择
s
Crosstab [43] 、Ochiai [44] 、DStar [45] 和 Naish2 [46] 这 4 项 SBFL 技术用于这一过程, 因为它们具有高度的代表性且被证
实在同类技术中具有最好的效果 [32,47] . 将上述 4 项 SBFL 技术分别应用于 INSPECT 中, 分别产生 INSPECT C 、
INSPECT O 、INSPECT D 和 INSPECT N 这 4 种变体, 以更加全面地进行实验.
3.3 数据集
为了充分评估 INSPECT 方法应用于不同类型错误程序时的缺陷定位能力及泛化能力, 选取 Chart、Time、
Math 和 Lang 这 4 个开源项目构建实验数据集, 这些项目均在缺陷定位领域最流行的数据集之一 Defects4J 中得
到了广泛使用 [48] , 且已被大量应用于对软件测试调试技术的评估和度量 [49−52] . 其中, Chart 和 Time 程序中具有一
定数量的异常处理代码, 而 Math 和 Lang 程序中原有的异常处理代码相对较少. 为了充分评估 INSPECT 对缺少
异常处理语句的待测程序的泛化能力, 并排除待测程序原有异常处理语句对实验的干扰, 将忽略所选取项目中的
异常处理代码, 仅基于植入的检查点收集异常触发流信息. 在上述 4 个项目的原始程序中, 采用基于突变的方法注
入缺陷, 形成 480 个待测错误程序版本. 此外, 还在上述相同开源项目中选取 60 个真实缺陷版本纳入实验数据集,
以评估 INSPECT 在真实环境下面向不同种类缺陷的定位能力. 之所以采用的真实缺陷版本少于模拟缺陷版本, 是
因为 Defects4J 中上述开源项目的真实缺陷版本在目前均已过时, 在这些基于不同 JDK 版本的缺陷版本中, 最新
被支持的 JDK 版本是 1.8, 而其对应的开源项目到目前为止支持的最旧 JDK 版本是 11. 将这些真实版本进行兼容
适配需要手工逐一操作, 将造成大量开销.
3.4 评估指标
选取 3 项在缺陷定位领域现有研究中得到广泛应用的实验度量指标: EXAM [53,54] 、MRR (mean reciprocal rank) [55,56]
和 WSR (Wilcoxon signed-rank) [45,57] . 其中, EXAM 指标度量缺陷定位技术生成的语句风险值排序列表中位于缺陷
语句之前的程序语句数量, MRR 指标度量缺陷语句在风险值排序列表中位次的倒数, WSR 指标度量 INSPECT 方
法的缺陷定位表现超越现有最先进方法的显著性.
关于 EXAM 指标, 实验按照通用做法为其度量 EXAM_Best、EXAM_Average 和 EXAM_Worst 这 3 个方面, 分
别评估方法在最好、平均和最差情况下的缺陷定位效果 (即如果缺陷语句在 Tie 中, 则分别按照其在 Tie 中第 1
个、正中间、最后一个被检查进行计算). 具体而言, EXAM_Best 仅考虑风险值严格大于缺陷语句的程序语句数
量, 对于与缺陷语句存在 Tie 关系 (风险值相等) 的语句, 假设其会在缺陷语句之后被检查; 与此相反, 对于与缺陷
语句存在 Tie 关系的语句, EXAM_Worst 假设其会在缺陷语句之前被检查, 因而其考虑的是风险值大于等于缺陷
语句的程序语句数量; EXAM_Average 代表在平均情况下计算的 EXAM 分数, 缺陷语句的 EXAM 分数将被计算为
所有与其风险值相等的程序语句的 EXAM 分数的平均值. 对于全部 3 种 EXAM 指标计算方法, 更低的值意味着更
优的缺陷定位表现.
MRR 指标定义为第 1 个相关元素被找到的平均倒数排名, 如公式 (7) 所示:
1 K ∑ 1
MRR = (7)
K rank i
i=1
其中, K 表示实验中待测错误程序版本的数量, rank i 代表第 i 个错误版本中缺陷语句的风险值排名. MRR 中 rank i
的取值会受到 Tie 问题的影响, 实验仅在最好情况下进行考虑, 因为其余两种情况下的方法表现已在 EXAM 指标
中得以评估. 更高的 MRR 分数代表更优的缺陷定位表现.
WSR 指标用于评估实验结果的统计显著性, 即: 所提出 INSPECT 方法的缺陷定位表现是否显著优于现有最
先进方法. 实验设计两个单边备择假设: NB (not bad, 即 INSPECT 的表现不低于基线方法) 和 B (better, 即 INSPECT
的表现优于基线方法). 对于基线方法生成的缺陷定位结果, NB 代表在定位缺陷语句前需要检查的程序语句数量
大于等于 INSPECT 生成的结果, B 代表在定位缺陷语句前需要检查的程序语句数量严格大于 INSPECT 所生成的
结果. 这一指标同样仅考虑 Tie 问题发生时最好情况下的结果.

