
一、软件工程永恒的挑战:从"意图"到"实现"的鸿沟
软件工程从诞生之日起,就面临一个核心矛盾,如何将人类的意图,准确、高效、可维护地转化为可执行的代码?,这个看似简单的问题,在过去50年里催生了无数方法论、工具和实践。每一次技术革命,都试图缩小这条鸿沟,但从未真正消除它。
AI 时代的软件工程 ,现在 AI 正在编写真正的生产代码。但是随着库的变化、api的发展和惯例的改变,代理努力保持正确。问题不在于底层模型,而在于如何创建、更新、评估和分发上下文以使
AI 产出符合预期的结果。
规范驱动开发(Spec-Driven Development, SDD)正是为解决这一问题而生。它将软件开发的核心从"代码优先"转变为"规范优先",让规范成为人类与AI的共同真理来源。
相关文章:
二、什么是规范驱动开发
规范驱动开发(Spec-Driven Development, SDD)是一种以规范为第一性产物,并以规范驱动设计、实现、验证与演进的开发方法论。其核心理念是:
先写规范,再写代码。让规范成为人类和AI的共同真理来源。
- GitHub:在这个新世界里,维护软件意味着不断发展规范。开发的通用语言进入了更高的层次,而代码只是最后一英里。
- Tessl:一种软件开发方法,其中规范是主要的工件,而不是代码。规范通过结构化的、可测试的语言描述意图,AI生成与之匹配的代码。
2.1 规范(Specification)
在 SDD 中"规范"并不等同于我们熟悉的项目文档(需求文档或计说明书等)。它更接近于系统在某个阶段的"正式合同",明确规定了系统应该做什么、不应该做什么,以及如何验证。不仅仅作为辅助文档,是结构化、可验证、可演化的技术工件,而且是在开发过程中最先产生、且最具权威性的工件。代码是规范的一个实现结果,持续与规范对齐。
一份合格的 Specification,通常具备以下特征:
| 维度 | 说明 |
|---|---|
| 明确性 | 对系统行为、约束、边界条件有明确描述,避免歧义 |
| 结构化 | 可被工具或 AI 稳定解析(常用格式:Markdown / DSL / Schema) |
| 可验证 | 能映射到测试、校验规则或自动化验证,确保规范与实现一致 |
| 可演进 | 支持版本化、Diff、回滚,随系统一起成长 |
| 面向实现 | 能直接指导代码生成或人工实现 |
一份好的规范通常包含:
- 目标与价值(解决什么问题)
- 上下文与约束(架构、依赖、环境、性能要求)
- 功能需求(核心行为与特性)
- 非功能需求(安全、性能、可扩展、可访问性)
- 边界与错误处理
- 测试标准
- 示例(输入/输出、样例数据、使用场景)
2.2 传统开发 vs 规范驱动开发
传统开发:需求 → 设计 → 手写代码 → 测试
规范驱动:需求 → 详细规范 → AI生成 → 验证
关键差异:
- 规范是唯一事实来源,代码是规范的实现结果
- 代理在编写任何代码之前收集需求并编写规范。你审查并批准规范,然后代理执行它们。
- AI根据规范生成代码,开发者聚焦架构与验证
- 质量通过系统化闸门把关,而非事后补救
- 需要像对待代码一样对待规范:创建、测试、评估、分发,并在系统更改时保持最新
2.3 当前不同工具实现 SDD 的三个层级
| 层次 | 名称 | 特征 | 人是否修改代码 |
|---|---|---|---|
| Level 1 | Spec-First 规范优先 | 先写规范指导开发,规范可在任务完成后删除 | ✅ 是 |
| Level 2 | Spec-Anchored 规范锚定 | 规范长期保留,与代码持续同步维护 | ✅ 是 |
| Level 3 | Spec-As-Source 规范即源码 | 人只编辑规范,代码完全由AI生成,禁止手动修改 | ❌ 否 |
选择建议:
- 从 0 到 1 的核心系统 → Spec-As-Source
- 长期演进的企业应用 → Spec-Anchored
- 短期、探索性项目 → Spec-First
- 混合使用这三种层级。
2.4 SDD 五层执行模型,从意图到实现的完整链路
text
┌─────────────────────────────────────┐
│ 5. 治理层 (Governance Layer) │ ← 规范演化:版本控制、安全策略、人机决策
├─────────────────────────────────────┤
│ 4. 验证层 (Validation Layer) │ ← 实时对齐:合约测试、模式验证、漂移检测
├─────────────────────────────────────┤
│ 3. 执行层 (Execution Layer) │ ← 运行时实现:生成的代码 + 业务逻辑
├─────────────────────────────────────┤
│ 2. 生成层 (Generation Layer) │ ← 规范→代码的编译器
├─────────────────────────────────────┤
│ 1. 规范层 (Specification Layer) │ ← 定义系统行为、声明式意图(What)
└─────────────────────────────────────┘
三、SDD工具生态
3.1 工具分类:SDD专用 vs AI编码助手
在讨论SDD工具前,需要明确区分两类工具:
SDD专用工具(规范管理与工作流):
- 专注于规范的创建、管理、验证
- 提供结构化的SDD工作流
- 代表:Spec-Kit、OpenSpec、Kiro、Tessl
AI编码助手(代码生成与补全):
- 专注于代码生成、补全、重构
- 可以配合 SDD 工具使用,但本身不管理规范
- 代表:Claude Code、Cursor、Amazon Q、GitHub Copilot
关键区别:SDD工具管理"要做什么"(规范),AI编码助手执行"怎么做"(实现)。两者互补,而非替代。
典型工作流:
SDD工具(Spec-Kit)→ 生成规范 → AI编码助手(Cursor)→ 生成代码
3.2 Spec-kit
GitHub官方推出的企业级SDD工具包,规范是系统的"宪法",所有实现必须逐级受控。支持多种编程助手,通过 cli
自动创建编程助手工作空间设置,可以通过斜杠命令与 spec-kit 进行交互。
五层规范链路:
text
1. Constitution(宪法) ← 不可违背的全局原则
2. Specification(规范) ← 功能边界、接口契约
3. Plan(计划) ← 实现步骤、技术选型
4. Tasks(任务) ← 可执行的最小单元
5. Implementation(实现)← 严格执行,不允许偏差
典型目录结构:
text
/.specify/
├── memory/ # 项目记忆库
├── scripts/ # 自动化脚本
└── templates/ # 规范模板
/specs/001-feature-name/
├── spec.md # 业务需求规范
├── plan.md # 实现计划
├── tasks.md # 任务拆解
├── data-model.md # 数据模型
├── contracts/ # API契约(OpenAPI)
├── research.md # 技术调研
└── checklists/ # 验证清单

