Spec-Driven Development(SDD)深入

共 19 题
📑 题目列表 19 题
#
★★★

1. SDD(Spec-Driven Development)相对 TDD/BDD 的本质差异中规格是产品契约而非测试用例,如何驱动 AI 与人类协同实现?

SDD(Spec-Driven Development,规格驱动开发)相对于 TDD(测试驱动开发)和 BDD(行为驱动开发)的本质差异是什么?如何理解"规格是产品契约而非测试用例",并依靠这一契约驱动 AI 与人类协同实现?

  • SDD 与 TDD/BDD 的定位差异:规格是"是什么"(契约),测试是"验证"(手段)
  • 规格作为产品与技术之间的单一事实来源(Single Source of Truth)
  • 规格如何同时约束 AI 与人类,形成协同实现

TDD 的核心是"先写失败测试再写实现",把测试当作可执行的需求规格;BDD 强调用 Given/When/Then 的通用语言描述行为,让测试同时承载业务与实现。而 SDD 把"规格(Spec)"提升为独立于代码与测试的产品契约:它描述系统"应该做什么、约束是什么、如何验收",是产品、测试、实现的共同源头。关键差异在于,TDD/BDD 中规格被"揉进"测试代码里,而 SDD 中规格是一份独立、可评审、可版本化的文档(markdown 或类型化结构),测试只是从规格推导出的验证物。在 AI 时代,规格是给 LLM 的"精确 prompt":人类把业务意图写成规格,AI 依据规格生成代码与测试,人类再按规格验收。这样"规格—实现—验证"三者闭环,既防止 AI 各说各话,也约束人类不偏离需求。

本质区别是"先有契约还是先有测试"。TDD 中测试先行,但测试往往只覆盖"实现者的局部理解";SDD 中规格先行,规格描述的是"产品意图"而非"代码行为",因此更能防止 AI 生成"自洽但业务错误"的结果。规格是产品契约,意味着它同时约束需求方、实现方(人+AI)与验证方,是三方协同的锚点。

# Spec: 订单取消(Order Cancellation)
## 输入
- orderId: 已存在且状态为 PAID 的订单
## 行为
- 将订单状态置为 CANCELLED,记录取消原因
- 若已支付则触发退款流程
## 约束
- 幂等:同一订单重复取消只生效一次
## 验收
- 取消后订单状态为 CANCELLED
- 退款流程被触发且仅触发一次
#
★★★

2. GitHub Spec Kit 的四个阶段中 Spec → Plan → Tasks → Implement 的工程化与 AI Agent 集成

GitHub Spec Kit 所倡导的四个阶段 Spec → Plan → Tasks → Implement 是怎样的工程化流程?它如何与 AI Agent 集成,实现从规格到代码的自动化落地?

  • Spec Kit 四阶段(Spec/Plan/Tasks/Implement)各自的职责与产出
  • 阶段之间的门禁与交接物
  • 与 AI Agent 集成的切入点和自动化环节

GitHub Spec Kit 是把规格驱动开发落地的工程化框架,核心是四个阶段:Spec(编写规格,定义需求、约束与验收标准)→ Plan(基于规格制定实现方案,拆解技术路线与依赖)→ Tasks(把计划拆成可执行、可追踪的任务清单,每个任务有明确验收)→ Implement(依据任务逐个实现,并对照规格验证)。这套流程的价值在于把"模糊需求"逐级细化为"可执行任务",每一级都有明确的输入输出与评审点。与 AI Agent 集成时,Spec 与 Plan 阶段通常由人或人在 AI 辅助下完成,保证方向正确;Tasks 阶段可让 AI 把 Plan 拆成结构化任务;Implement 阶段交给 AI Agent 按任务实现,并配置 Tools 让 Agent 读取规格、运行测试、提交 PR。通过"每个任务对应规格条款"的映射,Agent 每一步都能追溯到自己实现的规格依据,避免偏离。

