本章主要介绍了黑盒测试技术的概念和常见的黑盒测试用例设计技术,通过本章的学习,应理解黑盒测试的概念,掌握应用黑盒测试的原则,掌握等价类的划分和边界值分析,熟练使用因果图、决策表设计测试用例,理解各种黑盒测试技术的特点及其适应情况。
- 黑盒测试:根据功能需求来测试程序是否按照预期工作,也称功能测试和行为测试。
- 目的:发现代码外部错误。
- 错误类型
a. 功能不正确或不完整
b. 接口错误
c. 接口所使用的数据结构错误
d. 行为或性能错误
e. 初始化和终止错误
类别 | 黑盒测试 | 白盒测试 |
---|---|---|
执行测试人员不同 | 用户和非开发人员 | 开发人员 |
覆盖目标不同 | 覆盖用户需求 | 覆盖所有代码 |
测试方法不同 | 捕捉数据或进行GUI界面回放工具 | 代码覆盖率检查工具 |
评估测试方法不同 | 观察程序输出 | 针对源代码 |
原则:
- 根据软件规格说明书设计测试用例
- 有针对性地查找问题,并正确定位等价类
- 检查功能是否有缺陷或错误现象
- 根据测试的重要性来确定测试等级和测试重点
- 检查接口处输入的信息是否正确接收,以及接受后能否输出正确的结果
- 认真选择测试策略
策略:
- 任何情况下必须采用边界值分析法
- 必要时采用等价类划分法补充
- 检查逻辑覆盖度,未达到标准需补充
- 含输入条件组合就选用因果图法
- 对业务流清晰的系统,可利用场景法
- 定义:程序输入域划分若干子集,然后从子集选取少数具有代表性数据作为测试用例。
- 等价类:输入域的子集合,有完备性和无冗余性的意义。
- 标准等价类测试:不考虑无效数据值
- 健壮等价类测试:考虑无效等价类
- 定义:对输入或输出的边界值进行测试。
- 利用输入变量最小值(min)、略大于最小值(min+)、输入值域内任意值(nom)、略小于最大值(max-)和最大值设计测试用例
- 定义:利用图解法分析输入的各种组合情况。
- 优点:
a. 考虑了输入情况的各种组合以及各个输入情况之间的相互制约关系
b. 能够高效地开发测试用例
c. 可以指出规格说明存在的不完整性和二义性
- 决策表是分析和表达多逻辑条件下执行不同操作的情况工具。
- 优点:能将复杂的问题按照各种可能的情况全部列举出来,简明并避免遗漏
- 组成部分:
a. 条件桩:列出问题的所有条件
b. 条件项:针对条件桩给出的条件列出所有可能的取值
c. 动作桩:列出问题规定的可能采取的操作
d. 动作项:指出在条件项的各组取值情况下应采取的动作
黑盒测试用例设计方法主要有以下几种:等价类划分法、边界值分析法、因果图法、决策表法、错误推测法等方法。
- 等价类划分法的特点:等价类划分法的优点是考虑了单个输入域的各类情况,避免了盲目或随机选取输入数据的布完整性和覆盖的不稳定性。等价类划分法虽然简单易用,但是没有对组合情况进行充分的考虑。需要结合其他测试用例设计的方法进行补充。
- 边界值分析法的特点:
a. 边界值分析不是从某等价类中随便挑一个作为代表,而是使这个等价类的每个边界都要作为测试条件。
b. 边界值分析不仅考虑输入条件,还要考虑输出空间产生的测试情况。- 因果图法的特点:
a. 考虑输入条件间的组合关系。
b. 考虑输出条件对输入条件的信赖关系,即因果关系。
c. 测试用例发现错误的效率高。
d. 能检查出功能说明书中的某些不一致或遗漏。- 决策表法的特点:在一个程序中,如果输入输出比较多,输入之间,输出之间相互制约的条件比较多,在这种情况下使用决策表更合适,它可以清楚地表达它们之间的各种复杂关系。错误推测法的特点:没有确定的步骤,很大程度上是凭经验进行的。
主要区别在于健壮等价类测试在标准等价类的基础上还要进行有效取值范围之外的输入(无效输入)的测试。
(1)首先为等价类表中的每一个等价类分别规定一个唯一的编号;
(2)设计一个新的测试用例,使它能够尽量覆盖尚未覆盖的有效等价类。重复这个步骤,直到所有的有效等价类均被测试用例所覆盖;
(3)设计一个新的测试用例,使它仅覆盖一个尚未覆盖的无效等价类。重复这个步骤,直到所有的无效等价类均被测试用例所覆盖。
(1)首先为等价类表中的每一个等价类分别规定一个唯一的编号;
(2)设计一个新的测试用例,使它能够尽量覆盖尚未覆盖的有效等价类,重复这个步骤直到所有的有效等价类均被测试用例所覆盖;
(3)设计一个新的测试用例,使它仅覆盖一个尚未覆盖的无效等价类,重复这个步骤,直到所有的无效等价类均被测试用例所覆盖
优点∶
1)比较简单,不需要了解程序内部的代码及实现;
2)与软件的内部实现无关
3)从用户角度出发,能很容易的知道用户会用到哪些功能,会遇到哪些问题;
4)基于软件开发文档,所以也能知道软件实现了文档中的哪些功能
5)在做软件自动化测试时较为方便
缺点∶不可能覆盖所有的代码,覆盖率较低,大概只能达到总代码量的30%