简介:本文系统讲解规范驱动开发的落地方法:如何把模糊提示转为结构化需求与验收标准,如何用属性测试保障生成质量,如何集成外部上下文与定制工件前置问题,以及如何验证结果、排查常见故障并持续优化工作流。适合开发者、测试与技术负责人阅读。
本教程要帮助读者完成一件事:把“让 AI 代理写代码”这件模糊的事,改造成一套可重复、可验证、可维护的工程流程。具体来说,你将学会:
适合阅读人群:有一定工程经验、正在或计划把 AI 代理引入日常研发流程的开发者、测试工程师、技术负责人与运维人员。读者应具备基本的版本控制、单元测试与持续集成概念。
规范驱动开发(Specification-Driven Development,下称 SDD)适合以下场景:
不太适合的场景:探索性原型、一次性脚本、需求本身仍在剧烈变动且无法收敛的阶段。此时强上规范流程会带来不必要的开销。
在开始之前,请确认具备以下条件:
在写任何提示之前,先用一段话界定任务范围:输入是什么、输出是什么、边界条件有哪些、明确排除哪些情况。这一步的作用是防止代理自由发挥、把范围扩大到无法评审的程度。
建议在任务描述中固定包含四要素:目标、输入、输出、约束。约束里显式写出“不修改公共接口”“不引入新依赖”等硬性条件。
EARS(Easy Approach to Requirements Syntax)是一种把自然语言需求规范化的写法,核心是用固定句式消除歧义。常见句式包括:
示例(伪代码形式的需求条目):
需求 R-01(事件式):当 用户提交的表单缺少必填字段 时,系统 应当 返回结构化错误列表,且不写入任何数据。需求 R-02(异常式):如果 外部依赖调用超时,则 系统 应当 在有限次数内重试,并在最终失败时记录可检索的日志。
为什么这么做:结构化句式让每条需求都具备“触发条件 + 期望行为”的完整语义,既能被人评审,也能被代理直接消费,还能一对一派生出验收标准。注意每条需求只描述一件事,避免复合句。
验收标准是需求的“可验证表达”。推荐使用“给定—当—则”三段式,每个条目对应一个可自动化验证的断言。
验收标准 AC-01(对应 R-01):给定 一个包含空必填字段的请求,当 提交表单时,则 返回的错误列表中包含对应字段标识,且存储层无新增记录。
注意点:验收标准必须可判定,避免“体验良好”“响应较快”这类主观描述;涉及数值的地方写明阈值来源(由业务约定,而非代理臆测)。
在需求之后、实现之前,插入轻量设计工件。常见三类:
为什么这么做:把潜在问题(字段缺失、状态冲突、并发顺序)在设计和测试用例阶段就暴露出来,比等到实现完成后再返工成本低得多。工件不必复杂,关键是“先写下来、可被评审”。
代理生成质量很大程度取决于上下文是否充分。可通过通用的外部系统集成方式,把以下信息接入工作流:
实施要点:只接入与当前任务相关的片段,避免整库灌入导致上下文噪声;对敏感信息做脱敏;为接入内容标注来源与版本,便于回溯。配置上通常需要凭据管理、访问范围限定与调用频率限制,具体参数依所用集成方式而定,切勿把凭据写入仓库明文。
在需求、验收标准、设计工件齐备后,再让代理生成实现与测试。此时代理的输出应被约束为:实现代码 + 对应验收标准的测试 + 属性测试。
属性测试的思路是:不去逐条列举输入,而是声明“对所有合法输入都应成立的性质”,由测试框架自动生成大量输入进行验证。示例性质:
性质 P-01:对任意合法输入,序列化后再反序列化,结果与原对象等价。性质 P-02:对任意合法输入,处理函数的输出长度不超过输入长度的固定倍数。性质 P-03:对任意两个合法输入,合并操作满足幂等性。
为什么这么做:属性测试能覆盖人工举例想不到的输入组合,对代理生成代码尤其有价值——它能有效暴露“只在样例上正确”的实现。注意生成器的输入域要与需求中的约束一致,否则会产生大量无效失败。
不要直接接受代理给出的第一个方案。按以下顺序审查:
对存疑之处,主动要求给出至少两种替代实现并比较取舍(复杂度、可读性、性能影响)。必要时借助外部上下文检索既有实现范式。这一步是质量分水岭,跳过它就等于把评审责任完全交给代理。
先在仓库的一个模块内落地,跑通测试与静态检查,再逐步扩大范围。观察代理在修改跨模块调用时的表现,记录失败模式,作为后续流程改进的输入。
判断流程是否跑通,可看四个信号:
规范驱动开发的价值不在于让代理“写得更快”,而在于让生成结果可评审、可验证、可复现。关键动作是四步:结构化需求、派生验收标准、前置设计工件、用属性测试兜底。配合充分且干净的外部上下文、对初始方案的主动质疑,以及对大型代码库的结构治理,才能把 AI 代理稳定地纳入工程流程。后续可继续关注的方向包括:工件模板的沉淀、测试生成策略的调优,以及活文档与需求管理系统的持续同步。