让 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 Development 是 obra/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
评论区
登录后可评论。