1. 项目缘起:当“AI提升效率”成为一句口号

我们团队大概是去年年初开始全面引入AI编程工具的,从GitHub Copilot到后来的Cursor,再到各种云端大模型API的集成。和所有人一样,最初的感受是兴奋的。那种“刚想写个循环,代码就自动补全了”的流畅感,那种“描述一个复杂函数,几秒钟就得到完整实现”的即时满足,很难不让人产生生产力爆棚的错觉。很快,各种内部汇报和外部分享里,开始出现“开发速度提升XX%”、“代码产出量翻倍”这样的说法。这些数字听起来很美好,也符合所有人的直观感受,但它们真的站得住脚吗?

作为一个技术团队,我们本能地对模糊的“感觉”和未经检验的“数据”抱有警惕。当这些关于AI生产力的漂亮数字开始频繁出现在我们的OKR复盘和项目规划中时,我们决定做一件看似简单、实则复杂的事: 回头审视我们自己的代码库,用客观的提交历史、合并请求(PR)数据和代码质量指标,去量化AI工具到底带来了什么改变。 我们最初的假设是,即使不能精确到“55%”这样的数字,至少也能找到一些清晰、正向的趋势线,比如PR合并周期缩短、缺陷率下降、或者代码重复率降低。

然而,真正开始动手分析后,我们才发现自己踏入了一片充满迷雾的沼泽地。问题不在于AI没有产生影响——它的影响无处不在,从代码风格到提交习惯。问题在于, 我们惯用的那些衡量“效率”和“质量”的指标,在AI介入的软件开发流程面前,几乎全部失灵,甚至可能产生误导。 这篇文章,就是我们这几个月来试图“测量不可测量之物”的完整记录、反思和教训。它不是要否定AI编程工具的价值(我们至今仍在重度使用),而是想探讨一个更本质的问题:当编写代码的成本急剧下降时,我们究竟应该关注什么,才能避免在“虚假繁荣”中走向技术债的深渊?

2. 为什么简单的“前后对比”基本无效?

我们的第一个尝试,也是最自然的思路,就是做一个“前AI时代”和“后AI时代”的对比分析。我们选取了核心产品中几个模块,截取了引入AI工具前6个月和后6个月的Git历史数据,准备大干一场。但很快,我们就撞上了第一堵墙: 你几乎无法找到一个干净的对照组。

2.1 混淆变量多到令人绝望

你以为你只是在对比“用不用AI”,但实际上,你同时在对比无数个其他变量。在我们选取的时间段里,团队规模发生了变化,新加入了两名中级工程师;项目的技术栈进行了一次小版本升级,引入了新的API;产品需求的重点也从快速功能迭代转向了系统稳定性和性能优化。更关键的是, “开始使用AI”本身就是一个强烈的干扰信号 。这通常伴随着团队的高度热情、密集的学习和一段刻意练习期,这段时间的生产力波动(无论是提升还是下降)更多是“霍桑效应”的体现,而非工具本身的长期作用。

我们看过一些公开案例,声称通过对比“AI辅助编码”和“传统编码”任务,得出了效率提升的百分比。这类实验往往在受控环境下进行,任务孤立、上下文简单。但真实的软件开发是一个连续、复杂、充满上下文切换和意外中断的流程。 在实验室里跑得飞快的赛车,未必能适应城市拥堵的交通。 将受控实验的结论直接外推到日常开发,其可靠性非常存疑。

2.2 输出量指标:最诱人,也最危险的陷阱

当“前后对比”行不通时,人的本能是寻找更直接的信号。于是,所有人的目光都投向了那些显而易见的“输出量”指标:提交次数、PR数量、新增代码行数。我们的数据也显示,这些数字确实在稳步增长。这似乎印证了AI让开发更“高效”的论断。

