🧩 软件工程 · 方法论之争

软件工程教父不再逐行审查 AI 代码:信任全交给自动化指标,但承认架构设计还没走通

《代码整洁之道》作者 Robert C. Martin(Uncle Bob)已彻底放弃对 AI 代码的人工逐行评审,转而把质量管控交给一套由指标与约束条件组成的自动化闭环。他坦言这套模式"运行得非常顺利"——但 UML 之父 Grady Booch 公开反对。AI 代码的质量,究竟该由谁守?

综合公开信息整理 阅读约 6 分钟
#Uncle Bob #AI 智能体 #代码质量 #变异测试 #Clean Code
2-4× AI 叠加约束后的开发效率(人类基准)
5 个 多智能体协作角色,各司其职
8 道 强制检测关卡,替代人工审阅

⚡ 30 秒速览

  • 核心转变:从"人读代码"到"机器测代码",Uncle Bob 的终极目标是彻底不看 AI 输出,完全信任检测结果。
  • 检测清单:单元测试、Gherkin 验收、QA 流程、圈复杂度、模块大小、依赖规则、变异测试、覆盖率——共 8 道。
  • 为什么不靠提示词:"中间信息丢失"会让过长的规则被模型无视;确定性工具规则固定、执行确定,不受上下文影响。
  • 没走通的部分:架构设计全自动化"暂时没有取得理想效果",模块依赖管控仍需人类主导。
  • 反对声音:Grady Booch 坚持逐行审核全部 AI 代码,"没有任何智能体拥有同等实战积累与业务上下文"。
  • 新人建议:亲手写代码、把自己当"人类智能体"接受自动化约束、研读经典软件工程老书。

01两种信任:把代码交给指标,还是交给直觉?

一场关于"AI 代码要不要人读"的争论,正在软件工程界蔓延。站在两端的,是两位各自写过里程碑级著作的殿堂级人物。

认知的裂缝,从"信任"这个词开始。

🔍 Grady Booch|信任,但要核验

UML 联合作者,坚持逐行审核智能体生成的全部代码。

"作为经验丰富的开发者,我可以凭直觉分辨代码好坏。但没有任何智能体,能够拥有同等的实战积累与业务上下文。"

🤖 Uncle Bob|信任,但要约束

只看 CRAP 评分、不定期抽查代码、运行定制测试套件。

"只要 AI 生成的代码能通过全部关卡,即便没人读过一行函数内部实现,我们也有充分理由相信正确性。"

注:两方观点均来自近期公开对话,此处为编辑摘编,完整原话以原始对话记录为准。

02他的答案:给 AI 上八道强制关卡

Uncle Bob 为 AI 智能体搭建的约束体系,覆盖了从"函数内部逻辑"到"模块之间关系"的所有层级:单元测试、Gherkin 验收测试、QA 测试流程、圈复杂度阈值、模块大小限制、依赖结构分析、变异测试、测试覆盖率。

单元测试每段业务逻辑的基本校验
Gherkin 验收测试高阶验收标准,用自然语言描述行为
QA 测试流程模拟用户操作界面的完整系统测试
圈复杂度阈值函数逻辑分支数量上限
模块大小限制约束单模块的职责范围
依赖结构分析模块间依赖规则固化到配置文件
变异测试系统性篡改源码,检验测试能否捕获缺陷
测试覆盖率目标 100%

注:核心逻辑只有一句——能不能通过全部关卡,比有没有人读过每一行更重要。方框高亮为 Uncle Bob 最看重的"重武器"。

但他最初并不是这么做的。Uncle Bob 在播客中回忆,自己曾把《Clean Code》核心内容几乎全部写进提示词,整理成几页纸的规范文档,结果很快发现:AI 对待这些明文规则,就像《加勒比海盗》里的准则——"参考建议",可遵守可不遵守。

原因指向大模型一个已知缺陷:"中间信息丢失"(lost in the middle)

模型的上下文窗口存在注意力机制偏差,开头和结尾的信息权重更高,中间内容会被弱化忽略。几十条之后的规范,模型根本不会读取执行。而自动化检测工具不会出现这种问题——规则固定、执行确定性强,不会被上下文窗口的机制影响。

他的结论因此很干脆:精简初始提示词,只保留最核心规则;剩余约束,全部靠后置自动化工具落地。

03五角色流水线:从需求到交付的自动闭环

单工具约束只是第一步。真正让 Uncle Bob 放心"撒手"的,是一套多智能体协作流水线。每个角色只领一项任务、占用极小的上下文窗口,完成即销毁,下一轮任务启用全新智能体。

