🚀 AI辅助编程:规范驱动开发 (SDD) 的前景与陷阱
核心观点: 软件开发正在经历从随性的“凭感觉编程 (Vibe Coding)”向结构化的“规范驱动开发”的重置。与其依赖巧妙的提示词 (Prompts),不如依赖清晰的需求、架构和预先定义的成功标准。
1. 什么是 AI 语境下的“规范 (Spec)”?
传统的 Spec 指设计文档。在 AI 编程中,它指:
- 行为导向: 描述软件应该“做什么”,而不是“怎么写代码”。
- 自然语言: 结构化但人类可读(如用户故事、验收标准、API 契约)。
- 任务级 vs. 全局级:
- 任务级 Spec: 针对特定功能(如 user-story-123.md)。
- 全局上下文: 项目架构、编码标准(“记忆库”)。
2. SDD 的三个进化层级
-
Level 1: 规范优先 (Spec-First) 主流
先写规范指导 AI 生成代码。任务完成后,规范可能被丢弃,仅作为一次性提示词使用。
-
Level 2: 规范锚定 (Spec-Anchored) 进阶
规范是“活”的文档。随功能迭代更新,作为未来维护和重构的基准,与代码共同在版本控制中维护。
-
Level 3: 规范即源码 (Spec-as-Source) 极端/实验性
规范是唯一的真理来源。人类只编辑规范,代码完全由 AI 生成且不可手动修改。
3. 典型工具与工作流
🛠️ Amazon Kiro (轻量级 IDE 插件)
- 流程: 需求 → 设计 → 任务列表 → 生成代码。
- 特点: 适合新项目。
- 缺点: 对于小修小补太繁琐(“杀鸡用牛刀”),修个小 Bug 可能生成一堆文档。
🛠️ GitHub Spec Kit (结构化 + 治理)
- 核心: 引入“宪法 (Constitution)”文件,强制执行全局规则(代码风格、安全性)。
- 流程: 规范 → 计划 → 任务 → 实现。
- 优点: 适合复杂项目和团队协作,确保一致性。
- 缺点: 产生大量 Markdown 文件,审查文档比看代码还累,可能导致过度设计。
🛠️ Tessl (迈向 Spec-as-Source)
- 理念: 生成的代码文件标记为“不可编辑”。
- 目标: 试图复兴模型驱动开发 (MDD),让人类专注于高层逻辑。目前仍处于实验阶段。
4. ⚠️ 主要挑战与陷阱
- 旧项目适配难: 在现有代码库(Brownfield)中引入 SDD 成本极高,需要先用 Spec 描述现有逻辑。
- 流程僵化: 无论任务大小都强推全套流程,会降低效率。
- 审查疲劳: 用“写 Spec”代替“写代码”可能只是转移了工作量。审查一堆生成的 Markdown 文档可能比直接审查代码更痛苦。
- 虚假的控制感: 即使有详细 Spec,AI 仍可能产生幻觉或过度执行规则。人类必须验证每一步。
- 与敏捷冲突: 过度强调前期详细设计 (Big Up-Front Design),可能违背小步迭代的敏捷原则。
- MDD 的阴影: 历史上的“模型驱动开发”因模型与代码不同步而失败。如果 Spec 过于死板,可能重蹈覆辙。
5. ✅ 理想的人机协作工作流
为了平衡结构化与灵活性,建议采取以下混合模式:
- 编写可测试的规范: 使用“Given/When/Then”格式。尽量将 Spec 转化为自动化测试(可执行的规范),让测试来验证 AI 生成的代码。
- 保持人机循环 (Human-in-the-Loop): 人类负责编排和审查。AI 负责繁重的编码和样板代码。信任,但要验证。
- CI/CD 集成: 将 Spec 和测试纳入持续集成。代码必须通过基于 Spec 的测试才能合并。
- 小步快跑: 不要试图一次生成整个子系统。按功能点切分,快速迭代 Spec → Code → Test 的循环。
- 图表辅助而非替代: 架构图用于沟通理解,不要强求图表直接生成代码。
- 角色演变: 产品经理与开发者界限模糊。可能出现“技术产品经理”或“产品型工程师”,负责编写精准的 Spec。
结论:SDD 是为了给 AI 加上“护栏”,而非制造官僚主义。
成功的关键在于:用规范定义“做什么”,用测试验证“做对了没”,让人类掌控方向。