一、集成测试概念
集成测试也叫组装测试、联合测试、子系统测试或部件测试,是在单元测试的基础上,将所有函数按照概要设计要求组装成为子系统或系统所进行的测试;它和单元测试所关注的范围是不同的,因此,它们在发现问题的集合上包含有不相交的区域,不能使用集成测试来替代单元测试,反之亦然。
二、集成测试关注点
1.模块间的接口
把各个模块连接起来的时候,穿越模块接口的数据是否会丢失;
全局数据结构是否有问题,会不会被异常修改;
2.集成后的功能
各个子功能组合起来,能否达到预期要求的父功能;
一个模块的功能是否会对另一个模块的功能产生不利的影响;
单个模块的误差积累起来,是否会放大,从而达到不可接受的程度。
三、集成测试的层次
四、集成测试策略的主要模式
现有一个模块包含以下几个函数,将以此为例讲解每种模块的运作方式:
1.大爆炸集成方式***
这种方式中,首先对每个模块分别进行单元测试,然后再把所有单元组装在一起进行测试,最终得到要求的软件系统,如图所示:
缺点:
a.这种一次性组装方式试图在辅助模块的协助下,在模块单元测试的基础上,将所测模块连接起来进行测试。但是由于程序中不可避免地存在模块间接口、全局数据结构等方面的问题,所以一次试运行成功的可能性并不很大;
b.在发现错误的时候,其问题定位和修改都比较困难;
c.即使被测系统能够被一次性集成,但还是会有许多接口错误很容易的躲过测试而进入到系统测试范围内。
适用范围:
a.一个维护型项目(或功能增强型项目),其以前的产品已经很稳定,并且新增的项目只有少数几个组建被增加或修改;
b.被测系统比较小,并且它的每个函数都经过了充分的单元测试。
2.自顶向下集成方式***
采用了和设计一样的顺序对系统进行测试,它在第一时间内对系统的控制接口进行验证;采用自顶向下的集成测试首先集中于顶层的组件,然后逐步测试处于底层的组件;可采用深度优先和广度优先策略。
优点:
a.在测试过程中较早的验证了主要的控制和判断点;
b.如果选用按深度方向组装的方式,可以首先实现和验证一个完整的软件功能;
c.功能可行性较早得到证实,还能够给开发者和用户带来成功的信心;
d.最多只需一个驱动,减少了驱动器开发的费用;
e.支持故障隔离;
缺点:
a.桩的开发和维护时本策略的最大成本;
b.底层组件行为的验证被推迟了;
c.随着底层组件的不断增加,整个系统越来越复杂,导致底层组件的测试不充分,尤其是那些被重用的组件。
适用范围:
a.产品控制结构比较清晰和稳定;
b.产品的高层接口变化较小;
c.产品的底层接口未定义或经常可能被修改;
d.产品的控制组件是具有较大的技术风险,需要尽早被验证;
e.希望尽早能够看到产品的系统功能行为。
3.自底向上集成方式***
优点:
a.允许对底层组件的早期验证,可以在任何一个叶子节点已经就绪的情况下进行集成测试;
b.在工作的最初可能会并行进行集成,在这一点上比使用自顶向下的策略效率高;
c.减少了桩的工作量,毕竟在集成测试中,桩的工作量远比驱动的工作量要大得多,但是为了模拟一些中断或异常,可能还是需要设计一定的桩;
d.该方法也支持故障隔离。
缺点:
a.驱动的开发工作量也是很庞大的;
b.对高层的验证被推迟到了最后,设计上的错误不能被及时发现,尤其是对于那些控制结构在整个体系中非常关键的产品。
适用范围:
a.底层接口比较稳定、变动较少的产品;
b.高层接口变化比较频繁的产品;
c.底层组件较早被完成的产品。
4.三明治集成策略
三明治集成就是这样一种方法,它把系统划分成三层,中间一层为目标层;测试的时候,对目标层上面的一层使用由顶向下的集成策略,对目标层下面的一层使用自底向上的集成策略,最后测试在目标层会合。
优点:集合了自顶向下和自底向上两种策略的优点;
缺点:中间层在被集成前测试不充分;
适用范围:大部分软件开发项目都可以使用这种集成策略;
5.基干集成策略
在很多系统中,尤其是嵌入式系统中,一般可以划分成两个部分:内核部分(基干部分)和外围部分,这两部分经常会被不同的项目组并行开发。它具有如下特点:
内核部分提供了系统最基本的功能和服务;
外围部分以内核为基础,不能脱离内核而独自使用;
内核具有很高的耦合性,并且相当复杂,试图设置桩会是相当困难且成本很高的事情;
外围部分可以分为应用子系统和控制子系统,应用子系统内耦合性不大,而控制子系统内具有较高的耦合性。
步骤:
a.识别外围的应用子系统部分、控制子系统部分,基干部分;
b.对基干中所有的组件进行大爆炸集成,形成基干子系统,并使用一个驱动检查经过大爆炸的基干;
c.对控制子系统进行自顶向下的集成;
d.对各应用子系统进行自底向上的集成;
e.对基干子系统,控制子系统和各应用子系统进行大爆炸集成形成整个系统。
优点:具有三明治的优点,更适合于大型复杂项目的集成。
缺点:
a.必须对系统的结构和相互依存性进行仔细的分析;
b.必须开发驱动和桩,并且由于被测系统复杂想导致驱动和桩开发工作量的加大;
c.由于局部采用了大爆炸的策略,因此有些接口可能测试不充分。
6.分层集成策略
通过增量式集成的方法验证一个具有层次体系结构的应用系统的稳定性和可互操作性;一般通过功能把系统划分成不同功能层次的子系统,子系统内部具有较高的耦合性,子系统间的关系具有线性层次关系;适用于有明显层次关系的系统。
步骤:
a.划分系统的层次;
b.确定每个层次内部的集成策略,该策略可以使用大爆炸集成,自顶向下集成,自底向上集成和三明治集成中的任何一种策略;
c.确定层次间的集成策略,该策略可以使用大爆炸集成,自顶向下集成,自底向上集成和三明治集成中的任何一种策略;
例:
7.基于功能的集成策略
从功能角度出发,按照功能的关键程度对组件的集成顺序进行组织,目的是尽早的验证系统关键功能。
优点:
a.采用该方法,可以尽快的看到关键功能的实现,并验证关键功能的正确性;
b.由于该方法在验证某个功能的时候,可能会同时加入多个组件,因此在进度上比自底向上,自顶向下或三明治集成要短;
c.可以减少驱动的开发,原因与自顶向下的集成策略类似。
缺点:
a.对有些接口的测试不充分,会丢失许多几口错误;
b.可能会有比较大的冗余测试。
8.基于进度的集成策略
进度压力是每个软件开发项目都会遇到的问题。基于进度的集成就是在兼顾进度和质量两者之间寻找了一个均衡点。该集成的一个最基本的策略就是把最早可获得的代码拿来立即进行集成,必要的时候开发桩核驱动,在最大程度上保持与开发的并行性,从而缩短了项目集成的时间。
优点:
a.具有比较高的并行度;
b.能够有效缩短项目开发的进度;
缺点:
a.可能最早拿到的组件之间缺乏整体性,只能进行独立的集成,导致许多接口必须等到后期才能验证,但此时系统可能已经很复杂,往往无法发现有效的接口问题;
b.桩核驱动的工作量可能会变得很庞大;
c.由于进度的原因,组件可能很不稳定且会不断变动,导致测试的重复和浪费;
9.基于风险的集成策略
基于风险的集成式基于这样一个假设,既系统风险最高的组件间接口往往是错误集中的地方,因此尽早的验证这些接口有助于加速系统的稳定,从而增加对系统的信心。
优点:具有风险的组件最早进行验证,有助于系统的快速稳定。
缺点:需要对各组件的风险有一个清晰的分析。
五、集成测试的四个阶段
1.集成测试计划阶段:完成集成测试计划;
2.集成测试设计阶段:完成集成测试方案;
3.集成测试实现阶段:完成集成测试用例、集成测试规程、集成测试脚本及数据文件;
4.集成测试执行阶段:执行集成测试用例、修改发现的问题并进行回归测试,提交集成测试报告。