一、黑盒测试

1.1 黑盒测试方法概述

黑盒测试:又称为功能测试,数据驱动测试 和 基于规格说明的测试。它是一种在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试

  • 它是从 用户角度 出发进行的测试。
  • 如果外部特性本身有问题或者规格说明书的规定有误,用黑盒测试方法是发现不了的。
  • 测试人员根据软件的需求规格说明书设计测试用例,依靠被测程序输入和输出之间的关系或程序的功能设计,对程序功能和程序接口进行测试。

黑盒测试主要是为了发现以下错误:

  • 是否有不正确或遗漏了的功能;
  • 在接口上,输入能否正确地接受,能否输出正确的结果;
  • 是否有数据结构错误或外部信息(例如数据文件)访问错误;
  • 性能上是否能够满足要求;
  • 是否有初始化或终止性错误。

优点

  • 适用于各个测试阶段
  • 从产品功能角度进行测试
  • 容易入手生成测试数据。

缺点

  • 不能进行充分的测试
  • 某些代码不能得到测试
  • 无法发现需求规格说明本身存在的问题。

典型黑盒测试方法:

典型的黑盒测试方法包括主要包括等价类划分法、边界值分析法、错误推测法、因果图法、决策表法、正交试验法、场景法、功能图法等。

1.2 等价类划分法

一、 等价类划分法概述

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

等价类分为有效等价类和无效等价类。

  • 有效等价类:符合需求说明,合理地输入数据集合
  • 无效等价类:不符合需求说明,无意义地输入数据的集合

二、 等价类划分法设计测试用例的步骤

  1. 划分等价类:首先必须在分析需求规格说明的基础上划分等价类;
  2. 建立等价类表:列出所有划分出的等价类;
  3. 确定测试用例:根据已列出的等价类表,按以下步骤确定测试用例:
  • 为每一个等价类规定一个唯一的编号;
  • 设计一个新的测试用例,使其尽可能多地覆盖尚未被覆盖的有效等价类,重复这个过程,直至所有的有效等价类均被测试用例所覆盖;- 设计一个新的测试用例,使其仅覆盖一个无效等价类,重复这个过程,直至所有的无效等价类均被测试用例所覆盖

三、 等价类划分原则
所谓等价类,往往是题目中的限定条件。等价类的划分,就是对题目的限制条件再进行细分。
等价类划分的原则如下:

1. 在输入条件规定的取值范围或值的个数的情况下,可以确定一个有效等价类和两个无效等价类
2. 在规定了输入数据的一组值中(假定有n个值),并且程序要对每个输入值分别处理的情况下,可以确定n个有效等价类和一个无效等价类
3. 在规定输入数据必须遵守的规则的情况下,可以确定一个有效等价类和若干个无效等价类
4. 在输入条件规定了输入值的集合或规定了“必须如何”的条件下,可以确定一个有效等价类和一个无效等价类
5. 在确定已划分的等价类中各元素在程序处理中的方式不同的情况下,则应将该等价类进一步地划分为更小的等价类。

四、 等价类划分法规则
1) 在输入条件规定的取值范围或值的个数的情况下,可以确定一个有效等价类和两个无效等价类。

例如, 输入值是学生成绩,范围是0~100
无效等价类: score<0
有效等价类: 0≤score≤100
无效等价类: score>100

  1. 在输入条件规定了输入值的集合或规定了“必须如何”的条件下,可以确定一个有效等价类和一个无效等价类。

例如,程序要进行平方根函数的运算,则“≥0”的数为有效等价类,“<0”的数为无效等价类。

  1. 如规定了输入数据的一组值,且程序对不同输入值做不同处理,则每个允许的输入值是一个有效等价类,并有一个无效等价类(所有不允许的输入值的集合)。

例如,说明学历输入条件可为:专科、本科、硕士、博士四种之一,则分别取这四个值作为四个有效等价类,把四种学历之外的任何学历作为无效等价类。

  1. 在规定了输入数据必须遵守的规则的情况下,可确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)。

