利用规范驱动开发(SDD)提升项目管理效率与质量

用 AI 写代码久了,你会发现一个规律:一开始 "vibe coding" 确实很爽——自然语言一顿输出,模型哗哗吐代码,跑起来就留,跑不起来继续聊。但项目稍微复杂一点,问题就来了:需求散在聊天记录里,改着改着忘了最初要什么;团队协作时,review 只能盯着 diff 猜"你到底改了啥"。

解决思路其实不复杂:先把 What/Why 写清楚,再让 AI 去写 How。把规范当成你和 AI 之间的"收据",双方先对齐,再动手。这样写出来的代码更可控,后期复盘也有据可查。

本章介绍两种不同层级的方案:

  • 入门:Trae 原生的 Spec 模式 + Plan 模式,开箱即用
  • 进阶:spec-kit(从 0 到 1 创建新项目) + OpenSpec(从 1 到 N 的长期迭代)

规范驱动开发(SDD)的核心思想


规范驱动开发(Spec-Driven Development)翻转了传统的 AI 编程范式。与其让 AI 猜测你想要什么,不如在写代码前就和 AI 达成一致:用可执行的、活生生的规范作为共同的理解基础。每个阶段的职责不是随便指挥一下,而是验证、反思、修正

通常分为三部分:

  • 规范(Spec):用户旅程、需求、验收标准(What / Why)
  • 计划(Plan):技术栈、架构决策、约束条件(How 的框架)
  • 任务(Tasks):可执行的原子任务清单(怎么一步步落地)

关键点在于:每一步都有检查点。不是让 AI 一把梭,而是让 AI 先把东西写出来,我们审清楚,再让它写代码。这一步对团队协作尤其有用:因为你 review 的不只是代码,还能检查这次到底要改什么。

SDD 相比 Vibe 编程的核心优势

维度 Vibe 编程 规范驱动开发
可预测性 AI 猜测 明确意图
可维护性 难以维护 活文档自解释
团队协作 只有聊天记录 结构化的共享文档
体系一致性 随意 架构约束内置
质量保证 无法保证 有明确的验收标准
生产就绪 不适合 面向企业级应用
调试效率 需重新理解意图 直接查规范

入门:Trae 原生 Spec + Plan 模式


Trae 内置了两种项目管理模式,无需额外安装工具。

在 Trae 的 Solo 模式中 使用 /plan、/spec 开启两种模式。

Spec和Plan两种模式的区别

  • Spec 重流程,需求大纲(spec.md)->任务列表(task.md)-> 验收清单(checkList.md)
  • Plan 重计划,偏粗粒度,最大的作用是帮你把需求和实现对明白
  • Spec 的能力 包括了 Plan,也就是 Spec 可以代替 Plan
场景 Spec模式 Plan模式 普通模式 原因
新系统 / 新模块 0→1 搭建 新模块启动一般都需要一个比较好的系统化的设计,这一步非常重要,spec 能输出非常详细的方案和任务
极小范围的修改 不需要流程
老项目重构 老项目每个功能的迭代都需要慎重,需要有详细的文档和方案
高质量/高稳定性项目的开发 需要详尽的验收清单来确保每个环节达标。
正常功能开发或者需求不清楚

这两种模式的优势是零配置,直接在对话中使用。适合快速启动、轻量级管理;劣势是功能有限,缺乏审查、归档功能,无法处理复杂的项目管理场景。

进阶:spec-kit + OpenSpec 模式

spec-kit:适合 0→1 阶段的初次开发


如果要从零开始创建一个新项目,可以试试 spec-kit。它的长项在于能快速把一个模糊的想法,通过 ConstitutionSpecifyPlanTasks 这一套组合,拉成一个可执行的计划。

安装并初始化

uv tool install specify-cli --from git+https://github.com/github/spec-kit.git
# 创建一个新项目(会生成一个文件夹)
specify init <PROJECT_NAME>

# 或在现有项目中初始化
specify init . --ai claude
# or
specify init --here --ai claude

# 检查已安装的工具
specify check

注:specify init . --ai 后面可以接任何 ai agent,具体可见:支持的 AI 代理


怎么使用?

命令

基本命令:

命令 描述
/speckit.constitution 创建或更新项目指导原则和开发指南
/speckit.specify 明确您想要构建的内容(需求和用户故事)
/speckit.plan 使用您选择的技术栈制定技术实施方案
/speckit.tasks 生成可执行的任务清单以便实施
/speckit.implement 执行全部任务以按计划构建功能

可选命令

用于提升质量和验证的附加命令:

