黑盒测试

概述

黑盒测试也称功能测试或数据驱动测试,它是在已知产品所应具有的功能,通过测试来检测每个功能是否都能正常使用。

在测试时,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,测试者在程序接口进行测试。

适用范围

  • 是否有不正确或遗漏了的功能

  • 在接口上,能否正确地接受输入数据,能否产生正确地输出信息

  • 访问外部信息是否有错

  • 性能上是否满足要求

  • 界面是否错误,是否不美观

  • 初始化或终止错误

基本类型

通过测试

软件的基本功能能否正常工作

失败测试

为了破坏软件而设计和执行的测试案例

优点

  • 比较简单,不需要了解程序内部的代码及实现

  • 与软件的内部实现无关

  • 从用户角度出发,能很容易的知道用户会用到哪些功能,会遇到哪些问题

  • 基于软件开发文档,所以也能知道软件实现了文档中的哪些功能

  • 在做软件自动化测试时较为方便

缺点

  • 不可能覆盖所有的代码,覆盖率较低,大概只能达到总代码量的30%

  • 自动化测试的复用性较低

方法

等价类划方法

等价类划分是把所有可能的输入数据,即程序的输入域划分成若干部分(子集),然后从每一个子集中选取少数具有代表性的数据作为测试用例。

等价类

等价类是指某个输入域的子集合。在该子集合中,各个输入数据对于揭露程序中的错误都是等效的。

有效等价类

对于程序的规格说明来说是合理的,有意义的输入数据构成的集合。

无效等价类

与有效等价类的定义相反。

步骤

  1. 对每个输入或外部条件进行等价类划分,形成等价类表,为每一等价类规定一个唯一的编号

  2. 设计一测试用例,使其尽可能多地覆盖尚未覆盖的有效等价类,重复这一步骤,直到所有有效等价类均被测试用例所覆盖

  3. 设计一新测试用例,使其只覆盖一个无效等价类,重复这一步骤直到所有无效等价类均被覆盖

例子

设某公司要打印2001~2005年的报表,其中报表日期为6位数字组成,其中,前4位为年份,后两位为月份。

第一步——划分等价类

输入及外部条件 有效等价类 无效等价类
报表日期的类型及长度 6位数字字符① 有非数字字符④
少于6个数字字符⑤
多于6个数字字符⑥
年份范围 在2001~2005之间② 小于2001⑦
大于2005 ⑧
月份范围 在1~12之间③ 小于1⑨
大于12⑩

第二步——有效等价类划分测试用例

对表中编号为①②③的3个有效等价类用一个测试用例覆盖

测试数据 期望结果 覆盖范围
200105 输入有效 等价类①②③

第三步——为每一个无效等价类至少设计一个测试用例

测试数据 期望结果 覆盖范围
001MAY 输入无效 等价类④
20015 输入无效 等价类⑤
2001001 输入无效 等价类⑥
20000 输入无效 等价类⑦
20080 输入无效 等价类⑧
200100 输入无效 等价类⑨
200113 输入无效 等价类⑩

边界值分析法

边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法。

通常边界值分析法是作为对等价类划分法的补充,这种情况下,其测试用例来自等价类的边界。

因果图方法

一种适合于描述对于多种条件的组合,相应产生多个动作的形式,适合设计测试用例

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

因果图中使用了简单的逻辑符号,以直线联接左右结点。左结点表示输入状态(或称原因),右结点表示输出状态(或称结果)。

ci表示原因,通常置于图的左部;ei表示结果,通常在图的右部。ci和ei均可取值0或1,0表示某状态不出现,1表示某状态出现。

关系

4种符号分别表示了规格说明中向4种因果关系。

  1. 恒等:若ci是1,则ei也是1;否则ei为0

  2. 非:若ci是1,则ei是0;否则ei是1

  3. 或:若c1或c2或c3是1,则ei是1;否则ei为0。“或”可有任意个输入

  4. 与:若c1和c2都是1,则ei为1;否则ei为0。“与”也可有任意个输入

约束

输入状态相互之间还可能存在某些依赖关系,称为约束。

输入条件的约束有以下4类:

  1. E约束(异):a和b中至多有一个可能为1,即a和b不能同时为1

  2. I约束(或):a、b和c中至少有一个必须是1,即 a、b 和c不能同时为0

  3. O约束(唯一);a和b必须有一个,且仅有1个为1

  4. R约束(要求):a是1时,b必须是1,即不可能a是1时b是0

输出条件的约束只有M约束(强制):若结果a是1,则结果b强制为0。

步骤

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

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

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

  4. 把因果图转换为判定表

例子

某软件规格说明书包含这样的要求:第一列字符必须是A或B,第二列字符必须是一个数字,在此情况下进行文件的修改,但如果第一列字符不正确,则给出信息L;如果第二列字符不是数字,则给出信息M。

标识符

原因:

  • 1——第一列字符是A

  • 2——第一列字符是B

  • 3——第二列字符是一数字

结果:

  • 21——修改文件

  • 22 ——给出信息L

  • 23——给出信息M

因果图

11为中间节点;考虑到原因1和原因2不可能同时为1,因此在因果图上施加E约束。

根据因果图建立判定表

1 2 3 4 5 6 7 8
原因(条件) 1 1 1 1 1 0 0 0 0
2 1 1 0 0 1 1 0 0
3 1 0 1 0 1 0 1 0
11 1 1 1 1 0 0
动作(结果) 22 0 0 0 0 1 1
21 1 0 1 0 0 0
23 0 1 0 1 0 1

设计测试用例

1 2 3 4 5 6 7 8
原因(条件) 1 1 1 1 1 0 0 0 0
2 1 1 0 0 1 1 0 0
3 1 0 1 0 1 0 1 0
11 1 1 1 1 0 0
动作(结果) 22 0 0 0 0 1 1
21 1 0 1 0 0 0
23 0 1 0 1 0 1
测试用例 A6 Aa B9 BP C5 HY
A0 A@ B1 B* H4 E%

错误推测法

基于经验和直觉推测程序中所有可能存在的各种错误, 从而有针对性的设计测试用例的方法。

基本思想

列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据他们选择测试用例。

例子

输入数据和输出数据为0的情况;输入表格为空格或输入表格只有一行。

测试一个对线性表(比如数组)进行排序的程序,可推测列出以下几项需要特别测试的情况:

  • 输入的线性表为空表

  • 表中只含有一个元素

  • 输入表中所有元素已排好序

  • 输入表已按逆序排好

  • 输入表中部分或全部元素相同