黑盒测试和白盒测试


黑盒测试又称为数据驱动测试,它是基于程序规格说明书作为依据进行设计测试用例,目的是为了找出程序不符合规格说明书的地方。

白盒测试又称为逻辑驱动测试,它是基于程序设计的内部逻辑结构进行设计测试用例,目的是为了测试用例执行的程度或者覆盖源代码的程度。

黑盒测试和白盒测试的区别

黑盒测试的优点:

不需要了解源代码

对于大型项目来说,黑盒测试的效率比白盒测试要高

有助于发现跟程序规格说明书不一致的地方

测试用例可以在规格说明书完成之后立马就设计

黑盒测试的缺点:

有时候不能发现程序内部的逻辑错误

没有清晰的和简明的规格,测试用例很难被设计

白盒测试的优点:

可以检测到程序的每条分支和语句

可以揭示程序内部存在的错误

对代码的测试较为彻底

白盒测试的缺点:

投入大,成本高

不验证规格的错误

对于一些边界条件和遗漏的路径不容易发现错误

黑盒测试的方法:

等价类划分、边界值分析、因果图分析、错误猜测

白盒测试的方法:

语句覆盖、分支覆盖、条件覆盖、分支/条件覆盖、条件组合覆盖、路径覆盖。

黑盒测试方法之等价类划分

步骤:确定等价类,生成测试用例

例如,输入条件规定了一个取值范围1~999.则可以设计一个有效等价类1<数量<999,两个无效等价类<1>999.

 注意:一个测试用例只能包含一个无效等价类。

黑盒测试方法之边界值分析

由长期的测试工作经验得知,大量的错误是发生在输入或输出的边界上。因此针对各种边界情况设计测试用例,可以查出更多的错误。

编写测试用例的步骤:

(1) 根据被测对象的输入(或输出)要求确定边界值。

(2) 选取等于、刚刚大于、刚刚小于边界的值作为测试数据。

注:基本思想是在最小值(min)、略高于最小值(min+)、正常值(nom)、略低于最大值(max-)和最大值(max)等处取值。

一般边界值

仅考虑有效区间单个变量边界值(一般边界值):用最小值、略低于最小值、正常值、略低于最大值和最大值。如果被测变量个数为n,则测试用例个数为4n+1

等价类划分和边界值分析之间的区别:

等价划分:是指分步骤地把过多(无限)的测试案例减小到同样有效的小范围的过程。在寻找等价类时,想办法把软件的相似输入、输出、操作分成组。等价区间的划分没有一定的标准,只要足以覆盖测试对象就行了。这是一种用例设计的思想.

边界条件是指软件计划的操作界限所在的边缘条件.提出边界条件时,一定要测试临近边界的合法数据,即测试最后一个可能合法的数据,以及刚超过边界的非法数据。比如,int 型在32位机中,绝对是有数据范围的,那么就需要考虑这个maxmin的用例.

边界值分析与等价类划分的重要区别在于,边界值分析考察正处于等价划分边界或在边界附近的状态。

举个例子,测试参数输入,要求输入“1~99”参数为合法;

那等价类可以这么分:

1、按位数不同来分:输入空、个位数、十位数、百位数,测试了空、111101,就不用测222102了,因为“个十百”位数都是等价的,属于同一类型;

2、按长度不同来分:如11.0,测过了就不用管2.0或者1.0001之类的了,这里的等价区间就是有没有小数点;

3、按输入类型来分:数字、字母、符号等等;

而边界值:

1就是最小边界,99就是最大边界,这两个是合法边界的极限,必须测试,然后再测试超出边界的值,如0100,这样测完就说明参数设置的范围正确,而且还没超出。

黑盒测试方法之因果图分析

边界值分析和等价类划分的一个弱点就是未对输入条件的组合进行分析。

因果图有助于用一个系统的方法选择出高效的测试用例集,它还有一个额外的好处就是可以指出规格说明的不完整和不明确之处。

黑盒测试方法之错误猜测

这是跟个人的测试经验有关,测试感觉好的人经常可以猜测到bug有可能出现在哪里,再设计对应的测试用例加以验证。

例如在一个排序程序中,要探讨的情况有以下几种:

输入表为空

输入表仅包含一个条目

输入表中所有的数据值都相等

输入的表中的顺序一开始就是想要的顺序。

白盒测试方法之语句覆盖

就是程序中的每一条语句都至少执行一次。

例如有一段小程序:

Public void foo(int a,int b,int x)

{

If(a>1&&b==0)

     x=x/a;

If (a==2||x>1)

x=x+1;

}

测试用例a=2,b=0,x=3就可以遍历以上所有表面的语句。

白盒测试方法之分支覆盖

该准则要求必须编写足够的测试用例,使得每一个判断都至少有一个为真和为假的输出结果。要求每个判断都要有‘是’和‘否’的结果,并且每条语句至少被执行一次。即要把上面为明显写出来的else语句的用例写出来。

例如:a=3,b=0,x=1a=2,b=1,x=1

白盒测试方法之条件覆盖

该准则要求要编写足够的测试用例以确保将一个判断中的每个条件的所有可能的结果至少执行一次。

就是上if()里面的用于判断的各种条件之间的组合。例如if(A&B)测试用例需满足AB假,AB,即将A的真假和B的真假都至少取一次。

例如:a=1,b=0,x=3a=2,b=1,x=1

白盒测试之方法分支/条件覆盖

虽然条件覆盖可以保证判断中的各个条件都取到两种结果,可是它们的组合结果有可能没有执行到。

分支/条件覆盖就是要求设计出的用例,将一个判断中的每个条件的所有可能的结果至少执行一次,将每个判断的所有可能的结果至少执行一次,将每个入口都至少调用一次。

白盒测试方法之多重条件覆盖

上个测试程序的测试用例必须覆盖一下8种组合

1 a>1,b=0

2 a>1,b<>0

3 a<=1,b=0

4 a<=1 b<>0

5 a=2,x>1

6 a=2,x<=1

7a<>2,x>1

8 a<>2,x<=1

则测试用例集如下

 a=2,b=0,x=4 覆盖1 5

a=2,b=1,x=1  覆盖2 6

a=1,b=0,x=2 覆盖3 7

a=1,b=1,x=1 覆盖4 8

白盒测试之方法路径覆盖

路径覆盖使程序中每一条可能的路径至少执行一次。 就是把每条路径可能的组合执行执行一次。

测试策略

以上不管是黑盒测试还是白盒测试,每一种方法都可以提供一组具体的有用的测试用例,但是都不能单独提供一个完整的测试用例集。

一组合理的测试策略如下:

如果规格说明书中包含输入条件组合的情况,应首先使用因果图分析方法

在任何情况下都使用边界值分析方法

因为输入和输出结果定义有效类和无效类

使用错误猜测增加测试用例

采用白盒测试方法中各种覆盖方法补充测试用例。

智能推荐

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告