AI Coding框架,打好TDD和SDD这两拳

大家好,我是HLAIA光子。

在 Harness 时代,AI Coding 需要讲方法论。和 Harness 工程适配的、比较火的 开发方式有 TDD和SDD,也就是测试驱动开发和规范驱动开发。

这两种方法论经常被拿来做对比,好像非要选一个不可。但深入了解之后就会发现,这俩不在一个层级上,不是竞态的。

Vibe Coding的失败

2025年下半年到2026年,AI Coding 工具爆发。Claude Code、Cursor、Codex,这些工具已经深度嵌入了开发者的日常工作流。光Claude Code一个工具就贡献了GitHub上大约4%的新代码,预计到2026年底这个数字会达到20%。

但工具厉害不代表产出就靠谱。

一个叫"Vibe Coding"的概念开始流行起来,中文是"氛围编程",就是用随意的自然语言提示驱动AI生成代码。

小项目里看起来挺酷,几分钟就能出一个原型。但一旦到了生产环境,全tm是问题,随手就能举出几个:代码偏离意图、幻觉、技术债快速累积。

Vibe Coding的本质是把"想清楚要做什么"这一步跳过了,直接让AI自由发挥。

这不是愚蠢吗?哪个正经的工程师会这样乱搞?

我之前也写了篇文章去抨击 Vibe Coding,我说实话 Vibe Coding 太sb了。

在Vibe Coding大面积翻车之后,社区开始认真思考一个问题:怎么让AI编程变得可控?

TDD和SDD是答案之一。

TDD

TDD 在1999年就被提出来了。它的核心是这样一个循环:

写一个会失败的测试,写最少的代码让测试通过,然后重构。Red-Green-Refactor

在AI编程场景下,TDD的流程有了一点变化。你先写好测试用例,把测试交给AI,让AI生成代码来通过这些测试。如果没通过,AI自动迭代修复。Fusion Collective的研究团队拿Claude Code、Cursor、Codex和GitHub Copilot做了一次横向评测,统一走TDD流程,得出了以下结论:

"TDD在指向AI编码工具时做了一件有用的事:它迫使工具在写代码之前先对'完成'做出承诺。测试就是契约,代码要么通过要么不通过,AI没法用花言巧语蒙混过关。"

测试通过了就是通过了,没通过就是没通过,没有什么"基本通过了",结果是二元的,这就是TDD的好处。

但是呢,TDD有个问题:它不告诉你该构建什么

Planu.dev的分析可谓一针见血啊,TDD的前提是你已经有了清晰的需求,功能是什么、输入输出是什么、边界怎么处理、跟其他模块怎么交互。问题是,"想清楚要什么"这件事本身就是软件开发中最难的部分之一。

你可能写了一个完美的测试,但测试的是错误的行为,AI也可能"取巧"通过测试,代码恰好满足测试用例,不过整体设计一塌糊涂。而且每次只关注一个测试,容易丢失全局上下文。

这就是 TDD 的缺陷了。

SDD

SDD是2025年新兴的方法论,它的核心是:规范是软件开发的唯一事实来源。

SDD的工作流分四步。先用自然语言详细描述系统应该做什么,包括用户旅程、体验、成功标准。然后基于规格生成技术架构和实现计划。接着把计划拆分成可执行的原子任务。最后AI根据任务列表逐一生成代码。每个阶段都有人工审核的检查点,确保意图跟实现对齐。

Martin Fowler在2025年10月的一篇分析中,把SDD分成了三个递进的层次。

最基础的是Spec-First,先写规格再用AI辅助开发,这是所有SDD工具的基线。往上是Spec-Anchored,任务完成后保留规格用于后续演化和维护。最高层是Spec-as-Source,规格是主要的源文件,人类只编辑规格不碰代码。目前主流工具基本做到了Spec-First,部分做到了Spec-Anchored,而Spec-as-Source还是个愿景。

毕竟对于一个正经的企业项目来说,现在的 AI 完全做不到人类不用碰代码的程度。

给定一段代码,TDD回答的是"这段代码做对了吗",SDD回答的是"我们正在构建正确的东西吗"。

有了规格之后,AI就有了明确的验收标准、必须遵守的架构约束,以及人和AI都能验证的"完成定义"。

这也是 Harness Engineering 的一部分。

