1. 按照开发阶段划分
按开发阶段划分的软件测试类型如图23- 10所示。
1)单元测试
单元测试又称模块测试,是针对软件设计的最小单元(即程序模块)进行正确性检 验的工作。
单元测试可以作为无错编码的一种辅助手段,在一次性的开发过程中使用。单元测试必须是可重复的,无论是在软件修改,或是移植到新的运行环境的过程中。因此,所有的测试都必须在整个软件系统的生命周期中进行维护。程序员有责任编写功能代码,同时也就有责任为自己的代码编写单元测试。
单元测试可以作为规格说明来工作,测试能够以规格说明为基础。代码能够针对它的规格说明,而不是针对自身进行测试。这样的测试不仅能够抓住编译器的缺陷,同时也能找到更多的编码错误,甚至是一些规格说明中的错误,因为好的规格说明可以使得测试的质量更高。
单元测试的原则如下。
● 应该尽早进行软件单元测试。
● 应该保证单元测试的可重复性。
● 尽可能采用测试自动化的手段来支持单元测试活动。 单元测试的主要内容包括。
● 单元功能测试。
● 单元接口测试。
● 单元局部数据结构测试。
● 单元中重要的执行路径测试。
● 单元的各类错误处理路径测试。
● 单元边界条件测试。
2)集成测试
集成测试又称组装测试、联合测试、子系统测试或部件测试。集成测试是在单元测试的基础上,将所有模块按照设计要求(如根据结构图)组装成子系统或系统进行的测 试活动。
单元测试完成后便进入集成测试阶段。 集成测试关注的是模块间的接口,接口之间的数据传递关系,单元组合后是否实现预计的功能,其目的是要找出在模块接口上面,包括整体体系结构上的问题,其测试的依据来自系统的高层设计(架构设计或概要设计)。 集成测试组装的对象比单元测试的对象级别要高。
软件的集成测试工作最好由不属于该软件开发组的软件设计人员承担,以提高集成测试的效果。
集成测试的目的包括。
● 在把各个模块连接起来的时候,穿越模块接口的数据是否会丢失。
● 一个模块的功能是否会对另一个模块的功能产生不利的影响。
● 各个子功能组合起来,能否达到预期要求的父功能。
● 全局数据结构是否有问题。
● 单个模块的误差累积起来,是否会放大,从而达到不能接受的程度。
在单元测试的同时可进行集成测试,发现并排除在模块连接中可能出现的问题,最终构成要求的软件系统。
集成策略就是在测试对象分析的基础上,描述软件模块集成(组装)的方式、方法。 集成的基本策略比较多,分类比较复杂,但不管怎样分,所有分类方法都可以归结为非 增值式和增值式两大类,其余的很多方法都是在此基础上的细分。
非增值式策略,先分别测试每个模块,再把所有模块按设计要求放在一起结合成所要的程序。其优点一是方法简单,二是允许多个测试人员并行工作,对人力、物力资源利用率较高。缺点是必须为每个模块准备相应的驱动模块和辅助桩模块,故测试成本较高;其次,一旦集成后的系统包含多种错误,难以对错误定位和纠正。
增值式策略,这种集成方式又称渐增式组装。首先对一个个模块进行模块测试,然后将这些模块逐步组装成较大的系统,在组装的过程中边连接边测试,以发现连接过程中产生的问题。通过增值逐步组装成为要求的软件系统。相对非增值式策略,可以较早发现模块间的接口错误,发现问题也易于定位。它的缺点是测试周期比较长,可以同时投入的人力物力受限。