Page 285 - 《软件学报》2026年第5期
P. 285
2164 软件学报 2026 年第 37 卷第 5 期
用 C2D2 算法, 两组在实验中使用的方法安排如表 7 所示. 实验过程中记录了参与者的任务完成时间, 使用 C2D2
论文中人工验证的真实缺陷变更集计算定位正确率, 并收集用户体验反馈, 实验结果如表 8 所示.
表 7 实验分组情况
组别 任务T1–T5 任务T6–T10
A组 使用C2D2算法隔离缺陷 使用DISAC方法进行缺陷隔离
B组 使用DISAC方法进行缺陷隔离 使用C2D2算法隔离缺陷
表 8 隔离缺陷引入任务实验结果
任务T1–T5 任务T6–T10
组别
平均完成时间 (min) 平均正确率 (%) 平均完成时间 (min) 平均正确率 (%)
A组 16.2 72 8.7 92
B组 11.0 84 15.3 80
实验结果显示, 使用 DISAC 算法的结果在任务完成平均时间和定位正确率上均优于 C2D2 算法. 由于 DISAC
方法通过细化的变更拆解和语义理解隔离出具有完整单一活动的代码变更集合, 有助于参与者更快速地聚焦于
关键代码改动, 任务完成时间更短. 同时, DISAC 的基于语义的变更隔离方式能够更精确地呈现出引发缺陷的
代码范围, 帮助参与者更准确地识别缺陷根本原因. 在对实验参与者的采访中, 大多数参与者表示, DISAC 的隔
离结果具有更强的指导性和可操作性, 同时, 很少有不相关代码的干扰. 相比之下, C2D2 在部分数据中给出的结
果较为精准, 能够帮助快速确认缺陷, 但是更多结果中包含较多无关代码, 增加了定位根因的难度. 这说明本文
提出的方法确保了缺陷的完备性, 隔离出包含有上下文信息的结果, 为开发人员的分析和后续修复提供了有力
支持.
5 总 结
本文基于代码变更语义分析提出了一种缺陷隔离方法——DISAC, 该方法结合代码间依赖关系和代码的语义
信息, 将复合提交中的代码变更分解为多个具有单一功能的变更集, 再利用线性搜索的算法, 定位引入缺陷的变更
子集, 提高了缺陷隔离的准确性和有效性.
与传统方法相比, DISAC 具有显著的优势. 首先, 该方法能够将引入缺陷的代码变更单独隔离, 通过回滚的方
法, 能够尽快修复缺陷, 从而确保其他功能模块的正常运行不受影响, 极大地降低了缺陷修复对整体系统稳定性的
干扰风险. 其次, DISAC 隔离的变更子集不仅具有细粒度, 还保留了完整的上下文语义信息, 使开发人员能够更全
面地理解代码变更的背景和影响, 这种上下文信息的丰富性为进一步分析缺陷根因和制定修复策略提供了坚实的
基础. 同时, DISAC 方法能够与传统的 DD 方法结合, 从而使所有基于代码变更的缺陷隔离技术能够受益于此, 提
升缺陷隔离过程的准确性和效率, 为处理大规模和复杂依赖关系的代码库提供更为高效的解决方案.
在未来的研究中, 可以进一步优化 DISAC 的方法. 例如, 可以调整现有大语言模型, 进一步提高变更子集拆分
和缺陷隔离的预测准确率. 此外, 本文方法暂未处理极端情况下可能出现的大量变更提交问题, 此类提交可能引发
复杂的依赖链, 超出当前方法的处理范围. 未来工作将进一步探索如何在大规模代码库和复杂项目环境中增强
DISAC 的适用性和效率, 为更多实际场景中的缺陷隔离和修复提供支持.
References
[1] Munson JC, Khoshgoftaar TM. The detection of fault-prone programs. IEEE Trans. on Software Engineering, 1992, 18(5): 423–433. [doi:
10.1109/32.135775]
[2] Pai GJ, Bechta Dugan J. Empirical analysis of software fault content and fault proneness using Bayesian methods. IEEE Trans. on
Software Engineering, 2007, 33(10): 675–686. [doi: 10.1109/TSE.2007.70722]
[3] Wright CS, Zia TA. A quantitative analysis into the economics of correcting software bugs. In: Proc. of the 4th Int’l Conf. on

