[论文解读] Automatic Repair of Real Bugs: An Experience Report on the Defects4J Dataset
本文在包含224个真实Java缺陷的Defects4J数据集中评估了最先进的自动修复工具——jGenProg、jKali和Nopol。研究发现,47个缺陷可被自动修复,但84个生成的补丁中仅有9个经人工验证为正确,暴露出基于测试套件的修复方法因规格说明不足和过拟合而导致的严重问题。
Defects4J is a large, peer-reviewed, structured dataset of real-world Java bugs. Each bug in Defects4J is provided with a test suite and at least one failing test case that triggers the bug. In this paper, we report on an experiment to explore the effectiveness of automatic repair on Defects4J. The result of our experiment shows that 47 bugs of the Defects4J dataset can be automatically repaired by state-of- the-art repair. This sets a baseline for future research on automatic repair for Java. We have manually analyzed 84 different patches to assess their real correctness. In total, 9 real Java bugs can be correctly fixed with test-suite based repair. This analysis shows that test-suite based repair suffers from under-specified bugs, for which trivial and incorrect patches still pass the test suite. With respect to practical applicability, it takes in average 14.8 minutes to find a patch. The experiment was done on a scientific grid, totaling 17.6 days of computation time. All their systems and experimental results are publicly available on Github in order to facilitate future research on automatic repair.
研究动机与目标
- 评估最先进的自动修复工具在大型、同行评审的真实世界Java缺陷数据集中的实际有效性。
- 探究基于测试套件的修复技术是否生成不仅通过测试用例,而且在语义上正确且有意义的补丁。
- 识别Defects4J中规格说明不足的缺陷,即测试套件未能捕捉到所需行为,导致生成错误或过于简单的补丁。
- 衡量在真实工业规模代码库上进行自动修复的计算成本,以评估其实际适用性。
提出的方法
- 基于GenProg和Kali方法,重新实现三种修复工具——jGenProg、jKali和Nopol,适用于Java语言。
- 在Defects4J数据集中的224个真实Java缺陷上运行这些工具,每个缺陷均配有测试套件和至少一个失败的测试用例。
- 使用科学计算网格(Grid’5000)运行实验,总计算时间达17.6天。
- 人工分析84个生成的补丁,评估其在通过测试套件之外的正确性,将补丁分类为正确、错误或需要专家知识。
- 应用语句排序和补丁验证技术,以指导修复空间中的搜索。
- 收集并发布所有工具、配置和结果于GitHub,以确保可复现性,并支持未来研究。
实验结果
研究问题
- RQ1RQ1:最先进的修复技术能否自动修复Defects4J数据集中真实存在的缺陷?
- RQ2RQ2:生成的补丁在语义上是否正确,还是仅过拟合测试用例,未能真正修复缺陷?
- RQ3RQ3:Defects4J中的哪些缺陷存在规格说明不足,导致仅依赖测试套件反馈难以修复?
- RQ4RQ4:使用这些工具修复单个缺陷的平均执行时间是多少?
主要发现
- 在Defects4J数据集的224个缺陷中,有47个被至少一种工具成功修复,其中Nopol修复的缺陷最多(35个)。
- 在84个生成的补丁中,仅有11个经人工验证为正确,表明72.6%的补丁错误或过度针对测试输入。
- 84个补丁中有12个需要专家知识才能验证,凸显了自动化正确性评估的困难。
- 每个缺陷的平均修复时间为14.8分钟,表明虽然可行,但该过程对工业应用而言计算开销较大。
- 研究发现,有12个缺陷被所有三种工具修复,表明存在一组可复现的核心修复方案;另有35个缺陷仅被Nopol修复。
- 结果揭示了基于测试套件的修复存在一个关键缺陷:测试套件薄弱会导致生成错误的补丁,这些补丁虽通过测试,但语义上并未真正修复缺陷。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。