惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

量子位
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
F
Fortinet All Blogs
博客园 - 聂微东
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Hugging Face - Blog
Hugging Face - Blog
V
Visual Studio Blog
小众软件
小众软件
有赞技术团队
有赞技术团队
雷峰网
雷峰网
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
AWS News Blog
AWS News Blog
C
Cisco Blogs
美团技术团队
T
Threat Research - Cisco Blogs
C
CERT Recently Published Vulnerability Notes
人人都是产品经理
人人都是产品经理
宝玉的分享
宝玉的分享
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
酷 壳 – CoolShell
酷 壳 – CoolShell
Stack Overflow Blog
Stack Overflow Blog
W
WeLiveSecurity
D
DataBreaches.Net
博客园 - 司徒正美
Blog — PlanetScale
Blog — PlanetScale
IT之家
IT之家
云风的 BLOG
云风的 BLOG
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Simon Willison's Weblog
Simon Willison's Weblog
Google DeepMind News
Google DeepMind News
T
The Blog of Author Tim Ferriss
Know Your Adversary
Know Your Adversary
NISL@THU
NISL@THU
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The Cloudflare Blog
Vercel News
Vercel News
月光博客
月光博客
T
Tailwind CSS Blog
H
Help Net Security
aimingoo的专栏
aimingoo的专栏
P
Proofpoint News Feed
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Spread Privacy
Spread Privacy
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Cisco Talos Blog
Cisco Talos Blog
Microsoft Security Blog
Microsoft Security Blog
V
V2EX
WordPress大学
WordPress大学
Cyberwarzone
Cyberwarzone
Recent Announcements
Recent Announcements

Wayne的博客

从 AI Coding 到 Agent Loop:2026H1 研发工具演进趋势 Awesome AI Prompts:提示词收集手册 | Wayne的博客 大模型缓存技术工程指南(下):面向缓存命中的 Prompt 与 Agent 工程实践 大模型缓存技术工程指南(上):从价格信号到推理缓存机制 | Wayne的博客 面向 AI / Agent 友好的 CLI 开发建议 【笔记】Harness Engineering(驾驭工程) | Wayne的博客 【笔记】location.href 和 location.assign 进行页面 URL 跳转 【工具】ZeroClaw配置项(config.toml)说明 | Wayne的博客 【工具】ZeroClaw配置项(config.toml)说明 | Wayne的博客 Skills 技术深度解析:AI Agent 能力扩展的新范式 | Wayne的博客 【笔记】浏览器PNA/LNA策略——记一次iframe中CORS报错的问题排查经历 | Wayne的博客 Agent设计模式 | Wayne的博客 【工具】2025年AI Coding部分产品技术分析——ClaudeCode和CodexCLI | Wayne的博客 【工具】设计-开发-测试的AIGC产品清单梳理 | Wayne的博客 近期关于AI浪潮下的搜索引擎、SEO和GEO思考 | Wayne的博客 【工具】AI Common Notify:统一 AI 编程工具通知服务 21st.dev:让AI生成的页面告别"塑料感"的专业解决方案 | Wayne的博客 【笔记】Figma和AIGC(持续) | Wayne的博客 【笔记】State-Of-Ai 报告信息 | Wayne的博客 【笔记】web 黑夜模式通用适配方案 | Wayne的博客 【笔记】19届阿里D2终端技术大会纪要 | Wayne的博客 【笔记】Lovable提示词指南 | Wayne的博客 【调研】AI 编程工具WindSurf使用技巧——WindsurfRules配置 | Wayne的博客 【AI】【笔记】MCP 协议:连接 AI 模型与外部世界的桥梁 | Wayne的博客 AI 前端编程工具的一个得力助手——CopyCoder | Wayne的博客
【工具】spec驱动开发解析 | Wayne的博客
2025-12-01 · via Wayne的博客

【工具】Spec驱动开发(Specification Driven Development, SDD)解析

为什么需要 SDD

传统“代码先行、文档事后”的开发方式在大模型时代的问题被放大:AI 易误解意图、输出不稳、改动不可追溯,返工成本高。

SDD目前尚无严格定义,但它的核心思想可以概括为:

1
“让规范(specification)成为开发过程中的中心实体,使人和 AI 都以此为唯一事实源(single source of truth)。”

简言之,SDD 并非全新的方法论,而是对“生成式 AI 参与软件开发”这一趋势的系统化回应。它探讨的问题是:当 AI 能够读懂并据此生成代码时,我们是否应当以规范为起点重新组织开发流程?

