资源描述
,Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,.,*,Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,.,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,第,5,章 集成测试,高级软件测试,技术,杜庆峰,2011,年,10,月,1,.,内容提要,4,集成测试概述,1,2,3,5,集成测试环境及过程,集成测试方法,集成测试的分析和用例设计,集成测试实例,2,.,集成测试由谁执行?,集成测试的基本含义,集成测试的前提,1,2,3,5.1,集成测试概述,在进行集成测试之前,单元测试应该已经完成,并且集成测试所使用的对象应当是已经成功地通过了单元测试的单元。,集成测试(也叫组装测试,联合测试)是在单元测试基础上,将所有模块按照概要设计的要求组装成为子系统或系统的测试,是对模块间接口或系统的接口以及集成后的子系统或系统的功能进行正确性检验的一项测试工作。,一般由专门的测试小组完成,测试小组包括有经验的系统设计人员、参加了被测项目开发的人员、和专门的测试人员等。,3,.,5.1,集成测试概述(续),集成测试的关注点:,各个模块集成起来后,通过模块接口的交互的参数数量,参数数据类型,参数顺序等是否一致,,是否会有数据丢失,是否能够按期望的要求传递给另外一个模块。,各个模块集成起来后,是否仍然存在单元测试时所没发现的问题。,通过单元测试的子功能模块集成到一起能否实现所期望的父功能。例如,在,ATM,系统中,卡检验,模块、密码验证模块、存款处理模块、显示打印模块集成后是否能实现正常的取款功能。,在集成过程中,随着新的被集成模块的加入,是否对其他已经集成的模块产生负面影响。,全局数据结构是否正确,数据结构的内部构成是否被不正常地修改。,随着集成的深入,系统的特性误差,尤其是功能方面的特性的误差是否会累计扩大,是否会达到,不可接受的程度。,在与用户界面的集成中,控件的输入内容检查、结果显示、数据类型控制等方面是否合理。,4,.,对于传统的结构化技术开发的软件系统按集成粒度不同,分为,4,个层次:,1.,模块内集成,2.,子系统内集成,3.,子系统间集成,4.,不同系统之间的集成,5.1,集成测试概述(续),集成测试的层次:,对于使用面向对象技术开发的软件系统按集成粒度不同,分为,4,个层次:,1.,类内集成,2.,类间集成,3.,子系统间集成,4.,不同系统之间的集成,5,.,集成测试环境,5.2,集成测试环境及过程,硬件环境,操作系统环境,数据库环境,网络环境,测试工具环境,开发驱动器和桩,其他环境,图,5.2,一个系统的集成测试环境示意图,6,.,计划阶段,用例分析和设计阶段,实施阶段,分析评估阶段,集成测试过程,5.2,集成测试环境及过程(续),一般把集成测试过程分为以上,5,个阶段,但是在实际的集成过程可能其阶段有所不同,,可以参考,IEEE,制定的相关标准。,7,.,5.3,集成测试方法,根据软件系统,的体系结构和,层次结构等特点,.,基于分解的集成方法,.,三明治集成,.,基于调用图的集成,.,基于路径的集成,.,其他集成测试方法,8,.,5.3.1,基于分解的集成方法,基于分解的集成测试可以分为非增量式和增量式两大类,。,非增量式集成测试,也称作大爆炸(,Big bang,)集成,;,增量式测试按不同的集成次序可分为两种方法,即自顶向下集成和自底向上集成。,下面将具体介绍这三类集成方法。,9,.,把所有通过单元测试的模块一次性集成到一起进行测,试,不考虑组件之间的互相依赖性及可能存在的风险,如右图所示是模块结构图,图中的,A,、,B,、,C,、,D,、,E,五个模块均已经通,过了单元测试,大爆炸集成就是将这,5,个模块一次性的集成在一起进行,测试,找出可能出现的接口和其他类型的缺陷。,难以保证对各个模块之间的接口进行充分测试,对全局数据结构的测试不够彻底,难以进行错误定位和修改,a.,集成时,仅仅修改或增加了少数几个模块且前期产品是稳定的。,b.,功能少,模块数量不多,程序逻辑简单,并且每个组件都是已经过充分,单元测试的情况。,cl.,基于严格的净室软件工程开发的产品,定义,方法举例,优点,缺点,适用范围,1,)大爆炸集成,5.3.1,基于分解的集成方法(续),A,D,C,B,E,模块结构图,可以同时集成所有模块,因此能够充分利用人力、物力资源,加快工作进度。,需要的测试用例数目少,因此测试用例设计的工作量相对比较小。,测试方法简单、易行。,10,.,2),自顶向下集成,5.3.1,基于分解的集成方法(续),(,1,)定义:自顶向下的集成测试就是按照系统层次结构图,以主程序模块,为中心,采用自上而下的对各个模块一边组装一边进行测试。,可以分为用深度优先集成和广度优先集成两种方式。,(,2,)集成方法与过程:,以主模块为所测模块兼驱动模块,所有直属主模块的下属模块全部用桩模块对主模块进行测试。,采用深度遍历或广度遍历的策略,用实际源代码模块替换相应桩模块,再用桩代替它们的下属模块,,与已经测试的模块或子系统集成为新的子系统,每次只替换一个桩为源代码。,进行回归测试(即重新执行以前的全部测试或部分测试用例),排除集成过程中引起错误的可能。,判断是否所有的模块都已经集成到系统中,是则结束测试,否则转到第,2,步去继续执行。,A,D,C,B,E,H,模块结构图,A,B,S2,S3,S4,A,B,C,S3,S4,A,S1,S2,S3,A,B,C,D,A,B,C,D,A,B,C,D,S4,S5,S5,H,E,E,根据右上模块结构图的自顶向下的集成实例图解,11,.,5.3.1,基于分解的集成方法(续),(,3,)优点:,在测试的过程中,可以较早地验证主要的控制和判断模块。,选择深度优先集成的方式,可以首先实现和验证一个完整的软件功能,不需要开发驱动器,减少开发和维护成本。,在开发的同时可以并行执行集成测试,能够灵活地适应目标环境。,故障隔离和错误定位容易。,(,4,)缺点:,增加桩模块的开发和维护成本。,容易出现回归测试或多次回归。,可能会导致底层模块特别是被重用的或被多个模块调用的模块测试不够充分。,(,5,)适用范围:,软件的体系结构控制比较清晰。,软件的体系结构的高层模块接口变化少。,开发和集成测试并行的情况。,软件的体系结构的低层模块接口的最终定义较迟或经常因需求变更等原因被修改。,产品中的控制模块技术风险较大,需要尽可能提前验证。,需要尽早看到系统某些方面功能行为,如,输入功能和输出功能等。,极限编程(,Extreme Programming,)中的测试优先的情况。,12,.,3),自底向上集成,5.3.1,基于分解的集成方法(续),(,1,)定义:,自底向上集成是从系统层次结构图或称软件的体系结构图的最底层模块开,始进行组装的集成测试方式。,(,2,)集成方法与过程:,A.,由驱动模块控制底层模块并进行并行测试。,B.,用实际模块代替驱动器,与它已经测试的直属子模块集成为子系统。,C.,按模块结构向上集成并为子系统配备新驱动模块,进行新的测试。,D.,判断是否已经集成到达主模块,是则结束测试,否则执行,B.,A,D,C,B,E,H,模块结构图,下面就基于以下模块的自底向上的两种集成方法进行图解:,13,.,5.3.1,基于分解的集成方法(续),A,B,C,B,E,H,D1,E,D3,D,E,H,D2,H,A,B,C,D,H,D1,E,D2,H,D3,C,B,D5,D,C,D,E,D4,自底向上的一种集成过程实例,自底向上的一种另一种集成过程实例,14,.,5.3.1,基于分解的集成方法(续),(,3,)优点:,尽早地验证下层模块的行为。,集成测试过程中,可以同时对系统层次结构图中不同的分支进行集成测试,具有并行性。,在对上层模块进行测试时,下层模块的行为就已经得到了验证,因此在向上集成的过程中,越靠近主控模块的上层模块更多的是验证其控制和逻辑。,(,4,)缺点:,直到最后一个模块加进去之后才能看到整个系统的框架,才能发现时序问题和资源竞争问题。,驱动模块的开发相对复杂且工作量大。,不能及时发现高层模块设计上的错误。,(,5,)适用范围:,底层模块接口和行为比较稳定。,高层模块接口和行为变更比较频繁。,底层模块开发和单元测试工作完成较早。,15,.,5.3.2,三明治集成,定义:,三明治集成是一种混合增量式集成测试方法,综合了自顶向下和自底向上两种集成方法的优点,也属于基于功能分解的集成。,集成过程与方法:,对整个的模块层次结构图(软件体系结构图)而言,首先必须确定以哪一层为界来决定使用三明治集成方法,一般以模块层次结构图的中间层或接近于中间的层为界。,以确定为界的层及其以下的各层使用自底向上的集成方法。,以确定为界的层的上面的层次使用自顶向下的集成方法,不包括确定为界的层。,对系统所有模块进行整体集成测试。,16,.,5.3.2,三明治集成(续),下面举例说明三明治集成方法的集成过程:以,E,模块所在层为界,软件的模块结构图,E,模块为界及其所在层自底向上集成,E,模块为界的上面层次的自顶向下集成,17,.,5.3.3,基于调用图的集成,基于分解的集成方法的缺点就是以系统功能分解为基础,以模块结构图为依据。如果把集成的依据改为模块调用图,则可以使集成测试向结构性测试方法发展,避免基于分解的集成方法存在的一些不足,。,基于调用图的集成方法有两种:成对集成和相邻集成。,成对集成,成对集成的基本思想就是免除桩,/,驱动器开发工作,使用实际代码来代替桩,/,驱动器。这看起来类似大爆炸集成方式,但是把这种集成限制在调用图中的一对模块或单元上。,18,.,5.3.3,基于调用图的集成(续),成对集成举例说明图,如上图为某系统的调用图,以此为例加以分析。该调用图共有,22,个集成,测试对,其中的模块,a,分别和,x,、,h,、,i,、,v,、,l,、,b,建立集成测试对。图中的,虚线包围列出了,3,个集成测试对。,19,.,5.3.3,基于调用图的集成(续),相邻集成,相邻集成中的相邻是针对模块节点而言的,模块节点的邻居就是由指定模块节点引出的节点集合。在有向图中,节点邻居包括所有直接的前驱节点和所有直接的后继节点。,对于给定调用图,我们总是可以计算出邻居数量。每个内部节点,(,内部节点具有非零内度和非零外度,),有一个邻居,如果叶节点直接连接到根节点,则还要加上一个邻居。这样有:,内部节点,=,节点,-(,源节点,+,汇节点,),邻居,=,内部节点,+,源节点,经过合并,得到:,邻居,=,节点,-,汇节点。,20,.,5.3.3,基于调用图的集成(续),回忆一下三明治集成,可以看出相邻集成本质上是前面介绍过的三明治集成,其不同之处是因为相邻集成的依据是调用图,而不是分解树,它们的共同之处是都具有缺陷隔离的困难。另外,对于同时属于不同邻居的节点存在缺陷的时候,修改该节点的缺陷后,所有包括该节点的邻居都需要重新进行集成测试,也就是说要进行集成的回归。如,下图中的模块节点,n,就是这种情况。,相邻集成举例,21,.,5.3.4,基于路径的集成,相关概念,源节点:,程序中的源节点是程序执行开始或重新开始执行处的语句片段,。,汇节点:,汇节点是程序执行结束处的语句片段,。,模块执行路径,(Module Execution Path,,,MEP),:,模块执行路径是指模块内部以源节点开始、以汇节点结束的一系列语句,中间没有插入汇节点。,消息,:,消息是一种程序设计语言机制,通过这种机制可以把控制从一个单元转移到另一个单元。,MM-,路径,(Method Message Path,,,MM-Path),:,MM-,路径是指穿插出现的模块执行路径和消息构成的序列,。,22,.,5.3.4,基于路径的集成(续),通过,MM-,路径得出,MM,路径图,MM,路径,依据左边的,MM,路径导出的,MM,路径图,23,.,5.3.5,其他集成测试方法,UML,协作图(序列图)集成,分层集成,基于功能的集成,高频集成,基于进度的集成、基于风险的集成、基于事 件的集成、基于使用的集成等,24,.,集成测试分析,1,)体系结构分析,2,)模块及接口分析,用例的设计,1,)为系统它运行设计用例,2,)为正向测试设计用例,3,)为逆向测试设计用例,4,)为满足特殊需求设计用例,5,)为满足覆盖指标设计用例,6,)测试用例补充,5.4,集成测试的分析和用例设计,25,.,集成测试实例见书上,P185-P197,页的“酒店服务与管理”系统的集成测试实例。,5.5,集成测试实例,26,.,PPT,制作人,杜庆峰,张秋华,赵亚男,27,.,谢谢观看!,
展开阅读全文