黑盒测试是软件测试的主要方法之一,也可以称为功能测试、数据驱动测试或基于规格说明的测试。测试员通过输入数据、接收输出、检验结果这样的方法对软件的实际行为的测试。在测试时,我们就把程序看作一个不能打开的黑盒子,即我们在完全不考虑程序内部结构和内部特性的情况下对程序接口进行测试。
黑盒测试着眼于程序外部结构,不考虑内部逻辑结构,主要针对软件界面和软件功能进行测试。黑盒测试有几个常用的方法:
1 等价类划分法
把软件具有相似输入、相似输出、相似操作的测试用例分在一组,这些组就是等价划分。等价划分后,可以只用在每个组中选择一个测试用例进行测试。等价类划分法就是解决如何选择适当的数据子集来代表整个数据集的问题,通过降低测试的数目去实现“合理的”覆盖,覆盖了更多的可能数据,以发现更多的软件缺陷。
等价类划分有两种不同的情况:有效等价类和无效等价类。
有效等价类:是合理的、有意义的输入数据构成的集合。
无效等价类:与有效等价类的定义恰好相反。
设计测试用例时,要同时考虑这两种等价类。因为软件不仅要能接收合理的数据,也要能经受意外的考验。这样的测试才能确保软件具有更高的可靠性。等价类划分法是一种典型的、重要的黑盒测试方法,它将程序所有可能的输入数据划分成若干个等价类,然后从每个部分中选取具有代表性的数据当做测试用例进行合理的分类,测试用例由有效等价类和无效等价类的代表组成,从而保证测试用例具有完整性和代表性,利用这一方法设计测试用例可以不考虑程序的内部结构,以需求规格说明书为依据,选择适当的典型子集,认真分析和推敲说明书的各项需求,特别是功能需求,尽可能多地发现错误。等价类划分法是一种系统性的确定要输入的测试条件的方法。
等价类划分的原则:
- 在输入条件规定了取值范围或值的个数的情况下,可以确定一个有效等价类和两个无效等价类。
- 在输入条件规定了输入值的集合或者规定了“必须如何”的条件的情况下,可以确定一个有效等价类和一个无效等价类。
- 在输入条件是一个布尔量的情况下,可确定一个有效等价类和一个无效等价类。
- 在规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可以确定n个有效等价类和一个无效等价类。
- 在规定了输入数据必须遵守的规则的情况下,可以确定一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)
- 在确知以划分的等价类中,各元素在程序处理中的方式不同的情况下,则应再将该等价类进一步划分为更小的等价类。
2 边界值分析法
边界值分析是一种补充等价类划分的测试用例设计技术,它不是选择等价类的任意元素,而是选择等价类边界的测试用例。
边界值设计测试用例的原则:
- 如果输入条件规定了值的范围,则应取刚达到这个范围的边界的值,以及刚刚超越这个范围边界的值作为测试输入数据
- 如果输入条件规定了值的个数,则用最大个数、最小个数、比最小个数少1、比最大个数多1的数作为测试数据
- 如果程序的规格说明给出的输入域或输出域是有序集合,则应选取集合的第一个元素和最后一个元素作为测试用例
- 如果程序中使用了一个内部数据结构,则应当选择这个内部数据结构边界上的值作为测试用例。
- 分析规格说明,找出其他可能的边界值
3 因果图法
前面介绍的等价类划分和边界值分析,都是着重考虑从输入条件,但没有考虑输入条件之间的联系、相互制约组合等。但是,如果考虑所有输入条件之间的相互组合,由于组合情况多,那么可能的组合数将会是天文数字。因此应该用某种方法来选择输入条件的子集,再考虑他们的组合。这就需要使用因果图,它是一种帮助人们系统地选择一组高效测试用例的方法。
利用因果图导出测试用例一般要经过以下几个步骤:
例题:
分析:
出判定表:
4 判定表法
判定表通常由4个部分组成:
- 条件桩(Condition Stub):列出了问题的所有条件,通常认为列出的条件的次序是无关紧要的
- 动作桩(Action Stub):列出了问题规定可能采取的操作,这些操作的排列顺序是没有约束的
- 条件项(Condition Entry):列出针对它左列条件的取值,在所有可能情况下应该采取的真假值
- 动作项(Action Entry):列出在条件想的各种取值情况下应该采取的动作
- 规则:任何一个条件组合的特定取值及其相应要执行的操作。在判定表中贯穿条件项和动作项的一列就是一条规则。显然,判定表中列出多少组条件取值,也就有多少条规则,也就是说条件项和动作项就有多少列
5 错误推导法
错误推测方法的基本思想: 列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据他们选择测试用例。错误推导法就是在测试程序时,人们可以根据经验或直觉推测程序中可能存在的各种错误,从而有针对性地编写检查这些错误的测试用例的方法。