测试用例是按一定的顺序执行的与测试目标相关的测试活动的描述,是确定“怎样”测试。测试用例被看作是有效发现软件缺陷
的最小测试执行单元,也被视为软件的测试规格说明书。在测试工作中,测试用例的设计是非常重要的,是测试执行的正确性、有效性的基础。如何有效地设计测试用例,一直是测试人员所关注的问题;设计好测试用例,也是保证测试工作的最关键的因素之一。
设计测试用例,也分为白盒设计方法和黑盒设计方法。白盒设计方法又分为逻辑覆盖法和基本路径覆盖法,或者分为语句覆盖、判定覆盖、条件覆盖方法,而黑盒设计方法分为等价类划分法、边界值划分法、错误推测法、因果图法等。在实际测试用例设计过程中,不仅根据需要、场合单独使用这些方法,常常综合运用多个方法,使测试用例的设计更为有效。
1.判定-条件覆盖方法
判定-条件覆盖方法就是将两种白盒设计方法“判定覆盖”和“条件覆盖”结合起来的一种设计方法,它所设计的测试用例是判定覆盖的设计的测试用例和条件覆盖设计的设计的测试用例的交集,即设计足够精巧的测试用例,使得判断条件中的所有条件可能取值至少执行一次,同时,所有判断的可能结果也至少执行一次。
举个例子,源程序是:
Dim a,b as Integer
Dim c as Double
If (a > 0 and b > 0) Then
c = c/ a
End If
If (a>1 or c>1) Then
c=c+1
End If
c=b+c
则用两个测试用例(如表1)来覆盖了两个判定“P1=(a > 0 and b > 0)”和“P2 =(a>1 or c>1)”和四个条件“C1= a > 0”、“C2= b > 0”、“C3= a>1”和“C4= c>1”。
表1 判定-条件覆盖的测试用例
测试用例
具体取值条件
取值条件
判定条件
输入:a=2,b=1,c=6
输出:a=2,b=1,c=5
a>0,b>0,a>1,c>1
C1, C2, C3, C4 = True
P1, P2= True
输入:a=-1,b=-2,c=-3
输出:a=-1,b=-2,c=-5
a<=0,b<=0,a<=1,c<=1
C1, C2, C3, C4 = False
P1, P2= False
2.条件组合覆盖
条件组合覆盖的基本思想是:设计足够的测试用例,使得判断中每个条件的所有可能至少出现一次,并且每个判断本身的判定结果也至少出现一次,条件覆盖是简单地要求每个条件出现“真”与“假”两种结果,而条件组合覆盖是让这些结果的所有可能组合都至少出现一次。
按照条件组合覆盖的基本思想,针对8种组合条件,来设计所有能覆盖这些组合的设计用例,如表2所示。即使我们用四个测试用例覆盖了所有8种组合条件,但还不能保证所有的路径被执行,如这个例子少了一种路径,即P1= True, P2= false。
表2 条件组合覆盖的测试用例
测试用例
覆盖条件
覆盖组合
输入:a=2,b=1,c=6
输出:a=2,b=1,c=5
① C1=True, C2=True,
⑤ C3=True,C4=True
P1=True, P2=True
输入:a=2,b=-1,c=-2
输出:a=2,b=-1,c=-3
② C1=True, C2=false,
⑥ C3=True,C4=false
P1=false, P2=True
输入:a=-1,b=2,c=3
输出:a=-1,b=2,c=6
③ C1=false, C2=True,
⑦ C3=false,C4=True
P1=false, P2=True
输入:a=-1,b=-2,c=-3
输出:a=-1,b=-2,c=-5
④ C1=false, C2=false,
⑧ C3=false,C4=false
P1=false, P2=false
3. 等价类划分法和边界值分析法的组合
数据测试是功能测试的主要内容,或者说功能测试最主要手段之一就是借助数据的输入/输出来判断功能能否正常运行。所以在测试用例的黑盒设计方法中,最常用的方法是等价类划分法、边界值分析法。
等价类划分方法的基本思想是设想用一组有限的数据去代表近似无限的数据,就是基于对输入或输出数据的评估将数据划分为两个或更多子集(如有效的和无效的数据集),从每个等价类中选择一定的代表值进行测试,来代表整个数据集的输入/输出。
边界值分析法就是在某个变量范围的边界上,验证独立的输入/输出是否正确的测试方法。因为实践证明,程序往往在输入/输出数据边界更容易发生错误,所以检查边界情况的测试用例是比较高效的,可以更快地查出错误。
但是,仅仅测试边界数据是不够的,正常区域内的数据也是需要测试的,而且对于那些非法的、无效的数据也需要测试,以测试系统的容错性。所以,必须采用等价类划分方法来对边界值分析法的补充。从另一个方面看,要划分数据的等价类,首先是要确定数据边界,也就是找出数据等价类的边界。所以,在实际测试用例设计工作中,将边界值分析法和等价类划分方法结合起来,先用边界值分析法确定数据边界,再用等价类划分方法得到等价的数据类,从而有效地设计出精而少的测试用例。
让我们看一个简单的例子。假如一个输入数据是一个有限范围的整数,如学生成绩管理系统中的学生分数的输入(不计小数点)。这时,我们可以确定输入数据的最小值Nmin和最大值NMax,则有效的数据范围是Nmin≦N≦NMax ,如学生分数的输入范围是0≦N≦100,这个范围就是有效数据区域。除此之外,就是无效数据区域,即N <Nmin或N>NMax,如N <0或N>100。这时测试的数据从近乎无限的数据简化为5个输入数据,就是:
边界值两个:Nmin和NMax,如0和100
有效数据的等价输入值 Ni, 如75
无效数据的等价输入值两个:NLm1和NLm2, 如 -999和 999
为了得到更好的覆盖率,可以在最靠近边界取一些值,共四个,即:
Nmin +1,Nmin -1,NMax +1,NMax -1,如 -1,1,99,101
所以一个有效的测试数据集合是{-1,0,1,99,100,101};更完整的测试数据集合是{-999,-1,0,1,75,99,100,101,999}。
4.因果图法和组合分析法
因果图法和组合分析可以看作测试用例黑盒设计方法的综合方法。因果图法就是一种利用图解法分析输入的各种组合情况,生成判定表,从而设计测试用例的方法,它适合于检查程序输入条件的各种情况的组合。我们知道,即使各种单个输入条件可能出错的情况已经被排除了,但多个输入情况组合起来还是可能会出错。检验各种输入条件的组合并非一件很容易的事情,因为即使将所有的输入条件划分成等价类,它们之间的组合情况也相当多,因此,必须需要考虑采用一种适合于多种条件的组合,相应能产生多个动作的形式来进行测试用例的设计,这就是因果图法。
而组合分析是一种基于每对参数组合的测试技术,主要考虑参数之间的影响是主要的错误来源和大多数的错误起源于简单的参数组合。
5.功能图法
功能图法是一种黑盒和白盒混合用例设计方法,在功能图方法中,要用到逻辑覆盖和路径测试的概念和方法,这属于白盒设计方法;而确定输入数据序列以及相应的输出数据,则是黑盒设计方法。
我们知道,每个程序的功能通常由静态说明和动态说明组成,动态说明描述了输入数据的次序或者转移的次序;静态说明描述了输入条件和输出条件之间的对应关系。对于比较复杂的程序,由于大量的组合情况的存在,如果我们仅仅使用静态说明来组织测试往往是不够的,必须还要动态说明来补充。功能图法就是因此而产生的一种测试用例设计方法。
功能图法就是使用功能图形式化地表示程序地功能说明,并机械地生成功能图的测试用例。功能图模型由状态迁移图和逻辑功能模型组成。其中,状态迁移图用于表示输入数据序列以及相应的输出数据,由输入和当前的状态决定输出数据和后续状态; 逻辑功能模型用于表示再状态输入条件和输出条件之间的对应关系。逻辑功能模型只适合于描述静态说明,输出数据仅仅由输入数据决定。测试用例测试由测试中经过的一系列的状态以及在每个状态中必须依靠输入/输出数据满足的一对条件组成。