黑盒测试就是把测试对象看做一个不透明的黑盒子,不必了解程序的内部逻辑和结构,只需按照需求规格说明书检查程序的功能是否符合
黑盒测试主要是为了发现以下几点错误:
(1)是否有不正确或者遗漏的功能
(2)在接口上,输入能否被正确的接收,是否能输出正确的结果
(3)是否有数据结构错误或者外部信息访问错误
(4)性能上是否能满足要求
(5)是否有初始化或者终止性错误
1.等价类测试
因为测试所有的可能输入数据时不可能的
所以需要在所有的输入数据中选择合适的代表性的子集来进行测试
这一过程需要经过等价类划分和选取测试用例两个步骤
所谓的等价类
就是在所有的测试数据中按照其最终的测试结果进行划分
比如说:
在一个接受三个数据计算是否可以构成三角形的三个边的程序中
如果输入5,5,5这三个数据,那么构成了等边三角形的边
那么在输入10,10,10后者20,20,20也是一样的结果
所以这三个数据可以划分为一个等价类
在i一个等价类中,只要一个测试数据时错误的,那么这个等价类中所有的数据结果也都是错误的,反之亦然
等价类分为有效等价类和无效等价类
因为无效的数据对应程序的测试也是必不可少的
等价类测试的原则:
(1)如果输入条件中规定了数值的取值范围或者是个数,那么可以确立一个有效等价类和两个无效等价类
(2)如果输入条件中规定了数值的集合或者规定了“必须如何”的条件,那么可以确立一个有效等价类和一个无效等价类
(3)如果输入条件中规定了数值输入的一组值,而且程序要对其中每个数值进行单独的处理,可以为每个数值确立一个有效等价类,然后对所有的数值的不允许输入的数值确立一个无效等价类
(4)如果输入条件中规定了数据必须遵守的规则,则可以确立一个有效等价类和若干个无效等价类(以不同的角度违反规则)
(5)如果一个等价类中的元素在程序中的处理方式不同,则进一步划分更小的等价类
划分好等价类,并建立等价类表列出所有的等价类之后按照以下原则选择测试用例
(1)为每一个等价类规定一个唯一的标号
(2)设计一个新的测试用例,尽可能多的覆盖没有覆盖过的有效等价类,重复这一步直至所有有效等价类都被覆盖
(3)设计一个新的测试用例,其实仅覆盖一个没有被覆盖过的无效等价类,重复这一步使得所有的无效等价类都被覆盖
2.边界值分析
边界值分析其实是读等价类划分的补充
因为程序中的大量错误是发生在输入或输出范围的边界上,而不是范围的内部,所以要针对各种边界情况设计测试用例
进行边界值分析首先要确定边界情况
应当选取正好等于,刚刚大于,或者刚刚小于边界的值进行测试
进行边界值分析的原则:
(1)如果输入条件中规定了值的范围,则应选取这个范围的边界的值以及刚刚超过这个范围的值
(2)如果输入条件中规定了值的个数,则应当选取最大,最小个数以及比最大多一和比最小少一的值
(3)根据规格说明的每个输出条件进行原则1
(4)根据规格说明的每个输出条件进行原则2
(5)如果规格说明规定输出或输出域是有序集合,则选取集合的第一个元素和最后一个元素
(6)如果程序中使用了一个内部的数据结构,则选取这个数据结构的边界值
(7)分析规格说明,找出其他可能的边界条件
3.基于判定表的测试
判定表又称为决策表,最适合描述在将多个逻辑条件取值组合或复杂条件情况下执行哪些不同的动作
使用判定表时
在条件框列出所有的可能的单个条件
在动作框列出对应条件的执行动作
4.基于因果图的测试
等价类划分和边界值分析着重考虑输入条件,但对于各个输入条件之间的关系则讨论不多
而在某些情况下又需要对输入条件之间的关系和各种组合情况进行描述
就要使用到因果图测试
因果图方法最终生成的就是判定表
使用因果图方法的步骤如下:
(1)根据规格说明书分析哪些是原因(输入条件)哪些是结果(输出条件),并为每个原因和结果赋予一个标识符
(2)分析规格说明书中的语义,找出原因和结果之间的对应关系,画出因果图
(3)由于语法和环境限制,有些原因或者结果之间的组合情况有着一些限制,为了表明这些特殊情况,在因果图上用一些记号标明约束条件
(4)把因果图转换为判定表
(5)把判定表的每一列作为依据,设计测试用例
5.基于状态图的测试
状态图描述了当前测试对象和测试数据之间的关系
状态图的主要图形元素有:
(1)状态,用圆圈表示,反映当前对象所处的环境或者动作
(2)转换,用箭头表示,表示从一个状态到另一个状态的过程
(3)事件,和特定的转换有关,用来描述转换的过程
(4)活动,以/形式表示
(5)条件,以[]形式表示,说明在这个条件下该状态才能被转换
(6)特殊状态,开始和结束状态
通常需要将状态图转换成状态转换树后者状态转换表来进行测试用例的选择
从状态图到状态转换树的转换步骤:
(1)将初始或者开始状态作为树的根节点,所处的层次是1
(2)设当前生成状态转换树的层次为k,从左到右检查所有层次为k的节点,把对应节点的下一个可能状态作为其子女节点,并将转换作为边
(3)重复(2)直至下面两种情况出现:
1)一个位于k层的节点出现在j层上,且j<=k,这个节点成为最终的叶节点,不需要继续生成他的子节点
2)节点的状态是结束状态,也不需要针对该节点继续进行状态转换
6.基于功能图的测试
功能图模型由状态图和逻辑功能图模型构成
7.基于用例和场景的测试
UML通过用例模型来描述系统与外界的交互和功能需求
为了给出UML中用例的细节,还要为每个用例建立一个规格说明,描述用例的事件流
典型的事件流有基本事件流(简称基本流),后补事件流和异常事件流(统称备选流)
在建立了用例模型之后,需要对每个用例进行场景分析,发现所包含的基本流和备选流
然后根据每个场景和事件流来设计测试用例
8.基于有向图的测试用例设计
在面向对象方法中
通常使用用例图来建立系统的功能模型
用类图来建立数据模型
用状态图,顺序图,活动图等建立行为模型
基于有向图设计测试用例主要针对行为模型
该过程中主要包含6个活动:
(1)定义图
(2)定义链接
(3)节点覆盖
(4)链接覆盖
(5)权重测试
(6)圈测试
9.基于正交实验设计法的测试
所谓的正交实验法就是从大量的试验点中挑选出适量的有代表性的点进行实验
首先根据被测软件的需求规格说明,找出影响其功能实现的操作对象和外部因素
把他们当做因子,将因子的取值作为状态,构造出二元的因素分析表
然后利用正交表进行各因子的状态组合,建立因果图
这样得出的测试用例集中,测试用例的数目将大大减少
10.其他黑盒测试用例设计技术