输入必须以分号结束,可以确定一个等价类“以分号结束”,若干无效等价类,“以逗号结束”、“以冒号结束”、“以括号结束”等。

  1. 在确定已划分的等价类中各元素在程序处理中的方式不同的情况下,则应将该等价类进一步地划分为更小的等价类。

下面进入例题

例:某报表处理系统要求用户输入处理报表的日期,日期限制在2003年1月至2008年12月,即系统只能对该段期间内的报表进行处理,如日期不在此范围内,则显示输入错误信息。
系统日期规定由年、月的6位数字字符组成,前四位代表年,后两位代表月。
如何用等价类划分法设计测试用例, 来测试程序的日期检查功能?

第一步:等价类划分

“报表日期”输入条件的等价类表

第二步:为有效等价类设计测试用例

对表中编号为1,2,3的3个有效等价类用一个测试用例覆盖:
在这里插入图片描述

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

注意:不能出现相同的测试用例



对于上面的等价类划分规则具体应用看下面的题目,具体做题步骤是:

  • 我们需要先找到输入条件,再根据输入条件得到有效等价类
  • 利用我们上面的 根据有效等价类得到无效等价类的规则,得到无效等价类,并做好标记。

五、 等价类划分法例题

等价类划分法 例题1

例1:某一种8位计算机,其十六进制常数的定义是以0x或0X开头的十六进制整数,其取值范围为-7f~7f(不区分大小写字母),如0x13、0x6A、-0x3c。请采用等价类划分的方法设计测试用例。

在这里插入图片描述

等价类划分法 例题2

例2:对用户输入的分数进行评级,其中90到100为A,80-89为B,70-79为C,60-69为D,60以下为E,输入分数要求必须是正整数或0。
请采用等价类划分的方法设计测试用例。

在这里插入图片描述

等价类划分法 例题3

例3:标识符是有字母开头的字母、数字的组合,有效位数8位,最大字符个数255。“在同一说明语句中,标识符至少必须有一个”。
请采用等价类划分的方法设计测试用例。

在这里插入图片描述

等价类划分法 例题4

例4:标识符是有字母开头的字母、数字的组合,有效位数8位,最大字符个数255。“在同一说明语句中,标识符至少必须有一个”。
请采用等价类划分的方法设计测试用例。

在这里插入图片描述

等价类划分法 例题5

例题5:某城市电话号码组成规则的需求规格说明书;
某城市电话号码由三部分组成,分别是:
· 地区码—空白或三位数字;
· 前 缀—非‘0’或‘1’开头的三位数字;
· 后 缀—— 4位数字。
假定被测程序能接受一切符合上述规定的电话号码, 拒绝所有不符合规定的电话号码

在这里插入图片描述
根据等价类划分,我们得到如下的测试用例:
在这里插入图片描述

1.3 决策表法

一、 决策表的组成部分
条件桩: 列出了问题的所有可能的条件,条件的先后次序无关紧要。
条件项: 条件取值组合和域其对应的动作组合。
动作桩: 列出了问题规定的可能采取的操作,这些操作的排列顺序没有约束。
动作项:…

二、 建立决策表步骤
注意,这个步骤需要牢记,下面有关决策表的例题都是根据该步骤一步步进行下去的。

  • 确定规则个数 :若有n个条件,那么每个条件有两个取值,故有2 n ^{n} n种取值。
  • 列出所有的条件桩和动作桩
  • 填入条件项
  • 填入动作项,得到初始决策表
  • 化简:化简规则如下:

有两条或者多条规则具有相同的动作,并且其条件项之间存在着极为相似的关系,就可以将规则合并。

三、 实例

决策表法 例题1

