跳到主要内容

AI 生成代码的维护陷阱:团队在六个月后才发现的真相

· 阅读需 12 分钟
Tian Pan
Software Engineer

这种规律在 2023 年和 2024 年采用编程智能体的团队中几乎普遍存在。第一个月,效率翻倍。第三个月,管理层把生产力指标拿出来,作为 AI 投资回报的证据。到了第十二个月,工程团队有一半的代码库已无法向新员工解释清楚,重构成本高得令人望而却步,工程师花在调试 AI 生成代码上的时间,比他们手写这些代码所需的时间还要多。

这不是一个关于 AI 代码暗中存在缺陷的故事。这是一个关于 AI 生成代码的质量特征如何系统性地瓦解团队已有的组织实践的故事——以及这些实践在技术债务复利失控之前需要如何改变。

令人迷惑的质量特征

AI 生成的代码有一种独特的质量签名,能够欺骗大多数代码审查流程。在函数层面,代码看起来非常出色:格式整洁、命名一致、结构清晰。审查者扫一眼某个方法或类,会得出"这是扎实的工作"的结论。

问题出现在模块和系统层面。AI 智能体的上下文窗口有限,对三次会话前做出的架构决策也没有持久记忆。当代码库中已经有一个使用某种模式的 UserRepository,而智能体开始新的会话时,它可能会生成一个使用不同模式的 UserStore——因为它不知道第一个的存在。经过数十次这样的会话,你会积累出针对相同问题的并行解决方案、不一致的抽象层,以及命名约定因文件生成时间而异、而非源于任何连贯设计的混乱局面。

GitClear 对 AI 辅助代码库的纵向分析发现,代码重复率比 AI 出现前的基准高出四倍。卡内基梅隆大学追踪 807 个使用 Cursor 的代码库的研究发现,尽管初期效率有所提升,代码复杂度平均增加了 25%。AI 生成的 PR 中,格式不一致的情况出现频率是人工代码的 2.66 倍;命名不一致的情况出现频率几乎是人工代码的两倍。

简而言之:AI 代码实现了高局部连贯性和低全局一致性。这与代码审查本来要捕捉的失败模式恰恰相反。

代码审查如何沦为橡皮图章

传统代码审查是为一个 PR 以审查者能够处理的速度到来的世界而设计的。审查者可以在脑海中保留作者的推理过程,探究边界情况,并对架构决策提出异议——因为他们有足够的认知空间来做到这些。

当团队中的每个开发者都在使用 AI 智能体生成代码时,这个模型就崩溃了。PR 数量急剧增加。每个单独的 PR 看起来都比手写代码更整洁、更有把握——AI 没有状态不好的时候,不会产生马虎的格式,也不会犯那些会触发审查者怀疑的明显错误。在数量压力下,审查者从架构层面的审查转向只检查代码格式是否正确、测试是否通过。

两件事同时发生。首先,那些能捕捉到意图失误的审查("为什么这里要用三个独立的数据库查询,而一个连接查询就够了?")不再发生,因为审查者没有时间处理。其次,审查者内化了一个更低的标准——代码看起来没问题,CI 通过了,发布吧——他们即使在有时间深入审查时也会沿用这个标准。

一项调查发现,59% 的开发者报告说他们使用了自己并不完全理解的 AI 生成代码。如果作者都是如此,在时间压力下的审查者更是如此。

死代码积累问题

人类工程师对自己编写的代码有一种所有权感。当某个功能被废弃或某个工具函数不再需要时,存在一种社会压力——以及个人记忆——来清理它。作者知道它的存在,知道它是用来做什么的,并且对它的命运感到负责。

AI 生成的代码在这个意义上没有作者。当智能体生成一个最终用不上的辅助函数时,没有人会标记它待删除。静态分析警告不断积累。未使用的导入继续保留。整个工具类处于休眠状态,因为能够移除它们的重构永远不会发生。

一项对大量 AI 辅助开发代码库的研究发现,12 个月内静态分析警告增加了 18%,认知复杂度增加了 39%。代码重构——定义为移动或重构的代码行,而非新增的代码行——在 AI 辅助项目中从 2021 年占变更代码的 25% 下降到 2024 年的不足 10%。二十年来复制粘贴操作首次超过了移动操作。

代码库的增长速度超过了其被修剪的速度。每一次新的 AI 会话都在不断扩大的死代码和不一致的基础上叠加新代码。

入职危机

当一名新工程师加入一个已经使用 AI 智能体生成代码一年的团队时,他们面对的代码库有一个特殊属性:它没有连贯的"声音"。不同部分对相同问题使用不同的模式。有些抽象是高度面向对象的,另一些是函数式的,还有一些是过程式的。架构不是设计出来的——它是从数百次独立的 AI 会话中涌现出来的,每次会话内部连贯,但在全局上不一致。

对于一个试图建立系统工作原理心智模型的新工程师来说,根本无处着力。他们无法读一个模块然后推断其设计理念,因为根本没有统一的设计理念。他们也无法询问作者为什么选择某种方法,因为作者是一个 AI,那次会话的上下文早已不复存在。有经验的工程师用于在新代码库中快速定位的模式识别,在模式相互矛盾时完全失效。

实际结果是,在大量使用 AI 辅助的代码库中,入职时间不降反升——与团队从绿地起步测量效率提升时的预期恰恰相反。

复利式恶化轨迹

维护陷阱以几个阶段展开,现在已经可以相当精确地描述:

第 1-3 个月:效率显著提升。工程师更快地生成更多代码。PR 吞吐量增加。代码库快速增长。管理层为生产力指标欢欣鼓舞。

加载中…
Let's stay in touch and Follow me for more thoughts and updates