"在我 35 年的技术生涯中,我从未见过在如此短的时间里产生如此多的技术债务。" ------作者:Bill Doerrfeld
GitClear 最新报告显示,随着 AI 编码工具越来越普及,代码重复率正在上升,代码质量却在下降。
如今,编写代码比以往任何时候都要容易。借助现今基于大型语言模型(LLM)的编码助手嵌入在 IDE 中,你只需在提示区输入一句话,或者按一下 Tab 键,就能生成多行代码。
自从AI 编码工具问世以来,诸如"不重复你自己"(DRY)等工程最佳实践就逐渐被忽视。
"在我 35 年的技术生涯中,我从未见过在如此短时间内产生如此多的技术债务。" API 布道师 Kin Lane 如此评价 AI 生成代码的泛滥。
GitClear 的第二份年度AI Copilot 代码质量研究对 2020 至 2024 年期间的 2.11 亿行代码变更进行了分析,这些代码来自匿名私有库和 25 个大型开源项目。研究结果显示了多重代码质量下降的信号,为一味追求 AI 带来的"快速胜利"可能埋下的长期隐患敲响了警钟。
代码复用正走向衰落
在 2024 年,GitClear 追踪到"相邻代码块中有五行或更多重复行"这一现象的出现频率增长了 8 倍------与两年前相比,代码重复比率提升了十倍。
同一年中,46% 的代码变更都是新增行,而复制粘贴的行数也超过了移动(moved)行数。"移动行"这一指标由 GitClear 提出,用于追踪对已有代码的重新排列,通常是为了将现有功能整合为可复用的模块。GitClear 和 Amplenote 的 CEO Bill Harding 表示:"系统的重构,尤其是对已存在代码的移动,通常标志着代码复用。"
而一年又一年的"移动代码"指标下降,意味着开发者对已有代码的复用意愿正在减弱。这与原本业界强调的最佳实践相悖,也预示着未来更多冗余系统将出现,而函数或功能的合并会更少。
图 源自 GitClear 的研究报告 AI Copilot Code Quality。
代码行数变多 ≠ 成功
不加约束的 AI 代码生成可能给那些生命周期较长的代码库带来沉重的维护负担。与人们认定的生产力提升相反,软件厂商 Harness 发布的2025 年软件交付现状报告却发现,大多数开发者在调试 AI 生成的代码以及处理其安全漏洞上花费了更多时间。
对于那些曾从 StackOverflow 复制过代码的开发者来说,频繁出现的复制粘贴行数也许不算什么新鲜事。然而,在 AI 的助推下,这种做法可能会导致技术债务的大幅飙升。
谷歌在 2024 年的 DORA 报告中指出,对 AI 的使用呈现利弊并存的态势:AI 使用率提升 25% 会加快代码审查并改善文档,但软件交付的稳定性则下降了 7.2%。
无限的代码意味着无限的维护
毫无疑问,代码助手非常有价值,大多数管理者都认为 AI 对保持竞争力至关重要。然而,不加管理地生成大量基于 LLM 的代码,是否会威胁到软件的可维护性?
数据表明,如果目前的趋势持续下去,修复缺陷和重构代码可能会占据开发者的大部分工作时间。GitClear 和 Amplenote CEO Bill Harding 说:"如果开发者的生产力继续只由提交次数或新增行数来衡量,那么 AI 引起的可维护性下降问题只会进一步加剧。"
除非团队更加注重可持续发展,否则 AI 将使得软件规模日益膨胀,进而需要"无期限的维护"。
复制粘贴的代价
除了可维护性之外,臃肿的代码还会带来成本压力。"包括我在 2024 年编程的大部分时间里,几乎没人会真正考虑代码在长期带来的开销。"Harding 如是说。
重复的代码不仅更难维护,也会带来额外支出:代码存储会产生云端费用;当相同的 Bug 分散在多处重复的代码块中,测试工作就会变得更加复杂,开发者的运营成本随之上涨。
学术研究也多次证明,"共变更"代码克隆(必须在多个地方同时更新的重复代码块)会导致更高的缺陷率。以华中师范大学 2023 年的一项研究为例,他们就发现代码克隆是种常见做法,但会对软件维护产生负面影响。
在按下 "Tab" 键前三思
GitClear 研究中值得庆幸的一点是,提交之间的时间正在缩短------AI 的确可以被用来抵消前述问题的一部分影响。比如 Cursor 等工具,就能协助开发者改写代码,确保每行之间的逻辑一致性。
然而,尽管 AI 在生成即时代码方面表现出色,它的上下文窗口毕竟有限。人类依然在全局把控、软件整体架构方面拥有不可替代的作用。人类开发者可以通过将重复逻辑重构为可复用的函数、将相关模块整合,或者在合适情况下复用微服务,来让代码库更具凝聚力。
"AI 的确带来了巨大的价值,但今年的数据也证明了,那些目光长远的开发者在按下 'Tab' 键时,往往也会多几分隐隐的担忧。"Harding 总结道。