Page 281 - 《软件学报》2026年第5期
P. 281

2160                                                       软件学报  2026  年第  37  卷第  5  期


                 关的变化   [33] , 我们使用这些代码差异作为算法的输入. 此外, Defects4J 还提供了缺陷修复的关键更改, 这些更改由
                 人工最小化并进行验证, 可以作为本文            RQ1  和  RQ4  实验中的真实标签    (ground truth). 在之前的研究中  [19] 发现了
                 26  条数据的修订版本     V obug  和  V ofix  是不可访问的, 因此最终有  809  个缺陷作为本文的实验数据. RegMiner 构建的
                 回归缺陷数据集包含        1 035  个回归缺陷, 据我们所知, 它是唯一一个包含缺陷引入变更的大规模数据集, 经过人工
                 验证发现   [19] 其中有  10 条数据是重复的或与不稳定的测试有关, 在本文的实验中使用了筛选后的                     1 025 个回归缺陷.
                 且该数据集在     C2D2 [19] 中已通过人工验证确定了关键缺陷变更集, 可以作为              RQ1  和  RQ4  实验判断准确率的依据.
                    本文研究还观察到, 回归缺陷数据集中的代码变更规模                  (hunk  的数量) 显著高于   Defects4J, 我们根据代码变更
                 块的数量对数据集进行了离群点检测, 并根据四分位点和离群值划分为                        5  个区间, 如表  1  和表  2  所示. 进而, 我们
                 比较本文所提出的       DISAC  缺陷隔离方法在不同规模数据集上进行缺陷隔离时的性能和准确性, 将回归缺陷数据
                 集按照上述    5  个区间进行实验.

                       表 1 回归缺陷数据集中分组数量统计                           表 2 Defects4J 数据集中分组数量统计

                            区间                  数据量                      区间                  数据量
                        低位区间 (1–46)              622                 低位区间 (1–4)               404
                       次低区间 (47–92)              122                 次低区间 (5–8)               141
                       次高区间 (93–138)              47                 次高区间 (9–12)              65
                       高位区间 (139–176)             31                高位区间 (13–16)              43
                       离群值区间 (177+)               94                离群值区间 (17+)               61

                  3.3   基准方法
                    在缺陷隔离任务的比较中, 本文综合已有文献研究和相关开源代码的情况, 我们选取了增量调试方法中传统
                 的  ddmin  算法  [7] 、ProbDD  算法  [18] 和最新的  C2D2  算法  [19] , 在相应的数据集上进行缺陷修复关键变更提取和缺陷
                 引入关键变更提取两个任务上进行比较. 本文实验在所有的增量调试算法中集成                          DDJ [16] 依赖检测机制以确保实验
                 比较的公平性, 并与本文提出的         DISAC  方法结果进行对比.
                    在消融实验中, 本文选取最新的变更代码子集拆分算法                  SmartCommit [28] ——一种仅基于变更代码依赖关系的
                 拆解算法, 代替    DISAC  算法中变更代码子集拆分部分, 进行对比实验.
                  3.4   评价指标
                  3.4.1    缺陷隔离准确性评价指标
                    在用于缺陷隔离的增量调试工作中             [16−19] , 准确性通常使用以下度量指标.
                    ● 成功隔离的条目数量        (#成功): 在规定时间内能够隔离出引入缺陷的变更代码, 并通过还原变更代码, 项目
                 正常运行并测试通过的条目数量. 本文参考已有                DD  研究  [18,19] , 将  DD  方法的执行时间上限设定为  2 h. 鉴于实验
                 数据集的项目特性以及        DISAC  方法流程设计的高效性, 本文将         DISAC  实验的时间上限设定为        20 min, 在保障实
                 验顺利完成的同时, 也预留了对潜在异常情况的处理空间.
                                                  ∗
                                            |H|−|H |
                    ● 约减率平均值     (约减率   (%)):      , 其中  H  是通过算法隔离到的缺陷变更代码集合,            H  是原始变更代码
                                                         ∗
                                              |H|
                 集合, 计算所有成功数据, 并取平均值.
                  3.4.2    用户验证实验中相关评价指标
                    我们在验证     DISAC  结果作用和价值的用户实验中采用以下评价指标.
                    ● 平均完成时间     (min): 用户完成缺陷引入根因确定任务所用时间的平均值.
                    ● 平均正确率    (%): 用户在规定时间内正确描述缺陷根因的数量占比的平均值.
                  4   实验问题与分析


                    为了评估本文提出方法的效果, 本节依次详细叙述设计的实验问题以及对应实验结果, 并进行分析.
   276   277   278   279   280   281   282   283   284   285   286