序
前面几周已经写了关于白盒测试、黑盒测试的博客,最后一篇来写写集成测试:
一、概念
在单元测试的基础上,将所有模块按照设计要求,组装成为子系统或系统,进行的测试叫集成测试。
实践表明,一些模块虽然能够单独地工作,但并不能保证连接起来也能正常的工作。程序在某些局部不会出现的问题,在全局上很有能会暴露出来,影响功能的正常实现,引起这些问题的因素,多半是接口的不匹配、不正确,或者是误差的累积造成的,具体来讲,可能由以下原因:
1.在把各个模块连接起来的时候,穿越模块接口的数据是否会丢失;
2.各个子功能组合起来,能否达到预期要求的父功能;
3.一个模块的功能是否会对另一个模块的功能产生不利的影响;
4.全局数据结构是否有问题;
5.单个模块的误差积累起来,是否会放大,从而达到不可接受的程度。
要想发现并排除在模块连接中可能发生的上述问题,就需要进行集成测试。
二、集成测试的模式与方法:
首先看两个非常重要的概念:
驱动程序/驱动模块(driver),用以模拟被测模块的上级模块。驱动模块在集成测试中接受测试数据,把相关的数据传送给被测模块,启动被测模块。
桩程序/桩模块(stub),也有人称为存根程序,用以模拟被测模块工作过程中所调用的模块。桩模块由被测模块调用,它们一般只进行很少的数据处理,例如打印入口和返回,以便于检验被测模块与其下级模块的接口。
方法1 自顶向下法
从主控模块(主程序)开始,沿着软件的控制层次向下移动,逐渐把各个模块结合起来。 组装过程可以采用深度优先策略和宽度优先策略。
方法2 自底向上法
测试从原子模块(软件结构最底层的模块)开始集成以进行测试。
方法3 三明治集成
自上下两头向中间集成测试。
三、几种方法的比较
1、自顶向下法
优点: 不需要测试驱动程序; 能够在测试阶段的早期实现并验证系统的主要功能; 能在早期发现上层模块中的接口错误。
缺点: 需要桩程序,要使桩模块能够模拟实际子模块的功能十分困难; 同时涉及复杂算法,真正输入/输出的模块一般在底层,他们是最容易出问题的模块,到测试和集成的后期才遇到这些模块,一旦发现问题导致过多的回归测试。
2、自底向上法
优点: 不需要桩程序; 同时由于涉及到复杂算法和真正输入/输出的模块最先得到集成和测试,可以把最容易出问题的部分在早期解决; 自底向上增值的方式可以实施多个模块的并行测试,提高测试效率。
缺点: “程序一直未能作为一个实体存在,直到最后一个模块加上去后才形成一个实体”。也就是说,在自底向上集成和测试的过程中,对主要的控制直到最后才接触到。
3、三明治集成
优点:它将自顶向下和自底向上的集成方法有机地结合起来,不需要写桩程序因为在测试初自底向上集成已经验证了底层模块的正确性。
缺点:在真正集成之前每一个独立的模块没有完全测试过。
四、总结
单元测试无法保证整个系统运行时的正确性,集成测试是非常有必要的。