文章摘要
QCon2026上海站聚焦AI时代工程实践。软件工程权威学者UncleBob不再人工评审AI代码,搭建自动化代码管控框架,却引发争议,格雷迪·布奇就公开反对。他的强约束体系严格但需工程纪律,目前架构规划自动化未达预期。他分享了研发流程与建议,强调新人积累经验、学习底层知识的重要性,还探讨了多智能体协作等内容。

在人工智能代码生成愈发普及的当下,软件工程领域的权威学者Uncle Bob做出了一个颠覆传统的选择——他不再逐行人工评审AI产出的代码,转而搭建起一套基于自动化指标与约束条件的代码管控框架。这一思路在全球开发者群体中引发了激烈的讨论与分歧。

不同的声音:自动化指标能否替代人工经验?

并非所有行业领袖都认可这套方案。统一建模语言(UML)的联合创始人、软件工程奠基人格雷迪·布奇(Grady Booch)就公开表达了反对意见。他认为,即便测试覆盖率和代码复杂度指标能在一定程度上保障功能正确性,却无法识别AI代码中潜藏的安全漏洞、无效死代码,或是遗漏的性能关键逻辑拆分。布奇始终坚持完整审核AI生成的全部代码,他表示:“信任,但要核验。作为经验丰富的开发者,我可以凭直觉分辨代码好坏,但没有任何智能体,能够拥有同等的实战积累与业务上下文,做到这件事。”

Uncle Bob的强约束管控体系

Uncle Bob为AI智能体设置了一套严格的强约束体系,涵盖单元测试、Gherkin验收测试、QA测试流程、圈复杂度阈值、模块大小限制、依赖结构分析、变异测试以及测试覆盖率要求。他的核心逻辑在于:只要AI生成的代码能够通过所有这些关卡,即便无人读过一行函数内部实现,也有充分理由相信代码的正确性。

这套方案并非纸上谈兵,其中变异测试技术会系统性修改源代码以检验测试用例能否捕获缺陷,其严谨程度甚至超过多数工程团队的人工评审流程。不过,这套模式需要极强的工程纪律作为支撑,想要将测试套件作为唯一的质量关卡,绝大多数团队并不具备这样的基础,也很难快速建立起对应的能力。

在马特·波科克(Matt Pocock)的播客节目中,Uncle Bob透露了这套方案的最新进展。目前他的核心工作模式是让AI智能体全权负责代码编写,自己则专注于后续的质量管控,这套模式运行得相当顺利。但在尝试将架构规划流程全自动化时,暂时还没有取得理想效果。他坦言,现阶段AI在架构设计环节经常产出存在漏洞的方案,模块依赖管控依然需要人类主导。

播客中,Uncle Bob还分享了自己当前的研发流程与相关建议。他主张放弃瀑布式的重度前置规划,转而采用敏捷小迭代的思路:完成一轮小型迭代后,由人工复盘并重构架构,再推进下一轮开发。他认为,开发者不必维护固定的静态需求文档,可运行的系统与自动化检测标准才是真正的权威需求。同时他也建议,开发者不要直接下载使用他开发的成品工具,而是理解工具逻辑后让AI复刻适配专属的检测工具。

他还特别强调了学习底层知识的重要性。他认为新人必须亲手编写代码,完整经历编码、调试、排错的全过程,不能全程只做AI提示词工程师。新人可以将自己视作“人类智能体”,在接受自动化检测约束的同时积累实战经验,之后再进阶参与战略架构设计。通过阅读经典软件工程书籍,新人可以获取架构与战略思维,弥补AI时代架构反馈周期缩短但新人缺少历史踩坑经验的短板。

从即兴吐槽到行业标志性形象

Uncle Bob的标志性浴袍形象源于两年前的一次即兴分享。当时他清晨穿着浴袍在自家门廊吐槽SQL的安全弊端,随手录制的视频意外走红,之后他便陆续推出了多期晨间吐槽内容。在一次访谈中,主持人好奇他的从业经历,他透露自己从12岁接触编程至今,已经深耕行业超过五十年。从1964年收到母亲赠送的小型模型计算机开始,他就疯狂汲取各类编程知识,在没有实操设备的年代,他会将代码写在纸上并在脑海中模拟运行。16岁时他获得了第一份编程临时工作,18岁正式成为全职程序员,此后一直深耕软件工程领域,其著作《代码整洁之道》更是成为行业经典。

