934 字
5 分钟
学习笔记:用 Spec Coding 让 AI 编程更可控
AI 可以很快产出代码,但它无法自动知道需求中的隐含约束。Spec Coding(规格驱动开发)把“先对齐要做什么,再讨论怎么实现”变成显式步骤,从而减少猜测和返工。
从模糊需求到可验证行为
直接把一句需求交给 AI,通常会留下许多未决问题:边界条件是什么、接口如何变化、旧用户是否兼容、失败时如何处理、验收标准又是什么。
以“为登录系统加入二次验证”为例,规格不应止步于功能名称,而应描述可观察行为:
Requirement:已开启二次验证的用户,必须完成第二因素验证后才能登录。
Scenario:WHEN 用户提交正确的用户名和密码AND 该用户已开启二次验证THEN 系统要求输入一次性验证码AND 验证通过后才返回登录会话Spec 不是愿望清单好的规格要写清行为、边界和场景,并能转化为验收测试。它约束的是结果,而非单纯罗列实现方式。
一个可复用的工作流
Intent → Specification → Design / Plan → Implementation → Verification| 阶段 | 要回答的问题 | 产出 |
|---|---|---|
| Intent | 为什么做、用户要解决什么问题? | 目标与范围 |
| Specification | 系统应表现成什么样? | 需求、场景、验收条件 |
| Design | 用什么方案满足规格? | 架构与关键取舍 |
| Plan | 具体按什么顺序做? | 可执行任务 |
| Implementation | 如何改动代码? | 代码与配置 |
| Verification | 如何证明实现正确? | 测试、检查与人工验证 |
这里最容易混淆的是 Plan 和 Spec:Plan 是完成当前改动的临时执行路线;Spec 是系统行为的长期描述。前者回答“怎么做”,后者回答“应该做成什么样”。
规格应该包含什么
一份轻量但有效的 Spec 通常覆盖以下内容:
- 范围与非目标:本次要做什么,明确不做什么。
- 用户可观察的行为:正常路径、错误路径和边界条件。
- 兼容性约束:已有接口、数据和用户流程是否受影响。
- 验收方式:哪些自动化测试、手工步骤或指标能证明完成。
先写最小规格不需要为每个小改动写长文档。先列出能消除关键歧义的场景与验收条件;复杂需求再逐步补充分支和设计决策。
工具与方法论的分工
在 AI 编程工作流中,规格管理工具和 Agent 工作流框架常被一起使用,但职责不同:
| 关注点 | 规格管理 | Agent 工作流 |
|---|---|---|
| 核心问题 | 系统现在是什么、这次要改变什么? | Agent 应如何分析、实现与验证? |
| 典型产物 | 当前规格、变更提案、设计、任务 | 调研、计划、测试、评审、验证流程 |
| 价值 | 保留项目长期上下文 | 提升一次开发过程的可重复性 |
例如 OpenSpec 一类工具适合沉淀“当前系统行为”和“待合并变更”;Superpowers 一类工作流适合规范 brainstorm、计划、TDD、评审与验证。它们可以组合,但都不能代替对需求本身的判断。
练习方式
下一次让 AI 修改代码前,先写下三件事:
1. 用户最终能看到什么变化?2. 哪些旧行为必须保持不变?3. 用什么证据确认它真的完成了?这三问足以将多数模糊 Prompt 转化为可执行的规格,也是开始实践 Spec Coding 最小、最有价值的一步。
学习笔记:用 Spec Coding 让 AI 编程更可控
https://blog.xqcherry.top/posts/learning/spec-driven-development/