论文

超越失败:共同生成的错误重现测试和修复的迭代强化

Beyond Fail-to-Pass: Iterative Hardening of Co-Generated Bug Reproduction Tests and Fixes

摘要

大语言模型 (LLM) 使自动程序修复 (APR) 对于现实世界的错误越来越实用,但直接从错误报告进行修复仍然受到限制。错误再现测试 (BRT) 通过将错误报告转化为可执行的、特定于错误的信号来指导修复和验证候选补丁,从而帮助缩小这一差距。因此,现有工作将 BRT 生成作为 APR 中的核心子问题进行研究,并主要使用失败通过(F->P)标准来评估生成的 BRT,该标准要求测试在有错误的代码上失败,但在黄金修复上通过。我们表明,当 BRT 的目标是改善下游修复时,仅 F->P 是不够的。特别是,一些 F->P BRT 很宽松,再现了观察到的症状,但仍然承认看似合理但不正确的补丁。我们通过将 F->P BRT 分为严格的和宽松的 BRT 来形式化这个缺失的质量维度,并根据经验表明只有前者能够持续提高修复成功率。我们进一步发现,联产引入了测试-修复错误耦合,即使生成的补丁和生成的测试都是错误的,轨迹内未能通过(F->P)检查也可以通过。基于这些发现,我们提出了 CoHarden,一种使用 Lax 信号作为环内收敛标准的热电联产框架。 CoHarden 首先在任何修复之前生成一个测试,然后迭代地强化测试并针对幸存的突变补丁进行修复,直到生成的测试不再允许 Lax 回归。实验表明,CoHarden 在 SWE-bench Verified 上达到了 69.4% Resolved 和 78.9% F->P,在 Resolved 中比最强的仅修复和联电基线分别高出 +9.6 和 +7.9 个百分点,在 LLM 主干和基准上具有一致的增益。