AI编程的变革与工作模式转变

去年圣诞前后,Uncle Bob第一次真切感受到了AI编程工具的变革力量。在此之前他尝试过ChatGPT、Grok等多款工具,但并未觉得惊艳,直到他发现这些工具的能力远超预期。他最初使用早期版本的Grok智能体辅助开发项目,虽然能生成可用代码,但产出的代码往往存在不规范、冗余的问题,虽然速度快,但反复修正代码拖慢了整体开发节奏。

不过他很快意识到,AI智能体的极致速度可以完成许多人类难以做到的工作。早在21世纪初,他就关注到两项技术理念,但当时受限于技术条件无法落地:一项是CRAP代码评估机制,通过结合代码覆盖率、测试覆盖率与函数圈复杂度计算评分,判定代码劣质程度;另一项是变异测试,通过修改代码逻辑符号并运行测试用例,检测测试用例的有效性。2000年左右他尝试在项目中应用这些技术,但需要耗费海量时间修改代码与测试用例,最终只能搁置。

直到去年年底,他顿悟可以让AI智能体自动运行CRAP代码检测与变异测试工具,原本需要通宵完成的工作,现在仅需三十分钟左右就能完成,还能自动修补代码漏洞、完善测试覆盖。随着他持续迭代优化,为AI搭配更多自动化工具并优化协作流程,如今AI的工作质量已经相当出色。目前他的核心工作模式是让AI全权负责开发与工具运行,自己的终极目标是彻底不用手动查看代码,完全信任AI的输出结果,仅通过核查CRAP评分、不定期抽查代码与运行定制测试来验证质量。

为什么需要搭建代码管控体系?

很多人好奇,既然AI开发速度极快,为什么还要耗费精力搭建管控体系,而不是快速迭代等待漏洞自行修复。Uncle Bob表示,他在去年年底就发现了关键问题:如果不及时清理AI产出的劣质代码,一味堆叠新功能,代码冗余与漏洞会持续累积,导致AI迭代效率持续下降,陷入“修改一处破坏另一处”的恶性循环,甚至出现智能体停滞无法继续迭代的情况。这说明即便AI智能体速度快、智能化程度高,也和人类一样无法应对极度混乱的代码,只是容错阈值略有不同,但依然存在上限。

放弃人工引导,回归自动化检测

最初他也尝试过在提示词中写入大量代码规范,甚至将《代码整洁之道》的核心内容都录入其中,但很快发现AI模型并不会严格遵守这些规则。背后的核心技术现象是“中间信息丢失”:大模型的上下文窗口存在注意力偏差,开头与结尾的信息权重更高,中间内容会被弱化忽略,过长的规范提示词大部分都会被模型无视。而自动化检测工具规则固定、执行确定,不会受上下文窗口机制影响,因此他选择精简初始提示词,将规范约束全部交由后置自动化工具落地。

多智能体协作体系:更高质量的开发效率

有观点认为自动化检测规则越多越好,但Uncle Bob表示,检测规则存在上限,约束过多会拖慢AI迭代速度,甚至低于人工开发效率,只有当AI生产效率依然高于人类时,这套体系才有效。目前他实测的结果是,即便叠加大量检测规则,AI开发效率依然是人类的2-4倍。他正在搭建多智能体协作体系,让不同智能体分工完成开发、审核、测试、加固等任务,虽然多智能体沟通会产生一定开销,但整体效率依然远超人工开发。

具体的多智能体流程是:首先由需求解析智能体将人工撰写的需求转化为Gherkin结构化验收测试用例与QA测试流程;随后编码智能体根据用例开发业务代码并编写单元测试;代码完成后交由代码清理智能体运行CRAP检测与常规评审,清理冗余劣质代码;接着代码加固智能体执行严苛的变异测试,实现100%代码覆盖率并修正所有逻辑漏洞;最后QA测试智能体将标准化流程转化为可执行脚本,全自动完成系统测试。整套流程产出的代码质量稳定可靠,虽然单轮耗时比单个智能体更长,但对比人类半天的开发时长,效率依然提升了4-5倍,且代码质量远高于人工开发水平。

