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 问题发生时最好情况下的结果.
   171   172   173   174   175   176   177   178   179   180   181