命令 描述
/speckit.clarify 澄清规范不明确区域(建议在 /speckit.plan 前执行;原名 /quizme
/speckit.analyze 跨制品一致性及覆盖范围分析(在 /speckit.tasks 后、/speckit.implement 前执行)
/speckit.checklist 生成定制化质量检查清单,用于验证需求完整性、清晰度和一致性(例如"英文单元测试")

流程演示

1. 确立项目原则

使用 /speckit.constitution 命令来创建项目的指导原则和开发准则,这些原则将指导所有后续的开发工作。

/speckit.constitution 以"离线可复现 + 双入口共用同一套 Python 逻辑 + menu.json 单一事实源 + 严格校验与规范化写回 + 先过滤后抽样(闭区间) + seed 记录可复现 + 权重非法值在校验阶段拦截 + 候选为空必须有明确错误提示(CLI 非 0 退出/GUI 提示卡片) + CLI/GUI 在同菜单同区间同 seed 下必须抽中同一条目"为核心,制定项目开发准则与验收红线,并要求所有变更必须保持一致性与可解释性(记录 seed、区间、候选数等)。

2. 创建规格说明书

使用 /speckit.specify 命令来描述你想要构建的内容。重点关注做什么为什么做,而不是技术栈。

/speckit.specify 做一个离线奶茶抽签小工具:用户输入 min/max 价格区间(闭区间),系统从本地 menu.json 里的候选饮品中先过滤再按 weight 抽出一杯,并展示结果。工具必须同时提供 CLI 与 GUI 两种入口,且两者共用同一套 Python 业务逻辑,保证同一份菜单+同价格区间+同 seed 时结果完全一致。抽签结果需要记录 seed 与选中条目的 id/name(建议同时记录 brand/price、min/max、algorithm、过滤后候选数量),用于复现与解释结果变化。禁止联网抓取真实门店菜单与实时价格,本次以本地 menu.json 为唯一数据源。

3. 制定技术实施方案

使用 /speckit.plan 命令来提供你的技术栈和架构选择。

/speckit.plan Python 3.12 + uv;将"菜单读取/校验/规范化导出/价格过滤/基于 seed 的加权抽样/菜单 CRUD 写回(含备份)"做成同一套可复用的 Python 核心模块,CLI 与 GUI 都只做薄封装以确保一致性。CLI 用 Typer 实现并至少提供 milktea validate、milktea export、milktea spin 以及菜单增删改查命令;GUI 用 pywebview 加载 frontend/index.html,前端通过 window.pywebview.api 调用 Python 侧 API 完成读取菜单、编辑写回与抽签;也允许改用本地 FastAPI 提供 CRUD 与抽签接口但必须复用同一套核心逻辑。抽签算法严格遵循:先按 min<=price<=max 过滤,候选为空时 CLI 非 0 退出且 stderr 提示、GUI 给明确提示;过滤后按 weight(缺省 1) 抽样,非法 weight 在校验阶段拦截;seed 可由用户提供或系统生成但必须记录并展示。环境安装:uv venv --python 3.12;uv pip install typer pywebview fastapi。

4. 拆分为具体任务

使用 /speckit.tasks 根据您的实施计划创建可操作的任务列表。

/speckit.tasks

5. 执行实施方案

使用 /speckit.implement 来执行所有任务,并根据计划构建您的功能特性。

/speckit.implement

OpenSpec:适合 1→n 的长期迭代


再来看 OpenSpec,它非常适合 1→n 阶段。GitHub 仓库:OpenSpec

OpenSpec: 1 → n 阶段的开发范式演进

传统开发(意图散失)

  • 变更意图:散落在聊天记录中,过两天就丢,无法溯源
  • 影响评估:改动了哪些能力、哪些边界?说不清,全凭经验猜
  • 评审盲区:Review 只能翻代码 diff,看不见"需求到底变了什么"

OpenSpec(规格真相)

  • openspec/specs/ 沉淀当前真相,它是系统能力的唯一索引
  • openspec/changes/ 容纳变更提案,让每一次演进意图显性化
  • 先审需求,后写代码:通过后 Archive 合回 Specs,规格越用越完整


安装

OpenSpec 官方前置条件是 Node.js >= 20.19.0,先 node --version 看一眼。

npm install -g @fission-ai/openspec@latest

验证安装:

openspec --version

在项目中初始化 OpenSpec

cd my-project
openspec init

初始化时它会引导你选择要集成的 AI 工具,并在项目里生成 openspec/ 结构、以及必要的 agent 指令。

设置完成后会出现一段提示,类似于:

Next steps - Copy these prompts to Codex:
────────────────────────────────────────────────────────────

1. Populate your project context:
   "Please read openspec/project.md and help me fill it out
    with details about my project, tech stack, and conventions"

2. Create your first change proposal:
   "I want to add [YOUR FEATURE HERE]. Please create an
    OpenSpec change proposal for this feature"

3. Learn the OpenSpec workflow:
   "Please explain the OpenSpec workflow from openspec/AGENTS.md
    and how I should work with you on this project"

翻译:

下一步操作 - 将这些提示复制到 codex:
────────────────────────────────────────────────────────────

1. 填充项目上下文:
请阅读 openspec/project.md 并协助我完成内容填写
包含我的项目详情、技术栈及规范"

2. 创建您的首个变更提案:
我想添加[在此处填写您的功能]。请创建一个
OpenSpec 对此功能的变更提案

3. 学习 OpenSpec 工作流:
请解释来自 openspec/AGENTS.md 的 OpenSpec 工作流。
以及我该如何与你共同推进这个项目

按照这个步骤进行就可以了。


具体使用方式

OpenSpec 最好的一点是它足够的轻量化,不止可以通过斜杠命令启动,也可以使用自然语言调用。下面展示一个具体的使用流程。

流程演示

1. 起草提案

首先要求您的 AI 创建变更提案:

您: 创建 无论是在 CLI 还是 GUI 中抽中条目后,不仅仅展示结果,而是生成一张"数字化小票"。GUI 表现:弹出一张由 HTML/CSS 渲染的精美小票卡片,包含店铺 Logo、饮品名称、价格、以及底部的"防伪码"。CLI 表现:使用 ASCII Art 或 rich 库的 Panel 组件,在终端打印出一张长条形的小票样式 的 OpenSpec 变更提案
     (斜杠命令工具的快捷方式: /openspec:proposal add-milktea-offline-picker)

AI: 我将为 add-milktea-offline-picker 创建 OpenSpec 变更提案。
     *在 openspec/changes/add-milktea-offline-picker/ 中搭建 proposal.md、tasks.md 和规范增量(spec.md 等)*

2. 验证与审查

检查变更是否正确创建并审查提案:

$ openspec list                             # 确认变更文件夹存在
$ openspec validate add-profile-filters     # 验证规范格式
$ openspec show add-profile-filters         # 审查提案、任务和规范增量

3. 完善规范

反复迭代规范,直到满足您的需求:

您: 为这个小票增加:记录种子与哈希,生成可复现的防伪数字凭证。

AI: 我将更新规范增量与 tasks,补充以下场景:
     *编辑 openspec/changes/add-milktea-offline-picker/specs/... 与 tasks.md*

4. 实施变更

一旦规范看起来不错,开始实施:

您: 规范看起来不错。让我们实施这个变更。
     (斜杠命令工具的快捷方式: /openspec:apply add-milktea-offline-picker)

AI: 我将处理 add-milktea-offline-picker 变更中的任务。
     *按 tasks.md 实施:核心模块 -> CLI(Typer) -> GUI(pywebview 桥/FastAPI) -> 测试与复现用例*
     *逐项标记任务完成*

5. 归档已完成的变更

实施完成后,归档变更:

AI:  所有任务已完成。实施已准备就绪。

您: 请归档变更
     (斜杠命令工具的快捷方式: /openspec:archive add-profile-filters)

AI: 我将归档 add-profile-filters 变更。
    *运行: openspec-cn archive add-profile-filters --yes*
     ✓ 变更成功归档。规范已更新。准备下一个功能!

或者在终端中自己运行命令:

$ openspec archive add-profile-filters --yes  # 无提示归档已完成的变更

Note

具有原生斜杠命令的工具(Claude Code、CodeBuddy、Cursor、Codex、Qoder、RooCode)可以使用显示的快捷方式。所有其他工具都通过自然语言请求工作,如"创建 OpenSpec 提案"、"应用 OpenSpec 变更"或"归档变更"。

什么时候用哪个?


三种方案的选择逻辑:

场景 推荐方案 原因
快速开始,不想配置 Trae Spec + Plan 零配置,直接在对话中使用
从 0 创建新项目 spec-kit 结构化流程,快速拉通完整计划
已有项目,持续迭代 OpenSpec 变更追踪,规格沉淀

spec-kit 和 OpenSpec 对比:

特性 Spec-Kit OpenSpec
最优场景 0→1(新项目开发) 1→n (已有项目,持续落地)
特别优势 结构清晰,全新项目最快 现有项目平滑集成
变更追踪 任务清单 spec 规范 + 变更文件夹
开源度 GitHub 官方 社区项目
内置工具 完整的 CLI 工具 轻量 CLI
复杂程度 提示较多 比较轻量