【软件工程】软件测试 二
第二模块 软件测试方法与过程–黑盒测试
文章目录
一、黑盒测试
黑盒相当于看不到内部结构的盒子,好比是你去使用一个电器或工具,但你不关心它内部是怎么运作的,你只关心它能不能按照你的指令正常工作。
黑盒测试就是测试人员不去查看软件的代码,也不关心软件内部的逻辑结构和工作原理。他们只关心软件的功能是否满足需求,是否能够正确地响应用户的输入并产生正确的输出。
1.1 等价类划分法(掌握)
简单的讲:将输入数据划分为不同的等价类,从每个等价类中选取代表性的数据进行测试。因此,在每个等价类中选取的输入数据对揭露程序中的错误都是等效的。
1.1.1 等价类划分原则
(1)如果输入条件规定了取值范围或个数,则可确定一个有效等价类和两个无效等价类。
例如,输入值是选课人数,在0到100之间,那么有效等价类是“0≤学生人数≤100”,无效等价类是“学生人数<0”和“学生人数>100”。
(2)如果输入条件规定了输入值的集合或是规定了“必须如何”的条件,则可确定一个有效等价类和一个无效等价类。
例如,输入值是日期类型的数据,那么有效等价类是:日期类型的数据;无效等价类是:非日期类型的数据。
(3)如果输入条件是布尔表达式,则可以分为一个有效等价类和一个无效等价类。
例如,要求密码非空,则有效等价类为非空密码,无效等价类为空密码。
(4)如果输入条件是一组值,且程序对不同的值有不同的处理方式,则每个允许的输入值对应一个有效等价类,所有不允许的输入值的集合为一个无效等价类。
例如,输入条件“职称”的值是初级、中级或高级,那么有效等价类应该有3个,即初级,中级,高级,无效等价类有一个,即其他“职称”。
(5)如果规定了输入数据必须遵循的规则,则可以划分出一个有效的等价类(符合规则)和若干个无效的等价类(从不同的角度违反规则)。
例如,对变量标识符规定为“以字母为开头的串”,那么其有效等价类是“以字母开头的串”,而“以非字母开头的串”为其中的一个无效等价类。
如已划分的等价类各元素在程序中的处理方式不同,则应将此等价类进一步划分成更小的等价类,如最终用户与系统交互的提示。
1.1.2 测试步骤
(1)对每个输入和外部条件进行等价类划分,画出等价类表,并为每个等价类进行编号。
(2)设计一个测试用例,使其尽可能多地覆盖有效等价类,重复这一步,直到所有的有效等价类被覆盖。
(3)为每一个无效等价类设计一个测试用例。
1.1.3 举个栗子
测试NextDate函数的具体实例,输入3个变量(年、月、日)函数返回输入日期后一天的日期,数据范围:1<= 月份 <=12,1<= 日期 <=31,1812<= 年 <=2024。
既然给定了范围那可确定一个有效等价类和两个无效等价类,但是,对于日期和月份存在的特殊情况需要考虑进去。
(1)第一步,划分等价类
(2)第二步,为有效等价类设计测试用例
(3) 第三步,为无效的等价类设计测试用例
1.2 边界值分析法
针对输入数据的边界值进行测试,因为边界值往往是程序出错的高发区。
边界值分析法是一种补充等价类划分法的黑盒测试方法,它不是选择等价类中的任意元素,而是选择等价类边界的测试用例。
通常情况下,软件测试所包含的边界条件有以下几种类型:数字、字符、位置、质量、大小、速度、方位、尺寸、空间等;对应的边界值应该在:最大/最小、首位/末位、上/下、最快/最慢、最高/最低、最短/最长、空/满等情况。
1.2.1 原则
(1) 如果输入条件规定了取值范围,应以该范围的边界内及刚刚超范围的边界外的值作为测试用例。
如以a和b作为输入条件,测试用例应当包括a和b,以及略大于a和略小于b的值;
(2) 若规定了值的个数,应分别以最大、最小个数和稍小于最小和稍大于最大个数作为测试用例。
例如,一个输入文件有1-300个记录,设计测试用例时则可以分别设计有1个记录、300个记录以及0个记录和301个记录的输入文件;
(3) 针对每个输出条件,也使用上面的两条原则;
(4) 如果程序规格说明书中提到的输入或输出范围是有序的集合,如顺序文件、表格等,应注意选取有序集的第一个和最后一个元素作为测试用例;
1.2.2 举个栗子
以上面NextDate为例子,使用等价划分和边界值分析进行测试,基于上一小节的测试,再进行补充测试。
1.3 错误推测法
基于测试人员的经验和直觉,推测程序中可能存在的错误,并设计相应的测试用例。
例如,输入数据为零或输出数据为零往往容易发生错误;
如果输入或输出的数目允许变化(如被检索的或生成的表的项数),则输入或输出的数目为0和1的情况(如表为空或只有一项)是容易出错的情况。
还应该仔细分析程序规格说明书,注意找出其中遗漏或省略的部分,以便设计相应的测试方案,检测程序员对这些部分的处理是否正确。
1.4 因果图法
使用因果图来描述输入与输出之间的逻辑关系,并据此设计测试用例。
因果图法从自然语言书写的程序规格说明书中寻找因果关系,即输入条件与输出和程序状态的改变,通过因果图产生判定表。
它能够帮助人们按照一定的步骤高效的选择测试用例,同时还能指出程序规格说明书中存在的问题。
在因果图中,用C表示原因,E表示结果,各节点表示状态,取值0表示某状态不出现,取值1表示某状态出现。因果图有四种关系符号,如图所示:
恒等:若原因出现则结果出现,原因不出现则结果不出现。
非:原因出现则结果不出现,原因不出现则结果出现。
或:几个原因中有一个出现则结果出现,所有原因都不出现则结果不出现。
与:几个原因都出现则结果出现,有一个原因不出现则结果不出现。
为了表示原因与原因之间,结果与结果之间可能存在的约束关系,在因果图中可以附加一些表示约束的符号:
1.4.1 测试用例步骤
(1)分析规格说明书中的因、果;原因常常是输入条件或输入条件的等价类,结果常常是输出条件。
(2)分析程序规格说明书中描述的语义内容,表示成连接因果的因果图。
(3)在因果图上标注号约束关系。
(4)因果图转换为决策表。
1.4.2 举个栗子
自动售货机软件的测试;规格说明如下:
有一个处理单价为1.5元的盒装饮料的自动售货机软件,若投入1.5元硬币,按下“可乐”、“雪碧”、“红茶”按钮,出来相应的饮料。若投币为两个1元面值,则出饮料同时还回退还5角钱。
(1)分析因果
(2)(3)因果图
(4)配合决策表法使用
另一种场景:在线购物网站的结账功能
(1)分析因果
输入(原因):
用户名(U):有效(V)或无效(I)
密码(P):正确(C)或错误(E)
信用卡号(CC):有效(V)或无效(I)
库存(ST):有货(A)或缺货(O)
输出(结果):
成功结账(S)
错误提示(E)
(2)(3)因果图 加约束
确定原因(输入)和结果(输出):如上所述。
分析原因与结果之间的关系:
- 如果用户名有效(U-V)且密码正确(P-C),则可能成功结账(S)。
- 如果信用卡号无效(CC-I),则不会成功结账,会显示错误提示(E)。
- 如果库存缺货(ST-O),则不会成功结账,也会显示错误提示(E)。
(4)转换为决策表
在这个表格中,我们使用了“✓”来表示某种输入组合下的预期输出结果。例如,在用户名有效(V)、密码正确(C)、信用卡号有效(V)且库存有货(A)的情况下,预期的输出结果是成功结账(S)。对于其他所有输入组合,预期的输出结果是错误提示(E)。
1.5 决策表法
决策表(也称判定表)是分析和表达多逻辑条件下执行不同操作的情况的工具,可以把复杂逻辑关系和多种条件组合的情况表达的比较明确。
决策表通常由4部分组成:条件桩、条件项、动作桩、动作项。
- 条件桩:列出问题的所有条件。
- 条件项:列出所列条件下的取值,在所有可能情况下的真假值。
- 动作桩:列出问题规定可能采取的动作。
- 动作项:列出在条件项的各种取值下应采取的动作。
1.4.1 步骤
决策表的建立应当根据软件规格说明书,分为以下几个步骤:
(1)确定规则个数;
(2)列出所有条件桩和动作桩;
(3)填入条件项;
(4)填入动作项,制定初始决策表;
(5)简化,合并相似规则或者相同动作。
在简化并得到最终决策表后,只要选择适当的输入,使决策表每一列的输入条件得到满足即可生成测试用例。
上面因果图法的决策表如下:
条件和中间状态的组合会得到不同结果
例如框中信息,条件C1C3,投入1元5角并按下“可乐”按钮,得到结果E2,送出“可乐”饮料;
例如第10列,条件C5,为投币只按键,结果为无反应。
1.5 场景法
前提:用事件触发来控制流程,事件触发时的情形变形成场景,而同一事件不同的触发顺序和处理结果就形成了事件流。
场景法从用户的角度出发,模拟用户在使用软件或系统时的各种操作流程,以发现可能存在的错误或缺陷。
用例场景是通过描述流经用例的路径来确定的过程,这个流经过程要从用例开始到结束遍历其中所有的基本流和备选流。
用例场景是通过描述流经用例的路径来确定的过程,这个流经过程要从用例开始到结束遍历其中所有的基本流和备选流。
- 基本流:按照正确的业务流程实现的一条操作路径,即模拟用户正确的操作流程。
- 备选流:导致程序出现错误的操作流程,即模拟用户可能发生的错误操作或异常情况。
1.5.1 步骤
1.5.2 案例
以ATM取款机为例,基本流可能是用户插入银行卡、输入密码、选择取款功能、输入取款金额并成功取款。备选流则可能包括密码输入错误、银行卡无效、ATM机内现金不足等情况。
流程场景图中,红色为基本流。
程序用例场景如下表:
设计用例覆盖每个场景:
总结
黑盒测试的每种测试方法都有各自的优缺点,需要测试人员根据实际项目特点和需要选择合适的方法设计测试用例。以下是选择方法的几条经验:
- 在任何情况下都必须选择边界值分析方法。经验表明用这种方法设计出的测试用例发现程序错误的能力最强;
- 必要时用等价类划分法补充一些测试用例;
- 用错误推测法再追加一些测试用例;
- 如果程序的功能说明中含有输入条件的组合情况,则可选用因果图法和决策表法。