测试用例就是测试数据及与之相关的功能的一个特定集合,它是为验证被测试程序(为测试程序路径或验证是否符合特定功能等方面的需求)而设计的。在单元测试过程中,测试用例的设计应与复审工作相结合,根据设计的测试用例选取不同的测试数据,将增加发现各类错误的可能性;另外,根据项目的具体情况确定测试用例项。如:测试用例编号、用例输入、用例预期输出、被测单元的版本号、实际输出等。单元测试用例的设计既可以使用白盒测试也可以使用黑盒测试,但以白盒测试为主,黑盒测试侧重于功能,白盒测试侧重于逻辑。
白盒测试进入的前提条件是测试人员已经对被测试对象有了一定的了解,基本上明确了被测试软件的逻辑结构。具体过程就是针对程序逻辑结构设计和加载测试用例,驱动程序执行,检查在不同点程序的状态,以确定实际的状态是否与预期的状态一致。
一般来说,为了度量测试的完整性,测试工作中通常要求达到一定的覆盖率要求。因为通过覆盖率的统计可以知道测试是否充分,对软件的哪个部分所做的测试不够,指导我们如何设计增加覆盖率的测试用例。这样就能够提高测试质量,尽量避免设计无效的用例。
在白盒测试的范畴内通常使用下面几种测试覆盖率来度量测试,如:语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖、路径覆盖等。白盒测试最低应该达到的覆盖率目标是:语句覆盖率达到100%,分支覆盖率达到100%,覆盖程序中主要的路径,主要路径是指完成模块正常功能的路径和功能等其他异常处理执行的路径。
测试人员在实际工作中要根据不同的覆盖要求来设计面向代码的单元测试用例,运行测试用例后至少应该实现如下几个覆盖需求:
- 对程序模块的所有独立的执行路径至少覆盖一次。
- 对所有的逻辑判定,真假两种情况都至少覆盖一次。
- 在循环的边界和运行界限内执行循环体,即用边界值的方法来测试循环体。
- 测试内部数据结构的有效性等。
黑盒测试是要首先了解软件产品具备的功能和性能等需求,再根据需求设计一组测试用例以验证程序内部活动是否符合需求分析和设计要求的活动。在黑盒测试范畴内通常使用功能覆盖率来度量测试的完整性。而功能覆盖率中最常见的就是需求覆盖,目的就是通过设计一定的测试用例,使得每个需求点都被测试到。其次,还包括接口覆盖(又叫入口点覆盖),其目的就是通过设计一定的测试用例使系统的每个接口都被测试到。黑盒测试应达到的覆盖率目标是:程序单元正确地实现了需求分析和设计上要求的所有功能,满足性能要求,同时程序单元要有可靠性和安全性。
测试人员在实际工作中至少应该设计能够覆盖如下需求的基于功能的单元测试用例:
(1)测试程序单元的功能是否实现。
(2)测试程序单元性能是否满足要求(可选)。
(3)是否有可选的其他测试特性,如边界、余量、安全性、可靠性、强度(压力)测试、人机交互界面测试等。
无论是白盒测试还是黑盒测试,每个测试用例都应该包含下面4个关键元素:
(1)被测单元模块初始状态声明,即测试用例的开始状态(仅适用于被测单元维持了调用中间状态的情况)。
(2)被测单元的输入,包含由被测单元读入的任何外部数据值。
(3)该测试用例实际测试的代码,用被测单元的功能和测试用例设计中使用的分析来说明,如:单元中哪一个决策条件被测试。
(4)测试用例的期望输出结果(在测试进行之前的测试说明中定义)。