文档库 最新最全的文档下载
当前位置:文档库 › 测试用例设计方法之因果图法

测试用例设计方法之因果图法

测试用例设计方法之因果图法
测试用例设计方法之因果图法

测试用例设计方法之因果图法

(一)因果图法的来源

?大家熟悉的等价类划分法和边界值分析法,都是着重考虑输入条件,但未考虑输入条件之间的联系、相互组合等;

?但是,如考虑所输入条件之间的相互组合,会由于组合情况数目相当大,需要大量的测试用例;

?因果图法,是一种帮助人们系统地选择一组高效率测试用例的方法。(二)因果图法的特点

?考虑输入条件间的组合关系;

?考虑输出条件对输入条件的信赖关系,即因果关系;

?测试用例发现错误的效率高;

?能检查出功能说明中的某些不一致或遗漏;

?因果图方法最终生产的就是判定表,它适合于检查程序输入条件和各种组合情况。

(三)因果图法基本步骤

1.分割功能说明书

对于规模比较大的程序来说,由于输入条件的组合数太大,所以很难整体上使用一个因果图。我们可以把它划分为若干部分,然后分别对每个部分使用因果图。例如,测试编译程序时,可以把每个语句作为一个部分。

2.识别出“原因”和“结果”,并加以编号

所谓原因,是指输入条件或输入条件的等价类;而结果则是指输出条件或输出条件的等价类。每个原因或结果都对应于因果图中的一个节点。当原因或结果成立(或出现)时,相应的节点取值为1,否则为0。

例如,有一个饮料自动售货机(处理单价为5角钱)的控制处理软件,它的软件规格说明如下:

若投入5角钱的硬币,按下“橙汁”或“啤酒”的按钮,则相应的饮料就送出来。若投入1元钱的硬币,同样也是按“橙汁”或“啤酒”的按钮,则自动售货机在送出相应饮料的同时退回5角钱的硬币。

分析这一段说明,我们可以列出原因和结果。

原因如下:

?投入1元硬币;

?投入5角硬币;

?按下“橙汁”按钮;

?按下“啤酒”按钮

结果

?退还5角钱;

?送出“橙汁”饮料;

?送出“啤酒”饮料

3.根据功能说明书中规定的原因和结果之间的关系画出因果图

因果图的基本符号如图1所示:

1.因果图的基本符号

图中左边的节点表示原因,右边的节点表示结果。恒等、非、或、与的含义:

?恒等:若a=1,则b=1;若a=0,则b=0;

?非:若a=1,则b=0,若a=0,则b=1;

?或:若a=1或b=1或c=1,则d=1;若a= b= c=0,则d=0;

?与:若a= b= c=1,则d=1;若a=0或b=0或c=0,则d=0。

画因果图时,原因在左,结果在右,由上而下排列,并根据功能说明书中规定的原因和结果之间的关系,用上述基本符号连接起来。在因果图中还可以引入一些中间节点。

利用上面的例子,根据原因和结果,可以画出相对应的因果图,如下图所示:

投入1元硬币

投入5角硬币

按下“橙汁”按钮

按下“啤酒”按钮

退还

5角硬币

送出“啤酒”饮料

因果图

注意:在绘制因果图时,需要引入一些必要的表示中间状态的处理节点。 4. 根据功能说明在因果图中加上约束条件

由于语法或环境限制,有些原因与原因之间、原因与结果之间的组合情况不可能出现。为表明这些特殊情况,在因果图上用一些记号表明约束或限制条件。因果图的约束条件如图所示:

E

互斥

I

包含

O

唯一

R

要求

屏蔽

M

其中互斥、包含、唯一、要求时对原因的约束,屏蔽是对结果的约束。他们的含义如下:

? 互斥:表示不同时为1,即a ,b ,c 中至多只有一个1; ? 包含:表示至少有一个1,即a ,b ,c 中不同时为0; ? 唯一:表示a ,b ,c 中有且仅有一个1;

? 要求:表示若a=1,则b 必须为1。即不可能a=1且b=0; ? 屏蔽:表示若a=1,则b 必须为0

完善上面的因果图,添加必要的约束条件,如原因①和原因②不能同时发生,也即1元硬币和5角硬币不会同时被投入到自动售货机内;而原因③和原因④也不能同时发生,因为程序的规格说明书规定,在投入硬币后,只能按下“橙汁”或“啤酒”的按钮。添加约束条件的因果图如下图所示:

投入1元硬币投入5角硬币按下“橙汁按下“啤酒

退还5角硬币

送出“橙汁”饮料

送出“啤酒”饮料添加约束条件的因果图

E

5.根据因果图画出判定表

画判定表的方法一般比较简单,可以把所有原因作为输入条件,每一项原因(输入条件)安排为一行,而所有的输入条件的组合一一列出(真值为1,假值为0),对于每一种条件组合安排为一列,并把各个条件的取值情况分别添入判定表中对应的每一个单元格中。例如,如果因果图中的原因有4项,那么,判定表中的输入条件则共有4行,而列数则为24=16。确定好输入条件的取值之后,我们便可以很容易地根据判定表推算出各种结果的组合,也即输出,其中也包括中间节点的状态取值。

上述方法考虑了所有条件的所有组合情况,在输入条件比较多的情况下,可能会产生过多的条件组合,从而导致判定表的行数太多,过于复杂。然而在实际情况中,由于这些条件之间可能会存在约束条件,所以很多条件的组合是无效的,也就是说,它们在判定表中也完全是多余的。因此根据因果图画出判定表时,我们可以有意识地排除掉这些无效的条件组合,从而使判定表的列数大幅度减少。例如,根据图所示的因果图,可以画出如表所示的判定表。

6.为判定表的每一列设计一个测试用例

即为从因果图中导出的判定表中的每一列设计一个测试用例。

(注:可编辑下载,若有不当之处,请指正,谢谢!)

相关文档