图覆盖方法是什么
图覆盖把程序或流程抽象为有向图,用节点覆盖、边覆盖与路径覆盖度量测试充分性:节点覆盖要求每个节点被执行到,边覆盖要求每条迁移都被走过,路径覆盖要求特定路径组合被执行。流程测试、状态测试与数据流测试都可以统一到图覆盖框架下讨论覆盖强度。
基本信息
| 覆盖层次 | 节点覆盖 ≤ 边覆盖 ≤ 路径覆盖(强度递增) |
|---|---|
| 应用对象 | 控制流图、状态图、业务流程图、数据流(定义-使用) |
| 环路处理 | 含循环时路径无穷,用基本路径或有界路径 |
| 度量意义 | 统一语言比较不同用例集的充分性 |
| 粒度问题 | 图建模粒度不一致会导致数据不可比 |
| 配套手段 | 结合业务风险评估决定覆盖优先级 |
状态图覆盖示例
状态图覆盖示例
状态图:未登录 -> 已登录 -> 锁定
节点覆盖:三个状态都访问到
边覆盖:登录成功 / 连续失败 / 解锁全部走一遍
路径覆盖:主链路 + 登录失败回退 + 锁定后解锁
# 带循环的图路径无限,需限定循环次数或有界路径典型使用场景
- 状态机测试:为订单、账号等状态流转设计用例。
- 流程测试:用业务流程图推导主链路与回退路径。
- 覆盖评审:用统一的覆盖层次讨论用例集强度。
- 数据流测试:围绕变量的定义与使用路径设计用例。
- 用例集比较:新旧用例集用同一图模型对比覆盖。
- 培训讲解:用图模型解释覆盖强度差异。
覆盖层次与局限
| 层次 | 做法 | 局限 |
|---|---|---|
| 节点覆盖 | 执行到每个处理步骤 | 不保证状态迁移组合 |
| 边覆盖 | 走完全部状态迁移 | 不保证迁移序列组合 |
| 路径覆盖 | 主链路与关键回退组合 | 环路导致组合无穷,需有界化 |
| 数据流覆盖 | 变量定义到使用的路径 | 建模成本较高 |
图覆盖提供了讨论覆盖强度的统一语言,便于评审时比较不同用例集的充分性,但它不衡量业务价值。
建模粒度要统一:同一系统两套粒度不同的图,覆盖数据没有可比性。
路径覆盖在有环图上是无穷的:常用做法是限定循环次数或使用基本路径集。