AI 写码太快审不过来?别放弃 Review,升级它

作者:半吊子全栈工匠2026.11.06 20:57浏览量:0

简介:AI 编程让代码产能倍增,人工评审却成为新瓶颈,“放弃 Review”的声音开始出现。本文论证这为何是个陷阱:信息不对称、测试失真与质量债复利会层层反噬。文章提出一套分层评审体系:自动化门禁守规程、测试体系守行为、人工评审聚焦架构与业务语义,并给出小批量生成、信任分级、业务嗅觉培养与果断重写等可落地实践,帮助团队在提效的同时守住质量底线。

一、把问题看清楚:是产能错配,不是 Review 无用

过去一个工程师一天的净产出是几百行有效变更,如今借助智能编程工具,一个下午生成上千行代码并不稀奇。产出端从“天”提速到“分钟”,验证端却仍停留在“小时到天”,瓶颈自然出现。面对瓶颈,一个常见但危险的结论是:既然 Review 跟不上,那就砍掉 Review。

这个推理把“瓶颈”误判成了“障碍”。流水线上的质检环节变慢,正确解法是改造质检的效率与策略,而不是取消质检——否则质量问题不会消失,只会后移到生产环境,由线上事故、用户投诉和运维成本来结账。

原始讨论中有一个传神的比喻:vibe coding 像一场“崇祯模拟器”。下属个个自称忠臣,汇报时处处顺利,上了战场却一触即溃,溃了还要你追加投入去修。这个比喻精确刻画了失控路径,值得认真拆解。

二、“崇祯困境”的三个机制:为什么裸奔必然翻车

1. 信息不对称:汇报与现实的系统性偏差

AI 对自己输出的描述天然偏乐观。它会告诉你“已完成、已覆盖边界情况”,但实际可能只覆盖了主干路径。更微妙的是,模型是“顺从型下属”:当你表达不满时,它倾向于顺着你的方向打补丁,而不是坚持指出根因。“越骂越拉胯”并非玄学——被负面反馈驱动的迭代,常常以叠加补丁的方式让代码更脆弱。评审缺位时,这层偏差没有任何纠偏机制。

2. 局部正确不等于全局正确

单元测试通过、冒烟测试通过,只能证明“这段代码在其声明的能力范围内行为符合预期”,不能证明:架构边界没有被破坏(例如底层模块反向依赖了上层)、与既有系统的契约保持一致、性能与并发等横切属性达标。AI 生成代码尤其擅长“局部像回事”:每个函数单看都合理,拼在一起却可能是一张互相缠绕的依赖网。

3. 质量债的复利效应

每一段未经审视的代码,都在为未来的修改设置路障。重复模式、冗余抽象、不一致的错误处理策略会快速累积。十天之后想改一个字段,发现要动二十个文件——这时评审的成本不是“没做”,而是被加倍索要。屎山不是一天垒成的,它是无数次“先跑起来再说”的复利。

三、诊断根因:传统 Review 的三个隐含假设已经失效

传统代码评审流程建立在三个假设之上,而它们如今同时失效:

  • 变更小而稀疏:人类一天产出几百行有效代码已是极限,评审者有精力逐行读。AI 时代单次变更批量放大数倍。
  • 上下文共享:评审者对模块、规范、业务有长期记忆。现在上下文分散在多次生成会话中,人反而成了信息最少的那个。
  • 评审即校对:重点在可读性、风格与明显缺陷。现在真正稀缺的是判断“该不该这么写”,而不是“写得标不标准”。

所以结论应当正式化为一句话:不是 Review 没用,而是低效的 Review 没用;评审资源必须从“逐行校对”转向“风险加权”。

四、解法:构建“分层评审”体系

核心思想是九个字:机器守规程,人守架构。把可以机械判定的全部交给自动化,把人的注意力只花在机器判不了的地方。

4.1 第一层:自动化门禁——机器守规程

静态检查、格式规范、依赖漏洞与许可证扫描、圈复杂度与重复率阈值,这些规则确定、无需语义理解的项目,应在提交瞬间以秒级反馈完成。它们不该消耗任何人的注意力。

4.2 第二层:测试体系——守行为,但要防“应试型测试”