四阶段本质是"逐级收敛"——从意图到方案到任务到代码,每一级都缩小自由度并把可验证性前移。AI Agent 最擅长的是"任务到代码"的机械劳动,而"需求到规格、规格到方案"仍需要人把关。Spec Kit 正是把人类擅长与 AI 不擅长的环节隔离开,让 Agent 在人类可控的边界内自动化。

#
★★★

3. SDD 的规格文件(Spec)应包含哪些要素(输入/行为/约束/验收),与需求文档的边界?

SDD 的规格文件(Spec)应当包含哪些要素(如输入、行为、约束、验收标准)?它与传统需求文档(PRD)的边界在哪里?

  • 规格的核心四要素:输入、行为、约束、验收
  • 规格与需求文档的职责划分:需求是"为什么做",规格是"怎么做、如何验收"
  • 规格的可执行性与可测试性

一份合格的 Spec 至少包含四类要素:输入(前置条件、入参范围与合法/非法情形)、行为(系统的响应与状态转换,逻辑用具体规则而非模糊描述)、约束(技术的非功能约束,如性能、安全、幂等、兼容性)、验收(可验证的通过标准,通常写成可断言的形式)。规格与需求文档的边界在于:需求文档(PRD)回答"为什么做、给谁用、解决什么问题",偏业务与价值;规格回答"做什么、约束是什么、怎么算完成",偏可执行与可验证。需求是"意愿",规格是"契约"——规格必须能被测试和代码直接引用,若某条需求无法转化为可测试的验收条件,就说明它还没变成合格的规格。实践中规格应尽量去除情绪化与场景描述,只保留可判定的规则。

规格的价值在于"可裁定"——评审时能判断一条行为"对或错",测试时能断言"通过或失败"。需求文档允许模糊(保留业务探索空间),规格则必须精确到能指导实现与验收。把两者混为一谈会导致规格变成"需求复述",失去可执行性,这正是 SDD 需要规避的反模式。

#
★★★

4. 规格质量的度量中如何用规格评审缺陷率、规格-实现偏差率、返工次数等指标评估规格本身的质量,并据此持续改进模板?

如何度量规格本身的质量?请说明如何用规格评审缺陷率、规格-实现偏差率、返工次数等指标评估规格,并据此持续改进规格模板?

  • 规格质量度量指标:评审缺陷率、规格-实现偏差率、返工次数
  • 度量如何定位"规格问题"而非"实现问题"
  • 用度量结果迭代模板与评审标准

规格质量难以直接观察,只能通过"下游失败"反向推断。常用指标包括:规格评审缺陷率(评审阶段发现的规格缺陷数 / 评审项数,反映规格初稿质量)、规格-实现偏差率(实现或测试中与规格不一致的比例,反映规格表述的歧义度)、返工次数(同一规格被实现、评审、推翻重来的次数,反映规格稳定性)。这些指标的价值在于把"实现返工"归因到"规格不清晰",从而明确改进方向。根据度量结果,团队可针对高频缺陷类型(如验收不明确、边界条件缺失)修订规格模板,加入强制字段与检查清单,并在评审中重点审查易错点。度量是闭环的起点:先采集、再定位、后改模板、再复测。

规格质量是"看不见的"根因,缺陷率与返工率是它的可见代理。指标要设计成"可归因"——记录返工时定位到是规格还是实现的问题,否则指标会误导团队去修实现。持续改进模板的核心是"指标驱动模板演进",让模板随问题类型动态生长。

#
★★★

5. Spec 的粒度与边界中一个 Spec 对应多大变更,粒度过大或过小分别有什么代价?

Spec 的粒度与边界应如何把握?一个 Spec 应该对应多大范围的变更?粒度过大或过小分别有什么代价?

  • 合适的 Spec 粒度:一个可独立验收的用户故事/变更
  • 粒度过大的代价:评审困难、实现失控、验收模糊
  • 粒度过小的代价:管理开销、上下文割裂、规格爆炸

