1. 集成测试目的
- 集成测试定义:在单元测试基础上,将所有模块按照概要设计要求组装成子系统或系统,进行集中测试。又称组装测试、联合测试、子系统测试或部件测试
- 集成测试时机:单元测试之后
- 集成测试对象:模块间的接口,接口之间的关系
- 集成测试特点
(1)单元测试具有不彻底性,对于模块间接口信息内容的正确性、相互调用关系是否符合设计无能为力。只能依靠集成测试来进行保障。
(2)同系统测试相比,集成测试用例是从程序结构出发的,目的性、针对性更强,测试项发现问题的效率更高,定位问题的效率也较高。
(3)能够较容易地测试到系统测试用例难以模拟的特殊异常流程,从纯理论的角度来讲,集成测试能够模拟所有实际情况。
(4)定位问题较快 - 集成测试关注点
(1)在把各个模块连接起来时,穿越模块接口的数据是否会丢失。
(2)各个子功能组合起来,能否达到预期要求的功能。
(3)一个模块的功能是否会对另一个模块的功能产生不利的影响。
(4)全局数据结构是否有问题,会不会被异常修改。
(5)单个模块的误差积累起来,是否会放大,从而达不到可以接受的程度 - 集成测试范围
- 集成测试层次
子系统内集成测试(模块)
子系统间集成测试 (可执行程序) - 集成测试策略:非增值式和增值式
2. 集成测试方法
- 非增式测试定义:分别测试每个模块,再把所有模块按设计要求放在一起结合成所要的程序
- 非增式测试优势:方法简单;允许多个测试人员并行工作
- 非增式测试缺点
(1)必须为每个模块准备相应的驱动模块和辅助桩模块,故测试成本较高;
(2)一旦集成后的系统包含多种错误,难以对错误定位和纠正 - 非增式集成的一种方法——大爆炸集成:把所有的系统组件一次性集合到被测试系统中,不考虑组件之间的相互依赖性或者可能存在的风险
- 大爆炸集成优点:
(1)可迅速完成集成测试,且只需极少数驱动模块和桩模块
(2)多个测试人员可并行工作 - 大爆炸集成缺点:
(1)发现错误时,定位和修改较为困难
(2)许多接口错误很容易躲过测试而进入系统测试 - 增式测试定义:这种集成方式又称渐增式组装。首先对一个个模块进行模块测试,然后将这些模块逐步组装成较大的系统,在组装的过程中边连接边测试,以发现连接过程中产生的问题。通过增值逐步组装成为要求的软件系统
- 增式测试优点:相对于非增式测试,可较早发现模块间的接口错误;发现问题也易于定位
- 增式测试缺点:测试周期长,可同时投入的人力物力受限
- 自顶向下特点:不需驱动模块,可采用深度优先或广度优先策略
自顶向下步骤:
1、从主控模块(“主程序”)为测试驱动,把对主控模块进行单元测试时引入的所有桩模块用实际模块替代。
2、依据所选的集成策略(深度优先或广度优先),每次只替代一个桩模块。
3、每集成一个模块即测试一遍。
4、只有每组测试完成后,才着手替换下一个模块
自顶向下适应范围
(1)产品的控制结构比较清晰和稳定
(2)产品的高层接口变化范围小
(3)产品的底层接口未定义或经常可能被修改。
(4)产品的控制模块具有较大的技术风险,需要尽早被验证
- 自顶向下优点
(1)较早的验证了主要的控制和判断。
(2)如果按深度方向组装,可以首先实现和验证一个完整的软件功能。
(3)最多只需一个驱动模块。
(4)支持故障隔离。 - 自顶向下缺点
(1)桩的开发和维护成本较大。
(2)底层组件的无法预计的需求可能会导致许多顶层组件的修改 - 当桩模块不能正确的向上传递有用信息,可以采用一些解决办法:
(1)将很多测试推迟到装模块用实际模块代替了之后进行。
(2)进一步开发能模拟实际模块功能的桩模块。
(3)自底向上集成和测试软件 - 自底向上特点:从具有最小依赖性的底层组件开始,按照依赖关系的结构,逐层向上集成,以检测整个系统的稳定性
自底向上步骤:
1、把底层模块组织成实现某个子功能的模块簇。
2、开发一个测试驱动模块,控制测试数据的输入和测试结果的输出。
3、每模块簇进行测试。
4、删除测试使用的模块驱动,用较高层模块把模块组织成为更大功能的新模块群
- 自底向上适应范围:底层接口比较稳定,高层接口变化比较频繁的产品
- 自底向上的优点:
(1)对底层模块进行了充分测试,可在任何一个叶节点已经就绪的情况下进行集成测试
(2)减少了桩模块的工作量
(3)支持故障隔离 - 自底向上的缺点:
(1)驱动模块的开发工作量较庞大
(2)高层测试集中在后期,不能及时发现设计上的错误
(3)底层的异常比较难覆盖 - 三明治策略:对软件结构中较上层,使用的是“自顶向下”法;对软件结构中较下层,使用的是“自底向上”法,两者相结合
- “自顶向下”法的主要优点:不需要测试驱动程序,能够在测试阶段的早期实现并验证系统的主要功能,而且能在早期发现上层模块的接口错误。
- “自顶向下”法的主要缺点:需要存根程序,可能遇到与此相联系的测试困难,低层关键模块中的错误发现较晚,而且用这种方法在早期不能充分展开人力。
“自底向上”法的优缺点与“自顶向下”法刚好相反