集成测试
为什么要集成测试?
当单个模块集成为系统的过程中,软件仍然可能出现问题。比如:
穿越模块接口的数据是否丢失;
一个模块功能的实现可能破坏了另一个模块的功能;
子功能组合之后不一定可以达到预期的功能;
全局数据可能被异常修改;
单个模块的误差被放大到了不能接受的地步。
因此,需要在模块集成的时候进行整体测试以发现上面可能出现的问题。
1、集成测试概述
集成测试(Integration test)
- 也叫组装测试或联合测试
- 是在单元测试的基础上,将所有模块按照设计要求集成为系统或子系统,并进行测试。
- 验证程序和概要设计说明的一致性
- 集成测试在模块组装后查找模块间接口的错误
2、集成
如何将经过单元测试的模块连接为一个可运行的系统呢?
一种组装方式是将所有的模块一次连接起来,称为非渐增式集成策略。
另外一种方式则是将模块一个一个的连入系统,每连入一个模块,都要对新系统进行测试,这种组装方式称为渐增式集成策略。
非渐增式集成
定义:
- 又叫大爆炸集成(Big-bang Integration)
- 把所有通过了单元测试的模块按设计要求,一次全部组装起来,然后进行整体测试。
目的
- 尽可能缩短测试时间,使用最少的测试用例验证系统。
特点 - “急于求成”
渐增式集成
定义
- 从一个模块开始,测一次添加一个模块,边组装边测试,以发现与接口相联系的问题。
集成方式
- 自顶向下集成
- 自底向上集成
- 三明治集成
渐增式集成策略是先进行模块测试,然后将这些模块逐步组装成较大的系统,每连接一个模块进行一次测试。按组装次序,渐增式又常有多种方案:自顶而下增值策略、自底向上增值策略、混合增值策略。
无论采用哪种方案,都需要设计驱动模块或桩模块,对每一个新组装的子系统进行测试主要采用黑盒法,对发现问题较多的子系统或模块应该用白盒法作回归测试。
(1)自顶向下集成
定义:
自顶向下集成(Top-down Integration)
按照系统层次结构图,以主程序模块为中心,自上而下按照深度优先或者广度优先策略,对各个模块一边组装一边进行测试。
自顶向下集成的两种类型:
广度优先
深度优先
(2)自底向上的集成
定义:
自底向上集成(Bottom-up Integration)
从系统层次结构图的最底层模块开始进行组装和集成测试的方式。
适用范围:
底层模块接口比较稳定的产品;
高层模块接口变更比较频繁的产品;
底层模块开发和单元测试工作完成较早的产品。
(3)混合集成(三明治)
定义:
三明治集成方法(Sandwich Integration)
三明治集成是一种混合增值式测试策略,综合了自顶向下和自底向上两种集成方法的优点。
方法:
一般对软件结构的上层使用自顶向下结合的方法;
对下层使用自底向上结合的方法;
基于调用图的集成
基于调用图的集成有两种:
成对集成
相邻集成
成对集成
成对集成的思想就是免除桩/驱动器开发工作,使用实际代码来代替桩/驱动器。
成对集成的方法就是对应调用图的每一个边建立并执行一个集成测试会话。
相邻集成
- 相邻节点
有向图中,节点邻居包括所有直接前驱节点和直接后继节点 - 相邻集成
可大大降低集成测试的会话数量,并可避免桩和驱动器的开发
相邻集成本质上是三明治集成
相邻集成具有“中爆炸”集成的缺陷:隔离困难
基于调用图的集成测试的优点:
免除了驱动器/桩的开发工作
接口关系测试充分
测试集中于衔接的功能性
测试和集成可以并行开始
基于调用图的集成测试的缺点:
调用或协作的关系可能是错综复杂的
参与者没有被单独测试,要充分测试底层模块较困难
特定的调用或协作可能是不完全的
缺陷隔离
基于调用图的集成测试适用范围
尽快论证一个可运行的调用或协作
被测系统已清楚定义了模块的调用和协作关系
基于路径的集成
基本概念
MM-路径
Paul C.Jorgensen提出,Message Method
MM-路径是穿插出现模块执行路径和消息的序列
给定一组单元,其MM-路径图是一种有向图,其中节点表示模块执行路径,边表示消息和单元之间的返回。
注意:MM-路径不是可执行路径,描述单元之间的控制转移。
对于传统软件来说,MM-路径永远是从主程序开始,在主程序中结束。
集成测试的修订目标:
不仅是测试单独开发并通过测试的单元之间的测试接口,而还是将注意力集中在这些单元的交互上。
接口是结构性的;而交互是行为性的。
首先,我们来看一下与基于路径的集成相关的几个概念:
1.源节点
程序中的源节点是指程序执行开始或重新开始处的语句片断。
2.汇节点
汇节点是程序执行结束处的语句片断。这里转移控制到其它单元的节点也是汇节点。
3.模块执行路径
模块执行路径是以源节点开始、以汇节点结束的一系列语句,中间没有插入汇节点。
在图中有七条模块执行路径:
MEP(A,1)=〈1,2,3,6〉
MEP(A,2)=〈1,2,4〉
MEP(A,3)=〈5,6〉
MEP(B,1)=〈1,2〉
MEP(B,2)=〈3,4〉
MEP(C,1)=〈1,2,4,5〉
MEP(C,1)=〈1,3,4,5〉
4.消息
消息是一种程序设计语言机制,通过这种机制可以把控制从一个单元转移到另一个单元。
5、MM-路径是穿插出现模块执行路径和消息的序列。如图4-12中的粗线所示,代表模块A调用模块B,模块B调用模块C,这就是一个MM-路径,可用图4-13表示。对于传统软件来说,MM-路径永远是从主程序开始,在主程序中结束。
MM-路径的深度
MM-路径末端点有两点可观察的行为准则,即消息静止和数据静止
消息静止
当到达不发送消息的结点时,消息静止发生。例如图中的模块C
数据静止
当处理不立即使用的存储数据创建序列结束时,数据静止发生。
MM-路径复杂度
V(G)= e – n + 2p
V(G)= e – n + 2
(对于结构化过程代码,p=1)
基于路径集成的优缺点
优点:
MM-路径是功能性测试和结构性测试的一种混合。
基于路径的集成测试既适用于采用传统瀑布过程开发的软件,也适用于采用基于合成可选的生命周期模型开发的软件。
缺点:
需要更多的工作量标识MM-路径。