原文出处: http://www.51testing.com/html/43/n-832043.html
许多需求用状态机的方式来描述,状态机的测试主要关注在测试状态转移的正确性上面。对于一个有限状态机,通过测试验证其在给定的条件内是否能够产生需要的状态变化,有没有不可达的状态和非法的状态。可能不可能产生非法的状态转移等。对于被测系统,若我们可以抽象出它的若干个状态,以及这些状态之间的切换条件和切换路径,那么就可以从状态迁移路径覆盖的角度来设计用例对该系统进行测试。状态迁移法的目标是设计足够的用例达到对系统状态的覆盖、状态-条件组合的覆盖以及状态迁移路径的覆盖。
状态迁移法的思想是提供将多个状态的转换串联起来进行测试的思路。该方法适合测试各种状态的转换,而且这些状态转换的测试在实践中是易遗漏的。例如像手机、MP3等,都可以使用状态迁移法对使用状态的迁移(即用户使用场景的转换)进行测试。
状态迁移法的使用:
步骤一:根据需求提取全部状态;
步骤二:绘制状态迁移图;
步骤三:根据状态迁移图推导测试路径(状态迁移树);
步骤四:选取测试数据,构造测试用例。
例子:
一、需求: 路人甲打电话预订飞机票,要去某地。
二、分析:
1、测试需求分析:
a)客户向航空公司打电话预订机票。此时,机票信息处于“完成预订”状态;
b)顾客支付了机票款项后,机票信息变为“已支付”状态;
c)客户当天到达机场并使用×××换领登机牌后,机票信息变为“已出票”状态;
d)检票登机后,机票信息变为“已使用”状态;
e)在登机前,可以取消自己的订票信息,若已支付机票费用,则可以退回票款。
取消后,订票信息处于“已取消”状态;
由以上分析得出客户预订机票时订单的全部状态:
完成预定、已支付、已出票、已使用、已取消;
2、测试设计方法分析(状态迁移法):
a)状态迁移图:

b)测试路径(状态迁移树):
由状态迁移图得出的测试路径:
(1)A->B->E;
(2)A->B->C->E;
(3)A->B->C->D。
3、用例设计(输入部分):
(1)完成预定->已支付->已取消;
(2)完成预定->已支付->已出票->已取消;
(3)完成预定->已支付->已出票->已使用;
三、用例详细:
略