Wink Pings

让AI写代码先写测试,可能是在花钱买心安

Martin Fowler站上有个实验:同样任务,AI走TDD和不走TDD各跑两遍,结果不走TDD的排前两名,token还省了3倍。TDD是给人类认知局限打的补丁,在AI coding时代不一定适用。

你让AI写代码时,会在 CLAUDE.md 里要求它"先写测试再写实现"吗?

如果会,你可能正在花钱买心安。

Martin Fowler 站上有篇实验报告,作者是Birgitta Böckeler——一位有20多年经验的工程师,专门研究AI辅助交付。她做了个测试:同一批任务,让agent走TDD和不走TDD各跑两遍,最后交给Opus打分,评分时它并不知道哪份代码是哪种方式写出来的。

结果很稳定:小任务和中任务上,不走TDD的排第一第二,走TDD的排第三第四。

衡量测试能不能真抓到bug的分数,两边一样。

token倒是多烧了至少3倍。

![TDD工作流与AI辅助编码的三种结合方式示意图,包括人类编写测试、审查检查点给人类、完全在代理循环内部三种模式](https://wink.run/image?url=https%3A%2F%2Fpbs.twimg.com%2Fmedia%2FHPgcnOUWYAEEXjO%3Fformat%3Djpg%26name%3Dlarge)

为什么?

不走TDD的agent,会先把架构、数据结构、边界情况整个过一遍再动手。TDD指令恰恰不让它这么干——一个测试一个测试往前挪,设计就成了一堆局部决策攒出来的东西,被第一个测试锁死的形状,后面基本不再改。

而且,agent没想到要写测试的那部分行为,压根就不会被实现。

TDD对人编程来说是个不错的范式,但它本质上是为人类认知局限打的补丁。人容易想太多、跑偏、忘边界,所以用测试把思路锚住。但AI没有这些毛病,它的"认知"方式不一样,这套补丁自然适配不上。

评论区有人被颠覆了认知,说一直很喜欢走TDD;有人说最近因为TDD太多导致开发不顺利;也有人早就不这么干了——有网友直接在 Agent md 里写让agent别写测试,要验证就做e2e跑仿真,直接测真实链路;还有网友让agent写完后用miniflow模拟真实测试,因为"不然它写测试也是一堆甜点测试,根本测不到什么东西"。

博主自己也承认,之前Vibe Coding时会要求agent先写测试用例,现在打算在自己的场景里对比验证一下。

技术范式要跟着技术迭代变。很多默认的经验,可能都得重新验证一遍。

你的CLAUDE.md里,还有哪些"默认正确"的规则,其实正在拖慢AI?

发布时间: 2026-08-13 03:36