当然SDD也不是一全其美的,对已有项目来说适配起来比较难,全新项目效果相对好些。

Martin Fowler 批评 GitHub Spec Kit 会为每个规格生成8个以上的Markdown文件,称其"重复、冗长且审核起来令人厌倦"。他还指出,Agent经常无视规格中的指令,这是一个很现实的问题。

男女搭配,干活不累

我在网上冲浪的时候,看到有些网友发表 "比起TDD,我更喜欢SDD"之类的言论。此类言论将TDD 和 SDD做比较,就好像是道单选题一样,只能选一个。

实际不然,TDD和SDD是非竞态的,你可以一起用,打出组合技。

从上图可以看出,TDD负责单元级别的正确性,SDD负责全局方向,这俩完全可以搭配干活的。

比如SDD 在上、TDD 在下,先用SDD定义全局规格和架构,搞清楚要构建什么。然后把规格拆成具体的实现任务,在每个任务级别用TDD保障局部正确性。

不过搭配起来有个问题,就是 Token和时间的花费加倍的更多,如果AI做小修改也完全按照 TDD + SDD 来实现的话,就没必要了。

另外规范文档不是一尘不变的,项目做到后边,一般规范文档也会跟着更新,维护好你项目的规范文档。

相关事件

Google Cloud Next 2026专门开了"From Vibe Coding to Rigor"的主题演讲,讲的就是SDD在大规模AI编程中的实践。Spring I/O 2026上Simon Martinelli讲了"Spec-driven Development: How AI Changed Everything (And Nothing)"。
arXiv在2026年2月发表了《Spec-Driven Development: From Code to Contract in the Age of AI Coding Assistants》,为SDD提供了学术基础。
GitHub官方开源了Spec Kit,声明"我们开源它是因为这种方式比任何一个工具或公司都更大"。IBM、Red Hat、Jama Software等企业级厂商也纷纷发布了SDD指南和解决方案。
GitHub Spec Kit已经是9万+ star的项目,支持Copilot、Claude Code、Gemini CLI。OpenSpec在六个月内增长了863%,是增长最快的SDD框架。AWS推出了Kiro集成在VS Code里,强调结构化需求捕获。

这些事件表明一个趋势,就是SDD成为行业主流

写在最后

不要对号入座。

实际工作中别教条,bug修复、快速验证这些,直接上TDD修就行的,没必要为了方法论而方法论。如果你开始做一个有一定规模的新功能、新模块时,才值得花时间先写规格再动手。很多公司的代码规范和流程已经固定了,不可能因为你读了这篇文章就推倒重来。

你可以在自己的新项目里试试"SDD在上、TDD在下"的工作流,感受一下跟"边写边想"的区别。

如果你觉得这篇文章有帮助,点赞关注,点点赞~

相关推荐
坚果派·白晓明1 小时前
鸿蒙 PC 应用集成 libhv 鸿蒙化三方库 —— AtomCode + Skills 驱动的高效集成实践
c语言·c++·ai编程·harmonyos·atomcode
AINative软件工程2 小时前
Agent 跑了 7 天,团队欠下了这 5 笔运维债
ai编程
浩风祭月2 小时前
我用 AI 辅助重构了遗留项目的认证模块:从明文存储到 OAuth 2.0 的安全升级
后端·php·ai编程
Java知识技术分享2 小时前
opencode安装ui-ux-pro-max和frontend-ui-ux技能
人工智能·ui·个人开发·ai编程·ux
虎妞05002 小时前
AI 编程助手横评:Cursor vs Copilot vs Claude Code
ai编程·开发工具·cursor·github copilot·claude code
来让爷抱一个2 小时前
MonkeyCode Agent深度解析:AI如何自主完成从编码到部署
开源·ai编程·monkeycode
阿伟AI说3 小时前
Codex 桌面版接入国产模型系列二:Codex++
java·开源软件·ai编程·腾讯云ai代码助手
hoaxxcj3 小时前
AI编程2026:Copilot桌面应用发布,我们正在经历一场不可逆的范式转移
copilot·agent·ai编程·github copilot·编程工具
这个DBA有点耶3 小时前
Vibe Coding 是什么?当“感觉编程”遇上数据库
数据库·人工智能·架构·学习方法·ai编程·程序员创富·改行学it