以下列问题为例,给出构造决策表的具体过程
例题1
· 如果某产品销售好并且库存低,则增加该产品的生产
· 如果该产品销售好,但是库存低,则继续生产。
· 如果该产品销售不好,且库存低,则继续生产
· 若该产品销售不好,且库存不低,则停止生产

在这里插入图片描述

条件那一行,T和√代表发生,F代表不发生

决策表法 例题2

例题2某维修站对:
① “功率大于50马力”且“维修记录不全”
② “已运行十年以上”的机器给予优先维修,否则做一般处理。
请用决策表表达此处理逻辑。

在这里插入图片描述
这里对化简的步骤进行详细的说明
化简,合并相似规则得到如下图:
合并规则:有两条或者多条规则相同,且 具有相同的动作,并且其条件项之间存在着极为相似的关系,就可以将规则合并。

表中具有相同颜色的两个情况可以合并为1列。

上面的情况1和情况2,不管运行超不超过10年,只要功率大于50码,且维修记录不全,都需要进行优先处理。

如下图,我们实际上合并了:
· 情况1和 情况2 合并为情况1;
· 情况5和 情况7 合并为情况4;
· 情况6和 情况8 合并为情况5;

下面图中的“-”表示,这个选项不管发生不发生,对结果都没有影响。这里实际上就是合并的结果。
在这里插入图片描述

1.4 因果图法

因果图中,刚接触往往不知道中间节点的含义是啥意思,什么时候会用到,后面会在例题中提到。

一、 因果图法的字符规则
在因果图中,使用4中符号分别表示4中因果关系。
用直线连接左右节点,其中:

  • 左节点Ci表示输入状态(或称原因);
  • 右节点ei表示输出状态,(或称结果);
  • C i C_{i} Ci e i e_{i} ei都可取值两种,分别是0或1。
  • 0表示状态不出现,1表示状态出现。

二、 因果图法的基本图形符(描述原因和结果之间的关系)

  • 与:若几个原因都出现,结果才出现;若几个原因中有一个不出现,则结果不出现。
  • 恒等:若原因出现,则结果出现;若原因不出现,则结果不出现。
  • 非:若原因出现,则结果不出现;若原因不出现,则结果出现。
  • 或:若几个原因中有一个出现,则结果出现;若几个原因均不出现,则结果不出现。

三、 因果图法中的约束表示(描述各个原因之间的关系)
在实际问题中,输入状态相互之间还可能存在某些依赖关系,我们称之为约束。
例如,某些输入条件不可能同时出现。输出状态之间往往也存在约束。在因果图中,以特定的符号标明这些约束。

从原因方面考虑主要有4种约束条件:
  • E (Except,互斥、排他) :a、b两个原因不会同时出现,最多只有一个出现。
  • I(Include,包含、或):a、b、c三个原因至少有一个出现。
  • O(Only,唯一):a、b两个原因必须有一个出现,且仅有一个出现。
  • R(Request,需求) :a出现时b必定出现。

从结果方面考虑主要有1种约束条件:
· M(屏蔽):a出现时,b必定不出现;a不出现时,b则不确定。

四、 例题

因果图法 例题1

例题1:程序的规格说明要求:输入的第一个字符必须是#或*,第二个字符必须是一个数字,此情况下进行文件的修改;如果第一个字符不是#或*,则给出信息N,如果第二个字符不是数字,则给出信息M。用因果图法设计测试用例.
解题步骤:
(1)分析程序的规格说明,列出原因和结果。
(2)找出原因与结果之间的因果关系、原因与原因之间的约束关系,画出因果图。
(3)将因果图转换成决策表。
(4)根据(3)中的决策表,设计测试用例的输入数据和预期输出。

STEP1列出原因:
在这里插入图片描述
STEP2列出结果:
在这里插入图片描述
其对应的因果图如下:
在这里插入图片描述