但如果我们只看到这一层,就大错特错了。当我们把这些“增长”与另一些指标交叉分析时,一幅更复杂的图景出现了:

  • 平均提交大小在增长 :每个Git提交所包含的变更行数中位数上升了约30%。这意味着开发者倾向于一次性提交更大块的、逻辑更复杂的更改。从好的方面看,这可能是一个功能点的完整实现;从坏的方面看,这直接导致了 代码审查(Code Review)的难度呈指数级上升 。审查一个改动200行的提交和审查一个改动50行的提交,所需的心智负担和耗时完全不是一个量级。
  • PR合并周期并未缩短,甚至拉长 :尽管PR的创建速度变快了,但从创建到合并的平均时长(PR Cycle Time)并没有显著改善,在部分复杂模块还有所增加。原因很直接: 审查者需要花更多时间来消化和理解那些由AI生成的、更庞大且风格可能略显陌生的代码块。 输出的加速,在审查环节被抵消了。
  • 提交信息质量滑坡 :我们观察到,“Update”、“Fix”、“Add”这类信息量极低的提交信息比例上升。而像“修复了在用户会话过期时并发请求可能导致的数据竞争问题”这样包含具体上下文和意图的优质提交信息在减少。AI能生成代码,但不会自动生成好的提交信息。当开发者沉浸在快速生成的代码流中时,往往会忽略这项至关重要但“不产出代码”的工作。

注意 :这并不意味着AI导致了代码质量下降。它意味着, “更多代码行数”不等于“更多有效价值” 。如果我们盲目地将“代码产出量”作为核心绩效指标(KPI)并加以优化,团队会本能地倾向于生成更多代码(这很容易),而不是去思考如何用更简洁、更清晰的代码解决问题(这很难)。这就是典型的“古德哈特定律”:当一个指标变成目标,它就不再是一个好指标。

3. 那些真正在发生,却难以量化的深层影响

抛开那些容易误导人的表面数据,当我们深入代码库的肌理,去观察模式、结构和人的行为变化时,一些更深刻、也更值得警惕的影响浮现了出来。这些影响很难用一个数字概括,但它们的长期效应,可能远比“快了多少”更重要。

3.1 代码同质化与“错误复制”的双刃剑

AI工具,尤其是基于单一代码库进行微调或拥有强大上下文理解能力的工具,是一股强大的代码风格统一力量。我们观察到,代码库的内部一致性(Homogeneity)显著提高。相似的错误处理模式、相同的工具函数写法、一致的数据结构访问方式遍布各个模块。这对于降低团队新人上手的认知负荷、提升代码可读性而言,无疑是一件好事。

然而,硬币的另一面是: 同质化也意味着错误和不良模式的快速复制 。如果某个AI生成的代码片段包含一个潜在的边界条件漏洞,或者采用了一种虽然能运行但性能不佳的算法,那么所有接收到相似提示的开发者,都可能将这个模式复制到代码库的不同角落。以前,一个不良模式可能需要经过多位工程师的手才会传播开;现在,它可能在一次团队会议分享“高效提示词”后,就悄无声息地污染了多个功能模块。我们曾发现一个关于日期时间处理的微妙时区问题,在三个看似无关的模块中以几乎相同的方式出现,追根溯源,都来自于某次AI对类似需求生成的“样板代码”。

3.2 审查负担的转移与“看起来正确”的陷阱

AI并没有消除代码审查的瓶颈,它只是转移了瓶颈的位置。以前,审查者可能需要花时间推敲算法逻辑是否最优、边界条件是否覆盖。现在,审查者更多的时间花在了: 验证AI生成的代码是否真正理解了业务需求,以及检查那些“看起来完全正确”的代码背后是否有隐藏的假设或错误。

这是AI生成代码一个非常独特的挑战:它的语法通常是完美的,格式是标准的,甚至变量命名都很合理。它“看起来”就是一段好代码。这会让审查者放松警惕,尤其是当变更量很大时。我们经历过几次事故,问题代码都顺利通过了审查,因为它们逻辑通顺,通过了静态检查,甚至通过了基础的单元测试。但它们在处理一些非常规的业务状态组合时,会 silently fail(静默失败)。 审查AI代码,需要从“检查它怎么写”转向“检查它为什么这么写,以及它写的到底对不对” ,这要求审查者具备更深刻的业务上下文和更缜密的逻辑思维。

3.3 测试覆盖率的“静默侵蚀”

