
黑盒测试,也称功能测试,是测试各项功能能否正常使用。在测试中,程序被视为打不开的黑匣子。在完全不考虑程序内部结构和特性的情况下,在程序接口处进行测试。它只检查程序功能是否按照需求规格正常使用,程序是否能正确接收输入数据并产生正确的输出信息。黑盒测试侧重于程序的外部结构,不考虑内部逻辑结构,主要测试软件接口和软件功能。
黑盒测试是从用户的角度出发,基于输入数据和输出数据之间的对应关系。很明显,如果外部特性的设计有问题或者规格有问题,用黑盒测试方法是发现不了的。
黑盒测试有七种测试方法,即等价类划分法、边界值分析法、错误推断法、因果图法、决策表驱动法、功能图法和正交实验法。下面将一一介绍。
等价类划分方法等价类划分是将所有可能的输入数据,即一个程序的输入域划分成若干部分(子集),然后从每个子集里选取几个有代表性的数据作为测试用例。该方法是一种重要且常用的黑盒测试用例设计方法。
1、划分等价类:
等价类是指输入字段的子集。在这个子集中,每个输入数据相当于暴露程序中的错误。有理由假设测试一个等价类的代表值等于测试这个类的其他值。因此,可以将所有的输入数据合理地划分为若干个等价类,以每个等价类中的一个数据作为测试的输入条件,就可以使用少量具有代表性的测试数据。获得更好的测试结果。等价类可以分为两种不同的情况:有效等价类和无效等价类。
有效等价类:指对程序的规格说明来说合理且有意义的一组输入数据。有效的等价类可以用来检验程序是否实现了规格书中规定的功能和性能。
无效等价类:与有效等价类的定义正好相反。当设计测试用例时,我们应该考虑两个等价类。因为,软件不仅要能接收到合理的数据,还要能经受住意想不到的考验。这种测试可以保证软件具有较高的可靠性。
2、划分等价类的方法:
以下是确定等价类的六个原则。
在输入条件指定取值范围或取值个数的情况下,可以建立一个有效等价类和两个无效等价类。
在输入条件指定输入值的集合或“必须如何”的条件下,可以建立有效等价类和无效等价类。
如果输入条件是布尔量,可以确定有效等价类和无效等价类。
(4)在输入数据的一组值被指定(假设n)并且每个输入值要被程序分别处理的条件下,可以建立n个有效等价类和一个无效等价类。
在输入数据必须遵守规则的条件下,可以建立一个有效等价类(符合规则)和几个无效等价类(从不同角度违反规则)。
如果已知划分后的等价类中的每个元素在程序处理中有不同的方式,那么等价类应该进一步划分为更小的等价类。
3、设计测试案例:
等价类建立后,可以建立等价类表,列出所有划分的等价类:输入条件有效等价类无效等价类。
4、设计原则:
然后根据以下三个原则从划分的等价类中设计测试用例:
为每个等价类分配一个唯一的编号。
设计一个新的测试用例,覆盖尽可能多的有效等价类,重复这一步。直到覆盖所有有效的等价类。
(3)设计一个新的测试用例,只覆盖一个未被覆盖的无效等价类,重复此步骤,直到所有无效等价类都被覆盖。
边界值分析法是等价类划分法的补充。
(1)边界值分析方法的考虑:
长期的测试经验告诉我们,大量的误差发生在输入或输出范围的边界上,而不是在输入输出范围内。因此,针对各种边界条件设计测试用例可以找出更多的错误。使用边界值分析法设计测试用例时,首先要确定边界条件。通常情况下,输入和输出等价类的边界是应该重点测试的边界。我们应该选择恰好等于、刚好高于或刚好低于边界的值作为测试数据,而不是选择等价类中的典型值或任意值作为测试数据。
(2)基于边界值分析法的测试用例选择原则:
1、如果输入条件指定了值的范围,则刚好达到该范围边界的值和刚好超出该范围边界的值应被视为测试输入数据。
2、如果在输入条件中指定了值的数量,则最大数量、最小数量以及比最小数量小1且比最大数量大1的数量将被用作测试数据。
3、根据规范中的每个输出条件,使用前面的原则1。
4、根据规范中的每个输出条件,应用前面的原则2。
5、如果程序规范中给定的输入字段或输出字段是有序集合,则应选择该集合的第一个元素和最后一个元素作为测试用例。
6、如果程序中使用了内部数据结构,则应选择该内部数据结构边界上的值作为测试用例。
7、分析规格并找出其他可能的边界条件。
错误推断法是根据经验和直觉来推断程序中所有可能出现的错误,从而有针对性地设计测试用例。
错误推断法的基本思想:列出程序中所有可能出现的错误和容易出错的特殊情况,并据此选择测试用例。例如,在单元测试中列出了模块中的许多常见错误。以往产品测试中发现的错误都是经验的总结。同样,当输入数据和输出数据都为0时。输入表为空或只有一行。这些都是容易出错的情况。可以选择这些情况的例子作为测试用例。
因果图引入了等价类划分方法和边界值分析方法,这两种方法都着眼于输入条件,但没有考虑输入条件的联系和组合。考虑到输入条件的相互组合,可能会出现一些新的情况。但是检查输入条件的组合并不容易。即使将所有输入条件划分为等价类,它们之间的组合也相当多。因此,有必要以一种适合于描述多个条件的组合并相应地生成多个动作的形式来考虑测试用例的设计。这就需要使用因果图(逻辑模型)。
因果图法的最终结果是决策表。它适用于检查程序输入条件的各种组合。
利用因果图生成测试用例的基本步骤:
(1)分析软件规范描述中的原因(即输入条件或输入条件的等价类)和结果(即输出条件),并为每个原因和结果分配一个标识符。
(2)分析软件规格说明描述中的语义。找出因果之间,因与因之间的对应关系。根据这些关系,画出因果图。
(3)由于语法或环境的限制,某些原因无法相互结合或原因与结果之间无法结合。为了表示这些特殊情况,在因果图上用一些标记来表示约束或限制。
(4)将因果图转换成决策表。
(5)取出判断表的每一列作为设计测试用例的基础。由因果图(在部分和组合关系下)生成的测试用例包含了所有真、假输入数据的情况,测试用例的数量最少,随着输入数据数量的增加,测试用例的数量线性增加。
判断表驱动方法1、条件桩:列出问题的所有条件。一般认为所列条件的顺序并不重要。
2、操作堆:列出问题中指定的可能操作。这些操作的顺序没有限制。
3、条件项:列出其中所列条件的值,以及所有可能情况下的真值和假值。
4、操作项:列出其中所列条件的值,以及所有可能情况下的真值和假值。
5、规则:任意条件组合的具体值以及要执行的相应操作。贯穿决策表中条件项和操作项的列是一个规则。显然,决策表中列出的条件组有多少,规则就有多少,条件项和操作项的列也有多少。
建立判断表的依据和步骤:
1、确定规则的数量。如果有n个条件,每个条件有两个值(0,1),所以有2N个规则。
2、列出所有条件堆和动作堆。
3、填写条件项。
4、填写行动项目。制作初始决策表。
5、简化版。合并相似的规则或相同的操作。
适合使用指定决策表来设计用例的条件:
1、规则描述以决策表的形式给出,或者可以很容易地转换成决策表。
2、条件的排序顺序不影响这些操作。
3、规则的顺序不影响这些操作的执行。
4、当满足某一规则的条件并确定要执行的操作时,没有必要检查其他规则。
5、如果一个规则要执行多个操作,这些操作的执行顺序无关紧要。
功能图法利用功能图直观地表示程序的功能描述,机械地生成功能图的用例。功能图是黑盒和白盒混合用例的设计方法。
功能图由状态转换图和逻辑功能模型组成:
1、状态转移图用于表示输入数据序列及其对应的输入数据。在状态转换图中,输入数据和当前状态决定输出数据和后续状态。
2、逻辑功能模型用于表示一种状态下输入条件和输出条件的对应关系。逻辑函数模型只适合描述静态描述,输出数据只由输入数据决定。测试用例由通过测试的一系列状态和每个状态下的输入/输出数据必须满足的一对条件组成。
功能图法要用到逻辑覆盖和路径测试的概念和方法。要求设计人员对程序的逻辑结构有清晰的理解。
生成用例:
1、生成本地测试用例:在每个状态下,从因果图中生成本地测试用例。本地测试库由原因值(输入数据)和相应的结果值(输出数据或状态)组成。
2、测试路径生成:使用上述规则生成从初始化状态到最终状态的测试路径。
3、测试用例合成:合成测试路径和功能图中各状态的局部测试用例。结果是从视觉状态到最终状态的状态序列,以及每个状态中输入数据和相应输出数据的组合。
4、测试用例合成算法:条件树构造。
正交试验法从大量的试验数据中选择合适的、有代表性的点,合理安排试验的设计方法。
1、提取函数描述,构造因子-状态表将影响实验指标的条件称为因子,而影响实验因子的条件称为因子的状态。使用正交试验设计方法设计测试用例时,首先要根据规范找出影响被测软件功能实现的操作对象和外部因素,并将其作为因素;每个因素的值被视为状态。软件需求说明书中的功能需求进行了划分,将总体的、一般的功能需求逐层分解展开为具体的、相对独立的、基本的功能需求。这样就可以确定被测软件中的所有因素,为确定各因素的权重提供参考依据。确定因素和状态是设计测试用例的关键。因此,要求尽可能全面、正确地确定该值,以确保测试用例的设计是完整有效的。
2、加权筛选生成因子分析表。因素和状态的选择可以根据它们的重要性来加权。权重可以根据每个因素和状态的作用、出现的频率和测试的需要来确定。
3、利用正交表构造测试数据集,利用正交实验设计方法设计测试用例,与利用等价类划分、边界值分析、因果图等方法相比,具有以下优点:节省测试工时;可以控制生成的测试用例的数量;测试用例有一定的覆盖率。
测试方法综合策略1、首先进行等价划分,包括输入输出条件的等价划分,把无限测试变成有限测试。
2、使用边界值分析。
3、使用错误推测并添加一些用例。
4、对照程序逻辑检查用例设计的逻辑覆盖,努力达到覆盖标准。
5、如果程序功能描述中有输入条件的组合,可以选择因果图和决策表驱动法。
6、对于参数配置软件,正交试验法用于选择较少的组合以达到最佳效果。
7、功能图是用例设计的好方法,根据不同时期条件的有效性设计不同的测试数据。与业务流程清晰的系统相对应,测试过程中全程使用场景法,在案例中综合运用各种测试方法。