说明:特别说明面这个中间节点11的由来。这个11到底是什么意思。

  • 考虑到原因1和原因2不可能同时为1(true),故在因果图上施加E约束。
  • 原因1和原因2,对应的其实是题目中的:“输入的第一个字符必须是#或*”,这里描述的是“或”关系,所以11为中间节点,表达的含义是“第一个字符是#或者是*”,不管你选的是“#”还是“*”,只有该步骤完成了才能进行下一步,输入第二个字符。这里的中间节点算作是中间状态 ,中间状态就是一个过渡节点。
  • 根据题目要求“如果第一个字符不是#或*,则给出信息N”。11和22之间的关系用逻辑“非”表示。”如果情况11出现,那么结果22就不会出现。
  • “如果第二个字符不是数字,则给出信息M”。见图中的关系 3~23

对应的判定表及测试用例如下:
在这里插入图片描述

因果图法 例题2

例题2:淘宝在双十一推出打折优惠活动,订单已提交,订单金额大于300或有红包,则优惠。

STEP1列出原因:
在这里插入图片描述
STEP2列出结果:
在这里插入图片描述

c: 中间节点。 表示“订单金额”大于300或者有红包。
下面两张图援引自:https://blog.csdn.net/qq_46071165
在这里插入图片描述
生成的决策表如图示:
在这里插入图片描述
说明:

  • 0表示这个事件不发生,1表示这个事件发生。
    中间节点的含义根据分析需求得到。
    在判定表中,我们是根据原因的个数k,得到判定表中选项的个数为2 k ^{k} k个。
  • 中间节点的值为0或者1,取决于和中间节点相关的连个节点取值,如果是“或”的关系,那么两个原因中有一个原因为1,则中间节点值为1;
  • 如果是“且”的关系,那么和中间节点相关联的两个节点,必须都为“1”,才能让中间节点值为1.

总结:
上面几个例子中,我们可以知道, 中间节点我们是根据需求得来的,但是有没有什么比较好理解的呢?我们其实可以发现,中间节点往往是对原因和原因之间的关系封装。通常是原因之间的“或”或者“且”的关系表达。中间节点的出现能够简化因果图。通常题目中如果是分多步骤,且步骤是有顺序的,即先完成这一步才能进行下一步的时候,就可以使用中间节点保存上一个步骤所做出的选择,为下一步骤做准备。利用中间节点,我们就能够更加清晰地画出因果图。
在判定表中,我们是根据原因的个数k,得到判定表中选项的个数为2 k ^{k} k个。

我们再看一个例子,这个例子比较复杂,但是能够更好地理解,什么是中间节点。

因果图法 例题3

例题3:有一个单价为五角钱的饮料自动售货机软件,对其采用因果图方法设计测试用例。需求如下:
· 若售货机没有零钱找,则一个显示 “零钱找完”的红灯亮,以提示顾客在此情况下不要投入1元钱,否则此红灯不亮。
· 顾客投入5角硬币,然后按下“橙汁”或“啤酒”按钮,则相应饮料被送出。
· 顾客投入1元硬币并按下“橙汁”或“啤酒”按钮后,若售货机没有零钱找,则显示“零钱找完”的红灯亮,1元硬币被退出,且无饮料送出;若有零钱找,则五角硬币被退出且饮料被送出。

Step1.列出原因

Step2.列出结果
Step3.根据需求说明设置中间节点

Step4.根据列出的原因、结果、中间节点画出因果图
在这里插入图片描述
说明:

  • 2、3号原因不能同时出现
  • 4、5号原因不能同时出现。
  • 中间节点 12表示,“按下橙汁按钮或者按下了啤酒按钮” 。
  • 其他中间节点的含义都在图中表示出来了。

生成的决策表如下:在这里插入图片描述
总结:
中间节点往往是对原因和原因之间的关系封装。通常是原因之间的“或”或者“且”的关系表达。中间节点的出现能够简化因果图。

原文下载地址

本人所作的 软件测试理论基础.docx文档下载地址如下:

软件测试理论基础.docx下载地址

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