文档库 最新最全的文档下载
当前位置:文档库 › [黑盒测试基本方法]状态迁移法

[黑盒测试基本方法]状态迁移法

[黑盒测试基本方法]状态迁移法
[黑盒测试基本方法]状态迁移法

状态迁移法

一、概念

1.什么是状态迁移法

在定义状态迁移法之前,先介绍一下程序的功能说明。一个程序的功能说明通常由动态说明和静态说明组成。动态说明描述了输入数据的次序或转移的次序。静态说明描述了输入条件与输出条件之间的对应关系。对于较复杂的程序,由于存在大量的组合情况,因此,仅用静态说明组成的规格说明对于测试来说往往是不够的,必须用动态说明来补充功能说明。

功能图方法是用功能图形式化地表示程序的功能说明,并机械地生成功能图的测试用例。功能图模型由状态迁移图和逻辑功能模型构成:

(1)状态迁移图用于表示输入数据序列以及相应的输出数据。用状态和迁移

来描述一个状态指出数据输入的位置(或时间),而迁移则指明状态的改

变,同时要依靠判定表或因果图表示的逻辑功能。在状态迁移图中,由

输入数据和当前状态决定输出数据和后续状态。

(2)逻辑功能模型用于表示在状态中输入条件和输出条件之间的对应关系。

逻辑功能模型只适合于描述静态说明,输出数据仅由输入数据决定。

(3)测试用例则是由测试中经过的一系列状态和在每个状态中必须依靠输入

/输出数据满足的一对条件组成。

如何从状态迁移图中选取用例?我们采用节点代替状态,弧线代替迁移,那么状态迁移图就转换成为一个程序的控制流程图,问题也就随之转换为路径测试的问题了。所以,功能图方法其实是是一种黑盒/白盒混合使用的用例设计方法。

比如在功能图方法中,用到的逻辑覆盖与路径测试的概念和方法,就是属于白盒测试方法中的容。(逻辑覆盖是以程序部的逻辑结构为基础的测试用例设计方法,该方法要求测试人员对程序的逻辑结构有清楚的了解。由于覆盖测试的目标不同,逻辑覆盖可分为:语句覆盖,判定覆盖,判定-条件覆盖,条件组合覆盖及路径覆盖。)

注意:测试人员应当注意区分黑盒测试中系统功能或者系统水平上的逻辑覆盖与路径,和白盒测试中所指的程序部的逻辑覆盖的区别。

状态迁移法的目标是设计足够的用例达到对系统状态的覆盖、状态——条件组合的覆盖以及状态迁移路径的覆盖。

测试用例的生成规则:为了把状态迁移(测试路径)的测试用例与逻辑模型(局部测试用例)的测试用例组合起来,从功能图生成实用的测试用例,须在一个结构化的状态迁移(SST)中,定义三种形式的循环——顺序、选择和重复。然后按照以下四个过程从功能图中生成测试用例。

1. 生成局部测试用例。在每个状态中,从因果图生成局部测试用例。局部测试用例由原因值(输入数据)组合与对应的结果值(输出数据或状态)构成。

2. 测试路径生成。利用上面的规则(顺序、选择、重复)生成从初始状态到最后状态的测试路径。

3. 测试用例合成。合成测试路径与功能图中每个状态中的局部测试用例,结果是初始状态到最后状态的一个状态序列,以及每个状态中输入数据与对应输出数据的组合。

4. 测试用例的合成算法。采用条件构造树。

二、操作步骤及实例分析

借鉴实例(?)——手机中MP3的播放功能。

在手机中使用MP3,R键功能为倒退,P键功能为播放,F键功能为快进,RC键功能为录音,S键功能为暂停;其中没有选择MP3曲目时不能按任何键,并且当MP3曲目在起点时不能按R键,当MP3曲目在末端时不能按P、F键;MP3只有在暂停状态下才可以录音。

本工程方法具体的实施步骤如下:

步骤1:绘制状态迁移图

图:手机中MP3的播放功能——状态迁移图

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

当前状态事件下一状态输出

P 播放

中途停止

F 前进

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

- a 从初始状态节点(可以有多个)出发,依据广度优先原则遍历状态迁移图,遍历到结束状态节点或已经遍历过的节点为一次遍历结束,得到一条测试路

径。

- b 选取需要测试的路径,达到规定的路径覆盖率。这里每条路经对应一个或几个测试用例规格。其中“覆盖路径”指该用例覆盖的路径的分支序列;“覆盖状态——条件组合”指该分支序列上各状态点和条件的组合。

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

图:手机中MP3的播放功能——状态转换树

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

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

如果有足够的时间,就应该测试软件的每一个分支——不仅是连接两个状态的每一条线,而是每一种线路组合。但是覆盖所有分支是不可能的,正如对数据等价分配一样,大量的可能性也需要减少可操作的测试用例数目。我们可以通过以下5种方法减少测试用例:

1.每种状态至少访问一次。无论用什么方法,必须测试每一种状态。

2.测试看起来最常见最普遍的状态转换。我们可以根据审查产品说明书时

分析收集到的信息确定某些用户情况可能比其他更常见。

3.测试状态之间最不常用的分支。这些分支是最容易被产品设计者和程序

员忽视的。

4.测试所有错误状态及其返回值。错误没有得到正确处理、错误提示信息

不正确、修复错误时未正确恢复软件等情况是常有的。

5.利用工具自动执行状态转换测试。

步骤5:其他考虑

运用其他测试方法,如错误推测法等增加异常测试等非正常性测试用例。

三、实际应用

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

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

2.编辑功能,如修改字体颜色、大小、格式等等。

四、总结

到目前为止,我们测试的是数据,包括数字、文字、软件输入和输出。软件测试的另一方面是通过不同的状态验证程序的逻辑流程。软件状态是指软件当前所处的情况或者模式,例如启动Windows画图程序,程序处于铅笔绘画状态,我们可以通过选中喷枪工具改变软件的状态,使它处于喷涂状态,也可以通过选

择其他工具、菜单项、颜色等使软件的代码进入某一个流程分支,触发一些数据位。设置某些变量,读取某些数据,转入一个新的状态。软件测试人员必须测试程序的这些状态及其转换。

如同穷举数据测试是不可能的一样。除了极其简单的程序之外,基本上不可能覆盖所有程序分支,达到所有状态。目前软件越来越复杂,特别是为了迎合日益丰富的用户界面,提供了太多选择和选项,致使程序分支爆炸式增长:与著名的流动推销员问题类似:给定城市数目,以及任何两个城市之间的距离,设法找出访问到每一个城市并返回起点的最短路线。如果只有5个城市,则可以快速计算出共有120条不同的路线。走遍所有路线,从中找到最短的路线并不是太难,花费不了太长时间。如果城市数目增加到成百上千(或者在测试用例中增加成百上千种状态),就形成一个难以解决的问题。

要减少测试的风险,尽量全面测试程序的状态及其转换流程,可以首先根据产品说明书建立一个状态转换图,用来描述系统设计和指导我们进行测试,然后运用等价分配技术选择要测试的状态和分支,这将是十分有效的方法。

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

综上所述,状态转换图应包括以下条目:

1.软件可能进入的每一种独立状态。如果不能断定是否为独立状态,先把

它设置为是。如果以后发现不是,可以随时将其剔除。

2.从一种状态转入另一种状态所需的输入和条件。比如,可能是按键、菜

相关文档