一个 Spec 的合理粒度应"够一个可独立验收的变更"使用——通常对应一个用户故事或一次可独立发布的功能,能在一次评审中完整覆盖输入、行为、约束与验收。粒度过大的代价是:规格难以评审(信息量大、易遗漏)、实现跨度长导致脱离规格、验收标准模糊无法定位失败;粒度过小的代价是:规格数量爆炸、管理开销大、上下文被割裂(实现需要跨多个规格才能理解全貌)、规格重复维护成本高。判断标准是:一个规格能否被一个小团队在一次迭代内实现并验收,且验收标准能独立判定。边界上,来回横跳的"原子操作"(如单个字段)不应单独立 spec,而"跨模块的大特性"应拆分为多个可组合的 spec。

粒度本质是"可验证单元"的选择。不同团队、不同复杂度的项目,最适合的粒度不同,但原则一致:粒度要保证"可评审、可验收、可追溯"。过大会让规格失去契约意义,过小则让规格沦为繁琐的流程负担。实践中从"一个可独立验收的故事"起步,再根据团队反馈调整。

#
★★

6. Spec 的"可执行性"(executable spec)vs"描述性"(descriptive spec)中如何让规格既能表达意图又能被 LLM 准确实现?

什么是 Spec 的"可执行性"(executable spec)与"描述性"(descriptive spec)?如何让规格既能清晰表达意图,又能被 LLM 准确实现?

  • 可执行规格(可断言、可自动化)与描述性规格(叙述意图)的区别
  • 描述性规格的歧义风险与 LLM 实现的偏差
  • 用"描述意图 + 可执行验收"的组合策略

描述性规格用自然语言叙述"系统应如何",适合表达意图与业务背景,但存在歧义,LLM 可能各自解读产生偏差;可执行规格把验收写成可机器断言的形式(如测试用例、契约、属性检查),机器可验证,但表达复杂意图时成本高。两者不是二选一,而是互补:用描述性部分表达"为什么"和"意图",用可执行部分固化"必须满足的验收边界"。让 LLM 准确实现的关键是"描述意图 + 可执行验收"双层结构——把验收标准写成可断言的形式(Given/When/Then 或属性不变量),让 AI 不仅能读意图,还能通过运行测试验证自己的实现是否符合规格。这样"意图"指导方向,"可执行验收"兜底正确性。

纯描述性规格在 AI 时代风险最高,因为 LLM 对自然语言的解读不稳定。可执行验收把"对"的定义机器化,把判断权从"AI 的自我解读"转移到"可运行的断言"。因此高质量规格应把意图描述与可执行验收结合,前者给 AI 理解上下文,后者给 AI 验证标准。

#
★★

7. Spec 的版本管理与变更追踪,与 ADR 系统的协同

Spec 的版本管理与变更追踪应如何设计?它如何与 ADR(架构决策记录)系统协同?

  • Spec 版本管理与变更追踪机制(版本号、变更历史、diff)
  • ADR 记录架构决策的职责
  • Spec 与 ADR 的协同:spec 变更触发 ADR 记录决策

Spec 作为契约必须可版本化、可追踪。版本管理上,每个 Spec 应有稳定的标识、版本号与变更历史(changelog),记录每次变更的动机、作者与影响范围;变更追踪上,Spec 的变更应与实现、测试、评审关联,形成"变更集"可追溯。ADR(Architecture Decision Record)记录的是"为什么这样选"的架构决策。两者的协同在于:当 Spec 的变更源于架构决策(如引入新协议、调整模块边界)时,应同步新建或更新 ADR 说明决策与理由;反过来,ADR 的决策落地也会改变 Spec 的约束与验收口径。协同机制是"Spec 变更 → 检查是否涉及架构决策 → 是则更新 ADR,并让两者互相关联",保证"技术决策"与"产品契约"的演进一致。