这是一个让我们格外警惕的趋势。在统计了数百个AI辅助开发的PR后,我们发现一个明显的模式: 这些PR中,生产代码与测试代码的比例,显著低于人工主导开发的PR。 换句话说,功能代码飞快地写好了,但配套的测试用例(尤其是集成测试和边缘情况测试)被“延后”了,或者写的非常简陋。

原因不难理解。AI擅长根据描述生成功能实现,但让它生成一套完备、智能的测试用例则困难得多。这需要更精确的上下文、对业务规则的深刻理解以及设计测试用例的创造性思维。当开发者依赖于AI快速推进功能开发时,编写测试——这项本就容易被低估和推迟的工作——就更容易被牺牲掉。长此以往,代码库的测试覆盖率数字可能还能靠后期补课维持,但 测试的深度和质量,以及“测试即文档”的价值,却在被静默地侵蚀 。一个测试薄弱但功能繁多的系统,其维护成本会随时间急剧上升。

4. 从“测量产出”转向“观测系统健康度”

既然传统的效率指标和简单的对比方法都不可靠,作为工程团队,我们应该关注什么?我们的结论是,需要从对“个体开发者输出”的测量,转向对“整个研发系统健康度”的观测。以下是我们认为更具指示性的一系列信号和指标,它们共同构成了一张系统体检表。

4.1 核心健康度指标

不要再看提交次数和代码行数了,请关注这些:

  1. PR合并周期时间(PR Cycle Time) :从PR创建到合并的平均时长。这是衡量流程流畅度的黄金指标。如果AI让代码产生更快,但合并周期变长了,说明瓶颈转移到了审查、测试或集成环节。 理想状态是,在AI辅助下,此指标应保持稳定或略有下降。
  2. 审查评论密度(Review Comment Density) :每个PR收到的有效评论数量(去除“LGTM”之类的简单认可)。这个指标可以反映审查的深度。如果密度下降,可能意味着审查者因代码量太大而草率了事,或者AI生成的代码“过于完美”而让人无从下手。 需要警惕的是密度骤降,而非升高。
  3. 回滚与热修复率(Revert & Hotfix Rate) :有多少合并的代码因为引入严重缺陷而被回滚,或者需要立即发布热修复补丁。这是代码质量和测试有效性的直接体现。 AI的引入不应导致这个比率的上升。
  4. 测试代码/生产代码比率趋势 :不要只看某个时间点的覆盖率百分比,要看这个比率随时间的变化趋势。如果新引入的代码中,测试代码的占比在持续下降,这就是一个明确的危险信号。
  5. 模块贡献者深度(Contributor Depth per Module) :不要满足于“有多少人碰过这个模块”(广度)。要评估“有多少人能无需大量重新学习,就能自信地修改和维护这个模块”(深度)。AI可能让更多人能向模块提交代码,但如果每个人都只是通过AI生成代码,而无人深究其核心逻辑,那么这个模块的“巴士因子”看似高了,实则系统的理解负债(Understanding Debt)在增加。

4.2 需要警惕的行为模式

除了量化指标,一些团队行为模式的变化也值得管理者和技术负责人密切关注:

  • 提交规模与功能复杂度的背离 :观察是否出现了“为一个小功能提交了巨大改动”的情况。这可能是开发者过度依赖AI生成“样板代码”,或者没有做好功能拆分的信号。
  • 审查彻底性随PR量增加而下降 :当PR如潮水般涌来时,审查者是否会倾向于更快地点击“批准”?建立机制(如轮值审查、设定每日审查上限)来保障审查质量不被打折。
  • “方言”化代码的出现 :留意代码库中是否开始出现对同一类操作有多种不同的实现模式。比如,有的模块用A方式处理错误,相邻模块用B方式。这通常是不同开发者(或同一开发者在不同时间)使用AI时,提供了差异化的上下文导致的。这会给后期维护带来不必要的认知负担。

5. 我们的实践:如何有意识地使用AI并管理其影响

基于以上的观察和反思,我们并没有放弃AI工具,而是调整了使用策略和团队规范,试图最大化其收益,同时管控潜在风险。以下是我们正在实践的几个具体方法:

5.1 将AI定位为“高级结对编程伙伴”

