AI生成的代码究竟是提升了质量,还是仅仅加快了速度?
简而言之,AI生成的拉取请求(PR)主要提升了编码速度,但往往降低了代码质量,甚至可能拖慢整体审查流程。最有力的证据来自一项对超过33,000个AI生成PR的大规模分析,该研究发现AI代理经常忽略复用现有代码的机会,导致代码冗余程度高于人类开发者[8]。这意味着代码更长、更难维护,且更易引入技术债务——这些问题在简单的通过率测试中不会显现,但长期来看代价高昂。
另一项针对23,247个AI生成的PR(拉取请求)的研究发现,其中1.7%存在PR描述与实际代码变更之间的严重不一致,最常见的问题是“描述声称了未实现的变更”(占此类案例的45.4%)[1]。这些不可靠的描述直接损害了质量,因为信任被削弱:高不一致性的PR接受率低了51.7%(28.3%对比80.0%),合并所需时间则长了3.5倍(55.8小时对比16.0小时)[1]。因此,尽管AI编写代码速度很快,但人类审阅者最终需要花费更多时间来验证和修复它。
一项针对33,707个由智能体编写的PR的独立研究揭示出鲜明的双模式特征:智能体在简单自动化任务中表现出色(28.3%的PR被即时合并),但在迭代优化中频繁失败,导致面对主观反馈时出现高比例的"幽灵式"放弃(即PR被弃置)[3]。这给维护者带来了隐性的"注意力税"——他们需要管理复杂的交互循环,而不仅仅是审查代码。该研究引入了一个模型,可在人工审查开始前预测这些高维护成本的PR,仅用20%的审查预算即可捕获69%的高工作量PR[3]。
AI生成的PR是否安全可靠?
安全性是一个喜忧参半的问题。一方面,像Bugdar这类AI增强工具处理代码审查的速度极快,平均每个PR仅需56.4秒(每秒处理30行代码),而人工审查可能需要数小时[4]。这表明AI有助于快速发现安全问题。然而,一项针对超过33,000个AI生成PR的专项研究识别出675个与安全相关的提交,并发现它们引入了一小类反复出现的漏洞,例如正则表达式效率低下、注入缺陷和路径遍历[7]。令人担忧的是,许多存在缺陷的贡献仍被合并,而拒绝的原因往往源于社交或流程因素(如不活跃或缺少测试覆盖),而非安全漏洞本身[7]。
AI生成代码的可靠性同样存疑。一项针对25个热门Java项目中2.1万个拉取请求的研究发现,无论是被接受的(37%)还是被拒绝的(44%)PR,都包含代码坏味——即可能导致缺陷的次优设计选择[5]。这些存在坏味的PR更复杂、更难理解、延迟时间更长,且由经验较少的贡献者提交[5]。这表明AI生成的代码可能尤其容易出现这类质量问题,尽管该研究并未专门区分AI编写的PR。
提升AI可靠性的一个有效方法是测试驱动提示(TDP),即在向AI输入的提示中包含示例测试用例。一项研究在3个编程基准上测试了8种不同的AI模型,结果显示,在所有16个模型-数据集组合中,TDP使代码生成成功率平均提升了7.74%,95%置信区间为[6.30%, 9.18%],且效应量极大(Cohen's d = 1.83)[2]。这表明,采用恰当的提示策略,AI代码质量可显著提升,尤其对于复杂或模糊的任务。
人类审阅者实际上如何回应AI生成的PR?
令人惊讶的是,人类评审者往往对AI生成的贡献反应比人类贡献更积极,即便AI代码在客观上质量更低。对评审者评论的情感分析发现,评审者对AI生成的拉取请求(PR)表达了更多中性或积极的情感[8]。这种脱节是危险的:AI代码表面上的合理性掩盖了其潜在的冗余,导致真实开发环境中技术债务的悄然累积[8]。
借助AI辅助,审查流程本身可以更加高效。一项研究引入了一款AI机器人,它能提供初步的PR审查,针对代码格式、最佳实践及小问题给出反馈,并自动分配审查人员[9]。其目标是将其发展为能够从功能角度评估代码的智能审查员,从而显著提升PR管理效率并加速开发流程[9]。不过,该研究也指出,这仍是一项持续进行的工作,该机器人目前尚未完全具备功能评估的能力。
一项针对AI生成PR(拉取请求)被拒模式的最大规模研究发现,84.2%被拒的AI生成PR在关闭时没有任何行内审阅反馈——它们就这样被直接放弃了[6]。而在那些确实收到评论的PR中,最显著的可见拒绝模式是功能故障,尤其是规格不匹配和逻辑缺陷[6]。这表明,许多AI生成的PR存在根本性缺陷,以至于审阅者甚至懒得解释原因,或者这些PR干脆被无视了。研究还发现,文档的协同变更与较低的拒绝概率相关,这意味着包含文档更新的AI代理提交的PR更有可能被接受[6]。
关于这些来源
该答案基于9项研究(4篇经同行评审,5篇为预印本)构建而成——这些研究发表于2023年至2026年间,其中8篇来自2024年或之后,2篇发表于Q1–Q2期刊——从通过质量筛选的10项研究中选出了最相关的部分,这些研究又源自从超过5亿篇论文的数据库中检索到的34篇文献。
本文引用的文献
分析AI编码代理创建的拉取请求中的消息-代码不一致性
分析了23,247个AI生成的PR,发现其中1.7%存在严重的消息-代码不一致问题,其中“描述声称未实现的变更”最为常见(占45.4%)。高不一致性的PR接受率低51.7%,合并所需时间长达3.5倍。
数据集与实验结果
在一项针对3个基准测试中8个AI模型的研究中,测试驱动提示(即在提示中包含测试用例)使所有16个模型-数据集组合的代码生成成功率平均提升了7.74%,且效应量极大(Cohen's d = 1.83)。
AI生成拉取请求中审查工作量的早期预测
分析了33,707个由智能体编写的PR,发现存在两种模式:28.3%的PR被立即合并,但智能体在迭代优化中频繁失败,导致PR被放弃。一个“断路器”模型以AUC 0.96的准确率预测了高维护成本的PR,在20%的审查预算下,成功捕捉了69%的高工作量PR。
Bugdar:面向GitHub拉取请求的AI增强型安全代码审查工具
介绍了一个名为Bugdar的AI增强代码审查系统,该系统平均处理一个PR(拉取请求)仅需56.4秒(每秒处理30行代码),远快于可能耗时数小时的人工审查。
拉取请求中的代码异味:一项探索性研究
对来自25个Java项目的21,000个拉取请求中的代码坏味进行了分析;发现37%被接受的拉取请求和44%被拒绝的拉取请求存在代码坏味,主要表现为上帝类和长方法。存在代码坏味的拉取请求复杂度更高,且延迟时间更长。
野外编码智能体:AI生成拉取请求的失败模式与拒绝规律
分析了12,433个由智能体生成的PR,发现拒绝率随时间推移逐渐下降。84.2%被拒绝的PR在关闭时未附带行内反馈;在有评论的拒绝中,功能故障(规格不匹配、逻辑缺陷)占主导地位。
关于安全相关AI生成拉取请求的见解
从超过33,000个PR中识别出675个与安全相关的AI生成PR;发现了反复出现的弱点(正则表达式效率低下、注入漏洞、路径遍历)。许多有缺陷的PR仍被合并,而拒绝的原因往往源于社交/流程因素。
更多代码,更少复用:探究AI生成的拉取请求中的代码质量与审阅者态度
发现LLM代理经常忽视代码复用的机会,导致其冗余度高于人类开发者。尽管如此,评审者对AI生成的贡献表达了更多中性或正面的情绪,从而掩盖了技术债务。
AI驱动的代码审查助手:简化拉取请求合并流程
提出使用Falcon40-B模型构建AI机器人,用于对代码合并请求进行格式与最佳实践的初步审查,自动分配审查人员,并简化协作流程。目标是将其发展为功能完善的代码审查工具。
