测试用例是为特定目标开发的测试输入、执行条件和预期结果的集合。设计测试用例通常有两种常用的测试方法:黑盒测试和白盒测试。
1.黑盒测试
黑盒测试把测试对象看做一个空盒子,不考虑程序的内部逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明,又称为功能测试或数据驱动测试。
黑盒测试方法主要是在程序的接口上进行测试,主要是为了发现以下错误。
是否有不正确或遗漏了的功能;在接口上,能否正确的接收输入,能否输出正确的结果;
是否有数据结构错误或外部信息访问错误;性能上是否能够满足要求;是否有初始化或终止性错误;
黑盒测试需要在所有可能的输入条件和输出条件中确定测试数据,以检查程序是否都能产生正确的输出;有时测试数据量太大,是不现实的。
黑盒测试的测试用例设计方法主要有如下几种。
(1)等价类划分。等价类划分是一种典型的黑盒测试方法,使用这一方法时,完全不考虑程序的内部结构,只依据程序的规格说明来设计测试用例。该方法把所有可能的输入数据即程序的输入域划分为若干个部分,然后从每一部分中选取少数有代表性的数据作为测试用例。
使用这一方法设计测试用例要经历划分等价类(列出等价类表)和选取测试用例两步。
第一步首先划分等价类。等价类是指某个输入域的子集合。在该子集合中,各个输入数据对揭露程序中的错误都是等效的。测试某等价类的代表值就等价于对这一类其他值的测试。等价类的划分有两种不同的情况:有效等价类是指对于程序的规格说明来说,是合理的、有意义的输入数据构成的集合;无效等价类是指对于程序的规格说明来说,是不合理的、无意义的输入数据构成的集合。
第二步再从划分出的等价类中按以下原则选择测试用例。为每一个等价类规定一个唯一编号;设计一个新的测试用例,使其尽可能多地覆盖尚未被覆盖的有效等价类,重复这一步,直到所有的有效等价类都被覆盖为止;设计一个新的测试用例,使其尽可能多地覆盖尚未被覆盖的无效等价类,重复这一步,直到所有的无效等价类都被覆盖为止。
(2)边界值分析。边界值分析也是一种黑盒测试方法,是对等价类划分方法的补充。人们从长期的测试工作经验得知,大量的错误是发生在输入或输出范围的边界上,而不是在输入范围的内部。因此针对各种边界情况设计测试用例,可以查出更多的错误。使用边界值方法设计测试用例,应当选取正好等于、刚刚大于或刚刚小于边界的值作为测试数据。
(3)错误推测法。人们也可以靠经验和直觉推测程序中可能存在的各种错误,从而有针对性地编写检查这些错误的例子。其基本思想是:列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据它们选择测试用例。
(4)因果图。如果在测试时必须考虑输入条件的各种组合,可使用一种适于描述多种条件的组合,相应产生多个动作的形式来设计测试用例,这就需要利用因果图。这种方法最终生成的就是判定表。它适合于检查程序输入条件的各种组合情况。用因果图生成测试用例的基本步骤是:
分析软件规格说明描述中,哪些是原因(即输入条件或输入条件的等价类),哪些是结果(输出条件),并给每个原因和结果赋予一个标志符;
分析软件规格说明描述中的语义,找出原因与结果之间,原因与原因之间对应的是什么关系?根据这些关系,画出因果图;
由于语法或环境限制,有些原因与原因之间,原因与结果之间的组合情况不可能出现。为表明这些特殊情况,在因果图上用一些记号标明约束或限制条件;
把因果图转换成判定表;
把判定表的每一列拿出来作为依据,设计测试用例。
2.白盒测试
白盒测试把测试对象看做一个透明的盒子,它允许测试人员利用程序内部的逻辑结构和有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。通过在不同点检查程序的状态,确定实际的状态是否与预期的状态一致,又称为结构测试或逻辑驱动测试。
白盒测试主要对程序模块进行如下检查:
对程序模块的所有独立的执行路径至少测试一次;
对所有的逻辑判定,取"真"与取"假"的两种情况都至少测试一次;
在循环的边界和运行界限内执行循环体;
测试内部数据结构的有效性等。
3.逻辑覆盖
逻辑覆盖是以程序内部的逻辑结构为基础的设计用例的技术。它属白盒测试,包括语句覆盖、判定覆盖、条件覆盖、判定-条件覆盖、条件组合覆盖、路径覆盖等。
语句覆盖:就是设计若干个测试用例,运行被测程序,使每一可执行语句至少执行一次。
判定覆盖:设计若干个测试用例,运行被测程序,使程序中每个判断的取真分支和取假分支至少经历一次,又称为分支覆盖。
条件覆盖:设计若干个测试用例,运行被测程序,使程序中每个判断的每个条件的可能取值至少执行一次。
判定-条件覆盖:设计足够的测试用例,使判断中每个条件的所有可能取值至少执行一次,每个判断中的每个条件的可能取值至少执行一次。
条件组合覆盖:设计足够的测试用例,运行被测程序,使每个判断的所有可能的条件取值组合至少执行一次。
路径覆盖:设计足够的测试用例,覆盖程序中所有可能的路径。