一、状态迁移图法的定义
许多需求用状态机的方式来描述,状态机的测试主要关注在测试状态转移的正确性上面,。对于一个有限状态机,通过测试验证其在给定的条件内是否能够产生需要的状态变化,有没有不可达的状态和非法的状态,可能不可能产生非法的状态迁移等
通过构造能导致状态迁移的事件来测试状态之间的转换,常用于协议测试
用这种方法可以设计逆向的测试用例,如状态和事件的非法组合
明确点:
1、针对有限状态机的测试方法
2、给一个触发条件
3、常应用于WEb页面转换、自动化测试、通信协议测试等
状态机:指定系统所有可能的状态以及状态相互跳转的条件
状态:指对象在其生命周期中的一种状态,处于某一个特定状态中的对象必然会满足的某些条件
触发条件:引起状态的变迁,促使状态从一种状态转换到另一种状态(动作、行为)
二、状态迁移图法设计用例步骤
1、分析需求规格说明书,找出状态和触发条件(分析状态条件之间有哪些关系)
2、画出状态迁移图(设定一个初始状态、初始状态是相对而言的,状态用圆圈表示,条件用带有箭头的线段表示)3、通过状态图画出状态--事件表(四列,上一状态,条件,下一状态,表现的行为动作信息)
4、从状态转换树推导出测试路径
5、根据测试路径编写合法测试用例
6、编写非法测试用例
三、状态迁移图法的实用
例1:某打印机功能如下:
打印机初始处于就绪的状态下,可以接收打印的任务,进入打印状态,开始打印;
在打印的过程中,如果打印机出现故障,打印机将处于故障状态,等待修复故障;故障修复后,打印机恢复打印状态,继续打印原来的文档;
在打印过程中,如果纸张用完,打印机将暂停打印,处于缺纸状态,当放入印纸后,打印机会自动检测,恢复打印状态,继续开始打印;
打印任务完成,打印机恢复就绪状态
步骤:1、分析需求片段,找出所有状态以及状态之间的跳转条件
状态:就绪,打印,故障,缺纸
跳转条件:打印指令,出现故障,故障修复,缺纸 ,放入纸张,打印完毕
2、设定初始状态,画出状态迁移图
3、生成状态时间表
上一状态 | 跳转条件 | 下一状态 | 表现 |
就绪状态 | 打印指令 | 打印状态 | 打印灯亮 |
打印状态 | 打印完毕 | 就绪状态 | 就绪灯亮 |
打印状态 | 缺纸 | 缺纸状态 | 缺纸灯亮 |
打印状态 | 出现故障 | 故障状态 | 故障灯亮 |
故障状态 | 故障恢复 | 打印状态 | 打印灯亮 |
缺纸状态 | 放入纸张 | 打印状态 | 打印灯亮 |
4、生成状态转换树
5、从状态树推导出测试路径:
就绪---打印---缺纸---打印
就绪---打印---故障---打印
就绪---打印---就绪
6、根据测试路径编写测试用例
7、添加非法的测试用例
比如直接就绪状态----故障状态或者 就绪----缺纸等
例2:电梯是典型的利用状态迁移法测试
状态:停在一楼、上升、下降、空闲、直接去一楼
指令:楼层、指定层>空闲层,指定层=空闲层,指定层<当前层
步骤:
1、划分需求子片段,找出状态和指令
2、设定初始状态,画出状态迁移图
3、根据状态迁移图,生成状态时间表
状态 | 条件 | 下一状态 | 表现 |
停在一楼 | 楼层=1层 | 停在一楼 | 停在一楼 |
停在一楼 | 楼层>1层 | 上升 | 上升 |
上升状态 | 到达指定楼层 | 空闲 | 空闲 |
空闲状态 | 指定楼层>当前楼层 | 上升 | 上升 |
空闲状态 | 指定楼层=当前楼层 | 空闲状态 | 空闲 |
空闲状态 | 指定楼层<</SPAN>当前楼层 | 下降 | 下降 |
空闲状态 | 空闲五分钟 | 停在一楼 | 停在一楼 |
下降状态 | 到达指定层 | 空闲状态 | 空闲 |
4、生成状态转换树
5、从状态树推导出测试路径
停在一层----停在一层
停在一层----上升-----空闲----上升
停在一层----上升-----空闲----空闲
停在一层----上升-----空闲----下降-----空闲
停在一层----上升-----空闲-----停在一层
6、根据测试路径编写测试用例
7、添加非法的测试路径