规范驱动开发(SDD)详解

2025/10/24

很多人写代码时习惯「边想边写」:需求在脑子里,手指已经在键盘上敲了。小功能也许没问题,但一旦项目变复杂、多人协作、或者让 AI 来写代码,问题就来了——每个人理解的「需求」都不一样

规范驱动开发(Specification-Driven Development,简称 SDD)就是来解决这个问题的。

一句话理解 SDD

先写清楚「要做什么」,再动手写代码。规范是唯一的真相来源。

你可以把它想象成盖房子:不会先搬砖砌墙,再画图纸。而是先有设计图、施工规范,工人按图施工,监理按规范验收。

为什么需要 SDD?

传统开发里,需求常常散落在各处:

  • 产品经理的口头描述
  • 聊天记录里的零散补充
  • 开发者自己的理解
  • AI 对话里的临时指令

结果就是:

常见问题表现
理解偏差做出来的功能和预期不一致
反复返工写完了才发现方向错了
AI 输出不稳定同样一句话,每次生成不同结果
难以维护新人接手,不知道当初为什么这么写

SDD 的核心思路是:把需求从「模糊的想法」变成「可执行的规范文档」,让人和 AI 都对着同一份文档工作。

SDD 的三个核心原则

1. 规范先行

在写任何代码之前,先把需求写成结构化文档,包括:

  • 功能目标(要解决什么问题)
  • 用户场景(谁在什么情况下使用)
  • 输入与输出(传什么、返回什么)
  • 边界条件(异常情况怎么处理)
  • 验收标准(怎样算「做完了」)

2. 规范即契约

规范不是「参考建议」,而是开发者和 AI 之间的合同

  • 代码必须符合规范
  • 测试用例从规范推导
  • 代码评审对照规范检查
  • 规范变更了,代码也要跟着改

3. 规范可执行

好的规范不是空话,而是足够具体,能直接指导实现。比如:

❌ 模糊写法:「用户能登录」

✅ 可执行写法:
- 用户输入邮箱和密码,点击登录
- 邮箱格式不合法时,提示「请输入有效邮箱」
- 密码错误时,提示「账号或密码错误」(不透露是哪一个错了)
- 登录成功后跳转到 /dashboard
- 连续 5 次失败,锁定账号 15 分钟

SDD 的工作流程

一个典型的 SDD 流程分四步:

1. 写规范  →  2. 评审规范  →  3. 按规范实现  →  4. 按规范验收

第一步:写规范

用 Markdown 或专门模板,把功能描述清楚。可以借助 AI 帮你起草,但你必须审核确认

第二步:评审规范

团队(或你自己)检查:有没有遗漏?边界情况考虑了吗?验收标准够具体吗?

这一步成本低,但价值极高——改文档比改代码便宜得多。

第三步:按规范实现

把规范交给 AI 或开发者,明确要求:严格按规范实现,不要自行发挥

在 Cursor 等 AI 编辑器里,常见做法是:

  1. 把规范文件放在项目里(如 specs/ 目录)
  2. 让 AI 先读规范,再写代码
  3. 每次改动都引用对应的规范条目

第四步:按规范验收

逐条对照验收标准检查,而不是凭感觉说「差不多行了」。

和其他开发方式的对比

方式核心关注点适合场景
代码驱动先写代码,边写边改个人小实验、原型验证
测试驱动(TDD)先写测试,再写实现逻辑复杂、需要高覆盖率的模块
行为驱动(BDD)用自然语言描述行为需要产品和开发对齐的场景
规范驱动(SDD)先定规范,再实现一切AI 辅助开发、团队协作、中大型功能

SDD 不是替代 TDD 或 BDD,而是更上游的环节——规范确定了,测试用例和实现方向自然就清晰了。

一个简单例子

假设要做「博客文章删除」功能。

没有 SDD 时,你可能对 AI 说:

帮我加个删除文章的功能。

AI 可能做成硬删除、可能没有确认弹窗、可能忘了刷新列表。

用 SDD 时,你先写规范:

## 功能:删除文章

### 目标
管理员可以删除不需要的文章,删除后前台不再展示。

### 交互流程
1. 文章列表每行有「删除」操作
2. 点击后进入确认页,展示文章标题
3. 确认后执行软删除(状态改为 archived)
4. 返回列表,该文章不再显示
5. 前台 /blog 页面同步更新

### 权限
需要 admin.posts.delete 权限

### 验收标准
- [ ] 删除后后台列表看不到该文章
- [ ] 删除后前台 /blog 看不到该文章
- [ ] 无权限用户看不到删除入口

然后让 AI 按这份规范实现——结果会稳定得多。

写好规范的 5 个技巧

  1. 一条规范只描述一件事,不要又讲登录又讲支付
  2. 用「当…则…」句式描述行为和结果,清晰可测
  3. 主动写边界情况:空数据、权限不足、网络失败
  4. 验收标准用 checklist,做完一项勾一项
  5. 规范放在代码仓库里,和代码一起版本管理

什么时候特别适合用 SDD?

  • 用 AI 生成或修改代码时(给 AI 一份明确的「施工图纸」)
  • 多人协作的功能开发(消除口头沟通的歧义)
  • 需要长期维护的项目(后人能看懂「当初为什么这么设计」)
  • 对接外部系统、API 设计(接口契约本身就是规范)

个人写个 50 行的小脚本,不一定需要完整 SDD。但功能越复杂、参与者越多,SDD 的收益越大。

总结

规范驱动开发(SDD)的本质就三句话:

  1. 先规范,后代码——不要在模糊的需求上浪费写代码的时间
  2. 规范是契约——人和 AI 都按同一份文档干活
  3. 规范要可执行——具体到能验收、能测试、能直接指导实现

在 AI 编程时代,SDD 不是可选项,而是让 AI 真正靠谱的关键习惯。你写给 AI 的规范越清楚,它交给你的代码就越接近你想要的样子。

下次动手写功能前,先问自己一个问题:

如果我现在把键盘交给另一个人(或 AI),他能不能仅凭我的描述,一次就做对?

如果不能,先写规范。

管理员

管理员