AI 特别擅长“让测试通过”,要防两类退化:一是循环论证——让同一个模型既写实现又写测试,测试可能只是复述实现;二是覆盖率游戏——断言空洞、只测正常路径。对策是:实现与测试分离生成,关键断言由人提出;测试代码本身也纳入评审范围,重点看断言质量而非行数;定期用变异测试的思路抽查测试有效性——人为注入缺陷,看测试能否抓住。

4.3 第三层:人工评审——守架构与业务语义

人的时间只花在三类问题上:模块边界与依赖方向是否被破坏;接口契约、数据模型、错误处理与降级策略是否合理;业务语义是否正确——这个字段到底该不该为空,这个状态机有没有漏状态。

4.4 机制一:小批量、高频次

评审效率的最大杠杆是控制单次变更规模。与其让 AI 一次生成两千行再评审,不如按“可独立验证的最小单元”切分:先让 AI 产出接口定义与契约,人评审通过后再生成实现。粒度小了,人的上下文负担小了,出错后的回滚成本也小了。

4.5 机制二:信任分级,而非一刀切

代码类型 风险级别 评审策略
脚手架、样板、配置模板 低 自动门禁 + 抽查
常规增删改查、表单逻辑 中 门禁 + 轻量人工
核心域逻辑、资金、权限、并发 高 设计先行 + 强制资深评审

4.6 机制三:上线后兜底

评审永远有漏网之鱼。灰度发布、监控告警、一键回滚是最后一道防线。AI 提效的团队更应补齐发布基建,因为出错频率不变时,出错产量会被同步放大。

五、培养业务嗅觉:评审者真正的护城河

原文点出一个关键能力:长期业务累积的嗅觉,能提前嗅到哪里可能不对,能区分什么是小问题、什么是大问题。这正是评审者不可替代性的来源,可以拆解为三项:

  1. 领域知识:知道哪些数据一旦写错是不可逆的,哪些操作涉及合规红线;
  2. 系统史观:知道哪些模块历史上最脆弱、哪些路径承载最大流量;
  3. 风险直觉:看到一个设计,能立刻联想到三类历史事故。

对个人的建议:维护事故复盘笔记、参与需求评审而非只看代码、定期重读系统里最老的模块。对团队的建议:把“哪里容易坏”沉淀成评审检查单,而不是留在老员工脑子里。

六、杀伐果断:明确“重写触发条件”

原文说“管他十万还是一百万行代码,该抄家就抄家”。工程上可以更冷静地表述为:预设重写触发条件,避免沉没成本绑架决策。可判定的信号包括:

  • 修复单个缺陷需要横跨超过既定数量的模块;
  • 补丁数量与缺陷密度同步上升,说明补丁正在制造问题;
  • 评审意见反复出现同一类架构偏离,说明地基已经歪了;
  • 新人上手某模块的时间持续恶化。

重写也不必大开大合,更稳妥的路径是绞杀式迁移:新旧并存、按模块灰度切换、随时可回退。

七、可落地的流程示意

下面用一份伪配置展示分层门禁如何编排(示意性质,非任何具体产品的语法):

  1. review_policy:
  2. auto_gate: # 提交即跑,秒级反馈
  3. - lint_and_format
  4. - dependency_audit
  5. - structural_metrics:
  6. max_cyclomatic_complexity: 15
  7. max_duplication_ratio: 0.05
  8. test_gate: # 分钟级验证
  9. - unit_tests: { min_line_coverage: 0.7 }
  10. - contract_tests
  11. human_review: # 小时级,聚焦高风险
  12. force_paths: ["core/**", "auth/**", "billing/**"]
  13. force_when:
  14. changed_lines_gt: 400
  15. touches_public_api: true
  16. focus: [architecture_boundary, error_handling, business_semantics]
  17. release_gate:
  18. - canary
  19. - rollback_plan_required

结语

回到最初的问题:AI 写码太快、Review 不过来,要不要违背祖训放弃 Review?答案是:AI 没有让 Review 过时,而是让“低质量 Review”过时了。逐行校对的时代结束了,但架构判断、业务语义把关、风险分级与果断取舍的时代才刚开始。真正的祖训从来不是“必须逐行看代码”,而是“没有人比流程和验证更值得信任”。把规程交给机器,把判断留给自己,把重写的勇气写进制度——这才是 AI 时代评审体系的正确打开方式。