Spec 是"做什么",ADR 是"为什么这么做"。变更追踪如果只记录 Spec 文本本身,就丢失了"变更背后的决策";而 ADR 如果孤立存在,就与具体契约脱节。让两者协同,能让新成员或 AI 在阅读时既看到"现在的契约",也看到"演进的理由",从而理解变更的合理性。

#
★★

8. Spec 驱动的迭代节奏中 Spec 评审、实现、验证与规格回写的闭环如何运转?

Spec 驱动的迭代节奏应如何设计?Spec 评审、实现、验证与规格回写(spec round-trip)构成的闭环如何运转?

  • 迭代节奏:评审先行、实现跟随、验证反馈
  • 规格回写(把实现中发现的修正同步回 Spec)
  • 闭环的反馈机制与防漂移

SDD 的迭代节奏是"评审—实现—验证—回写"的闭环。先评审 Spec,确认契约与验收无歧义;再让实现(人或 AI)按 Spec 落地代码与测试;随后验证——运行测试、检查实现与 Spec 的一致性;最后是规格回写:若实现中发现 Spec 有误、有歧义或边界遗漏,必须把修正同步回 Spec,而不是只改代码。规格回写是闭环的关键,它防止"Spec 与代码脱节":Spec 作为单一事实来源,任何偏离都要回到 Spec 修正,而不是让代码悄悄偏离 Spec。闭环保证 Spec 始终反映真实行为,为后续迭代与 AI 复用提供可靠依据。

没有回写的 SDD 会退化为"一次性文档"——初始 Spec 定义后即失效,代码与 Spec 渐行渐远。回写把"从实现学到的知识"反向沉淀到契约,让 Spec 持续演进。闭环的节奏要快(小步迭代),因为 Spec 越大、越久不回写,回写成本越高。

#
★★

9. AI 生成 Spec 与人工评审的配合中如何防止"规格自洽但业务错误"?

当 AI 生成 Spec 时,如何与人工评审配合,防止出现"规格自洽但业务错误"(即规格内部逻辑一致却违背真实业务)的情况?

  • AI 生成 Spec 的"自洽但业务错误"风险
  • 人工评审聚焦业务正确性而非逻辑一致性
  • 以业务权威与验收样例锚定 Spec

AI 生成的 Spec 容易"逻辑自洽但业务错误"——它内部规则一致、可测试,却违背真实业务规则或产品意图,因为 AI 只能基于训练数据与上下文推断,无法真正理解业务。防止措施的核心是"人工业务评审兜底":评审者(产品/业务专家)重点审查"业务语义是否正确",而非"逻辑是否自洽";用真实的业务样例、验收场景与既有行为锚定 Spec,逐条核对 AI 生成的规则是否与业务一致。同时要求 AI 在 Spec 中标注"推断出的假设",让评审者显式确认或否决这些假设,避免 AI 把推测当事实。还可引入"业务反例"测试——让评审者故意提出违反业务规则的场景,验证 Spec 是否错误接受。

AI 的强项是"一致性",弱项是"事实性"。业务正确性只能由人类业务权威判定。把 AI 的"假设"显式化、把业务样例作为验收锚点,是防止"自洽但错误"的两大抓手。评审关注点应从"逻辑对不对"转向"业务对不对"。

#
★★

10. SDD 的渐进式引入中从 TDD/BDD 团队迁移到 SDD 的路径,哪些场景保留 TDD(算法、关键模块),哪些切换到规格驱动,依据是什么?

团队如何从 TDD/BDD 渐进式迁移到 SDD?哪些场景应保留 TDD(如算法、关键模块),哪些应切换到规格驱动,依据是什么?

  • 渐进式迁移路径(试点、灰度、全量)
  • TDD 保留场景:算法、关键模块、无强契约需求
  • 规格驱动场景:需求明确、多人/AI 协作、验收清晰

