第3章 验证计划与规格拆解
验证计划不是“测试用例清单”,而是一张从设计规格到验证目标的工程地图。本章围绕一个核心问题展开:如何把自然语言写成的规格文档,拆解为可执行、可度量、可追溯的验证计划。
3.1 核心概念
验证计划是验证活动的“作战地图”,必须在编写代码之前明确目标、方法、资源和完备性判定标准。
规格拆解是将规格文档中的需求逐条翻译为功能点;功能点是规格中可独立验证的设计行为;验证点则是验证空间中具体可执行的原子检查项。
一条常见拆解路径为:规格条目 → 功能点 → 验证点 → 用例 → 覆盖率。越早完成这条链,验证盲区越少。
3.2 核心概念速查表
| 概念 | 定位 | 典型输出载体 |
|---|---|---|
| 验证计划 | 验证活动总纲 | 验证计划文档 |
| 规格拆解 | 需求到功能点的翻译过程 | 功能点清单 |
| 功能点 | 可独立验证的设计行为 | 功能点列表 |
| 验证点 | 具体检查任务 | 验证点描述 / 用例映射 |
| 覆盖率模型 | 完备性度量框架 | 功能覆盖率模型 |
3.3 原理机制
- 自顶向下拆解:模块级 → 接口级 → 事务级 → 检查项,避免漏测。
- 双向追溯:功能点可回溯到规格条目,验证点可回溯到功能点。
- 粒度适中:一个功能点通常对应 3~8 个验证点;过粗则不可执行,过细则维护成本爆炸。
- 方法匹配:按风险选择定向测试、约束随机、断言、形式化或硬件加速。
3.4 流程步骤
- 收集规格输入:设计规格说明书、协议规范、架构文档、变更记录。
- 建立功能点清单:按功能域分组,编号采用“模块-功能-序号”规则。
- 拆解验证点:逐条列出验证点、激励描述、预期行为、异常边界。
- 制定验证计划:确定优先级、验证方法、资源分工、进度与工具链。
- 评审与基线:设计 / 验证 / 架构三方评审,通过后纳入版本管理。
3.5 案例说明
以 APB Slave 寄存器读写为例,展示规格拆解到验证计划的关键片段。
| 规格条目 | 功能点 | 验证点 | 验证方法 |
|---|---|---|---|
| 寄存器写入在 PENABLE 与 PREADY 握手完成时生效 | APB-RW-FP02 | APB-RW-VP01 写地址匹配时数据正确写入 APB-RW-VP02 PENABLE 高电平期间写入不丢失 |
约束随机 + 断言 |
| 读操作返回最近一次写入值 | APB-RW-FP03 | APB-RW-VP03 读回值等于写入值 | 定向测试 |
| 从设备 PREADY 拉低时事务延长 | APB-RW-FP04 | APB-RW-VP04 等待 PREADY 后写入数据仍正确 | 定向测试 + 断言 |
推荐在验证计划中使用统一的验证点描述模板:
APB-RW-FP02:
- 验证点: APB-RW-VP01 写地址匹配时数据正确写入
- 验证点: APB-RW-VP02 写事务期间 PENABLE 时序正确
- 验证方法: 约束随机 + 断言
- 优先级: P0
3.6 表格总结:验证计划关键要素
| 维度 | 要素 | 说明 |
|---|---|---|
| 追溯链 | 功能点编号 | 必须关联到规格条目 |
| 验证点 | 描述三要素 | 激励、行为、预期结果 |
| 优先级 | P0 / P1 / P2 | P0 冒烟必过,P2 可延期回归 |
| 验证方法 | 定向 / 随机 / 断言 / 形式化 | 按风险与效率选择 |
| 覆盖率 | 功能覆盖组 | 映射到验证点,形成完备性度量 |
| 版本状态 | 待评审 / 已基线 | 纳入版本管理,防止无声变更 |
3.7 误区提醒
- 把验证计划写成测试用例集合,导致追溯链断裂。
- 功能点粒度失控:既无法评估完备性,也无法指导实现。
- 只拆正常路径,异常、边界、复位、跨时钟域无人认领。
- 验证计划不随版本更新,最终沦为“历史文档”。
3.8 实践清单
- 建立全局编号规则:FP / VP / 用例三级编号。
- 规格中每一条“应当 / 必须 / 可以”必须有功能点承接。
- 每个功能点至少包含一个正向验证点和一个异常 / 边界验证点。
- 验证计划必须包含完成标准:功能覆盖率、断言语义、回归通过率。
- 使用版本管理工具为验证计划建立基线,每次重大变更后重新评审。
实践提示:项目初期可以先用“验证计划骨架”拉通模块与功能域,再随规格成熟度逐层细化,比一次性写完更可靠。