3.3 Tessl
Tessl 是一个面向AI 编程的上下文管理平台,它通过将代理所需的"skills"和"上下文"视为需要全生命周期管理的软件,来确保代理行为的可靠性和一致性。
你可以将其理解为 "AI编程助手的上下文操作系统"。
为"skills"提供构建、评估、分发、优化的完整工具链,告别将技能视为静态文件的管理方式,索引了数千个经过评估的、版本化的上下文包。这些包封装了与特定技术(如开源库)交互的最佳实践、示例和常见陷阱,使代理能正确使用它们。
,支持多种AI编码工具。

3.4 Kiro
- Kiro (AWS) 强调 IDE + AI 自动化结合,仅限 AWS 专属 IDE,工具链受限,主打自动化 spec 协作及交付,有较高体验但低自由度。

3.5 OpenSpec
通过轻量的规格(spec)层,让人类和 AI 在编码之前达成明确共识,适合敏捷、透明且多工具协作的团队。
当你描述你想要做出的改变时,OpenSpec会生成审查它所需的一切:提案文档、实现任务分解、技术设计决策,以及显示需求将如何变化的规范delta。在编写任何代码之前,您都要检查并改进计划,尽早发现不一致之处。
每次变更都有独立目录组织 proposal、spec、design、task,过程可追溯。协作过程中可随时更新任何文档,适合快速迭代。 支持主流编程助手(如 Copilot、GPT、Claude)。
横向对比
| 特性 | OpenSpec | tessl | Spec-kit | Kiro |
|---|---|---|---|---|
| 场景定位 | AI/协作/敏捷/任意规模 | 前端/接口/类型安全 | 大型项目/规范/严流程 | AWS生态/自动化 |
| 流程自由度 | 高,随时更新 | 高,代码驱动 | 低,严格阶段 | 低,受限 IDE |
| 工具兼容性 | 多平台/多助手 | TypeScript生态 | GitHub+Python+Markdown | AWS IDE/Claude |
| 自动化支持 | 规格/文档/任务集成 | 类型、接口自动生成 | 规范验证、文档自动化 | 规范/交付自动 |
| 适用团队 | 多规模/敏捷协作 | 前端/全栈/快速开发 | 大型/重流程团队 | AWS 用户 |
| 上手门槛 | 低,轻量 | 低,代码为核心 | 高,流程重、文档多 | 中,需 AWS IDE |
四、SDD与其他方法论的关系
┌───────────────┐
│ Spec-Driven │ ← 系统级规范
│ Development │
└───────────────┘
▲ ▲ ▲
│ │ │
TDD BDD DDD
│ │ │
代码级 功能级 业务级
SDD不是替代,而是整合:
- DDD 定义领域模型 → 提供规范的语义基础
- BDD 描述业务场景 → 作为规范层的重要输入
- TDD 验证单元实现 → 确保代码符合规范
- SDD 管理结构化规范 → 驱动整个开发流程
五、为什么需要SDD:核心价值
1. 提升效率
- 显著提升开发速度
- 规范完备的特性实现大幅节省时间
- 每周节省可观的重复性工作
2. 保障质量
- 有效降低 Bug 率
- 测试覆盖率显著提升
- 安全漏洞明显减少
3. 知识沉淀
- 规范即文档,永不过时
- 新人上手时间大幅缩短
- 决策可追溯,架构可演进
4. 降低成本
- ROI 可在中短期内打平,长期显著正向
- 相当于节省多名中级开发人力
六、实施路线图
规范驱动开发如何融入现有工作流?
- CI/CD 集成:以规范作为流水线输入;当规范变更时触发生成;设置安全/测试/质量闸门;将生成代码纳入版本管理;生产前强制人类评审。
- 版本管理策略:将规范作为主工件入库;生成代码也入库以便透明与调试;让规范版本与应用版本对齐;采用"先评审规范再生成"的分支策略。
- 敏捷整合:把规范写作纳入用户故事与迭代计划;在迭代执行中进行 AI 生成;评审聚焦"是否符合规范";在回顾中反馈规范质量。
- DevOps 实践:从规范生成基础设施即代码;维护配置管理规范;生成部署自动化脚本;明确监控与日志规范。
- 规范维护:需求演进时更新规范;从更新后的规范再生成代码;制定版本策略做向后兼容;持续验证规范与代码的一致性。
- 度量与指标:跟踪规范编写时间;监控生成成功率;对比 AI 与手写代码的缺陷密度;度量生产率(速度、周期时间);计算 ROI(规范开销 vs 实现节省)。
6.1 三阶段落地策略
阶段一:试点验证(1-4周)
- 1-2名开发者
- 非关键新特性
- 使用Kiro轻量级流程
- 目标:验证价值,开发时间减少50%+
阶段二:团队扩展(5-12周)
- 全体开发者参与
- 建立规范模板库
- 开展培训工作坊
- 目标:50%+新特性采用SDD
阶段三:全组织推广(13-24周)
- 所有开发团队
- 制定治理政策
- 集成CI/CD
- 目标:80%+采用率,ROI为正
6.2 关键成功要素
✅ 管理层支持与公开赞助
✅ 识别"种子选手"推动
✅ 时间线预期务实(6-12个月成熟)
✅ 持续培训与度量
✅ 根据反馈灵活调整
6.3 最佳实践:
真正成熟的团队,一定是两种范式并存,根据场景动态切换。
规范不是一次性写完的,而是"随着系统一起演进的核心资产"。
七、挑战与应对
"很多文件和模板和清单,并不能保证AI会遵循所有指令。小步迭代的方法论仍然是我们保持控制的最佳方式。"
来自 Martin Fowler 团队对 Kiro、Spec-kit 等工具的使用反馈:
- 流程与规模不匹配:现有工具倾向于重流程,修复小 bug 也会生成大量文档,杀鸡用牛刀
- 规格审查体验差:大量 Markdown 文件冗长重复,开发者宁愿直接审查代码
- AI 并不总遵循规范:上下文窗口变大不等于 AI 能正确理解所有指令,控制感存在虚假成分
- 功能规格与技术规格难以区分:实践中边界模糊,团队普遍缺乏这方面的良好记录
- 与 MDD 的历史教训相似:规格即源码的路径与模型驱动开发高度相似,需警惕重蹈覆辙
- 小步迭代仍是最佳控制手段:大量前期规格设计与迭代开发理念存在内在矛盾
总结
SDD = 用清晰的结构化规范指导AI编程,让"要什么"和"怎么做"分离,提高代码质量和团队协作效率。
SDD 目前在定义和实践上尚处于早期探索阶段,工具和方法都在快速演进,需根据自身项目体量、团队习惯审慎选择。如果忽视工作负载和团队协作实际,盲目"流程重"或"规范重",反而可能适得其反。无论你是否现在采用SDD,了解它的理念都会帮助你更好地与AI协作编程。
写给未来的软件工程师
如果你是一名即将进入或已经身处行业的软件工程师,请记住:
"编码能力不会过时,但其价值重心正在转移:从"写出能跑的代码"转向"写出能准确表达意图的规范"。
沟通能力成为核心竞争力:与 AI 沟通、与跨领域专家沟通、与未来维护者沟通,都需要规范的媒介。
终身学习的内容正在变化:除了学习新框架、新语言,更要学习如何设计可验证的规范、如何构建规范驱动的工程体系。" -- 深蓝居