一、黑盒测试概述:
黑盒测试又称功能测试,它将软件看作一个黑盒,在不考虑内部结构和内部特性的情况下对产品进行测试,,检查程序能否按照需求规格说明书的规定正常使用。
二、黑盒测试的测试用例设计方法:
1、等价类划分法
1.1 定义
把程序输入域按照特性划分为若干类,从每个类中选取少部分有代表性的数据作为测试数据,等价类划分有以下两种不同的情况:
1) 有效等价类
是指对于程序的规格说明来说是合理的、有意义的输入数据构成的集合。可用来检验程序是否实现了规格说明中所规定的功能和性能。
2) 无效等价类
指对程序的规格说明是不合理的或无意义的输入数据所构成的集合。可用来检验程序在不符合规则的数据输入下,是否会有异常(无效等价类至少应该有一个,也可能有多个,视情况而定)。
1.2 划分等价类的标准
1)子集内数据等价
2)子集之间互不相交
3)子集的并集是整个输入域或输出域
1.3 不同情景下划分等价类的方法
| 输入条件 | 有效等价类 | 无效等价类 |
|---|---|---|
| 规定了取值范围或个数的条条件(例:输入值是学生成绩,范围是0~100;) | 1个0<x<100 | 2个x<0和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个不满足其中任何一个条件或所有条件的输入集合 |
| 在已知的等价类中各元素在程序处理中的方式不同的情况下,则应再将等价类进一步划分为更小的等价类。 |
2、边界值分析法
2.1 定义
边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法。通常边界值分析法是作为对等价类划分法的补充,这种情况下,其测试用例来自等价
2.2 与等价类分析法的区别
1)等价类的每一个边界都要作为输入条件
2)不仅要考虑输入条件还要考虑输出情况
2.3边界值分析的处理技巧
1)输入规定了取值范围,边界值取刚刚达到范围的数
2)输入规定了取值个数,边界值取min、min-1、max、max+1
3)输入域或输出域是有序集合(如有序表、数组等),则应选取集合的第一个和最后一个元素测试数据。
2.4边界值法设计思路
2.5常见的边界值
1)对16-bit 的整数而言 32767 和 -32768 是边界
2)屏幕上光标在最左上、最右下位置
3)报表的第一行和最后一行
4)数组元素的第一个和最后一个
5)循环的第 0 次、第 1 次和倒数第 2 次、最后一次
3、错误推测方法
3.1定义
基于经验和直觉推测程序中所有可能存在的各种错误, 从而有针对性的设计测试用例的方法。
3.2 基本思路
列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据他们选择测试用例。
3.3 举例
例一:查询功能
A、无条件查询
B、是否支持模糊查询
C、查询的关键字之间是否可用连接符
D、输入正确的查询条件以前加上空格,看是否能正确地查出相应的数据
E、若查询结果为空,是否给与相应提示
例二:登录功能
A、输入的数据前存在空格,是否能够正常登录
B、输入的密码是否能够加密显示
C、密码框的复制、粘贴功能是否被屏蔽掉
D、用户在注销之后是否能够再登录成功
E、输入的数据有误,用户是否可以无休止地尝试登录
例三:测试一个对线性表(比如数组)进行排序的程序
A、输入的线性表为空表;
B、表中只含有一个元素;
C、输入表中所有元素已排好序;
D、输入表已按逆序排好;
E 、输入表中部分或全部元素相同
4、因果图方法
4.1定义
是一种利用图解法分析输入的各种组合情况,从而设计测试用例的方法
4.2使用场景
它适合于检查程序输入条件的各种组合情况。等价类划分法和边界值分析方法都是着重考虑输入条件的各种情况,但多个输入条件组合起来可能出错的情况却被忽视了,因此需要利用因果图(逻辑模型)来设计多种输入条件的组合情况产生的测试用例。
4.3因果图的基本概念
4.3.1 四种因果关系
使用简单的逻辑符号来表示因果关系,左边为输入右边为输出,ci为条件ei为结果。
恒等:若ci是1,则ei也是1;否则ei为0.
非:若ci是1,则ei是0;否则ei为1。
或:若c1或c2或c3是1,则ei是1;否则ei为0.“或可以有任意个输入”。
与:若c1和c2都是1,则ei为1;否则ei为0.“与可以有任意个输入”。
4.3.2 约束
输入状态相互之间还可能存在某些依赖关系,称为约束。例如, 某些输入条件本身不可能同时出现。输出状态之间也往往存在约束。在因果图中,用特定的符号标明这些约束。
(1)输入条件的约束有以下4类:
E约束(异):a和b中至多有一个可能为1,即a和b不能同时为1。
I约束(或):a、b和c中至少有一个必须是1,即 a、b 和c不能同时为0。
O约束(唯一);a和b必须有一个,且仅有1个为1。
R约束(要求):a是1时,b必须是1,即不可能a是1时b是0。
(2)输出条件约束类型
输出条件的约束只有M约束(强制):若结果a是1,则结果b强制为0。
4.4 因果图设计用例步骤
1)根据软件规格说明书,列出原因和结果.
2)找出原因和结果之间的关系,原因和原因之间的约束关系,画出因果图.
3)将因果图转化为判定表
4)根据判定表设计测试用例
4.5设计用例时要考虑如下问题
1)规格说明书有哪些原因?
2)规格说明书有哪些结果?
3)规格说明书中各种原因之间的关系怎么样?
4)规格说明书中各种结果之间的关系怎么样?
5)规格说明书中原因和结果之间的约束条件怎么样?
6)如何从规格说明书中的原因和结果设计测试用例?
5、判定表驱动分析方法
5.1定义
判定表是分析和表达多逻辑条件下执行不同操作的情况的工具。
5.2使用场景
当输入域有不同逻辑条件的组合值,且分别执行不同的操作时,很适合用判定表处理。
5.3判定表组成
1)条件桩:列出了问题的所有条件。
2)动作桩:列出了问题规定可能采取的操作。
3)条件项:列出针对它所列条件的取值,在所有可能情况下的真假值。
4)动作项:列出在条件项的各种取值情况下应该采取的动作。
5.4什么是规则与规则合并(化简)
1)规则:一个条件组合的特定取值及其相应要执行的操作称为规则。在判定表中贯穿条件项和动作项的一列就是一条规则。有多少列就有多少规则。
2)化简:
就是规则合并有两条或多条规则具有相同的动作,并且其条件项之间存在着极为相似的关系。
5.5判断表的建立步骤
1)列出所有的条件桩和动作桩;
2)填入条件项;
3)填入动作项,制定初始判定表;
4)简化;合并相似规则或者相同动作。
5.5举例
问题要求:”……对功率大于50马力的机器、维修记录不全或已运行10年以上的机器,应给予优先的维修处理……” 。这里假定,“维修记录不全”和“优先维修处理”均已在别处有更严格的定义 。请建立判定表。
解答:
①确定规则的个数:这里有3个条件,每个条件有两个取值,故应有222=8种规则。
②列出所有的条件茬和动作桩:
③填入条件项。可从最后1行条件项开始,逐行向上填满。如第三行是: Y N Y N Y N Y N,第二行是: Y Y N N Y Y N N等等。
④填入动作桩和动作顶。这样便得到形如图的初始判定表。
6、场景设计方法
6.1定义
事件触发软件形成流程,不同的触发情景便形成不同场景,同一事件不同的触发顺序和处理结果就形成事件流。
6.2场景法的基本示意图
在这个图中,有一个基本流和四个备选流。从基本流开始,再将基本流和备选流结合起来,可以确定以下用例场景:
场景 1 基本流
场景 2 基本流 备选流 1
场景 3 基本流 备选流 1 备选流 2
场景 4 基本流 备选流 3
场景 5 基本流 备选流 3 备选流 1
场景 6 基本流 备选流 3 备选流 1 备选流 2
场景 7 基本流 备选流 4
场景 8 基本流 备选流 3 备选流 4
从上面的实例我们就可以了解“场景”=“基本流”+“备选流”
1) 基本流:采用直黑线表示,是经过用例的最简单的路径
(无任何差错,程序从开始直接执行到结束)
2) 备选流:采用不同颜色表示,一个备选流可能从基本流开始,在某个特定条件下执行,然后重新加入基本流中,也可以起源于另一个备选流,或终止用例,不在加入到基本流中;
(实际上是各种“非主流”的情况)
6.3场景法的设计步骤
1)根据说明,描述出程序的基本流及各项备选流
2)根据基本流和各项备选流生成不同的场景
3)对每一个场景生成相应的测试用例
4)对生成的所有测试用例重新复审,去掉多余的测试用例,测试用例确定后,对每一个测试用例确定测试数据值
6.4举例
有一个在线购物的实例,用户进入一个在线购物网站进行购物,选购物品后,进行在线购买,这时需要使用帐号登录,登录成功后,进行付钱交易,交易成功后,生成订购单,完成整个购物过程。
① 确定基本流和备选流:
② 根据基本流和备选流来确定场景:
③ 设计用例
下面为测试用例通用格式,对于每个测试用例,存在一个测试用例ID、场景的条件、测试用例中涉及的所有数据元素、以及预期结果。
V有效:用于表明这个条件必须是 VALID(有效的)才可执行基本流
I无效:用于表明这种条件下将激活所需备选流
n/a不适用:表明这个条件不适用于测试用例
④ 设计用例设计数据,把数据填入上面的用例表中
7、功能图分析方法
一个程序的功能说明由动态和静态组成,动态说明描述了输入数据的次序或转移的次序;静态说明描述了输入条件与输出条件之间的对应关系。复杂的程序会采用动静说明结合的方式。
功能图模型=状态迁移图+逻辑功能模型
状态迁移图:表示输入数据序列以及相应的输出数据,由输入数据和当前状态决定输出数据和后续状态。
逻辑功能模型:表示在状态中输入条件和输出条件之间的对应关系,只适合于描述静态说明,输出数据仅由输入数据决定。
测试用例则是由测试中经过的一系列状态和在每个状态中必须依靠输入/输出数据满足的一对条件组成。
功能图方法其实是是一种黑盒白盒混合用例设计方法。
8、正交实验设计方法
利用因果图来设计测试用例时, 作为输入条件的原因与输出结果之间的因果关系,有时很难从软件需求规格说明中得到。往往因果关系非常庞大,以至于据此因果图而得到的测试用例数目多的惊人,给软件测试带来沉重的负担,为了有效地,合理地减少测试的工时与费用,可利用正交实验设计方法进行测试用例的设计。
三、测试流程
1、需求分析
“需求分析”阶段:这个阶段主要是对业务的学习,包括:阅读需求,理解需求,分析需求点,参与需求评审会议,评审需求是否合理。
2、制定测试计划
这个阶段的主要任务就是通过参考“软件需求规格说明书”以及“项目总体计划”,来编写测试计划。
所编写的测试计划的内容包括:
① 测试范围(依据需求文档)
② 进度安排(时间进度、流程进度)
③ 人力、物力的分配
(人员有哪些、都有哪些业务点、以及相对应的资源,对于这些的分配)
④ 对于整体测试策略的制定
⑤ 对于风险评估与规避措施要有一个制定
3、设计测试用例、编写测试用例
通过参考需求文档(原型图)、概要设计、详细设计等文档,来编写测试用例,用例编写完成之后会进行评审。
4、实施测试(执行测试用例)
实施测试主要包括以下几个部分:
① 搭建相应的测试环境
② 执行冒烟测试(预测试)
③ 进行正式的测试
④ 回归测试
5、bug的管理,提交缺陷报告
这个阶段主要是将执行测试过程中发现的bug提交到bug管理平台上,最后可能需要提交缺陷报告。
6、生成测试总结和报告
在这个阶段需要给出测试报告,并确认是否可以上线。