迁移 SDD 不是一步到位,应从试点开始:先选一个"需求明确、验收清晰、可独立交付"的功能作为规格驱动试点,验证流程与价值后再扩展。选择保留 TDD 还是切换规格驱动的依据是"契约强度与验证难度":算法、关键模块、核心计算逻辑,其正确性由"性质的精确验证"决定,适合保留 TDD(用测试精确定义行为、快速回归);而需求明确、涉及多人或 AI 协作、验收标准清晰的功能,适合规格驱动(用 Spec 统一契约、减少歧义)。一般原则是:越是"可精确验证、纯逻辑"的用 TDD,越是"需多方对齐、协作交付"的用 SDD。迁移时要保留团队的测试基础设施,让两种方式共存,逐渐让规格成为契约主入口。

TDD 与 SDD 不是二选一,而是互补。TDD 擅长"精确定义行为",SDD 擅长"统一契约驱动协作"。迁移的难点在"变化的不确定性"——应该让规格驱动先承接"契约驱动类"需求,把 TDD 保留给"验证驱动类"需求。依据永远是"哪种验证方式更贴合该功能的风险与协作复杂度"。

#
★★

11. Spec 的反模式中规格退化为需求复述、与实现脱节、无人回写如何识别与纠正?

Spec 有哪些常见反模式?如何识别并纠正"规格退化为需求复述""规格与实现脱节""无人回写"等问题?

  • 规格反模式:退化为需求复述、与实现脱节、无人回写
  • 识别信号:无法验收、无实现对应、无变更记录
  • 纠正措施:模板约束、回写流程、评审检查

常见 Spec 反模式包括:一是"规格退化为需求复述"——只是把需求文档换个标题,缺少可执行的行为、约束与验收,无法指导实现与验证;二是"规格与实现脱节"——代码已演进但 Spec 停留在旧版,Spec 失去引用价值;三是"无人回写"——实现中发现的修正没有同步回 Spec,导致 Spec 漂移。识别信号:规格无法推导出可断言的验收(复述)、规格与代码行为明显不一致(脱节)、规格长期无变更历史(无人回写)。纠正措施:用模板强制 Spec 必须包含可验收的验收标准;把"回写"纳入完成定义(DoD),实现变更必须同步更新 Spec;在评审中把"Spec 与实现一致性"作为检查项,并利用工具自动比对。

反模式的共同根源是"Spec 失去作为单一事实来源的地位"。当 Spec 不能指导实现与验收时,开发者与 AI 就会绕过它,形成脱节。纠正的关键是让 Spec 始终保持"可执行、可验收、可追溯",并把回写固化到流程与门禁中。

#

12. 团队级 Spec 模板与质量门禁中评审标准、可执行性检查、生成代码一致性验证

团队级 Spec 模板与质量门禁应如何设计?包括评审标准、可执行性检查、生成代码一致性验证等环节?

  • 团队统一 Spec 模板(含强制字段)
  • 质量门禁:可执行性检查、评审标准
  • 生成代码与 Spec 的一致性验证

团队级 Spec 模板应统一字段结构,强制包含输入、行为、约束、验收,并预留元信息(作者、版本、关联任务)。质量门禁围绕三方面设置:一是评审标准,明确什么算合格 Spec(可验收、无歧义、约束完整),评审不通过不能进入实现;二是可执行性检查,自动校验 Spec 中的验收是否可断言、可测试,剔除空泛描述;三是生成代码一致性验证,在代码提交或合并时,自动比对实现与 Spec 的验收条款,运行对应测试或契约检查,确保代码未偏离 Spec。落地时模板与门禁可做成 CI 管道的一部分,把"Spec 合格"变成硬性前置条件。

模板统一了"写什么",门禁保证了"写合格"。可执行性检查防止"复述式"规格,一致性验证防止"实现漂移"。团队模板让所有 Spec 结构同构,AI 与人都能按固定结构解析,从而降低理解成本。

#

13. 规格的验证中契约测试与属性测试?

如何验证规格?请说明契约测试(Contract Testing)与属性测试(Property Testing)在规格验证中的作用?

  • 契约测试验证接口/协作契约
  • 属性测试验证不变量(properties)
  • 两者的定位与互补