规范驱动开发(Specification-Driven Development, SDD) 要求先写清楚要做什么和验收标准,再让人和 AI 严格按规范实现,把文档提升为一等公民。

背景脉络与提出者

  • “Specification-Driven Development” 没有单一权威定义,它继承了“先定义契约/接口再实现”的工程传统,与 API First、契约测试、TDD/BDD 等理念一脉相承。
  • 大模型编码兴起让“规范先行”成为显性需求。
  • GitHub 的 Spec-Kit、Fission AI 的 OpenSpec,以及多代理框架 BMAD 等项目强化了 SDD 的术语和流程,使其从“工程常识”演化为可复用的工作流。
  • 核心主张:规范是输入和审查基线;接口/契约先于实现;验收标准前置;让 AI 严格受规范约束。

SDD 是什么:一套“先约定、后实现、可验证”的工作方式

  1. 文档即契约:规范写清 What/Why/约束,成为设计、实现和评审的共同基线。
  2. 接口优先:先定义 API/模块接口、输入输出、边界条件,再编码,便于并行开发和松耦合。
  3. 渐进细化:从目标 → 澄清 → 方案 → 任务 → 验收 → 实现,避免陷入技术细节前就做决策。
  4. 验收前置:规范中直接写验收场景,测试从规范派生,形成闭环。
  5. 可追溯性:规范、任务、实现、测试之间可映射,利于审计和复盘。

SDD三个层次

根据 Martin Fowler 团队的观察,当前关于 SDD 的实践大致可分为三个层次,分别体现出规范在开发生命周期中的不同角色:

  • Spec-first(规范先行)在这一层次上,开发流程以撰写规范为起点。开发者首先以结构化方式描述系统需求、接口和行为,然后再由人工或 AI 编写代码。此时,规范主要用于“指导实现”,其地位类似于传统的软件需求规格说明书(SRS),但通常更加可执行化。
  • Spec-anchored(规范锚定)该层次的特点是:规范不仅在初始阶段使用,而且在后续维护与扩展过程中持续存在。代码与规范之间保持双向关联,任何修改都需要在两者之间保持一致。这一模式强调演进过程中的一致性管理。
  • Spec-as-source(规范即源)这是最激进的一种形态。在此模式下,开发者直接编辑规范,而代码由生成式 AI 自动生成并更新。代码文件通常包含提示信息(如 // GENERATED FROM SPEC - DO NOT EDIT),明确指出源文件来自规范而非人工撰写。此时,“源代码”的地位实际上被“规范”取代,开发的本质变成了规范工程(spec engineering)。

三层AI参与度和自动化程度也逐层提升。

与 TDD、BDD 的关系

  • TDD 用代码层测试断言描述行为,SDD 在更高层写文档+接口定义,适合组合使用。
  • BDD 更偏用户视角场景,SDD 可嵌入 BDD 场景格式,但更全面覆盖需求到实现。

快速流程示意(30 分钟上手)

  1. 写目标与接口草稿、边界/约束;
  2. 补疑点与非目标;
  3. 拆出任务,附验收条件;
  4. 实施与对齐;
  5. 回写规范,归档成正式文档。

SDD 的适用与限制场景

✅ 适用:

  • 多团队并行协作、大型系统;
  • 跨模块改造、大功能开发;
  • API/平台型项目(需提前 Mock/定义);
  • 从零构建时需要骨架/共识的场景;
  • 需要审计/知识沉淀/可回溯过程的系统。

🚫 不适用或可简化:

  • 脚本、小改动、快速验证原型;
  • 模糊探索期(只记录关键约束即可)。

当前SDD面临术语不统一、AI服从性不足等挑战,但“先定规范再开发”已能提升代码一致性与效率,未来需解决规范语义统一、AI规范服从性、自动一致性验证以推动普及。


三种代表性工具与用法

快速对比表

工具 定位/擅长 节奏与粒度 适用场景
BMAD 多角色 AI 模拟敏捷团队,产出需求/架构/任务/实现 重、全周期,偏大版本 0→1、重构、架构升级
OpenSpec 轻量变更驱动,每次变更都有提案/任务/归档 轻、线性,小步快跑 维护、接口新增
Spec-Kit 结构化七步流程,产出规范与任务库 中等偏重,强调一致性 新项目规划、大功能设计

BMAD(多代理敏捷团队模拟)

定位:用多角色 AI(Analyst/PM/Architect/Dev/QA)模拟团队,从需求到交付。

典型步骤:

1) /analyst 需求分析(生成项目简报/目标);
2) /pm 编写 PRD、划分 Epic/优先级;
3) /architect 设计架构/接口/数据;
4) /sm 生成用户故事与任务、验收标准;
5) /dev 实现与测试;循环迭代。

