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

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


                    另外, 实验结果显示, 在      Defects4J 数据集和回归缺陷数据集中, 最快的          DD  算法  C2D2  方法的平均运行时间
                 分别为   682.66 s 和  987.91 s, 而  DISAC  方法的平均运行时间为  93.05 s 和  118.49 s, 分别提升  633.65%  和  733.75%.
                 DD  算法在过程中需要不断隔离特定的代码变更子集, 执行编译和测试操作, 以逐步缩小缺陷范围. 这种反复的编
                 译和测试操作耗费大量时间, 尤其是在处理大型项目或复杂依赖关系时, 时间开销尤为明显, 也会出现很多超时的
                 情况. 相比之下, 本文提出      DISAC  方法通过结合静态分析技术, 利用大语言模型分析变更代码的语义信息以进行
                 拆解, 拆解后利用二分查找的方法进行, 大大减少了执行繁重的编译测试的次数, 能够以显著更短的时间提供准确
                 的预测结果, 在提升缺陷隔离速度的同时显著降低了计算成本.
                    上述实验证明了       DISAC  在缺陷隔离中的能力, 为了验证缺陷隔离结果的正确性, 本文进一步将实验结果与
                 Defects4J 和  C2D2  中构建的真实缺陷变更集进行对比, 在所有成功案例中未发现错误案例.
                  4.2   RQ2  实验结果与分析
                    ● RQ2: DISAC  方法是否能够增强现有增量调试技术的性能?
                    DISAC  提供了具有语义的缺陷隔离结果, 但为了应对不同场景的需求, 本文设计了                      DISAC  与  C2D2  组合的实
                 验, 以评估  DISAC  方法语义隔离的结果是否能够为增量调试算法提供支持. 具体而言, 在                     DISAC  将提交约减到单
                 一功能的子提交后, 进一步应用最新的增量调试算法                 C2D2, 以实现更细粒度的缺陷隔离, 期望增强现有增量调试
                 技术的性能.
                    实验结果如表      3  和表  4  最后一行所示, 在  Defects4J 数据集上, DISAC+C2D2  方法约减率比    DISAC  总体提升
                 4.23  个百分点, 比  C2D2  高  1.36  个百分点; 在回归缺陷数据集上, DISAC+C2D2     方法极大地提高了缺陷隔离任务
                 的约减率, 相比    DISAC  方法提升   7.88  个百分点, 比  C2D2  提升  8.66  个百分点. 同时, 实验结果显示, 在    Defects4J
                 数据集和回归缺陷数据集中, DISAC+C2D2          方法的平均运行时间分别为          571.42 s 和  758.16 s, 相比  C2D2  分别提
                 升  19.47%  和  30.30%.
                    在该实验中, DISAC    提供的初步拆分缩小了后续增量调试算法的搜索空间, 显著减少增量调试算法的调试时
                 间和计算开销. 通过先行的        DISAC  拆分步骤, DD   算法可在更小的搜索空间内高效地隔离缺陷, 达到更加精确的
                 结果, 从而在缺陷隔离中表现出较高的整体效率与准确性, 增强了现有增量调试技术的性能.
                    尽管该组合方法提升了增量调试的性能, 本文仍将                 DISAC  设计为可独立使用的模块, DISAC        的结果保留了
                 变更的上下文和语义信息, 更符合实际开发需求; 同时, 该方法也支持根据开发者需求, 与                          C2D2  等现有技术灵活
                 集成.
                  4.3   RQ3  实验结果与分析
                    ● RQ3: 本文提出的    DISAC  方法中不同组成部分如何影响缺陷隔离总体方法的效果?
                    本文使用    Defects4J 和回归缺陷数据集进行了消融研究. 我们每次独立地禁用了预拆解模块、上下文收集器、
                 评估生成器, 通过消融实验验证算法中各单独部分的有效性及对算法的贡献, 这些版本分别记为                               DISAC ¬preprocess 、
                 DISAC ¬context 、DISAC ¬evaluate . 此外, 我们还分别将代码变更拆解部分替换为仅使用依赖分析的          SmartCommit 算法,
                 以及仅使用大语言模型进行拆解的方案, 以验证依赖关系建模与大语言模型拆解模块的协同增益效果, 分别记为
                 DISAC S 和 C  DISAC LLM . 然后我们观察这些消融版本在     Defects4J 和回归缺陷数据集上有效性和效率有何变化, 分
                 别如表   5、表  6  所示.
                    实验结果表明, 当预拆解模块、上下文收集器或评估生成器被禁用时, DISAC                       方法在两个数据集上进行缺陷
                 隔离任务中各指标上的有效性均下降, 其中禁用预拆解模块和评估生成器时下降幅度最大, 这表明这些模块对缺
                 陷隔离任务均具有贡献. 同时, 我们发现            Defects4J 数据集中约减率的下降幅度远小于回归缺陷数据集的下降幅
                 度. 由于回归缺陷数据集的代码变更集平均大小大于                 Defects4J 数据集中的代码变更集, 我们推断这些组件对复杂
                 缺陷隔离任务的贡献比对简单缺陷隔离任务的贡献更大.
                    具体来说, 禁用预拆解模块导致了代码变更中强依赖关系的部分没有被预先合并, 这直接影响了后续的集合
                 拆分过程, 更可能打破变更子集的完整性, 导致生成的子集编译通过率显著下降, 进而影响代码的整体隔离效果,
   278   279   280   281   282   283   284   285   286   287   288