构建状态模型的步骤
从需求与接口梳理状态清单、事件与守卫条件,绘制状态迁移图或迁移表,标注非法迁移与超时迁移,再据此生成用例。状态模型是评审材料:与产品、开发确认后再使用,能减少测试与实现对状态语义理解不一致造成的漏测。
基本信息
| 输入 | 需求、接口契约、代码里的状态枚举 |
|---|---|
| 产出 | 状态清单、迁移表、迁移图 |
| 关键元素 | 状态、事件、守卫条件、动作、非法迁移 |
| 超时迁移 | 定时器触发的迁移单独标注 |
| 评审要求 | 与产品、开发确认后再生成用例 |
| 覆盖策略 | 每状态每事件至少一条用例,另加非法迁移用例 |
| 建模粒度 | 状态定义到行为可区分的最小单位 |
| 显式列出 | 初始态、终态、错误态不省略 |
迁移表模板
迁移表模板
| 当前状态 | 事件 | 守卫条件 | 新状态 |
| 待支付 | 支付成功 | 金额匹配 | 已支付 |
| 待支付 | 支付成功 | 金额不匹配 | 待支付(告警) |
| 待支付 | 超时 | 未支付 | 已关闭 |
# 守卫条件写进单元格,避免事件名相同结果不同典型使用场景
- 订单与工单:梳理主流程与取消、退款、关闭分支。
- 设备管理:在线、离线、升级等状态的迁移验证。
- 权限生命周期:申请、生效、冻结、回收的迁移测试。
- 用例评审:用迁移表核对是否缺状态或事件。
- 缺陷定位:判断缺陷落在哪条迁移上,快速定位代码。
- 新人学习:用模型图理解业务规则的边界与例外。
- 接口测试:按迁移表生成请求序列,覆盖守卫条件拒绝路径。
模型未与实现对齐,用例与代码状态枚举对不上;确认环节不能省。
忽略超时与定时器触发的迁移,是状态类测试最常见的漏测来源。
非法迁移要单独设计用例:在错误状态执行操作应被拒绝且无数据副作用。
先主链路再补分支:一次画全容易陷入细节,评审节奏也拖长。