契约测试验证"多方协作的契约"——确认接口的输入输出、协议与数据格式符合约定,常用于服务与消费者之间的集成,保证规格中定义的接口契约被遵守。属性测试(基于生成器)验证"不变量"——给定任意合法的输入,某些属性始终成立(如幂等性、范围约束、排序不变式),通过的随机输入发现边界与弱点。两者互补:契约测试保证"接口层"符合规格,属性测试保证"逻辑层"满足规格的不变量。规格中的验收标准若可表述为"对任意输入都成立",优先用属性测试固化;若表述为"接口双方约定",用契约测试验证。

契约测试回答"双方是否按约定对接",属性测试回答"逻辑是否满足普遍性质"。两者比"单点示例测试"更能体现规格的"契约性"——契约测试验证跨边界一致,属性测试验证不变量完备,共同把规格的"可验证性"落到实处。

#

14. 规格驱动的开发流程中从规格到实现?

规格驱动的开发流程是怎样的?描述从规格到实现的具体流程步骤?

  • 从规格到实现的关键步骤
  • 各步骤的产出与交接
  • 验证与回写

规格驱动开发流程通常为:编写 Spec(定义输入、行为、约束、验收)→ 评审 Spec(业务与技术共同确认无歧义)→ 拆解任务(把 Spec 拆成可执行任务)→ 实现(按任务编写代码,始终对照 Spec)→ 验证(运行测试与验收,检查实现是否符合 Spec)→ 回写(把实现中发现的问题同步回 Spec)。流程的关键是"规格贯穿始终"——每一步都从 Spec 出发、以 Spec 为验收依据,实现不是终点,验证与回写确保 Spec 与代码一致。该流程可被 AI Agent 执行:AI 读取 Spec、生成任务、逐项实现并自测,人负责评审与验收。

流程的核心是"规格作为主线":从需求到代码,规格是唯一稳定的事实来源。每一步的产出都服务于规格的落地与验证,防止"照做"变成"乱做"。回写环节让流程闭合,保证规格持续有效。

#

15. 规格的评审与演进中版本管理?

规格的评审与演进应如何管理?规格的版本管理应如何设计?

  • 规格评审的时机与标准
  • 规格演进与版本管理
  • 变更追踪与回写

规格评审应在"实现之前"进行,评审重点是业务正确性、验收可验证性与约束完整性,评审通过前不进入实现。规格的演进是持续的:需求变化、实现发现、评审反馈都会触发规格更新。版本管理上,规格应使用明确的版本号(如 v1.0、v1.1),记录变更历史与变更动机,并标注影响范围;同一规格的不同版本应可与实现、测试、评审记录关联,形成可追溯的变更链。评审与演进结合:每次变更都走"评审—确认—更新版本",保证规格演进受到控制,避免悄无声息地改变契约。

评审是"入口把关",版本管理是"演进可控"。没有版本管理的规格会失去"契约"的严肃性——谁都能改且无迹可查。版本历史让 AI 与人都能理解"为什么从 v1.0 变成 v1.1",从而正确理解当前契约。

#

16. SDD 与 AI 生成代码的结合?

SDD 如何与 AI 生成代码结合?规格如何引导 AI 生成更可靠的代码?

  • 规格作为 AI 生成代码的约束
  • AI 生成代码后按规格验证
  • 人机协同

SDD 与 AI 生成代码的结合方式是"规格作为 AI 的约束与验收":AI 生成代码前,输入规格(含输入、行为、约束、验收),让 AI 在规格定义的边界内实现,减少自由发挥;AI 生成代码后,用规格中的验收标准运行测试与检查,验证 AI 输出是否符合规格。规格把 AI 从"自由生成"约束为"按契约实现",从"自说自话"约束为"可验证"。实践中,可为 AI 提供规格文件与工具(AI 可读取规格、运行测试、自检),并让 AI 在完成时报告"对照规格哪条验收已满足",供人审核。人负责评审规格与最终验收,AI 负责在规格约束下高效实现。

