状态迁移覆盖是什么
状态迁移覆盖是针对有状态对象的覆盖准则族:先建状态机模型(状态、事件、守卫条件、迁移),再从弱到强选择强度——状态覆盖、迁移覆盖(0-switch)、1-switch 覆盖、路径覆盖。强度每升一级用例数通常成倍增加,实践上要在检出能力与可执行成本之间取平衡,并以 0-switch 为基线、对高风险区域加 1-switch。
基本信息
| 覆盖等级 | 状态覆盖、0-switch、1-switch、N-switch、路径覆盖 |
|---|---|
| 前置产物 | 状态迁移图或迁移表:状态、事件、守卫条件、动作 |
| 适用对象 | 订单、支付、账号、工单、协议栈、设备状态机 |
| 规模估算 | 1-switch 用例数约为迁移数的平方级,需评估可行性 |
| 方法来源 | ISO 29119-4 等测试设计技术标准中的状态迁移技术 |
典型使用场景
- 订单与支付:验证已支付不可再取消、已发货不可改地址等规则
- 账号生命周期:激活、冻结、注销之间的互斥与恢复路径
- 工单系统:在途、挂起、解决、重开构成的闭环流转
- 协议与设备:连接握手、断线重连、升级中的状态行为
- 回归选择:只改了少数迁移时,按受影响迁移圈定最小回归集
- 缺陷复盘:把生产上出现过的非法迁移固化为回归用例
状态迁移表(节选)
状态迁移表(节选)
待支付 --支付成功--> 已支付
待支付 --超时--> 已关闭
已支付 --发货--> 已发货
已支付 --取消--> 非法(应拒绝,状态保持已支付)
# 用例集合 = 每条合法迁移各一条 + 关键非法迁移 + 选定区域的两条连续组合
# 非法迁移断言:返回明确错误且状态不变覆盖准则对照
| 准则 | 要求 | 强度 |
|---|---|---|
| 状态覆盖 | 每个状态至少到达一次 | 低 |
| 迁移覆盖 0-switch | 每条合法迁移至少执行一次 | 中,最常用基线 |
| 1-switch | 任意连续两条迁移的组合都执行 | 较高,数量易爆炸 |
| N-switch | 任意连续 N 条迁移的组合 | 高,通常需工具生成 |
| 路径覆盖 | 所有可行路径都执行 | 极高,有环时不可行 |
有环状态机的路径无限,所以路径覆盖通常只是概念上界。工程做法:0-switch 保底,高风险流转加 1-switch,同时单独设计「非法事件应被拒绝且状态不变」的用例。
守卫条件与超时容易被漏:迁移是否真的发生取决于条件(余额、风控、审批)与时序(超时任务、定时补偿),这些要作为独立测试点,而不是只测迁移本身。