我们不再宣传AI是“效率倍增器”,而是在团队内部将其定位为一个“不知疲倦但有时会跑偏的结对编程伙伴”。这个定位的转变至关重要,它设定了正确的预期:

  • 你仍然是驾驶员 :开发者必须明确知道要做什么、为什么做。AI是执行者,不是决策者。
  • 它需要清晰的指令 :就像你对人描述需求一样,给AI的提示词(Prompt)需要尽可能清晰、包含上下文和边界条件。
  • 它的输出必须被验证 :就像你审查同事的代码一样,你必须以同等的甚至更严格的标准审查AI生成的代码,理解每一行在做什么。

5.2 制定并强化“AI辅助开发规范”

我们制定了几条简单的团队红线:

  1. 小步提交 :强制要求每个Git提交的变更尽可能小且专注。这倒逼开发者在利用AI生成代码后,必须自己进行逻辑拆分和整理,而不是一股脑全提交上去。
  2. 提示词即设计文档 :鼓励开发者在编写复杂的AI提示词前,先将其核心逻辑用注释或伪代码写出来。这个提示词本身会成为审查的一部分,帮助审查者理解开发者的意图。
  3. 测试先行,或至少同行 :在让AI生成功能代码前,可以先让它根据需求描述生成测试用例框架。或者,硬性规定 任何PR中,如果包含AI生成的生产代码,必须同时包含对应的、开发者精心编写的测试代码 。将测试覆盖率作为合并的硬性门槛之一。
  4. 强制“为什么”审查 :在代码审查中,审查者有权对任何一段看起来正确但意图不明的AI生成代码提问:“为什么这里要这样处理?”如果原作者无法清晰解释,这部分代码就需要重写或添加详细注释。

5.3 建立新的质量观测仪表盘

我们整合了Git、项目管理、CI/CD的数据,建立了一个面向技术负责人的仪表盘,核心视图不再是“本周写了多少行代码”,而是:

  • 系统流畅度视图 :展示PR合并周期、评论密度、构建失败率的变化趋势。
  • 代码健康度视图 :展示新代码的测试比率、静态分析警告趋势、复杂模块的贡献者深度。
  • 模式发现视图 :通过简单的代码相似度分析,预警可能出现的“错误模式复制”或“方言化”趋势。

这个仪表盘帮助我们更早地发现问题,例如,当我们发现某个团队的测试比率连续两周下降时,可以及时介入,了解是工具问题、流程问题还是意识问题。

6. 结论与核心体会:效率的悖论与工程师价值的回归

经历了这次漫长的测量之旅,我们最大的体会是: AI编程工具所提升的,仅仅是“代码转录”的效率——将想法和描述转化为语法正确的字符串的速度。而软件开发的真正成本,长期以来以及在未来,都主要在于“概念化”、“设计”、“验证”和“维护” 。这些环节的成本并没有因为AI而降低,反而可能因为代码量的激增和复杂度的隐蔽化而升高。

这就产生了一个“生产力悖论”:我们产出代码的速度快了3倍,但产品的功能丰富度、稳定性和可维护性,可能只提升了30%。中间的巨大差值,就是由那些未被测量的、甚至被恶化的因素所吞噬——更耗时的审查、更脆弱的架构、更沉重的测试负债和更分散的知识上下文。

因此,对于任何想要引入或已经引入AI编程工具的团队,我的建议是: 立即停止追逐那些华而不实的“效率提升百分比” 。把注意力从“写代码有多快”转移到“我们产出的代码是否健康,我们的研发系统是否可持续”上来。

AI不会取代工程师,但它会重新定义工程师的核心价值。未来的优秀工程师,可能不再是那个最能写代码的人,而是那个 最善于提出问题、分解问题、设计解决方案、并精准验证结果的人 。AI解决了“怎么做”的执行层问题,而工程师需要更专注于“做什么”、“为什么做”以及“做得对不对”的战略层和验证层工作。

最后,分享一个我们内部流传的小技巧:当你对一段AI生成的复杂代码感到不确定时,尝试让它自己给自己写一段注释,或者向你这个“新手同事”解释这段代码的逻辑。这个过程本身,常常就能暴露出代码在逻辑或设计上的模糊之处。工具永远在进化,但我们对代码质量、系统可维护性和团队可持续性的追求,始终是工程实践的核心。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