架构设计:人类依然不可替代

在聊到前置规划时,Uncle Bob表示,一个月前他还在人工负责架构设计。他会让AI完成基础开发后,主动问询系统结构、模块关联与依赖关系,但AI给出的架构方案往往漏洞百出,他需要基于经验重新规划模块拆分与依赖规则,再交由AI执行开发。为了提升架构管控效率,他让AI开发了架构可视化工具,可以实时生成UML结构图,实现全层级的架构可视化管控。同时他搭建了确定性检测工具,明确定义模块间的依赖规则,由专属程序校验架构合规性,一旦AI违反规则就必须整改修复。目前他正在尝试将架构规划流程全自动化,但暂时还没有取得理想效果。

他还解释了优质模块化结构的核心价值:边界清晰、接口规范、分工明确的模块,无论是人类还是AI都能轻松理解与把控。人类擅长模块化拆分思考,AI模型也是同理,只是容错阈值略有差异。只要单个模块职责单一、迭代轨迹清晰,AI就不会被杂乱的业务逻辑干扰,高效完成开发;反之如果模块堆砌无关功能、逻辑混乱,AI的迭代效率与质量都会大幅下滑。他还认同John Ousterhout的深度模块理论,认为优质的深度模块接口极简、内部封装核心逻辑,AI只需读懂极简接口就能完成高效开发。

《代码整洁之道》的AI时代调整

结合AI开发的时代背景,Uncle Bob认为需要对《代码整洁之道》的内容做出调整。最核心的调整是复杂度阈值:AI智能体的短期记忆能力远超人类,能处理更复杂的代码逻辑,他将针对人类的CRAP评分阈值从4以下调整到6,后续可能放宽到8。第二个调整是人工开发规范的落地方式:他一直是测试驱动开发的忠实拥护者,但这是适配人类开发者的准则,并不适合强行约束AI,AI更适合“完成函数开发后补充测试用例”的模式,而非人类的“写一行测试写一行业务代码”的节奏。他的核心结论是,人类的编程价值理念依然通用,但人类的开发行为规范与操作阈值需要针对AI全面调整,不能直接照搬套用。

摒弃重度前置规划,拥抱敏捷迭代

很多人会陷入“极致前置规划”的误区,让人工将需求打磨到完美后再交给AI执行,这其实是几十年前瀑布式开发的老路。Uncle Bob本周测试了这种模式,结果和以往一样彻底失败,无论前期规划多么细致,人类都无法穷尽所有场景,AI也不具备全局思考能力,执行中总会出现规划外的偏差,只能反复暂停重构,效率极低。因此他彻底放弃了重度前置规划,转而采用敏捷开发思路,让AI先完成小型需求迭代,迭代后人工复盘架构再推进下一轮,逐步完善整体系统。他也不建议留存固定的需求文档,所有需求都是临时可变的,最终落地的可运行系统与通过的检测标准才是真正的需求。

新人的成长路径:从“人类智能体”到战略架构师

针对新人如何培养战略编程能力的问题,Uncle Bob分享了自己的思考。首先,新人必须亲自手写代码,积累实战经验,亲身经历编码、调试、排错的全过程,才能理解AI面对的底层问题,建立顶层思维。其次,入行后的新人应该将自己视作“人类智能体”,在重度使用AI的团队中,资深工程师负责战略规划,新人承接基础任务并接受自动化检测约束,虽然这个阶段效率较低,但能快速积累海量实战经验,熬过这个阶段才能具备把控AI工作与顶层战略设计的能力。最后,新人必须补齐底层基础,从二进制、汇编、C语言等底层知识学起,再逐步过渡到高级语言与AI工具协作,逐层搭建认知体系,才能具备管控AI、进行战略编程的能力。

他还强调,软件工程的底层基础价值从未改变,鼓吹“基础无用论”的人终究会付出代价。AI虽然强大,但依然会撞上复杂度的天花板,只有掌握底层基础与架构思维的开发者,才能突破瓶颈、把控全局。

以上内容不代表本平台立场,仅供读者参考