《软件测试技术实战 设计、工具及管理》联载-8

简介: 《软件测试技术实战 设计、工具及管理》联载-8

2.3  运用状态转换图设计测试用例


基于状态转换软件测试设计是软件测试设计的另一种方法,这种方法具有以下4个特征。


1)软件测试对象的输出和行为方式不仅受当前输入数据的影响,同时还与软件测试对象之前的执行情况、之前的事件或以前的输入数据等有关。

2)通过引入状态图(State Diagram)来描述软件测试对象和软件测试数据、对象状态之间的关系。

3)状态图中的各个状态是通过不同的事件驱动的,如函数的调用。

4)基于状态图开展的测试称之为状态转换测试。


状态图转化法最早运用于嵌入式测试用例设计。在嵌入式软件中,系统通过某种行为驱动能够从一种状态改变到另一种状态。图2-4是内存状态转换图。


image.png

2-4  内存状态转换图


2.3.1  从状态转换图到状态转换树

许多书中都以图2-4作为案例,进行状态转换法测试用例设计的介绍。但是,笔者认为这个图比较麻烦,不利于初学者掌握。下面以视频播放软件作为案例,来给大家介绍一个比较简单易懂的状态转化图,如图2-5所示。

image.png

2-5  视频播放软件


案例2-10:视频播放机。

这个软件的功能是:打开视频播放机,系统处于“开机”状态,单击【运行】键,系统处于“运行”状态;单击【停机】键,播放结束,系统处于停机状态;在“运行”状态单击【快进】键,进入“快进”状态,【快进】键最多可以按4次,分别为2倍数、4倍数、8倍数和16倍数前进;快进状态单击【停止】键返回“运行”状态,停机状态单击【播放】键,重新进入“运行”状态。


状态转换图转为状态转换树的方法是:

1)状态树的节点描述状态图的状态,状态树的枝干描述状态图的事件。

2)转换树的根节点为状态图的初始状态,转换树的终节点为叶节点。

3)转换树的每个节点,在状态图中如有直接后续状态,则添加一个枝干和节点(不同的事件应有不同的枝干和节点),直到出现如下情况,可将此节点作为叶节点:

  •  从根节点到新添加的节点的路径上已经出现过相同状态。


或者:

  •  新添加节点是状态图的一个结束状态,且不需要考虑其他状态转换。

来源:“Testing Software Design Modeled byFinite-State Machines, IEEE Transactions on Software engineering, vol.4, no 3, may 1978, p178-187

状态转换软件测试覆盖率。

1)覆盖软件测试对象所有的状态。

2)覆盖软件测试对象所有的事件。

3)覆盖软件测试对象所有的状态转换至少一次。

4)覆盖软件测试对象所有的状态、事件和状态转换。

为了能够得到比较高的状态转换软件测试覆盖率,再把状态图转换成状态树,然后再设计测试用例。下面讨论视频播放软件状态图是如何转换成状态树的。

2-6为该软件的0-switch转换图。有了这棵树,就可以设计测试用例了。从树的根节点到所有叶子节点就是一个测试用例,这样就得到4个测试用例,分别为。


image.png

2-6  视频播放软件状态转换图(0-switch

1)开机->运行->快进->运行。

2)开机->运行->快进->快进。

3)开机->运行->停机->运行。

4)开机->运行->停机。

上面这棵树叫作0-switch展开,也就是最基本的展开法。为了得到更多的测试用例,可以把这棵树的非结束的叶子节点再进行一次展开,也就是1-switch展开,如图2-7所示。

这样,可以得到7个测试用例:

1)开机->运行->快进->运行->快进;[J1]

2)开机->运行->快进->运行->停机;

3)开机->运行->快进->快进->运行;

4)开机->运行->快进->快进->快进;


image.png

2-7  视频播放软件状态转换图(1-switch


5)开机>运行->停机;

6)开机>运行->停机->运行->停机;

7)开机>运行->停机->运行->快进。

按照这种方法可以设计2-switch3-switch……但是,在实际工作中,没有特殊情况,做到1-switch就已经足够了。


顾翔凡言:

敏捷具有适用性,即使用了敏捷,也不要做成假敏捷,掌握敏捷的真谛。

目录
相关文章
|
敏捷开发 SQL 测试技术
《软件测试技术实战 设计、工具及管理》联载-19
《软件测试技术实战 设计、工具及管理》联载-19
76 0
|
SQL 前端开发 关系型数据库
《软件测试技术实战 设计、工具及管理》联载-4
《软件测试技术实战 设计、工具及管理》联载-4
47 0
《软件测试技术实战 设计、工具及管理》联载-4
|
测试技术
《软件测试技术实战 设计、工具及管理》联载-7
《软件测试技术实战 设计、工具及管理》联载-7
112 0
《软件测试技术实战 设计、工具及管理》联载-7
|
监控 Java 测试技术
《软件测试技术实战 设计、工具及管理》联载-40
《软件测试技术实战 设计、工具及管理》联载-40
82 0
《软件测试技术实战 设计、工具及管理》联载-40
|
敏捷开发 测试技术 程序员
软件测试技术实战 设计、工具及管理》联载-54
软件测试技术实战 设计、工具及管理》联载-54
65 0
|
敏捷开发 Web App开发 算法
《软件测试技术实战 设计、工具及管理》联载-41
《软件测试技术实战 设计、工具及管理》联载-41
91 0
《软件测试技术实战 设计、工具及管理》联载-41
|
SQL 编解码 前端开发
《软件测试技术实战 设计、工具及管理》联载-5
《软件测试技术实战 设计、工具及管理》联载-5
129 0
《软件测试技术实战 设计、工具及管理》联载-5
|
监控 Oracle 关系型数据库
软件测试技术实战 设计、工具及管理》联载-34
软件测试技术实战 设计、工具及管理》联载-34
59 0
软件测试技术实战 设计、工具及管理》联载-34
|
监控 测试技术 数据库
《软件测试技术实战 设计、工具及管理》联载-49
《软件测试技术实战 设计、工具及管理》联载-49
86 0
|
SQL 安全 Oracle
软件测试技术实战 设计、工具及管理》联载-53
软件测试技术实战 设计、工具及管理》联载-53
65 0