Uncle BobAI代码生成软件工程自动化测试Clean Code

完全相信AI代码的Uncle Bob,坦诚这条路还没走通

InfoQ(整理:褚杏娟)··原文链接
收录于 2026/8/24 09:39:11

在 AI 代码极度普遍的当下,一直告诫开发者要严肃对待自己编写的代码的 Uncle Bob,如今已经彻底放弃对 AI 代码逐行人工评审,转而在搭建一套依靠指标与约束条件的管控框架。这一做法在工程师群体中引发激烈争论——UML 联合作者 Grady Booch 就公开反对:"信任,但要核验。没有任何智能体能够拥有同等的实战积累与业务上下文。"

而 Uncle Bob 的态度恰恰相反:只要 AI 生成的代码能够全部通过一道道自动化关卡,即便没人读过一行函数内部实现,也有充分理由相信代码的正确性。 但他同时坦诚,架构规划的全自动化暂时还没走通。

核心工作模式:AI 写代码,人做质量管控

Uncle Bob 当前的工作流程是全权交给 AI 智能体执行开发任务、运行检测工具,终极目标是彻底不用手动查看代码。他的质量管控武器库包括:

  • 单元测试 + Gherkin 验收测试 + QA 测试流程
  • 圈复杂度阈值(从人类的 4 放宽到 AI 的 6,后续可能到 8)
  • CRAP 代码评估机制(结合代码覆盖率、测试覆盖率与圈复杂度计算评分)
  • 变异测试(mutation testing)——系统性反转源码逻辑符号,检测测试用例是否能捕获缺陷
  • 模块大小限制、依赖结构分析、测试覆盖率要求

这套方案的关键洞察来自他 21 世纪初的经历:CRAP 检测和变异测试理念虽好,但人工执行成本极高(变异测试单次四分钟、需通宵挂机数百次),根本无法融入常规构建流程。AI 智能体的出现让这些"理想但不可行"的技术重新变得实用——原本通宵的工作现在三十分钟搞定,还能自动修补漏洞。

AI 同样会被代码腐烂拖垮

Uncle Bob 发现了一个关键问题:如果不及时清理 AI 产出的劣质代码,一味堆叠新功能,代码冗余和漏洞会持续累积,AI 迭代效率持续下降,陷入恶性循环——修改一处破坏另一处,反复修补反复出错,最终原地打转,甚至智能体直接停滞。

即便 AI 智能体速度快、智能化程度高,但也和人类一样无法应对极度混乱的代码。它们的容错阈值和人类略有不同,但依然存在上限。

这就是他放弃"人工引导调控"、转向自动化检测工具的根本原因。

为什么放弃提示词工程

Uncle Bob 最初也尝试在提示词里写满代码规范,甚至把《Clean Code》核心内容都录入提示词。但他很快发现 AI 对待这些明文规则就像《加勒比海盗》里的准则——"参考建议",可遵守可不遵守。

背后是**"中间信息丢失(lost in the middle)"**现象:模型的上下文窗口存在注意力机制偏差,开头和结尾权重高,中间内容被弱化忽略。提示词过长时,大部分规则落入中间区域直接被无视。

自动化检测工具则不会出现这个问题——规则固定、执行确定性强,不受上下文窗口机制影响。他的核心技巧是:精简初始提示词只保留最核心规则,剩余约束全部依靠后置自动化工具落地。

多智能体协作体系

Uncle Bob 正在搭建多智能体分工协作体系:

  1. 需求解析智能体——将人工需求转化为 Gherkin 验收测试用例和 QA 测试流程
  2. 编码智能体——根据结构化用例开发业务代码、编写单元测试
  3. 代码清理智能体——运行 CRAP 检测、常规代码评审,清理冗余劣质代码
  4. 代码加固智能体——执行变异测试,实现 100% 覆盖率,校验逻辑漏洞
  5. QA 测试智能体——将 QA 流程转化为可执行脚本,全自动操作系统

每个智能体采用"即用即毁"模式,完成单次任务后销毁,保证上下文干净。整套流程约一小时完成,对比人类半天开发时长,效率提升 4-5 倍,且代码质量远高于人工。

架构规划全自动化:坦诚还没走通

这是 Uncle Bob 最坦诚的部分。就在一个月前,他还在人工负责架构设计——AI 给出的架构答案经常漏洞百出,他需要基于经验重新规划模块拆分、定义通信规则。

他搭建了架构可视化工具(实时生成 UML)和确定性依赖检测工具,正在尝试将整套架构规划流程全自动化,但暂时没有取得理想效果。他承认现阶段 AI 做架构设计经常产出漏洞方案,架构、模块依赖管控仍然需要人类主导。

他的应对策略是放弃瀑布式重度前置规划,采用敏捷小迭代:让 AI 完成小型需求迭代,人工复盘重构架构,再进入下一轮。编程修改成本已无限趋近于零,快速迭代、持续优化才是最优解。

新人培养:把自己当"人类智能体"

Uncle Bob 强调新人必须亲手写代码,完整经历编码、调试、排错,不能全程只做提示词工程师。入行后应把自己当作"人类智能体",承接 AI 级别的基础任务,接受同样的自动化检测约束,积累实战后再进阶做战略架构。

他还坚持新人必须补齐底层基础——从二进制、汇编、C 语言学起,再到高级语言、AI 工具协作。通过研读 Tom DeMarco、Ed Yourdon、《程序员修炼之道》等经典书籍,弥补 AI 时代架构反馈周期缩短但新人缺少历史踩坑经验的短板。

底层基础的价值从未改变。鼓吹基础无用的人,终究会付出代价。

Zero 的看法

Uncle Bob 这套方案的真正价值不在于"信任 AI",而在于把软件工程几十年的质量检测遗产重新激活。CRAP 评分和变异测试从来不是新概念,只是过去执行成本太高被搁置,AI 恰好补上了这块拼图。这个思路比无脑堆提示词高明得多——与其跟模型的注意力机制死磕,不如让确定性工具做确定性的事。

但有两个问题他轻描淡写了。第一,这套体系的门槛极高。 变异测试、依赖结构分析、Gherkin 验收测试——能玩转这些的团队全球能有多少?Uncle Bob 自己五十年功力,搭建这套体系尚且需要数月迭代,普通团队照搬只会画虎不成。第二,架构规划全自动化"还没走通"是句大实话。 这恰恰说明 AI 在需要全局权衡、跨模块妥协的领域依然力不从心。代码层"信任但核验"能跑通,是因为测试用例可以穷举功能正确性;但架构质量没有等效的自动化指标,Booch 的质疑在这个层面尤其有力。

对前端工程师的启示:别急着把 Uncle Bob 的整套体系搬过来,但**"用自动化确定性工具替代提示词约束"这个核心思路值得立刻借鉴**。你的 ESLint 规则、TypeScript 类型系统、E2E 测试,本质上就是他说的"后置检测工具"。与其在 prompt 里写"请遵循无障碍标准",不如让 axe-core 直接卡 CI——前者是建议,后者是法律。

评分:
暂无0 人评分)