代码审查的终结:编码代理取代人工审查
摘要
本文认为,基于LLM的编码代理已达到能力临界点,使人工代码审查变得多余,并提议用代理驱动的验证取代人工审查,以降低成本和延迟。
暂无内容
查看缓存全文
缓存时间: 2026/06/23 19:46
# 编码代理取代人工审查 来源:https://arxiv.org/html/2606.13175 ## 代码审查的终结:编码代理取代人工审查 ###### 摘要 自 1976 年 Fagan 将代码审查正式化为一项工程规范以来,代码审查一直是软件开发中的主要质量关卡。五十年来,在合并前让人类同事审查并评论代码变更,已成为各种规模组织的基石实践。编码代理是基于大型语言模型(LLM)的自主系统,能够阅读、编写、测试和修复软件。我们认为,编码代理已经跨越了一个能力阈值,使得传统的人工代码审查不再是软件质量流水线中的必要环节。我们的论证基于两个主张:代码审查的每一个既定目标都可以由代理以更低的成本和更高的吞吐量来实现;那种代理编写代码、人类仍须进行强制审查的简单集成方式是一条死胡同,因为它既不能提供有意义的保证,也无法与 AI 辅助下的吞吐量扩展相匹配。 ## I 引言 代码审查是现代软件开发中主导的人工质量关卡。自 Bacchelli 和 Bird 在微软调查其实践[1 (https://arxiv.org/html/2606.13175#bib.bib1)],以及 Sadowski 等人在谷歌对其进行记录[2 (https://arxiv.org/html/2606.13175#bib.bib2)]以来,该领域一直将代码审查理解为服务于四个重叠的目标:在缺陷进入生产环境前发现它们、执行代码风格和约定、在团队成员之间传递知识,以及建立对不断演化的代码库的共同认知。没有哪个认真的软件团队会省略它。 然而,代码审查也带来了常被低估的显著成本。大型组织的开发人员花费其工作时间的百分之十到十五用于阅读和评论他人的代码[2 (https://arxiv.org/html/2606.13175#bib.bib2)]。从提交拉取请求到收到可操作反馈之间的审查延迟通常超过二十四小时,甚至可能延长到数天,给持续交付带来了结构性拖累[3 (https://arxiv.org/html/2606.13175#bib.bib3)]。除了时间成本,审查还会产生社交摩擦:语气升级、资历偏见,以及有充分记录的新手贡献者在收到批评性反馈后放弃项目的倾向[4 (https://arxiv.org/html/2606.13175#bib.bib4),5 (https://arxiv.org/html/2606.13175#bib.bib5)]。 在这个背景下,编码代理应运而生。基于 LLM 的系统,例如 Claude Code、Codex 和 GitHub Copilot,现在能够读取和修改文件、执行测试套件、解释编译器输出,并在无需人工指导的情况下迭代修复失败[6 (https://arxiv.org/html/2606.13175#bib.bib6),7 (https://arxiv.org/html/2606.13175#bib.bib7),8 (https://arxiv.org/html/2606.13175#bib.bib8),9 (https://arxiv.org/html/2606.13175#bib.bib9)]。在 SWE-bench(一个基于流行 Python 库中真实、未修改的 GitHub Issue 的基准测试)上,最先进的代理能端到端解决超过百分之八十的任务[10 (https://arxiv.org/html/2606.13175#bib.bib10)]。关于基于 LLM 的代码审查的研究表明,代理能够生成与经过训练的人类审查者质量相当的内联缺陷评论[11 (https://arxiv.org/html/2606.13175#bib.bib11),12 (https://arxiv.org/html/2606.13175#bib.bib12)]。 在本文中,我们提出了一个强有力的论点:编码代理已经达到了一个能力阈值,使得人工代码审查变得多余,并应被代理驱动的验证所取代。我们不提供新的实证研究;而是综合现有的能力证据,并列举其对软件工程实践、工具和研究的启示。具体来说,我们认为代理能够满足审查的既定目标;那种代理编写代码但人类仍是强制审查者的中间模式是不稳定的;并且,对于例行变更而言,强制人工审查的经济效益已经转为负面。 总结一下,我们的贡献是: - • 论证了代码审查的每一个既定目标——缺陷检测、风格执行、知识传递和团队认知——都可以由编码代理以比人类审查者更低的成本和更高的吞吐量来实现。 - • 提出了一个论点:将 AI 代码生成与强制人工审查相结合并非一个稳定的终点;它制造了保证的表象,同时将审查能力变成了下一个交付瓶颈。 - • 成本效益分析表明,强制人工审查的经济效益已经反转;代理审查是即时的、一致的且可审计的,而随着代理能力的增长,人工审查的边际缺陷检测价值正在缩小。 参考图注图 1:本文的论证图。审查目标支持三个主张,进而得出结论,该结论对实践和工具具有四个启示。 ## II 背景 ### II-A 代码审查:历史与实践 代码审查作为一门正式的工程学科,起源于 Fagan 在 1976 年关于 IBM 代码检查的论文[13 (https://arxiv.org/html/2606.13175#bib.bib13)]。Fagan 提出了一个结构化的多阶段流程:计划、概览、准备、检查、返工和跟进。该流程被认为代价高昂,需要占用项目总工作量的百分之三。 关于现代代码审查有效性的实证记录,比其被普遍采纳的实践所暗示的要更为微妙。Bacchelli 和 Bird 发现,缺陷检测虽然是主要动机,但并非审查者最可靠提供的价值:风格修正、小额改进以及对意图的提问占据了评论语料库的大部分[1 (https://arxiv.org/html/2606.13175#bib.bib1)]。Czerwonka 等人得出了一个尖锐的结论:微软的代码审查“并未发现错误”,即没有捕捉到深层次的逻辑级缺陷;其主要价值在于知识传递和可维护性改进[14 (https://arxiv.org/html/2606.13175#bib.bib14)]。知识传递和社交化在多项研究中一致地被列为审查互动的宝贵成果[1 (https://arxiv.org/html/2606.13175#bib.bib1),4 (https://arxiv.org/html/2606.13175#bib.bib4)]。 ### II-B 自动化代码审查 自动化代码审查的努力早于大型语言模型。早期方法依赖于模式匹配、基于规则的检查器以及在审查评论语料库上训练的机器学习分类器,以预测某次变更是否会引发评论以及评论的内容。这些系统孤立地自动化了审查活动:评论预测、变更文件的优先级排序、特定缺陷类别的检测。 LLM 时代开辟了新的可能性。CodeReviewer[11 (https://arxiv.org/html/2606.13175#bib.bib11)] 在拉取请求差异和相关审查评论的大型语料库上预训练了一个模型,在评论生成、代码优化预测和严重性分类方面取得了有竞争力的性能。LLaMA-Reviewer[15 (https://arxiv.org/html/2606.13175#bib.bib15)] 应用参数高效微调来调整通用 LLM 以进行审查评论生成任务,表明通过微调可以实现强大的审查性能。Tufano 等人[16 (https://arxiv.org/html/2606.13175#bib.bib16)] 构建了一个从差异到优化补丁的端到端流水线,证明了模型可以同时生成审查评论和修正后的代码,从而消除了审查-修订周期中的一次往返。Pornprasit 和 Tantithamthavorn 在工业环境中评估了这些及相关系统,并发现了跨缺陷类型的有意义覆盖[12 (https://arxiv.org/html/2606.13175#bib.bib12)]。Tang 等人引入了 CodeAgent[17 (https://arxiv.org/html/2606.13175#bib.bib17)],一个多代理系统,其中专门的通信代理协作进行代码审查,将自动化的边界从单个模型的评论生成推向协调的代理工作流。这些系统的共同点是,它们专注于自动化*在*仍由人类主导的审查工作流*内部的活动*;它们提高了特定步骤的效率,而没有质疑整个审查关卡是否必要。 据我们所知,本文是第一个主张*完全用编码代理取代强制人工代码审查*,并讨论由此对工作流、工具和研究产生的启示的论文。 ### II-C 编码代理 编码代理是一种系统,其中大型语言模型(LLM)被嵌入到一个*代理循环*中:模型可以调用工具来读写文件、执行 shell 命令、运行测试、查询文档,然后迭代直到实现目标或满足停止条件。LLM 提供语言理解、代码合成和上下文推理;工具循环则提供与软件制品及其执行实际状态的接地。 有代表性的代理包括 OpenAI Codex[18 (https://arxiv.org/html/2606.13175#bib.bib18)],一个构建在 GPT 模型系列之上的交互式助手;Claude Code[19 (https://arxiv.org/html/2606.13175#bib.bib19)],一个直接在开发者终端中运行的代理编码助手;SWE-agent[6 (https://arxiv.org/html/2606.13175#bib.bib6)],它引入了一个针对仓库级软件工程任务优化的代理-计算机接口;Devin[7 (https://arxiv.org/html/2606.13175#bib.bib7)],一个能够自主导航代码库并部署修复的商业系统;以及 GitHub Copilot[9 (https://arxiv.org/html/2606.13175#bib.bib9)],它直接将代理能力集成到拉取请求工作流中。 ## III 代理能力的证据 为了支持编码代理可以取代人工代码审查的主张,我们调查了代理能力在三个维度上的证据:软件工程任务的基准性能、审查特定能力以及已部署工具的开发者生产力。 ### III-A 基准性能 代理能力最直接的证据来自 SWE-bench,这是一个评估系统能否解决来自流行开源 Python 项目的真实、未修改问题的基准测试[10 (https://arxiv.org/html/2606.13175#bib.bib10)]。与合成编码挑战不同,SWE-bench 任务需要理解问题描述、导航多文件仓库、修改正确的文件,并生成能通过项目现有测试套件的补丁。早期结果令人警醒:使用基于检索的上下文选择的 GPT-4 解决了大约 1.7% 的任务。SWE-agent 通过引入一个结构化的代理-计算机接口来塑造模型与文件系统和 shell 的交互,将这一数字提升到了大约 12.5%[6 (https://arxiv.org/html/2606.13175#bib.bib6)]。到 2024 年底,在 SWE-bench Verified(一个具有已验证真实解决方案的精选子集)上性能最佳的系统超过了 50%。到 2025 年底,公开排行榜上的顶尖代理解决了超过 70% 的任务[20 (https://arxiv.org/html/2606.13175#bib.bib20)]。从不到百分之二到超过百分之七十的改进轨迹,大约用了两年时间,这在自动化软件工程工具的历史上是史无前例的。 相关证据来自相邻任务。例如,Xia 等人证明基于 LLM 的修复方法显著优于早期的生成-验证系统,如 GenProg[21 (https://arxiv.org/html/2606.13175#bib.bib21),22 (https://arxiv.org/html/2606.13175#bib.bib22)],在不需要手动指定测试用例或修复模板的情况下,修复了更大比例的基准错误。在竞赛编程层面,AlphaCode 在 Codeforces 比赛中排名位于人类参赛者的前 54%[23 (https://arxiv.org/html/2606.13175#bib.bib23)]。这表明 LLM 能够推理非平凡的算法问题。 ### III-B 审查特定能力 除了通用软件工程,多项工作专门涉及代码审查所需的能力。Pornprasit 和 Tantithamthavorn 在工业环境中评估了基于 LLM 的自动审查,发现代理能够检测到人类审查者所针对的相同缺陷类别:正确性错误、安全弱点、性能低效和风格违规[12 (https://arxiv.org/html/2606.13175#bib.bib12)]。Li 等人证明 CodeReviewer 能够生成可操作的内联评论,在评估集的重要部分上质量至少与经过训练的人类审查者相当[11 (https://arxiv.org/html/2606.13175#bib.bib11)]。 代理带来了人类审查者在结构上无法匹敌的能力。人类审查者阅读一个差异;代理可以同时将整个文件、完整的测试套件、每个受触及函数的 git 历史以及项目的文档纳入上下文。人类审查者可以识别问题并在评论中描述它;代理可以识别问题、生成修复、应用它、运行测试,并关闭审查循环,无需任何人工调度。人类审查者有日历、时区和有限的注意力;代理则可以连续运行,在周日凌晨三点和周一早上的冲刺中应用同样的严格审查。这些结构性优势随着软件开发规模和速度的增加而复合增长。 ## IV 代码审查的终结:论证 ### IV-A 主张 1:代码审查的每个目标都可以由代理以更低的成本和更高的吞吐量来实现。 Bacchelli 和 Bird 确定了代码审查的四个主要目标:缺陷检测、风格和标准执行、知识传递以及团队认知[1 (https://arxiv.org/html/2606.13175#bib.bib1)]。我们认为,当代编码代理能够至少和人类审查者一样好地满足每个目标,并且在几个维度上显著更优。 *缺陷检测。*人类审查者擅长识别表面问题,但在捕捉深层逻辑错误方面不可靠[14 (https://arxiv.org/html/2606.13175#bib.bib14)]。相比之下,由大型语言模型驱动的代理能够执行详尽的数据流推理、交叉引用完整的测试套件,并应用从数百万个开源仓库学到的模式。最近的研究表明,基于 LLM 的审查系统产生的可操作缺陷报告在质量上与经过训练的人类审查者相当,同时可以在没有疲劳或时区限制的情况下对每个提交进行操作[12 (https://arxiv.org/html/2606.13175#bib.bib12),11 (https://arxiv.org/html/2606.13175#bib.bib11)]。 *风格和标准执行。*Linter、格式化工具和类型检查器长期以来一直自动处理语法和风格问题。代理将此能力扩展到语义风格:命名一致性、惯用 API 用法和文档约定都可以通过基于 LLM 的重写来强制执行,从而消除一整类审查者评论。 *安全性。*安全审查正是人类注意力最超负荷且后果最严重的领域。Pearce 等人证明 GitHub Copilot 以非平凡的比例引入了常见弱点枚举(CWE)违规[24 (https://arxiv.org/html/2606.13175#bib.bib24)],然而同样的生成能力,当转向*检测*时,使代理能够比执行临时审查的开发者更系统地枚举漏洞类别[25 (https://arxiv.org/html/2606.13175#bib.bib25)]。基于 AI 的安全扫描器已经在标准漏洞基准测试上超越了许多手动审查者[26 (https://arxiv.org/html/2606.13175#bib.bib26)]。 *知识传递。*代理能够在合并时主动生成按需的解释、架构摘要和更新的文档。
相似文章
编码代理是否带来了新的审查问题?
本文讨论了虽然编码代理能够有效生成代码,但它们却在审查和信任变更方面引入了新的瓶颈,质疑代理是减少了审查工作量还是转移了审查工作量。
Agentic Code Review(15分钟阅读)
分析AI编码代理如何将瓶颈从编写代码转移到审查代码,数据显示代码变更量增加861%,缺陷率上升,使得代码审查成为软件工程中最具杠杆效应的技能。
审查AI代码并非一个站得住脚的论点(2025)
文章认为,要求全面审查代码会抵消LLM编码助手所谓的生产力提升,因为实证研究显示它们并不能帮助写出更好或更快的代码,而且支持者未能解决固有的错误率问题。
从以人为中心到智能体代码审查:不同代际生成式人工智能技术对审查质量的影响
本文研究了102万个拉取请求,分析了从以人为中心到AI智能体代码审查的转变,发现智能体参与的模式提高了效率但未提升质量。
2026年AI编程代理输出验证:查看差异、氛围检查再合并
关于当前AI编程代理输出验证实践的一点反思,指出开发者通常只是粗略查看差异就合并,而没有全面审计代理的会话活动,引发了对AI时代代码审查文化的担忧。