首页/开发/软件测试速查/状态迁移覆盖准则
用例设计方法62 条

状态迁移覆盖准则

常见准则:覆盖所有状态、所有合法迁移、连续迁移组合(0-switch、1-switch 等);覆盖强度与用例数量随准则上升。

软件测试速查开发更新于 2026-10-13

状态迁移覆盖是什么

状态迁移覆盖是针对有状态对象的覆盖准则族:先建状态机模型(状态、事件、守卫条件、迁移),再从弱到强选择强度——状态覆盖、迁移覆盖(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,同时单独设计「非法事件应被拒绝且状态不变」的用例。
守卫条件与超时容易被漏:迁移是否真的发生取决于条件(余额、风控、审批)与时序(超时任务、定时补偿),这些要作为独立测试点,而不是只测迁移本身。

易错点

  • 只测合法迁移:非法事件被接受是常见生产缺陷,拒绝路径必须显式覆盖
  • 状态粒度太粗:把部分退款与全额退款合成一个状态,漏掉分支差异,建模时要按行为区分
  • 忽视守卫条件与时序:条件不满足和超时触发的迁移不测,边界行为就没人验证
  • 状态机文档不维护:代码改了模型没改,覆盖分析基于过期模型等于自欺欺人
  • 无差别上 1-switch:用例数量爆炸拖垮执行,应按业务风险圈定重点状态区域

数据来源与参考

  • ISTQB CTFL 4.0 大纲(状态迁移覆盖)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