arXivDaily arXiv每日学术速递 周一至周五更新

PAPERDAILY REPORTS

测试写错还不如不测:微软等让代码智能体修复率冲到72.6%

作者:arXivDaily编辑部 arXiv 2609.09133 cs · cs.AI · cs.CL · cs.SE

论文导读

威斯康星大学麦迪逊分校、微软研究院、佐治亚理工学院联合提出ExecCritic,把代码测试和源码修复交给两个分别训练的Qwen角色。两者组合在SWE-bench Verified解决72.6%的任务,比原始无测试基线高11.4个百分点;但质量差的测试会把61.2%拉低到57.3%。结论限定于该基准和冻结测试流程。

同一个智能体写补丁又写测试,可能错得很一致

执行测试能告诉代码智能体补丁是否工作,但前提是测试真正覆盖问题描述。如果同一次推理既写源码补丁又写测试,它可能误解需求后同时写出互相配合的错误版本:测试通过了,用户要修的行为仍然没修好。

ExecCritic把工作拆开。Test智能体先阅读仓库和问题,生成项目原生测试;一个“失败即关闭”的执行工具检查测试是否合格,并把它冻结。Repair智能体只能修改源码,不能改测试。测试失败产生的日志用于下一轮修复,测试通过后才允许提交。

图1:论文Figure 1展示独立测试智能体、执行工具和修复智能体的分工,测试一旦合格便被冻结。

Django空列表案例说明测试怎样抓住漏洞

论文用Django问题14765展示完整过程。初始补丁只在real_apps为真值时检查类型,空列表会绕过断言。测试智能体生成一个期待抛出AssertionError的用例,初始补丁执行失败;修复智能体根据反馈把条件改成“不是None”,同一测试随后通过。

图2:论文Figure 3展示初始补丁、生成测试、执行反馈与修复后补丁,测试全程没有被修复智能体修改。

两个角色都以Qwen-3.5-35B-A3B为骨干,但分别训练。测试角色学习区分正确和错误补丁的行为测试,修复角色同时学习直接解题和根据执行反馈修改源码。角色分开后,训练目标更清楚,也更容易判断失败来自测试还是补丁。

错测试拖后腿,好测试才带来72.6%

固定基础Repair智能体时,无测试基线解决率是61.2%。基础Test智能体生成的测试把结果降到57.3%,说明加入执行反馈并不自动有益;GPT-5.6-sol生成的测试把结果提高到65.3%。测试角色经过专门训练后,Base-to-Gold成功率从22.2%提高到62.2%。

图3:论文Figure 5比较无测试、不同测试来源和Oracle反馈下的修复结果,展示测试质量可同时产生增益与损害。

最终,分别后训练的Qwen Test与Repair组合在SWE-bench Verified达到72.6%,比原始无测试基线高11.4个百分点。这个结果没有在评测时使用更强模型或Oracle反馈,但仍是基准仓库中的自动修复,不等于生产代码已经通过人工评审、安全检查和完整回归测试。

下一步是给测试本身建立责任链

企业采用代码智能体时,可以把“谁生成测试、测试何时冻结、哪个日志触发修复”写入审计记录。下一步要评估隐藏测试、跨语言项目和长时间演化仓库,并防止测试为了容易通过而缩小需求。更稳妥的部署方式是让生成测试成为证据之一,再叠加现有CI、静态分析和人工审查;当测试与问题描述冲突时,系统应停下并暴露分歧,而不是继续优化一个错误目标。

参考资料

https://arxiv.org/abs/2609.09133

https://arxiv.org/html/2609.09133

https://github.com/MSR-Orchard/execcritic