规范驱动开发(SDD)开发规范
先把 PRD 转成可审查、可执行的规范,再由 Agent 规划、拆解并执行:PRD → spec.md → plan.md → task.md → 代码。
规范驱动开发(SDD)开发规范
Spec-Driven Development · PRD → spec.md → plan.md → task.md → 代码
AI 时代下,技术负责人先把 PRD 转成明确规范,Agent 再基于规范进行规划、拆解和代码执行。
版本:v1.0 | 日期:2026-06-01 | 状态:Draft / 可评审
1. 核心定义
本文中的 SDD 定义为 Spec-Driven Development(规范驱动开发),不是传统的 Software Design Document。它强调:先把需求转换成可审查、可执行的规范,再让 Agent 按规范生成计划、任务和代码。
SDD 的核心不是"让 AI 直接写代码",而是建立一条稳定的交付链路:
- 产品经理或业务方给出 PRD / 需求输入。
- 技术负责人将 PRD 转换为
spec.md,明确做什么、为什么做、验收口径和边界。 - Agent 基于
spec.md生成plan.md,补齐架构、数据、接口、异常和风险方案。 - Agent 基于
plan.md拆出task.md,把方案变成一步步可执行任务。 - Agent 按
task.md自动化执行,开发人员在关键节点审查、构建和发布。
1.1 角色边界
| 角色 | 主要职责 | 不应该做什么 |
|---|---|---|
| 产品经理 / 业务方 | 提供 PRD、业务目标、用户场景、验收标准。 | 不直接决定技术实现细节。 |
| 技术负责人 / 开发人员 | 把 PRD 转成规范;审查 spec.md、plan.md、task.md 和代码;负责最终质量。 | 不把模糊需求直接丢给 Agent 写代码。 |
| Agent | 研究理解上下文、草拟规范、技术规划、任务分解、执行代码和测试。 | 不在没有审查通过的任务上擅自扩大范围。 |
| CI / 构建系统 | 运行测试、构建产物、验证质量门禁。 | 不替代人工对需求与架构的判断。 |
2. AI 时代下的"真理"反转
核心表达是:技术负责人根据 PRD 编写规范,Agent 根据规范生成代码。

2.1 关键原则
- 规范比一次性 Prompt 更重要。Prompt 可以触发动作,规范负责约束结果。
- 代码不是第一产物,
spec.md/plan.md/task.md才是可审查、可复用、可追溯的交付物。 - 人负责意图、边界、判断和验收;Agent 负责信息整理、方案生成、任务拆解和重复执行。
- 每个阶段都必须有审查点。审查不通过时,回到上一阶段修正规范,而不是在代码里硬改。
3. SDD 工作流程

3.1 标准流程
| 步骤 | 动作 | 责任方 | 产出 / 门禁 |
|---|---|---|---|
| 1 | 发起任务,明确需求来源、仓库、分支和目标。 | 开发人员 | 任务入口明确。 |
| 2 | 研究、理解 PRD、代码上下文、历史设计和约束。 | Agent | 问题列表 / 上下文摘要。 |
| 3 | 草拟规范,形成 spec.md、plan.md、task.md。 | Agent | 规范产物可评审。 |
| 4 | 审查规范产物,确认范围、技术方案、任务顺序。 | 开发人员 | 审查通过后进入执行。 |
| 5 | 按 task.md 执行开发,逐项完成代码、测试和文档更新。 | Agent | 代码产物、测试结果。 |
| 6 | 审查代码并构建。发现问题回到执行或规划阶段。 | 开发人员 / CI | 构建通过、质量门禁通过。 |
| 7 | 发布并记录版本、变更和回滚策略。 | 开发人员 | 可上线产物。 |
3.2 回路规则
- 需求不清:回到意图定义,补充
spec.md。 - 方案不稳:回到技术规划,补充
plan.md。 - 任务不可执行:回到任务分解,细化
task.md。 - 代码不符合预期:回到自动化执行,按任务修复;如果发现设计错误,需要同步更新
plan.md。 - 任何实现和文档不一致的地方,合并前必须更新对应文档。
4. SDD 四个阶段