优点:流程完整、角色分明、能输出较完整的需求/架构/任务包、适合大版本启动;
限制:流程重,偏好从零开始的大版本,不适合高频迭代、小改小修;需上下文长期维护,增量小改动时显得“过度工程”。

什么时候用:新产品、跨团队大版本、需要完整需求-架构-实现链条时优先。

简单示例:

1
2
3
4
5
6
7
8
9
# 安装(一次性)
npx bmad-method install

# 触发一次完整迭代
/analyst 目标:做一个支持扫码点餐的小程序,核心是菜单浏览与下单
/pm 输出 PRD,列出必做/可选功能和优先级
/architect 选择技术栈(UniApp + Node + MongoDB),设计主要接口
/sm 给出下一轮 Sprint 的用户故事与任务
/dev 实现任务并附单元/集成测试

OpenSpec(轻量规范驱动)

定位:维护期每次功能/接口变更都走 Proposal → Tasks → Apply → Archive 流程,让每次变更都有提案、任务和归档,保持“规范即现状”。

目录结构:

  • openspec/specs/ 当前生效规范
  • openspec/changes/ 变更中提案(proposal.md、tasks.md 等)

典型步骤:

1) Proposal:/openspec:proposal 或 CLI 生成变更目录与 proposal.md(Why/What/Impact);
2) Review & Align:补充/澄清约束,用 MUST/SHOULD 固化;
3) Plan & Tasks:自动生成 tasks.md(含测试任务),必要时添加 design.md;
4) Apply:/openspec:apply 按任务顺序实现并勾选;
5) Archive:迁移变更目录到 archive,并把新增/修改的 spec 合并进 specs/。

优点:流程轻、贴合增量迭代;接口友好、Mock 与测试自动生成;归档让规范与代码同步;
限制:不含架构设计、不负责 0→1 全局设计,复杂决策需人工介入或需配合 Spec-Kit/BMAD 立骨架;提案粒度过大时质量易下降。

什么时候用:小步快跑的功能迭代、接口新增、线上缺陷修复后的补规范。

示例(现有项目新增导出报表接口):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 初始化(一次性)
npm install -g @fission-ai/openspec@latest
openspec init

# 创建提案
/openspec:proposal 新增 GET /reports/export 接口,支持店铺ID和时间范围,导出 CSV

# 补充约束(在 proposal/design 中)
- MUST 时间范围不超过 7 天
- MUST Content-Type: text/csv,流式输出避免 OOM

# 生成任务
/openspec:tasks

# 实施
/openspec:apply # AI 按 tasks 逐项实现并勾选

# 归档并合并规范
/openspec:archive

Spec-Kit(结构化规范生成器)

定位:为 0→1 项目或大功能提供结构化七步,明确项目目标、接口、方案与任务,产出可执行的规范与任务库,强调前后一致性。

七步(斜杠命令):/constitution(原则)→ /specify(需求)→ /clarify(澄清疑点)→ /plan(技术方案)→ /tasks(任务拆解)→ /analyze(一致性检查)→ /implement(按任务实现与测试)。

  • 优势:阶段清晰、可做跨文档一致性检查;AI/技术栈无关,可基于同一规范尝试多方案;形成可传承的知识库。
  • 局限:文档量大、上手成本高;小项目或快节奏需求可能不划算;需统一运行环境(如 Python/依赖)。
  • 什么时候用:新项目规划、跨模块大功能、需要规范沉淀和一致性检查的团队。

示例(新建“照片管理”项目):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 安装 CLI
pip install spec-kit

# 初始化
specify init photo-manager --ai cursor

# 依次运行七步
/constitution 关注性能、易用性、可维护性,函数不超 50 行,单测覆盖率 80%
/specify 构建照片管理应用,支持拖拽整理、日期分组、平铺预览
/clarify (让 AI 提问并补充:导入方式、批量操作、删除策略等)
/plan 采用 Vite + vanilla JS,SQLite 存元数据,本地存储图片
/tasks (生成任务清单)
/analyze (检查 Spec/Plan/Tasks 一致性)
/implement (按任务顺序实现并带测试)

