让 AI 写代码不再跑偏?试试 TDD 这个铁律

很多人用 AI 写代码会遇到一个尴尬的问题:让 Claude Code 帮我实现一个功能,它噼里啪啦写了一大堆,跑起来才发现逻辑不对、Bug 一堆,然后开始痛苦的修 bug 循环。

问题不在 AI,在于你没用 TDD

什么是 TDD?为什么 AI 编程必须用

TDD(Test-Driven Development)是一种开发方法论,核心就三步:

  • Red:先写一个会失败的测试
  • Green:写最少量代码让它通过
  • Refactor:在保证测试通过的前提下优化代码

听起来多了一步,很麻烦。实际上是最省力的路径

因为 AI 写代码有一个致命弱点:它不知道你想要什么行为,它只能猜。传统开发你脑子里有一个 mental model,写出来的代码八九不离十。但 AI 没有这个 model,它只能根据你的 prompt 生成代码,然后你跑一下看对不对——这个过程本质上就是 TDD,只不过你是在用”跑一遍”当测试,用”眼睛看输出”当断言。

TDD skill 把这个过程正规化了。

这个 Skill 解决了什么问题

Test-Driven Developmentobra/superpowers(273k stars)这个仓库里的一个 Skill,教 AI agent 严格执行 TDD 流程。

它的核心规则叫「Iron Law」:

NO PRODUCTION CODE WITHOUT A FAILING TEST FIRST

没有先写一个会失败的测试,就不能写任何生产代码。写了你得删掉,重新来。

这不是建议,这是规则。

Skill 里还有一个很好的「Rationalizations 表格」,专门破除各种 TDD 借口:

  • “太简单了不用测试”——简单代码也会挂,测试只要 30 秒
  • “我手动测过了”——手动测试没有记录,不能自动化重跑
  • “以后再补测试”——测试写完后立刻通过,什么都证明不了
  • “TDD 会拖慢我”——TDD 才是真正省力的路径,上线后修 bug 才是最慢的

怎么用

在 Claude Code 里,当你要实现任何功能或修 bug 时,先激活这个 Skill。它会强制你先写测试,再写实现。

举一个例子:你要实现一个 retry 函数。

  • 先用 TypeScript 写测试:验证 retry 操作会重试 3 次,第 3 次才成功
  • 运行测试,看它 fail——这一步很多人跳过,但这是整个 TDD 流程里最关键的一步
  • 写最少量代码通过测试
  • 运行测试,看它 pass
  • 然后 Refactor——这时候你可以放心重构,因为有测试保护

为什么这个 Skill 特别适合 AI 编程

AI 编程最大的风险不是写不出代码,而是写出一堆看起来对但行为不对的代码。TDD 的强制失败机制,相当于给 AI 加了一个”安全阀”——每次动手之前先说清楚你要什么,AI 才能准确知道你想要什么行为。

这也是为什么 superpowers 这个仓库能拿到 273k stars——它本质上是在教 AI 如何更好地为人类工作,而 TDD 是这个哲学的核心工具

GitHub 地址 · Test-Driven Development Skill


GitHub: https://github.com/obra/superpowers/tree/main/skills/test-driven-development

评论区

0 条评论

登录后可评论。

江望 13 阅读