1.概述
黑盒测试也称功能测试或数据驱动测试,它是在已知产品所应具有的功能,通过测试来检验每个功能都是否能够正常使用。
在测试时,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,测试人员进行直接测试,检查系统功能是否按照需求规格说明书的规定正常使用、是否能适当的接收输入数据而输出正确的结果等,检查相应的文档是否采用了正确的模板、是否满足规范需求。
2. “黑盒”的两种基本方法
黑盒测试有两种基本方法,即“通过测试”和“失败测试”。
在进行“通过测试”时,实际上是确认软件能做什么,而不会考验其能力如何。软件测试员只运用最简单、直观的测试案例。
在设计和执行测试案例时,总是先进行通过测试。在进行破坏性试验之前,看一看软件基本功能是否能够实现。
在确信了软件正确运行之后,就可以采取各种手段通过搞垮软件来找出缺陷。纯粹为了破坏软件而设计和执行的测试案例,被称为失败测试或迫使出错测试。
3.黑盒测试的优、缺点
(1)优点
a.比较简单,不需要了解程序内部的代码以及实现。
b.与软件内部实现无关。
c.从用户角度出发,很容易的知道用户会用到哪些功能,会遇到哪些问题。
d.在做软件自动化测试时较为方便。
e.基于软件开发文档,所以也能知道软件实现了文档中的哪些功能。
(2)缺点
a.不可能覆盖所有代码,覆盖率较低,大概只能达到总代码量的30%。
b.自动化测试的复用性较低。
4.黑盒测试的测试用例设计方法
(1)等价类划分法
(2)边界值分析法
(3)错误推测法
(4)因果图法
(5)判定表
(6)功能图法
4.1等价类划分法
(1)概念
等价类划分法就是解决如何选择适当的数据子集来代表整个数据集的问题,通过降低测试的数目去实现“合理的”覆盖,覆盖了更多的可能数据,以发现更多的软件缺陷。
等价类是指某个输入域的一个特定的子集合,在该子集合各个输入数据对于揭露程序中的错误都是等效的。
(2)等价类划分的过程
a.分类:即将输入域按照具有相同特性并用实例来表征这个特性。
b.抽象:即在各个子类中去抽象出相同特性并用实例来表征进行分类。
(3)等价类划分的优缺点
a.优点:基于相对较少的测试用例,就能够进行完整覆盖,很多程度上减少了重复性。
b.缺点:缺乏特殊用例的考虑,同时需要深入的系统知识,才能选择有效的数据。
(4)有效等价类和无效等价类
(1)有效等价类是指输入完全满足程序输入的规格说明、有意义的输入数据所构成的集合,利用有效等价类,可以检验程序是否满足规格说明所规定的功能和性能。
(2)无效等价类和有效等价类相反,即不满足程序输入要求或者无效的输入数据构成的集合。使用无效等价类,可以测试程序/系统的容错性——对异常输入情况的处理。
(5)不同情形的处理
输入条件 | 有效等价类 | 无效等价类 |
规定了取值范围或个数的条条件 (输入条件满足小于100大于10的整数x) | 1个 10<x<100 | 2个 x<10和x>100 |
规定了输入值的集合或者规定了“必须如何”的条件下 (输入条件为x=10)
| 1个 x=10
| 1个 x≠10 |
规定了输入条件是一个布尔量 (输入条件bool x = ture) | 1个 x = true | 1个 x = false |
规定了一组输入数据(包括n个输入值),对每一个输入值分别处理 (输入条件为x取值于一个固定枚举类型{1,3,5,7,9}) | n个 x∈{1,3,5,7,9} | 1个 x不属于{1,3,5,7,9}的集合 |
规定了输入数据必须遵守规则的情况下 (输入是页面用户输入有效的Email地址的规则,必须满足几个条件,含有@,@后面格式为x,x,Email地址不带有特殊符号) | 1个 满足所有条件的输入集合 | n个 不满足其中任何一个条件或所有条件的输入集合 |
在已知的等价类中各元素在程序处理中的方式不同的情况下,则应再将等价类进一步划分为更小的等价类。 |
(7)案例
有一报表处理系统,要求用户输入处理报表的日期。假设日期在2000年1月至2020年12月,即系统只能对该段时期内的报表进行处理。如果用户不再这个范围内,则显示错误信息。并且此系统规定日期由年月的6位数字组成,前4位代表年,后2位代表月。
输入 | 有效等级类 | 无效等价类 |
报表日期 | (1)6位数字字符 | (2)少于6位数字字符 (3)多余6位数字字符 (4)有非数字字符 |
年份范围 | (5)在2000年到2020年之间 | (6)小于2000 (7)大于2020 |
月份范围 | (8)在1到12月之间 | (9)等于0 (10)大于12 |
4.2边界值分析法
(1)概念
边界值分析法就是在某个输入输入变量范围的边界上,验证系统功能是否正常运行的测试方法。
(2)与等价划分类的区别
a.边界值分析不是从等价类中随便挑一个作为代表,而是使这个等价类的每个边界都要作为测试条件。
b.边界值分析不仅考虑输入条件,还有考虑输出空间产生的测试情况。
(3)边界值分析的处理技巧
a.如果输入条件规定了值的范围,则取刚刚到达这个范围的边界值。
b.如果输入条件规定了值的个数,则用最大个数、最小个数、比最大个数多一个,比最小个数少一个的数等作为测试数据。
c.根据规格说明的每一个输出条件,分别使用以上两个规则。
d.如果程序的规格说明给出的输入域或输出域是有序集合(如有序表、顺序文件等),则应选取集合的第一个和最后一个元素测试数据。
(4)边界值附近的数据确定的几种方法
项 | 边界值 | 测试用例的设计思路 |
字符 | 起始-1个字符/结束+1个字符 | 假设一个文本输入区域要求允许输入1-255个字符,输入1个和255个作为有效等价类,输入0个和256个作为无效等价类,这几个数值都属于边界条件值。 |
数值 | 开始位-1/结束位-1 | 例如,数据的输入域为1-999,其值最小为1,最大值为999,1000刚好在边界值附近。 |
方向 | 刚刚超过/刚刚低于 | |
空间 | 小于空余空间一点/大于空余空间一点 | 例如,测试数据存储时,使用比最小剩余空间大一点(几KB)的文件作为最大值检验的边界条件。 |
4.3错误推测法
(1)概念
错误推测法是基于经验和直觉推测程序中所有可能存在的各种情况,从而有针对性的设计,列出测试用例的方法。
错误推测法基于这样一个思想,在某处发现了缺陷,则可能隐藏更多的缺陷。在实际操作中列出所有可能出现的错误和容易发现错误的地方,然后语句测试者经验做出选择。
(2)优点与缺点
优点:充分发挥人的直觉与经验,在一个测试小组中集思广益,方便实用,特别是在软件测试基础较差的情况下,很好地组织测试小组进行错误推测,是一种有效的测试方法。
使测试者能够快速且容易地切入,并且能够体会到程序的易用与否。
缺点:错误推测法不是一个系统的测试方法,所以只能用着辅助手段,即先用上述方法设计测试用例,在没有其他方法可用的情况下,再采用错误推测法,补充一些例子进行额外的测试。
难以知道测试的覆盖率,可能丢失大量未知的区域,并且这种测试行为带有主观性且难以复制。
4.4因果图法
(1)概念
因果图法借助图形,着重分析输入条件的各种组合,每种组合条件就是“因”,它必然有一个输出结果,这就是“果“。
因果图是一种形式化的图形语言,由自然写成的规范转换而成,这种形式化的语言实际上一种简化记号表示数组逻辑图,不仅能发现输入输出中的错误,还能指出程序规范中的不完成性和二义性。
因果图方法最终生成的就是判断表,它适合于检查程序输入条件的各种组合情况。
(2)因果图介绍
1)因果图中使用了简单的逻辑符号,以直线联接左右结点。左结点表示输入状态(原因),右结点表示状输出态(结果)。ci表示原因,通常位于图的左边;ei表示结果,通常位于图的右边。ci和ei均可取值0或1,0表示某状态不出现,1表示某状态出现。如下图:
4种符号分别表示了规格说明书中4中因果关系。如上如所示
a.恒等:若ci是1,则ei也是1;否则ei为0.
b.非:若ci是1,则ei是0;否则ei为1。
c.或:若c1或c2或c3是1,则ei是1;否则ei为0.“或可以有任意个输入”。
d.与:若c1和c2都是1,则ei为1;否则ei为0.“与可以有任意个输入”。
2)因果图概念——约束
A.输入条件的约束:
a:E约束(异):a和b中至多有一个可能为1,即a和b不能同时为1.
b.I约束(或):a、b和 中至少有一个必须是1,即a、b和c不能同时为0.
c.O约束(唯一):a和b必须有一个,且仅有一个为1.
d. R约束(要求):a是1时,b必须是1,即不可能a是1是b是0.
B.输出条件的约束:
输出条件的约束只有M约束(强制),若结果a是1,则结果b强制为0.
(3)利用因果图生成参数用例的步骤
a.分析软件规格说明描述中,那些是原因(即输入条件或输入条件等价类),那些是结果(即输出条件),并给每个原因和结果赋予一个标识符。
b.分析软件规格说明书描述中的语义。找出原因与结果之间,原因与原因之间对应关系。根据这些关系,画出因果图。
c.由于语法和环境限制,有些原因与原因之间,原因与结果之间的组合情况不可能出现。为表明这些特殊情况,在因果图上用一些记号表明约束或限制条件。
d.把因果图转换为判定表。
(4)因果图案例
例:某软件规格说明书包含这样的要求:第一列字符必须是A或B,第二列字符必须是一个数字,在此情况下进行文件的修改,但如果第一列字符不正确,则给出信息L;如果第二列字符不是数字,则给出信息M。
解:
A:根据题意:原因和结果如下
原因:1——第一列字符是A; 2——第一列字符是B; 3——第二列字符是数字。
结果:21——修改文件; 22——给出信息L; 3——给出信息M。
B.对应的因果图
11为中间节点;不考虑原因1和原因2,不可能同时为1,因此在因果图上施加E约束。
4.5功能图法
(1)概念
功能图法是用功能图FD形式化地表示程序的功能说明,并机械地生成功能图的测试用例。
功能图模型由状态迁移图和逻辑功能模型构成。状态迁移用于表示输入数据序列以及相应的输出数据,在状态迁移图中,由输入数据和当前状态绝对输出数据和后续状态。
(2)功能图
功能图由状态迁移图和布尔函数组成。状态迁移图用状态和迁移来描述,一个状态指出数据输入的位置(或时间),而迁移则指明状态的改变,同时要依靠判定表或因果图表示的逻辑功能。
(3)测试用例的生成方法
从功能图生成测试用例,得到的测试用例数是可接受的。问题的关键是如何从状态迁移图中选取测试用例,若用节点代替状态,用弧线代替迁移,则状态迁移图可转化成一个程序的控制流程图形式。问题就转化称为程序的路径测试了。
(4)测试用例生成规则
为了将状态迁移(测试路径)的测试用例与逻辑模型(局部测试用例)的测试用例组合起来,从功能图生成实用的测试用例,须定义以下规则:在一个结构化的状态迁移中,定义三种形式的循环结构:顺序、选择和重复。但分辨一个状态迁移中所有循环是有困难的。
(5)从功能图中生成测试用例的过程
a.生成局部测试用例:在每个状态中,从因果图生成局部测试用例,局部测试用例由原因值(输入数据)组合与对应结果值(生输出数据或状态)组成。
b.测试路径生成:利用上面的规则(三种)生成从初始状态到最后状态的测试路径。
c.测试用例合成:合成测试路径与功能图中每个状态局部测试用例,结果是初始状态到最后状态的一个状态序列,以及每个状态中输入数据与对应的输出数据的组合。
5.流程
(1)测试计划
首先,根据用户需求报告中关于功能要求和性能指标的规格说明书,定义相应的测试需求报告,即制订黑盒测试的最高标准,以后所有的测试工作都将围绕着测试需求来进行,符合测试需求的应用程序即是合格的,反之即是不合格的;同时,还要适当选择测试内容,合理安排测试人员、测试时间及测试资源等。
(2)测试设计
将测试计划阶段制订的测试需求分解、细化为若干个可执行的测试过程,并为每个测试过程选择适当的测试用例(测试用例选择的好坏将直接影响到测试结果的有效性)。
(3)测试开发
建立可重复使用的自动测试过程。
(4)测试执行
执行测试开发阶段建立的自动测试过程,并对所发现的缺陷进行跟踪管理。测试执行一般由单元测试、组合测试、集成测试、系统联调及回归测试等步骤组成,测试人员应本着科学负责的态度,一步一个脚印地进行测试。
(5)测试评估
结合量化的测试覆盖域及缺陷跟踪报告,对于应用软件的质量和开发团队的工作进度及工作效率进行综合评价。