工具协同建议

  • “Spec-Kit 立骨架 + OpenSpec 管迭代”:前期用 Spec-Kit 输出 Constitution/Spec/Plan/Tasks,后续需求变更用 OpenSpec 的 Proposal → Tasks → Apply → Archive 保持规范常新。
  • “BMAD 做大版本 + OpenSpec 做小步”:大版本或架构升级用 BMAD 规划与设计,日常维护/小需求用 OpenSpec 快速交付。
  • 借鉴而不堆叠:已用 BMAD 可吸收 Spec-Kit 的 Clarify/Analyze;已用 Spec-Kit 可用 OpenSpec 的归档保持规范-代码同步。

实战案例摘选

1) API 平台新增导出能力(OpenSpec)

  • 背景:已有交易报表系统,需要新增 CSV 导出,前端和后端由不同团队负责。
  • 做法:用 /openspec:proposal 固化需求与约束(时间范围 ≤7 天、Content-Type: text/csv、流式输出防 OOM),生成 tasks.md。
  • 成果:后端先按规范提供 Mock,前端并行开发;上线后按 tasks.md 勾选并归档,规范与实现同步。

2) 数据标注工具重构(BMAD → OpenSpec)

  • 背景:旧版前端性能差,需重构并分期上线。
  • 做法:先用 BMAD 产出完整 PRD、架构、数据流设计和验收标准;每个迭代用 OpenSpec 拆变更(提案→任务→归档)。
  • 成果:大方向与接口在 BMAD 阶段一次对齐,后续小步交付;避免“边重构边改需求”带来的返工。

3) 0→1 设备管理系统(Spec-Kit)

  • 背景:要做 IoT 设备管理,接口多、边界复杂,团队需要统一原则和一致性检查。
  • 做法:用 Spec-Kit 跑七步,明确非目标(不做 OTA)、性能约束(1 万设备秒级查询),并在 /analyze 阶段校验 Spec/Plan/Tasks 一致。
  • 成果:上线前发现两处接口与约束不一致(分页规则、告警阈值),提前修正;规范文档直接变成培训材料。

典型落地误区

  1. 规范写成“备忘录”,缺少验收场景
  • 现象:只有需求陈述,没有 BDD 场景,测试无法对齐。
  • 纠正:每条需求至少列 1 个“WHEN/THEN”场景,覆盖主流程与关键边界。
  1. 粒度失衡:要么太大要么太碎
  • 现象:一个提案覆盖多个子系统,导致任务不可验证;或拆得过碎,审阅成本高。
  • 纠正:以“可独立验收的接口/用户旅程”作为粒度;大版本先用 BMAD/Spec-Kit 定骨架,再用 OpenSpec 小步落地。
  1. 规范与代码不同步
  • 现象:上线后不回填,规范失真,AI/新人拿到旧信息。
  • 纠正:把“归档/更新 spec”作为发布前的必做检查,可在 CI 或 PR 模板中加入核对项。
  1. 只写需求不写约束/非目标
  • 现象:AI 按默认假设补充实现,导致超范围或性能踩坑。
  • 纠正:显式写“非目标”“已知风险/约束”(比如 SLA、限流、数据上限),避免隐含假设。
  1. 工具堆叠、流程过重
  • 现象:同时跑 BMAD + Spec-Kit + OpenSpec,重复产出,团队疲劳。
  • 纠正:按阶段选 1-2 个核心工具,明确交接点;重在“规范可执行、可验证”,而非工具数量。

落地建议

  • 选痛点切入:维护质量痛点先试 OpenSpec,需求对齐痛点试 Spec-Kit,大版本规划试 BMAD,先小范围试点再推广。
  • 流程本地化:约定哪些文档必审、哪些可简化;把 Proposal/Tasks 接入现有评审或 PR 模板。
  • 规范先行习惯:提交代码前更新规范;新增功能必须补接口定义与验收场景;测试用例对齐规范。
  • 规范实时性:设定归档/合并规则,CI 或合并检查规范是否更新,避免“文档滞后”。
  • 人机协同:AI 负责生成/执行,人工把关架构与风险;关键决策、验收与测试需人工确认。
  • 持续复盘:记录使用成本与收益,跟进工具版本/最佳实践,按团队节奏调整流程深度。

结语

规范先行,是让 AI 真正可信的关键。SDD 提倡“先对齐、再实现”,让文档成为共识入口,也让自动化从规范出发,带来更可靠的交付、更少的返工。


延伸资料