中文

Repair-R1:更优地测试再修复

软件工程 2025-07-31 v1 人工智能

摘要

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

关键词

引用

@article{arxiv.2507.22853,
  title  = {Repair-R1: Better Test Before Repair},
  author = {Haichuan Hu and Xiaochen Xie and Quanjun Zhang},
  journal= {arXiv preprint arXiv:2507.22853},
  year   = {2025}
}