AI 生成代码的最大风险是"偏离需求",SDD 用规格把偏离的可能性从源头收窄。规格既给 AI 提供上下文(减少误解),又给 AI 提供验证标准(自检输出)。组合的关键是"规格先行、验收兜底",把 AI 的产出变成可验证、可追溯的。

#

17. SDD 与 AI 生成的结合中规格作为 prompt?

如何把规格作为给 AI 的 prompt?Spec 如何作为 prompt 引导 AI 生成符合要求的代码?

  • 规格作为结构化 prompt 的价值
  • 把规格转化为可执行的 prompt 结构
  • 上下文中包含验收标准与约束

把 Spec 作为 AI 的 prompt,是把自然语言规格转化为 AI 可执行的指令。做法是:把规格的结构化内容(输入、行为、约束、验收)直接作为 prompt 的上下文,让 AI 在生成代码前先理解契约;在 prompt 中明确要求 AI 按规格实现、使用约束中的技术选型、并对照验收标准自检。Spec 作为 prompt 的优势在于:它为 AI 提供了"边界"(约束)与"目标"(验收),减少猜谜;同时验收标准让 AI 能自我验证。高质量的"规格 prompt"还应包含代码风格、技术栈、禁止事项等工程约束,让 AI 输出符合团队规范。生成后,人的验收仍以规格为准。

规格即 prompt 的本质是"把模糊需求结构化,把判断标准预置给 AI"。prompt 的质量决定 AI 输出的质量,而规格是现成的、经过评审的结构化需求,天然适合作为 prompt。把工程约束一并写入,能进一步提升 AI 输出的可用性。

#

18. 规格的验收中契约测试与行为验证?

规格的验收应如何执行?契约测试与行为验证在规格验收中发挥什么作用?

  • 规格验收与契约测试
  • 行为验证(BDD 风格)
  • 验收作为规格的合格判据

规格的验收是确认"实现是否满足规格"的判定环节。验收可通过契约测试(验证接口/协作符合规格约定的输入输出)与行为验证(用 Given/When/Then 验证行为转换是否符合规格)来执行。契约测试保证"接口契约"成立,行为验证保证"行为语义"成立,两者共同构成规格的可执行验收。规格验收的产出是一组"可判定的通过/失败"结果,作为"回写"与"是否完成"的依据。验收还应纳入规格回写:若验收发现规格本身有误,先修正规格再重新验收。

验收是规格"可执行性"的落脚点——没有可执行的验收,规格就退化为描述。契约测试与行为验证分别从"接口"与"行为"两个维度验证规格,让验收标准可机器执行、可追溯,从而保证规格的权威性。

#

19. Spec 变更的传播中需求变化时如何评估对已实现代码与测试的影响,并同步回写规格?

当需求变化时,如何评估 Spec 变更对已实现代码与测试的影响,并同步回写规格?

  • 需求变化 → 规格变更的影响分析
  • 对代码与测试的影响评估
  • 规格回写与联动更新

需求变化时,先更新 Spec:明确变更的影响范围(哪些输入、行为、约束、验收变了),再评估对已实现代码的影响(哪些模块、函数、接口需调整)与对测试的影响(哪些测试需改、新增或删除)。影响评估可通过"Spec 条款 ↔ 代码 ↔ 测试"的映射关系进行,定位变更扩散面。完成评估后,先回写规格(让契约反映新需求),再据此更新代码与测试,保证三者的同步演进。变更传播的核心是"规格先行"——先改契约,再让代码与测试跟随契约,避免"代码与测试各自改、规格失去意义"。

需求变化是"最高频的变更源",若规格不回写,代码与测试的改动就失去锚点。影响评估依赖"可追溯映射",而回写能让映射保持最新。变更传播的闭环是"规格变 → 评估影响 → 更新代码 → 更新测试 → 验证 → 回写",保证契约始终为真。