软件测试用例设计从零开始

因果图(Cause-Effect Graphing)提供了一个把规格转化为判定表的系统化方法,从该图中可以产生测试数据。其中,原因表示输入条件,结果是对输入执行一系列计算后得到的输出。 因果图方法最终生成的是判定表。它适合于检查软件输入条件的各种组合情况如果在测试时必须考虑输入条件的各种组合,可使用一种适合于描述对于多种条件的组合,相应产生多个动作的形式来设计测试用例,这就需要利用因果图。 

首先来看下因果中用到的符号和约束含义:

因果图符号

在因果图中,我们用“0  表示“不出现”,用“1”来表示“出现”,用C1、C2、C3表示原因,E1表示结果。那么: 

恒等”:C1为1,则E1为1否则C1为0,E1也为0

 C1为1,则E1为0否则C1为0,则E1为1
: C1、C2、C3一个以上为1,则E1为1;C1、C2、C3都为0,则E1为0。

 C1、C2、C3都为1,则E1为1;C1、C2、C3一个以上为0,则E1为0。 

约束(异)— 排斥,即ab不能同时为1
约束(或)— 包容,a不能同时为0
约束(惟一)— 选一,ab中仅有一个为1
约束(要求)— 需要,a1时,b必须为1

约束(强制)— 屏蔽,若a1时,则b强制为0 

在前面我们知道因果图的使用范围,符号及约束说明后,下面介绍一下因果图判定表生成测试用例的基本步骤:

(1)分析软件规格说明描述中,哪些是原因 (即输入条件或输入条件的等价类),哪些是结果 (即输出条件),并给每个原因和结果赋予一个标识符。 

(2)分析软件规格说明描述中的语义,找出原因与结果之间,原因与原因之间对应的是什么关系? 根据这些关系,画出因果图。 

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

(4)把因果图转换成判定表。 

(5)把判定表的每一列拿出来作为依据,设计测试用例。 

下面根据上面的步骤,还是用网上自动售货机购买啤酒和橙汁举例说明测试步骤。具体的需求是:有一个处理单价为5角钱的饮料自动售货机软件若投入5角钱或1元钱的硬币,押下〖橙汁〗或〖啤酒〗的按钮,则相应的饮料就送出来。若售货机没有零钱找,则一个显示〖零钱找完〗的红灯亮,这时在投入1元硬币并押下按钮后,饮料不送出来而且1元硬币也退出来;若有零钱找,则显示〖零钱找完〗的红灯灭,在送出饮料的同时退还5角硬币。” 

首先分析这一段说明,列出原因和结果

分析原因(条件)

1.售货机有零钱找

2.投入1元硬币 

3. 投入5角硬币

4. 押下橙汁按钮

5. 押下啤酒按钮

建立中间结点,表示处理中间状态
11. 投入1元硬币且押下饮料按钮
12. 押下〖橙汁〗或〖啤酒〗的按钮
13. 应当找5角零钱并且售货机有零钱找
14. 钱已付清 

 分析结果: 

21. 售货机〖零钱找完〗灯亮 

22. 退还1元硬币 

23. 退还5角硬币

24. 送出橙汁饮料

25. 送出啤酒饮料 

(2) 画出因果图。所有原因结点列在左边,所有结果结点列在右边

(3) 由于 2 与 3 ,4 与 5 不能同时发生,分别加上约束条件E

(4) 生成完整的因果图

(5) 转换成判定表,并设计测试用例。

上面实例的因果图为:

生成因果图

转为为判定表(判定表是一个表格,分为四个部分,其左部是条件或数组元素的名称,右上部是所有条件的组合,左下部是处理中活动的名称,右下部标明条件组合和相应的活动的对应关系)为:

生成判定表

判定表说明:

  • 网上提供的判定表有误,如果你看过,仔细点肯定能发现。上表为我修改后的正确判定表。
  • 上面有5个条件,则共有25次方种组合。
  • 注意利用二分法把所有可能组合的情况列出来,请仔细观察上面1和0的组合规律。
  • 判定表中灰色表示的是不可能出现的情况。

以上判定表已经出来了,那相信你可以根据它很好的编写测试用例了。

4、场景分析法

当软件中用户操作步骤较多,而用户的不同操作导致程序的不同处理结果,因果图/判定表法就不能有效进行用例设计。这时可以用到场景法,即基于用户对事件的触发,对事件流进行分析。场景法包括了基本流描述用户操作的成功场景;备选流描述用户操作的其它可能结果,常常是非期望结果。所以我们的用例场景应该是描述开始到结束的所有基本流和备选流。

场景分析流图

5、错误猜想法

人们也可以靠经验和直觉推测程序中可能存在的各种错误,从而针对性地编写检查这些错误的例子这就是错误猜想法。 错误猜想法的基本想法是列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据它们选择测试用例。错误猜想法只能作为测试设计的补充而不能单独用来设计测试用例,否则可能会造成测试的不充分。

要做好错误猜想法,必须要有较深的测试经验积累,较强的第六感,对问题的敏锐性、以及直觉性,就如侦探判案,根据经验做大胆的假设,最后去求证线索。

四、测试用例设计方法的选择

测试用例设计方法繁多,除了上面提到的常用用例设计方法外,还有状态分解法、流程分析法、正交实验法、输入域测试法、输出域覆盖法等。而每个公司因为所测项目业务不同,情况不同,需要选择不同的用例设计方法集。

在这里我要强调一点,测试用例应该带入自己的思想,这样能使你在做测试时有一个清晰的思路,也能让别人更清楚你用例设计的思路。这样在进行用例评审时也不用一一做检查,只要大家了解你的测试用例设计思路,那评审时的主要工作就只检查你是否有遗漏测试点。

喜欢 | 26 不喜欢 | 2