实例化需求 (Specification by Example)

从 Spec 写法到活文档体系:构建正确软件的完整交互指南
✍️
实战指南:Spec 的具体写法与命名规则

好的 Spec 应当像业务文档一样可读,同时像代码一样可执行。请遵循以下三大法则:

法则一:多用名词,少用动词 Declarative

核心: Spec 描述的是业务规则(What),而非操作步骤(How)。避免陷入UI细节,如“点击”、“输入”等,这会让测试变得脆弱。

❌ 脚本化 (Script): Given 我在登录页面
When 我在用户名框输入 "Bob"
And 我点击登录按钮
Then 我应该看到欢迎页面
✅ 规范化 (Specification): Given 一个注册用户 "Bob"
When "Bob" 登录系统
Then 他应该进入已授权状态
法则二:命名即意图 Intent

核心: 标题必须揭示业务价值。不要让读者猜测测试的目的。必须使用开发和业务都能懂的通用语言(Domain Language)。

❌ 技术视角: Scenario: Test_Shipping_Calc_01
或 "运费计算测试"
✅ 业务视角: Scenario: VIP用户享受免运费服务
(背景:鼓励用户升级会员等级)
法则三:提炼关键实例 Refining

核心: 不要穷举所有数据,那是机器做的事。人写的Spec应该包含最具代表性的关键实例(Key Examples),通常包括基础路径和核心边界。

❌ 罗列数据: | 99 | 不免邮 |
| 100 | 免邮 |
| 101 | 免邮 |
✅ 关键实例: | 消费额 | 结果 | 备注 |
| 99 | 不免 | 边界值 |
| 100 | 免邮 | 达标 |
📖
全书核心流程模式 (点击卡片查看详情)
01
从目标获取范围

不要只听客户说"要什么"
要问"为什么"

Deriving Scope
👆 点击翻转

Deriving Scope from Goals

理解目标: 客户提出的通常是解决方案,而非真正的问题。团队需要挖掘背后的商业目标。

以始为终: 范围应由目标决定。这是 Spec 的起点。

协作定义: 只有理解了目标,开发人员才能提出更优的技术解法。

02
协作制定规格

Three Amigos 会议
(BA + 开发 + 测试)

Collaborating
👆 点击翻转

Collaborating

避免筒仓: 需求不应由BA独自写完扔给开发。必须三方共同参与。

建立共享理解: 面对面的讨论比文档流转效率高得多。

提前发现Bug: 测试人员在需求阶段的提问(“如果数据为空怎么办?”)是成本最低的Bug修复方式。

03
举例说明

抽象是歧义的根源
具体的例子才是真理

Illustrating
👆 点击翻转

Illustrating

具体化: 不要说“系统应计算折扣”,要说“VIP用户购买满100元,折扣为10%”。

人类友好: 人类大脑更擅长处理具体实例,而非抽象逻辑。

边界探索: 通过具体的极端例子(如0,负数),快速对齐对业务规则的理解。

04
不修改规范的自动化

胶水代码层
(Automation Layer)

Automating
👆 点击翻转

Automating without changing specs

分离关注点: Spec 保持业务语言(人类可读),自动化代码负责翻译和执行。

避免UI测试: 尽量在业务逻辑层(API/Service)验证,UI测试脆且慢,维护成本极高。

单一事实: 自动化确保 Spec 永远不说谎。

Spec 的生命周期与重要阶段
阶段 1: 获取范围与讨论 (Discovery)

开发开始之前 ★ 价值最高点

这是 Spec 生命周期的起点。通过“举例说明”讨论需求。此时发现的逻辑漏洞,修复成本几乎为零。如果你等到代码写完才写Spec,你就错过了SBE 80%的价值。

阶段 2: 提炼与定稿 (Refining)

迭代计划会 / 开工前

将讨论中杂乱的草稿提炼为清晰、干净的 Spec。去除噪音,保留关键实例。这个文档将直接作为开发的验收标准

阶段 3: 自动化执行 (Delivery)

开发过程中 (ATDD)

开发人员编写胶水代码,将 Spec 变为可执行的测试。Spec 从红(失败)变绿(通过),标志着功能的完成。Spec 指导开发,而非仅仅验证开发。

阶段 4: 活文档演进 (Living)

上线维护期

Spec 进入 CI/CD 流水线,成为回归测试网。它不仅保护系统不被破坏,更是新加入成员了解业务逻辑的最佳活说明书

💎
Spec 对需求的四大核心意义
📚 活文档 (Living Doc) 解决了传统文档“写完即死”的问题。因为与测试绑定,文档过时会导致构建失败,强迫团队更新文档。
🗣️ 单一语言 (Ubiquitous) Spec 必须使用业务领域语言。开发、测试、业务使用同一套词汇,消除“翻译”带来的误解。
🎯 单一事实来源 需求文档、验收标准、回归测试集——这三者合而为一。减少维护成本,保证信息一致。
🤝 协作所有权 Spec 不是测试或BA的私有财产,而是团队的共同资产。协作过程建立了信任。

原文

源链接

附件

中文epub (9.8M)

下载