乐于分享
好东西不私藏

AI时代软件工程新范式:SDD规约驱动开发

AI时代软件工程新范式:SDD规约驱动开发

作为软件开发团队,我们似乎刚刚适应敏捷的节奏,DevOps的文化还没完全落地,DDD的复杂概念仍在消化,如今,AI 编程又带着SDD扑面而来。面对接踵而至的新名词,疲惫之余,我们很容易陷入一种误解:这不过是又一轮概念炒作,换汤不换药。

但事实远比这深刻。

回望软件开发的演进史,每一次“新名词”的背后,都是一次范式的根本性迁移

瀑布模型让我们学会了计划与控制;敏捷宣言将“响应变化”写入了基因;DevOps打破了开发与运维的壁垒;DDD则教会我们以业务为核心构建复杂领域。它们不仅仅是方法论的工具箱更新,更是我们看待软件、组织协作、交付价值的方式发生的深层变革。

今天,当AI能够理解需求、生成代码、甚至自主完成复杂任务时,我们再次站在了范式转换的门槛上。

SDD(规约驱动开发)并非在旧地图上标注新地名,它要求我们重新思考:在 AI 成为编码协作者的今天,人类的核心职责是什么?是“写代码”,还是“定义正确的事”?

打开华为codearts编程,默认会让选择编程模式:Vibe-Coding,Spec-Driven。

关于这两种模式的基础概念,网上解释的很多。从使用层面简单说:

适合用Vibe-Coding的场景:

  • 之前没接触过编程,但能把要做什么目标的逻辑描述的清楚;

  • 有过编程经验,但对系统架构、代码规范、以及后续部署、安全性不需要更多考虑,只是想快速的做个demo或者mvp验证。

适合用Spec-Driven场景的:

  • 需要做一个可交付的商业化系统,是要投产使用的系统。

  • 需要多个开发角色协同,之前我们强调不能一个人单打独斗,需要团队协作完成一个工程或项目。现在团队引入AI,也要和AI协同。

  • 需要按团队AI开发标准。

华为码道Agent Space(CodeArts Agent Space)是华为云码道(CodeArts)代码智能体面向多Agent协同端云一体场景推出的新一代以Agent为中心的交互体验模式。码道Agent Space用户界面如下:

背后的逻辑是:SDD,Spec-Driven Development,这种设计模式的核心理念是:先达成共识,再写代码。Vibe Coding就像即兴作画,想到什么画什么,边画边改,适合捕捉灵感。SDD 就像建筑,先画好图纸,列出施工步骤,再按图建造,适合盖摩天大楼。二者的区别可以概括为:

阶段
Vibe Coding(即兴编码)Spec-Driven Development(规约驱动开发)
起点
一个模糊的想法
一个明确的想法
第一步
直接写一句 Prompt,让 AI 开始生成代码
先撰写结构化提案(Proposal),包含背景、目标、范围、接口设计等
第二步
AI 产出代码,开发者边运行边观察效果
将提案细化为任务清单(Tasks),拆解为可独立实现的子任务
第三步
根据反馈不断修改 Prompt,循环迭代
AI 严格按照任务清单逐项实现代码,每完成一项进行验证
第四步
代码可用即停,缺少系统化归档
将最终设计、接口、决策记录归档为规范文档(Archive),形成可追溯的知识库
核心特征
即时反馈、快速试错、无强制结构
先规划后执行、可追溯、可审计、团队协同

华为码道的企业级规范驱动开发标准流程图如下:

如果想了解,也有一个开源项目:OpenSpec,其目录结构如下:

openspec/                     # 项目规约根目录├── specs/                    # 【稳定层】当前全量规范(唯一事实来源)│   └── <capability>/         # 按能力/模块划分(如 auth, payment)│       └── spec.md           # 该能力的完整规约文档├── changes/                  # 【变动层】所有进行中的变更提案│   └── <change-id>/          # 变更唯一标识(如 add-oauth2)│       ├── proposal.md       # 变更提案:为什么要改?改什么?影响谁?│       ├── design.md         # 技术设计:架构决策、方案选型、风险点│       ├── tasks.md          # 实施清单:可验收的具体开发任务列表│       └── specs/            # 【增量层】仅存放本次变更涉及的规范差异│           └── (delta)       # 相对于 specs/ 的新增/修改/删除片段└── archive/                  # 【历史层】所有已完成的变更归档    └── <change-id>/          # 按时间或版本归档的历史记录

