Repair-R1:修复前的更优测试

发表
tomsawyertomsawyer 提交
作者: Haichuan Hu, Xiaochen Xie, Quanjun Zhang

摘要

自动程序修复(APR)旨在自动定位程序缺陷、生成补丁并验证修复。现有的APR技术通常与大型语言模型(LLM)相结合,利用LLM的代码相关知识来提高修复效果。当前基于LLM的APR方法通常仅在推理阶段使用测试用例,采用一种先修复后通过测试执行来验证的迭代方法。这种传统范式忽略了两个重要方面:测试用例在训练阶段的潜在贡献,以及在修复之前利用测试的可能性。为了解决这个问题,我们提出了Repair-R1方法,它将测试用例引入模型的训练阶段,并将测试生成置于修复之前。该模型被要求首先生成能够区分缺陷行为的判别性测试用例,然后基于这些测试进行修复。这使模型能够更好地定位缺陷并理解缺陷的根本原因,从而提高修复效果。我们使用三种不同的骨干模型实现了Repair-R1,并采用强化学习(RL)来协同优化测试生成和漏洞修复。在四个广泛采用的基准测试上的实验结果证明了Repair-R1的优越性。具体而言,与基线模型相比,Repair-R1将修复成功率提高了2.68%至48.29%,测试生成成功率提高了16.38%至53.28%,测试覆盖率提高了0.78%至53.96%。我们在 https://github.com/Tomsawyerhu/APR-RLhttps://huggingface.co/tomhu/Qwen3-4B-RL-5000-step 上发布了代码和权重。
查看 arXiv 页面查看 PDF

评论

tomsawyertomsawyer
论文提交者

APR(自动化程序修复)旨在自动定位程序缺陷、生成补丁并验证修复。现有的APR技术通常与LLM(大型语言模型)结合,利用LLM的代码相关知识来提高修复效率。当前基于LLM的APR方法通常仅在推理阶段使用测试用例,采用迭代方法,先进行修复,然后通过测试执行进行验证。这种传统范式忽略了两个重要方面:测试用例在训练阶段的潜在贡献,以及在修复之前利用测试的可能性。为了解决这个问题,我们提出了Repair-R1,它将测试用例引入模型的训练阶段,并将测试生成提前到修复之前。模型需要首先生成能够区分缺陷行为的判别性测试用例,然后根据这些测试进行修复。这使得模型能够更好地定位缺陷并理解缺陷的根本原因,从而提高修复效率。我们使用三种不同的骨干模型实现了Repair-R1,并利用RL(强化学习)共同优化测试生成和错误修复。在四个广泛采用的基准上的实验结果表明了Repair-R1的优越性。特别是,与普通模型相比,Repair-R1将修复成功率提高了2.68%到48.29%,测试生成成功率提高了16.38%到53.28%,测试覆盖率提高了0.78%到53.96%。