Code Review 为什么越来越吃力
TL;DR
- AI 让生成速度暴涨,Code Review 接到手里的,常是一整片已经长好的实现
- PR 变大、上下文缺失、代码表面顺眼却语义含混,都会把评审拖成体力活
- 小 PR、渐进式构建、补齐上下文、AI 预审与集体走读,都是把人重新接回现场的办法
上一篇我提到,团队 99% 的代码都由 AI 生成之后,Code Review 会突然变难。这篇就接着往下说。前些天我打开一个提交,滚轮拖了好一阵子才到底,文件倒不算夸张,命名也齐整,测试也像模像样,第一眼甚至会让人觉得这活儿做得挺利索。但我心里并不轻松。代码越显得体面,我反倒越知道,这种 review 往往最费神。
成品
很多人会把这件事理解成评审的人变保守了,或者团队对 AI 天生不信任,我看未必。CR 吃力,先变掉的多半是被评审的对象,人的态度反倒在其次。过去一个工程师自己往前写,犹豫、试错、回退、补丁、重构,多少都会留下一些痕迹,提交虽然未必好看,却带着过程。沿着那条线往回摸,常常还能摸到他为什么这么写。
AI 生成的代码没有这个脾气。很多时候它一口气就给出一整片已经成形的实现,接口、分支、异常处理、测试桩,一股脑铺到眼前。中间那些本该由作者自己咀嚼过一遍的东西,输入输出是否完整,边界条件卡在哪,依赖有没有副作用,某个默认值到底是业务约定还是随手一猜,常常没有被显式讲出来。代码长出来了,思考过程却没有一并显影。
于是 Code Review 接到的,往往已经成了一块切好的成品。评审者看得见结果,看不见路径;看得见函数和类,看不见那些被丢弃的方案;看得见 happy path,看不见作者到底有没有认真想过异常场景。很多 bug 也正是从这里开始躲藏的,它们不必语法错误,不必编译失败,甚至不必在单测里露头,只要边界够偏、环境够脏、依赖够绕,后面自然会出来讨账。
再加一层,AI 还会顺手把变更做大。人手写代码,总归会被体力和时间拦一下,写到一半也会本能地停下来想一想;AI 却不大会停,它一旦领会了人的意图,几百行、上千行地往前铺,真不费什么劲。生成成本降下去了,理解成本却没有跟着一起掉。
便宜的是产出,不是理解。
体力活
这也是为什么很多 CR 最后会慢慢滑成一种很奇怪的体力活。评审者打开 diff,先扫命名,扫目录结构,扫重复逻辑,扫出几处明显的问题,已经很不容易;再往深处走,脑子里还得同时装着业务规则、上下游接口、运行环境、历史兼容包袱、测试覆盖范围,这时候心智很快就顶满了。于是人只能下意识地抓那些最容易看见的东西,至于更阴的地方,像状态迁移、环境分叉、缓存一致性、事务边界,往往只能靠运气。
更麻烦的是,AI 太会写那种“乍看很顺”的代码了。缩进漂亮,命名像回事,模式也用得像回事,甚至连注释都礼貌得很。这类代码最容易骗过人的地方,在于它并不粗糙,它只是含混。评审者一眼看过去,总觉得差不多都对;可真要逐行追问某个分支为什么这样落,某个对象为什么在这里创建,某个异常为什么吞掉,便会发现很多地方只是“像”,还谈不上“懂”。这就很磨人。
所以我后来越来越觉得,小 PR 在 AI 时代不是习惯问题,是硬约束。提交一大,CR 基本就失真了。评审者若要在一次 review 里同时消化十几个文件、几百行改动、两三个隐含决策,最后多半也只能给出一个礼貌性的 approve。把变更压小,不是为了显得谨慎,盖因只有这样,人才有机会看清一段逻辑究竟加了什么、删了什么、依赖改到了哪里、风险落在什么地方。很多复杂功能,宁可先搭骨架,再一点点把血肉填进去,也别贪图一步到位。一步到位,最容易一步到坑里去。
补回
当然,光把 PR 变小还不够。作者也得把上下文补回来。我现在越来越在意,一个提交里有没有把问题说清楚,这次到底要解决什么,边界在哪,哪些假设已经成立,哪些地方我自己也没十足把握,测试补到了哪里,没补到哪里。代码 diff 只是结果,说明和测试同样是 review 的输入。若是连一句完整的话都说不清这次改动在干什么,我一般不太敢让 AI 就这么直接往前冲。
至于拿不同的 AI 彼此做审阅,我觉得未尝不可,甚至常常有用。它们在找重复逻辑、空指针风险、命名不一致、常见坏味道这类事情上,速度确实快,也能先替人筛掉一层浮在表面的毛病。我最近在参与的一个开源项目里,也体验了 CodeRabbit,这玩意儿给我的观感确实不错,至少从审阅效果来看,不像走过场,有些意见点得很准,替人工先垫一层,颇为省眼力,若团队正想找个顺手的家伙,我是愿意推荐一下的。当然,它也治不了所有病。业务语义是不是对,环境假设稳不稳,兼容策略有没有埋雷,测试场景够不够值钱,这些判断最后还是得人来拍板。机器可以帮人多看几遍,最后那一下,看准,终究还得靠人。
写到这里,我反倒觉得 Code Review 在 AI 时代比以前更像一道关。过去它有时候还像礼节,像流程上最后点一下鼠标的手势;如今不行了,代码生成越来越便宜,理解越来越贵,CR 也就不能再只是“有人看过”这么简单。它得把那些在生成阶段被压缩掉的思考,重新拉回桌面,拉回人脑,拉回约束本身。否则团队写得越快,欠下的账只会越大。这很正常。下一篇我想接着写,有些 bug 其实并不是 AI 独有,它只是把旧问题放大得更快。真相往往比抱怨要朴素一些。
2026年03月22,Leon
欢迎交流
如果你觉得文章有帮助,欢迎加我微信或关注公众号,获取更多内容

