【人工智能】规范驱动开发:让AI按Spec写代码
摘要:规范驱动开发(SDD)主张先写可执行的 Spec,再让 AI 按 Spec 实现,而非直接写代码。一份好 Spec 需回答 Why、What、Scope、Behavior、Constraints、Acceptance 六问;配合 Constitution、Spec、design、tasks、Acceptance 五类文档分工协作,用 Given/When/Then 统一验收标准,让实现、测试、评审回溯同一事实来源,从而稳定约束 AI 编程。
规范驱动开发:让AI按Spec写代码
1. 引言:别让AI上来就写代码
先把需求、约束、设计和验收标准写成可执行的 Spec,再让 AI 按 Spec 实现——这就是规范驱动开发(SDD)。
常见路径:需求 → 告诉 Codex → 狂写 2000 行 → 人工 Debug
SDD 路径:Spec → Plan → Tasks → Implement
2. SDD 的核心思想
先写"开发契约",再让 AI 实现。它不是 PRD 的复述,而是一份让实现、测试、评审都能回溯到同一份事实来源的可执行文档。
核心动作:把需求、约束、设计和验收标准先写成可执行的 Spec,再让 AI 按 Spec 实现。
3. 一份好 Spec 的六问
一个好的 SPEC,至少回答 6 件事,六问齐全,AI 才没有空间自行脑补。
- Why:为什么做?业务/用户
- What:具体要实现什么?价值是什么
- Scope:做什么/不做什么,边界写清
- Behavior:系统应该如何表现?状态与行为
- Constraints:技术、性能、兼容性、安全约束
- Acceptance:什么情况下算开发完成
最忌讳的 SPEC:“实现一个用户登录功能。” 六问全空,AI 只能自己脑补——这就是跑偏的起点。
4. 核心文档体系
Constitution.md 文档
约束项目永远如何工作,它的作用是全局的项目规范,不需要每次都反复叮嘱大模型。
Spec.md 文档
描述 WHAT,描述本次任务需要交付什么功能。比如:用户点击 Add to Cart 后,系统应记录点击埋点。
design.md 文档
定义 HOW,主要描述内容是:架构链路/API 定义/数据表与索引/错误处理/性能指标/兼容性等。
例:Frontend → Tracking API → Service → Repository → MySQL;埋点失败不得影响主业务
tasks.md 文档
WORK BREAKDOWN。它就是任务的一个分解。每个被分解后的子任务必须离散、可独立完成、可跟踪——而不是一句"完成埋点功能"。
例:T1 DTO → T2 参数校验 → T3 Service → T4 Mapper → T5 索引 → T6-8 测试 → T9-10 验证
Acceptance.md 文档
它就是验收标准 AC,比需求描述更重要的一个文档。Acceptance Criteria 统一用 Given/When/Then 写,AI 写完可以逐条验收,测试代码也能从 AC 生成。
它包含了三个部分:Given(给定条件),When(触发动作),Then(期望结果)
写清这个文档之后,AI 的动作可以非常的具体——实现和测试都有了明确的靶子。
5. 核心要点总结
一句话核心:先把需求、约束、设计和验收标准写成可执行的 Spec,再让 AI 按 Spec 实现——不是"先让 AI 写代码"。GitHub Spec Kit 的标准主流程就是 Spec → Plan → Tasks → Implement,Kiro 也是 requirements-first 的玩法。
几个最重要的点:
- SPEC 是"开发契约"不是 PRD:Why/What/Scope/Behavior/Constraints/Acceptance Criteria 六件事答不齐就别开工,否则 AI 全靠脑补
- Constitution 和 Spec 分工:全局规范约束"项目永远如何工作",Spec 约束"这次要交付什么"。工程规范和单次需求上下文拆开,比一份超长 CLAUDE.md 稳定得多
- spec.md 只写 WHAT,design.md 写 HOW,tasks.md 拆成可独立完成的任务——最常写错的就是把实现细节塞进 spec.md
- Acceptance Criteria 比需求描述还重要:统一 Given/When/Then,边界情况(失败路径)单独一条 AC,AI 实现完直接逐条验收,测试代码也能从 AC 生成
- 设个阈值,别把流程搞太重:变量改名、轻量修正就直接改,新功能才需要强走 Spec
6. 结语
SDD 不是把流程变重,而是把「工程规范」和「单次需求上下文」拆开管——这才是对 AI 编程最稳的约束方式。

2362

被折叠的 条评论
为什么被折叠?