目录层次的意义是:

目录
角色定位
生命周期
核心作用
specs/
系统的当前全量规范
长期稳定,随版本更新
反映线上系统“实际是什么样”,是所有开发和测试的基准参照
changes/进行中的变更工作区
短期存在,贯穿需求到上线
隔离单个变更的上下文,避免多人并行开发时相互干扰
archive/已归档的历史快照
永久保留,只读
提供完整的变更履历,便于回溯、审计和复盘决策过程

几个文件的作用是:

文件
回答的问题
面向角色
产出时机
proposal.md
为什么要做?(背景/动机)做什么?(范围界定)影响谁?(上下游依赖/兼容性)
产品经理、架构师、 Reviewer
需求评审前
design.md
怎么做?(技术选型、模块划分、接口设计、数据模型)风险与权衡是什么?
技术负责人、核心开发者
方案评审时
tasks.md
具体拆解成哪几步?(每个子任务的验收标准)执行顺序与依赖关系?
执行开发的工程师、QA
编码开始前
specs/(子目录)
本次变更对规范做了哪些具体修改?(仅含增量差异)
测试、文档维护者、AI 编码助手
与代码实现同步产出

如果对应到团队开发工作安排上,不同阶段及产出如下:

SDD 环节
对应目录/文件
结构化提案(Proposal)
proposal.md
技术设计(Design)
design.md
任务清单(Tasks)
tasks.md
规范增量(Delta)
changes/<id>/specs/
归档规范(Archive)
archive/
(合并后的完整历史)
当前真相(Source of Truth)
specs/
(合并所有已归档变更后)

华为云码道官方给出的是4阶段递进流程:

在此基础上,华为云码道代码智能体提供了两种使用方式:标准SDD工作流:在智能体对话切换到规范开发(Spec-Driven)模式后,由智能体主导推进,按如上图所示的顺序执行,每阶段产物人工确认过后进入下一环节。

斜杠命令模式则通过下表1=所示的斜杠命令,由开发者自主调度,可灵活跳过或重复任意阶段。

这两种模式适合的场景官方文档也有解释:

华为云码道代码智能体内置的规范驱动模式标准SDD工作流模型下编程,用户在聊天界面选择“规范开发 Spec-Driven”后,输入需求描述,智能体会按照预设工作流逐步执行:

  • 首先生成需求规格文档spec.md,

  • 确认无误后自动进入方案创建,生成design.md,

  • 再生成任务清单tasks.md,最后执行编码实现。

整个流程由AI自主驱动,用户主要在关键节点进行确认(接受或拒绝生成的文档)。我们和编程工作的交互边界限定在了任务交互上,而不是临时的业务需求描述或框架想法。

以官方的示例看下提示词过程:

1.输入提示词

请开发一个用户登录接口,支持用户通过用户名和密码进行身份认证,认证成功后返回JWT令牌,登录失败时记录失败次数,连续失败5次后锁定账号15分钟。

2.查看生成的需求规格文件spec.md。提出相应的修改意见,华为云码道代码智能体会修改spec.md文件。

修改以下问题: 登录成功后除了返回token,还需要返回用户基本信息(昵称、角色) 锁定时间15分钟太长了,改为5分钟 补充接口的限流机制,每分钟同一个IP最多请求10次 响应码不要用200,统一使用业务码20000表示成功

3.再次查看修改后的spec.md,确认需求理解准确后,单击“开始实现方案创建”。

4.查看生成的design.md,确认技术方案合理后,单击“开始编码任务规划”。

5.查看生成的tasks.md,确认任务拆解完整后,单击“开始任务执行”。

6.等待任务执行完成后,获得完整的代码实现,同时沉淀了spec.md、design.md和tasks.md三份过程文档。

从即兴编码到规约驱动开发的演进,折射出 AI 辅助软件工程从“浪漫主义”走向“古典主义”的成熟过程。

前者赋予我们天马行空的创造力,后者则赋予我们脚踏实地的保障。优秀的开发团队不应偏废一方,而应学会在项目初期借力即兴编码快速探路,在进入生产阶段时果断转向规约驱动,用结构化的规约锁定意图,用自动化测试守护质量,最终在速度与可靠之间找到属于自己的最佳平衡点。