4.1 阶段说明
| 阶段 | 目标 | 输入 | 核心活动 | 输出 |
|---|---|---|---|---|
| 意图定义 | 澄清"做什么"和"为什么做"。 | 需求 PRD | 人机协作头脑风暴,补齐背景、边界、验收和风险。 | spec.md |
| 技术规划 | 决定"如何做"。 | spec.md | Agent 进行技术选项分析、架构设计、接口/数据方案设计。 | plan.md |
| 任务分解 | 分解为"一步步怎么做"。 | plan.md | Agent 分析方案并拆解为可执行任务。 | task.md |
| 自动化执行 | 完成任务,生成产物。 | task.md | Agent 逐一执行任务,运行测试,输出代码。 | 代码 |
4.2 每阶段完成定义
| 阶段 | 完成定义 |
|---|---|
| 意图定义 | 目标、非目标、用户场景、验收标准、约束和风险都已写清楚;不存在"可能、差不多、看情况"这类无法验收表述。 |
| 技术规划 | 模块边界、接口、数据、异常、权限、安全、性能、迁移和回滚都有明确方案。 |
| 任务分解 | 每个任务可以独立执行、独立验收;任务顺序明确;包含测试和回滚说明。 |
| 自动化执行 | 代码、测试、构建、文档同步完成;PR 能直接对应 spec.md / plan.md / task.md。 |
5. 文件产物规范
统一目录建议:
docs/sdd/<feature-name>/spec.md
docs/sdd/<feature-name>/plan.md
docs/sdd/<feature-name>/task.md
docs/sdd/<feature-name>/review.md5.1 spec.md:意图定义文档
作用:回答"做什么、为什么做、做到什么程度"。spec.md 是后续 plan.md 和 task.md 的唯一需求依据。
- 必须包含:背景、目标、非目标、用户场景、功能范围、验收标准、约束、风险和待确认问题。
- 禁止包含:未经确认的实现细节、无验收口径的主观描述、临时口头约定。
- 质量标准:一个没参加讨论的人,看完
spec.md能判断功能是否做对。
5.2 plan.md:技术规划文档
作用:回答"如何做、为什么这样做、失败时怎么办"。plan.md 是任务分解和代码执行的设计依据。
- 必须包含:总体架构、模块边界、数据设计、接口设计、状态流转、异常降级、安全权限、性能容量、部署配置、兼容迁移和回滚方案。
- 必须说明技术选择原因,不能只写"采用先进架构"这种空话。
- 质量标准:另一个开发人员看完
plan.md可以独立拆任务。
5.3 task.md:任务分解文档
作用:回答"一步步怎么做"。task.md 必须足够小、足够明确、可执行、可验证。
- 每个任务只完成一个明确目标。
- 每个任务必须写输入、修改文件、执行步骤、验收标准和测试命令。
- 任务必须排序,前置依赖必须写清楚。
- 任务执行中发现计划不合理,要暂停并回写
plan.md,而不是继续硬写代码。
5.4 代码产物:执行结果
- 代码提交必须能追溯到
task.md中的任务编号。 - 每个 PR 必须链接 spec.md、plan.md、task.md。
- 实现和文档不一致时,优先更新文档,再合并代码。
- 必须包含必要的测试、构建结果和回滚说明。
6. 审查门禁
| 门禁 | 审查对象 | 通过标准 | 不通过处理 |
|---|---|---|---|
| Gate 1 | spec.md | 需求边界清楚,验收标准可测试,风险已记录。 | 回到意图定义,补齐需求和边界。 |
| Gate 2 | plan.md | 架构、接口、数据、异常、权限、性能、回滚方案明确。 | 回到技术规划,重新评估方案。 |
| Gate 3 | task.md | 任务可执行、可验收、顺序正确、粒度合适。 | 回到任务分解,拆小或调整顺序。 |
| Gate 4 | 代码 / 构建 | 代码符合任务要求,测试通过,构建通过,文档同步。 | 回到执行;若设计错误,回到 plan.md。 |
6.1 硬性规则
- 没有
spec.md,不进入技术规划。 - 没有
plan.md,不拆task.md。 - 没有
task.md,不允许 Agent 自动化执行代码。 - 未通过审查的文档不能作为下游阶段输入。
- 上线前必须能从代码反查到任务、从任务反查到方案、从方案反查到需求。
7. Agent 协作规范
7.1 输入包要求
- 需求输入:PRD、Issue、用户故事、截图或验收标准。
- 代码上下文:仓库路径、技术栈、关键目录、已有接口、已有数据结构。
- 约束条件:不能改什么、兼容要求、性能要求、安全要求、上线时间。
- 输出要求:本轮只输出 spec.md / plan.md / task.md / 代码中的一个,不跨阶段混做。
7.2 分阶段 Prompt 模板
# 阶段 1:生成 spec.md
请基于以下 PRD 生成 spec.md。
要求:只澄清"做什么"和"为什么做",不要写具体代码实现。
必须包含:背景、目标、非目标、用户场景、验收标准、约束、风险、待确认问题。# 阶段 2:生成 plan.md
请基于已确认的 spec.md 生成 plan.md。
要求:说明如何实现,并解释技术选择原因。
必须包含:架构、模块、数据、接口、状态、异常、权限、安全、性能、部署、回滚、测试方案。# 阶段 3:生成 task.md
请基于已确认的 plan.md 拆分 task.md。
要求:每个任务都要小、可执行、可验收。
每个任务包含:编号、目标、输入、修改文件、执行步骤、验收标准、测试命令、回滚说明。# 阶段 4:自动化执行
请按 task.md 从上到下执行。
规则:一次只执行一个任务;完成后运行对应测试;如发现 plan.md 不合理,暂停并说明需要更新的设计点。7.3 Agent 输出约束
- 遇到需求不清必须先提问,不能靠猜。
- 生成
plan.md时必须列出备选方案和取舍理由。 - 生成
task.md时必须避免"大任务",例如"完成整个后端开发"不合格。 - 执行代码时必须更新任务状态,保留测试结果。
- 任何自动修改都应控制在当前任务范围内,禁止顺手重构无关模块。
8. 团队落地规范
8.1 仓库目录
docs/
sdd/
<feature-name>/
spec.md # 意图定义
plan.md # 技术规划
task.md # 任务分解
review.md # 审查记录,可选
src/
...
tests/
...8.2 命名规范
| 对象 | 命名规则 | 示例 |
|---|---|---|
| 功能目录 | YYYYMMDD-feature-name | 20260601-conversation-history |
| 文档文件 | 固定文件名 | spec.md / plan.md / task.md |
| 任务编号 | T + 两位数字 | T01 初始化数据结构 |
| 提交信息 | <task-id>: <summary> | T03: add cursor pagination |
| PR 标题 | [SDD][feature] summary | [SDD][history] add conversation filter |
8.3 状态流转
| 状态 | 含义 | 进入条件 | 下一步 |
|---|---|---|---|
| Draft | 文档草稿。 | Agent 或开发人员完成初稿。 | 提交审查。 |
| Reviewing | 审查中。 | 发起评审。 | 修改或通过。 |
| Approved | 审查通过。 | 关键干系人确认。 | 进入下一阶段。 |
| Implementing | 执行中。 | task.md 通过审查。 | 代码执行与测试。 |
| Released | 已发布。 | 构建、测试和发布完成。 | 沉淀复盘。 |
8.4 PR 规则
- PR 描述必须包含:关联 spec.md、plan.md、task.md 的路径。
- PR 描述必须列出完成的任务编号。
- PR 必须贴出测试命令和结果。
- 涉及数据库、权限、计费、支付、更新、状态机的变更,必须补充回滚方案。
9. SDD Review Checklist
| 类别 | 检查项 | 通过标准 |
|---|---|---|
| 需求 | 目标和非目标是否清楚? | 能明确判断哪些做、哪些不做。 |
| 需求 | 验收标准是否可测试? | 每条验收标准能转成测试用例。 |
| 架构 | 模块边界是否明确? | 知道每个模块负责什么、不负责什么。 |
| 数据 | 是否涉及表结构、索引、迁移? | 有具体 DDL / 迁移 / 回滚说明。 |
| 接口 | 请求、响应、错误码是否完整? | 前后端能独立开发与联调。 |
| 状态 | 是否有任务或状态流转? | 状态、触发条件、终态、异常态清楚。 |
| 安全 | 权限和越权风险是否说明? | 身份来源、访问边界、审计记录清楚。 |
| 异常 | 失败、超时、重试、降级是否说明? | 每种主要失败都有处理策略。 |
| 测试 | 单测、集成、回归、构建是否覆盖? | 任务完成后有可运行命令。 |
| 上线 | 灰度、监控、回滚是否明确? | 出问题时知道怎么退回。 |
9.1 一句话合格标准
一个没参加前期讨论的开发人员,看完
spec.md、plan.md、task.md后,能知道为什么做、怎么做、按什么顺序做、怎么测试、怎么上线、出问题怎么回滚。
附录 A:模板
A.1 spec.md 模板
# <功能名称> spec.md
状态:Draft / Reviewing / Approved
作者:
关联 PRD / Issue:
创建时间:
最后更新:
## 1. 背景
- 当前问题:
- 业务影响:
- 为什么现在要做:
## 2. 目标
- 目标 1:
- 目标 2:
## 3. 非目标
- 本期不做:
## 4. 用户场景
- 场景 1:作为 <用户>,我希望 <能力>,以便 <价值>。
## 5. 功能范围
- 功能点:
- 边界:
## 6. 验收标准
- AC1:
- AC2:
## 7. 约束与风险
- 约束:
- 风险:
## 8. 待确认问题
- Q1:A.2 plan.md 模板
# <功能名称> plan.md
状态:Draft / Reviewing / Approved
输入:spec.md
## 1. 总体方案
- 方案摘要:
- 技术选型:
- 取舍理由:
## 2. 架构与模块
- 模块 A:职责 / 不负责
- 模块 B:职责 / 不负责
## 3. 数据设计
- 表结构:
- 索引:
- 迁移:
- 回滚:
## 4. 接口设计
- API:
- 请求参数:
- 响应结构:
- 错误码:
## 5. 状态流转
- 状态定义:
- 状态机:
## 6. 异常与降级
- 超时:
- 重试:
- 降级:
## 7. 安全与权限
- 身份来源:
- 权限规则:
- 越权风险:
## 8. 测试方案
- 单元测试:
- 集成测试:
- 回归测试:
## 9. 上线与回滚
- 上线步骤:
- 监控指标:
- 回滚方案:A.3 task.md 模板
# <功能名称> task.md
状态:Draft / Reviewing / Approved / Implementing / Done
输入:plan.md
## 执行规则
- 一次只执行一个任务。
- 每完成一个任务必须运行对应测试。
- 如发现设计不合理,暂停并回写 plan.md。
## 任务列表
### T01 <任务名称>
- 目标:
- 前置依赖:
- 输入:
- 修改文件:
- 执行步骤:
1.
2.
- 验收标准:
- 测试命令:
- 回滚说明:
- 状态:Todo / Doing / Done
### T02 <任务名称>
- 目标:
- 前置依赖:
- 输入:
- 修改文件:
- 执行步骤:
- 验收标准:
- 测试命令:
- 回滚说明:
- 状态:Todo最后更新于