27
08

测试用例设计(六)

对于被测系统,如果我们可以抽象出它的若干个状态、以及这些状态之间的切换条件和切换路径,那么我们可以从状态迁移路径覆盖的角度来设计用例对该系统进行测试。状态迁移法的目标时设计足够的用例达到对系统状态的覆盖、状态-条件组合的覆盖以及状态迁移路径的覆盖。

本周分享《测试用例设计》实验内容,由于知识含量较多,现在拆分为多篇分享,今日是第一篇。

回顾前期内容,请点击

教材连载:测试用例设计(五)

教材连载:测试用例设计(四)

教材连载:测试用例设计(三)

教材连载:测试用例设计(二)

教材连载:测试用例设计(一)



 实 验 简 介 



本实验主要讲解测试用例设计方法,包括等价类,边界值,正交试验表,判定表,流程分析法,状态迁移法,错误猜测等。




 实 验 目 的 



(1)、掌握测试用例设计方法,以便设计高效的测试用例。



 实 验 流 程 



6. 状态迁移法


  • 什么是状态迁移法


许多需求用状态机的方式来描述,状态机的测试主要关注在测试状态转移的正确性上面。对于一个有限状态机,通过测试验证其在给定的条件内是否能够产生需要的状态变化,有没有不可达的状态和非法的状态,可能不可能产生非法的状态转移等。对于被测系统,如果我们可以抽象出它的若干个状态、以及这些状态之间的切换条件和切换路径,那么我们可以从状态迁移路径覆盖的角度来设计用例对该系统进行测试。状态迁移法的目标时设计足够的用例达到对系统状态的覆盖、状态-条件组合的覆盖以及状态迁移路径的覆盖。


  • 如何使用状态迁移法


步骤1:绘制状态迁移图

(1). 根据特性测试需求分析和SRS等参考文档,针对每项测试子项的测试规格,分析有哪些系统状态,这些状态之间的迁移关系;

(2). 用圆圈代表状态、箭头代表状态迁移方向,绘制状态迁移图,在箭头旁标识该状态迁移的条件。如下图:


20200428_105453_807.png

 

步骤2:定义状态-条件表

析每个状态下,输入不同条件导致的输出和状态迁移,将其列在下表:

20200428_105506_870.png


步骤3:根据状态迁移图推导测试路径

(1). 从初始状态节点(可以有多个)出发,依据广度优先原则遍历状态迁移图,遍历到结束状态节点或已遍历过的节点为一次遍历结束,得到一条测试路径。具体算法可以参考有向图的搜索算法;

(2). 选取需要测试的路径,达到规定的路径覆盖率。这里每条路径对应一个或几个测试用例规格。将测试用例规格填入下表:


20200428_105513_935.png


其中“覆盖路径”指该用例覆盖的路径的分支序列;“覆盖的状态-条件组合”指该分支序列上各状态点和条件的组合(可不填)


为了更好的进行遍历,可以借助于状态转换树。使用状态转换树首先要确定一个根节点,比如上图中的“起点停止”状态,然后从该状态往后延伸,有三个方向,可分别转换到播放状态、前进状态、录音状态。然后再分别从这三个状态往后延伸,直到所有的状态转换都包含到该状态转换树中。从根节点到最后的叶子节点就是需要测试的路径。

20200428_105620_274.png

 
步骤4:选取测试数据,构造测试用例

对选定的每条需要测试的路径,结合等价类、边界值分析,确定每个状态节点的输入,沿着该路径通过表格将各种测试数据的输入输出对应起来,这样就完成了测试用例的设计。编写用例填入下表:

20200428_105635_804.png


  • 案例1


针对栈进行测试,用状态迁移图法设计测试用例。

一、 状态迁移图如下:


20200428_105644_248.png


栈有3个状态:空、半满、满,这3个状态在事件push、pop下会相互转换,该状态迁移图就表现出了这些转换关系。


二、 状态事件表如下:


20200428_105702_353.png

同状态迁移图一样,状态事件表也表现出了所有转换关系

 

三、 状态转换树如下:


20200428_105714_153.png


根据状态转换树可得到以下测试路径:

(1). 空->空

(2). 空->半满->空

(3). 空->半满->半满

(4). 空->半满->满->半满

(5). 空->半满->满->满

 

四、 针对每条路径设计测试用例

(1). 针对路径1可设计以下测试用例:新建一个长度为2的栈,调用pop方法,预期输出是栈的状态仍然是空,且抛出异常。

(2). 针对路径2可设计以下测试用例:新建一个长度为2的栈,调用push方法,预期输出使栈的状态变成半满;再调用pop方法,预期输出为栈的状态变成空。

(3). 其它路径可设计类似的用例。


  • 案例2


某电话系统,在不同的事件驱动下,可以进入不同的状态,状态定义如下表:

20200428_105737_270.png


状态迁移图如下:


20200428_105747_158.png


无论是状态迁移图还是状态事件表,都是为了展示需要测试的状态转换,因此只要能写出所有的状态转换,画状态迁移图和状态事件表并不是必须的。直接写状态转换树即可。


一、 状态转换树如下:


20200428_105758_385.png


状态转换树可以得到13条测试路径:

(1). 空闲->响拨号音->超出时间->空闲

(2). 空闲->响拨号音->拨号中->空闲

(3). 空闲->响拨号音->拨号中->播放记录信息->空闲

(4). 空闲->响拨号音->拨号中->超出时间

(5). 空闲->响拨号音->拨号中->拨号中

(6). 空闲->响拨号音->拨号中->连接中->空闲

(7). 空闲->响拨号音->拨号中->连接中->铃响->连接中->断连->播放记录信息

(8). 空闲->响拨号音->拨号中->连接中->铃响->连接中->断连->空闲

(9). 空闲->响拨号音->拨号中->连接中->铃响->连接中->空闲

(10). 空闲->响拨号音->拨号中->连接中->铃响->空闲

(11). 空闲->响拨号音->拨号中->连接中->忙音->空闲

(12). 空闲->响拨号音->拨号中->连接中->快速忙音->空闲

(13). 空闲->响拨号音->空闲

 

二、 针对每条测试路径设计测试用例

针对每条路径至少设计一个测试用例。

 

  • 实际应用

状态迁移图法的核心在于通过状态转换树将不同状态之间的转换串起来进行测试,而这里所说的转换也可以看成是修改、改变,因此凡是设计到改变的地方都可以考虑使用状态迁移图法。状态迁移图法主要适用于以下两种情况:

(1). 播放器、手机等存在工作状态不断改变的系统。

(2). 编辑功能,比如修改字体颜色,修改字体大小等等。


前者前面的案例中已经有介绍,下面看看后一种情况。现在字体颜色有红、蓝、黄三种颜色,如果要测试这几种颜色之间的转换则可以考虑采用状态迁移图法,其中的颜色作为状态。


状态转换树如下:


20200428_105810_816.png


用4个测试用例来进行测试即可。

 

  • 总结


状态迁移图法实际上是测试了各种状态的转换,这些状态转换的测试在实际工作中是容易遗漏的。只要能将这些状态的转换测试到,是不是采用状态迁移图法并不重要,因为状态迁移图法只不过是给出一种将多个状态的转换串起来进行测试的思路罢了。




为了答谢大家对蜗牛学院的支持,蜗牛学院将会定期对大家免费发放干货,敬请关注蜗牛学院的官方微信。

20190320_095757_834.jpg









版权所有,转载本站文章请注明出处:蜗牛学苑, https://www.woniuxy.cn/article/414