需求解析 编码开发 代码清理 代码加固 QA 测试
需求解析把需求文档转为 Gherkin 结构化验收用例 + 系统化 QA 流程
编码开发按用例开发业务代码、编写单元测试,确保匹配需求
代码清理运行 CRAP 检测与常规评审,清理冗余、劣质代码
代码加固执行变异测试,实现 100% 覆盖率,修正所有逻辑漏洞
QA 测试把标准化 QA 流程转为可执行脚本,全自动输出确定性结果

"原本单个智能体需要五分钟完成、质量参差的工作,这套闭环大约一小时完成,但对比人类半天的开发时长,效率依然提升 4-5 倍,且代码质量远高于人工开发水平。"

注:流程按 Uncle Bob 公开描述整理;每个智能体启动需 10-15 秒初始化,期间会重新读取任务上下文。

04为什么他敢不看代码?两个底层机制

这套体系能成立,靠的是两项让 AI 如鱼得水的"重活"。它们都是 2000 年前后被提出的老技术,当年因算力门槛被搁置,如今被 AI 的速度重新激活。

4人类开发者的 CRAP 阈值
6→8AI 的 CRAP 阈值(当前 6)
100%变异测试覆盖率要求
30分钟AI 跑完变异测试并自动修复(过去需通宵)

注:CRAP 评分越低函数越健康;阈值 6 意味着函数允许 6 条独立逻辑分支且全部被测试覆盖。右侧两格为 AI 时代的新标准。

CRAP 评分结合代码覆盖率、测试覆盖率与圈复杂度,给每个函数打一个"劣质程度"分数。Uncle Bob 的解释很直接:AI 的短期记忆能力远超人类,容量更大、精度更高,能处理更复杂的逻辑分支,所以阈值从人类的 4 上调到 6,未来可能放宽到 8。

变异测试则更"狠":系统遍历源代码,反转正负号、大小于符号、逻辑等于符号,再运行全套测试。如果代码被篡改后测试依然通过,说明出现"存活变异体"——测试存在漏洞,必须修复。2000 年,Uncle Bob 跑一次完整测试要四分钟、重复数百次,只能通宵挂机;现在 AI 三十分钟跑完,顺带自动修补所有漏洞

05他亲口承认的失败:架构设计自动化,还不行

但这套闭环,有一个绕不开的缺口。

"我目前正在尝试将整套架构规划流程全自动化,但暂时还没有取得理想效果。"

Uncle Bob 承认,现阶段 AI 做架构设计"经常产出漏洞方案"。他仍要人工向 AI 问询系统结构、模块关联、依赖关系,再基于经验重新规划模块拆分与通信规则。他让 AI 开发了实时 UML 可视化工具和依赖规则校验程序,但架构的顶层决策依然由人完成

他同时彻底转向敏捷:放弃重度前置规划,让 AI 先完成单个小型需求迭代,人工复盘架构后再进入下一轮。理由藏在一段直白的计算里——

无论前期规划多么细致,人类都无法穷尽所有场景。AI 执行中总会出现规划外偏差,只能反复暂停、重构规划,效率极低。如今编程的修改成本已经无限趋近于零,完全没有必要做重度前置规划。可运行系统、自动化检测标准,才是真正的需求。

06AI 时代的新人:把自己当"人类智能体"

当基础编码全被 AI 接管,新手开发者该从哪里长出战略思维?Uncle Bob 在对话中给出了三条路径:

✍️亲手写代码

  • 必须完整经历编码、调试、排错全过程,理解 AI 面对的底层问题。
  • 不能全程只做 AI 提示词工程师。
"底层基础的价值从未改变。鼓吹基础无用的人,终究会付出代价。"

🤖把自己当"人类智能体"

  • 在重度使用 AI 的团队中承接基础任务,接受与 AI 相同的自动化检测约束。
  • 这个阶段效率很低,但能快速积累海量实战经验。
"熬过这个阶段,才有资格把控 AI 工作、做顶层战略设计。"

📚研读经典老书

  • Tom DeMarco、Ed Yourdon 的著作,以及《程序员修炼之道》等经典。
  • 书里部分内容老旧,但核心的架构思维、工程理念、战略逻辑永不过时。
"快速建立顶层认知,再结合 AI 实战体感,慢慢培养战略思维。"
编辑核心判断

Uncle Bob 用一套检测闭环替代了自己五十年的阅读经验——这不是投降,而是第一次把"经验"成功编码为"约束"。但这套约束有明显盲区:安全漏洞不报错、架构坍塌不报错、业务语义偏差也不报错。当"不读代码"成为新常态,设计这些约束的人,就成了代码质量最后的守门员。

完整对话已上线

想听 Uncle Bob 完整讲述这套工作流?他与主持人围绕多智能体分工、深度模块理论、TDD 是否适合 AI 的讨论,已整理为可阅读的完整对话。

阅读完整对话