您好,欢迎访问三七文档
第四章集成测试[本章要点]•集成测试的定义;•集成测试与系统测试的区别;•集成测试与开发之间的关系;•集成测试的分析方法;•集成测试策略的选择;•集成测试环境的搭建;•集成测试用例设计的方法。[本章目标]了解集成测试与系统测试的区别;了解集成测试与开发过程之间的关系;了解集成测试的层次和集成测试的重点;理解集成测试的概念和集成测试的过程;掌握集成测试的分析方法及集成测试的策略。掌握集成测试用例设计的方法。4.1集成测试概述一般这样定义集成测试:根据实际情况对程序模块采用适当的的集成测试策略组装起来,对系统的接口以及集成后的功能进行正确性检验的测试工作。4.1.1集成测试与系统测试的区别1、测试对象•集成测试的测试对象是由通过了单元测试的各个模块所集成起来的组件。而系统测试的测试对象,除了软件之外,还有计算机硬件及相关的外围设备、数据采集和传输机构、计算机系统操作人员等的整个系统。2、测试时间集成测试是介于单元测试和系统测试之间的测试.在测试时间上,先于系统测试。3、测试方法集成测试通常会采用灰盒测试。而系统测试通常使用黑盒测试。4、测试内容集成测试的主要内容就是各个单元模块之间的接口,以及各个模块集成后所实现的功能。而系统测试的主要内容就是整个系统的功能和性能。5、测试目的集成测试的主要目的就是发现单元之间接口的错误,以及发现集成后的软件同软件概要设计说明不一致的地方。而系统测试的主要目的就是,通过与系统需求定义相比较之后发现软件与系统定义不符合或矛盾的地方。6、测试角度集成测试工作的开展更多的是站在测试工作人员的角度上。系统测试工作的开展更多的是站在用户的角度来进行。A产品子系统1子系统2硬件子系统1软件子系统1软件模块1软件模块2软件程序1软件程序2单元1单元2单元3单元4硬件子系统2软件子系统2软件模块3软件模块4(软件结构图)(软件模块结构)4-1软件结构图4.1.2集成测试与开发的关系为了使读者更好的了解集成测试与开发的关系,图4-1给出了软件基本结构图。4.1.3集成测试的重点1、各个模块连接起来后,穿过模块接口的数据是否会丢失,是否能够按期望值传递给另外一个模块;2、各个模块连接起来后,需要判断是否仍然存在单元测试时所没发现的资源竞争问题;•3、分别通过单元测试的子功能模块集成到一起能否实现所期望的父功能;4、兼容性,检查引入一个模块后,是否对其他与之相关的模块产生负面影响;5、全局数据结构是否正确,是否被不正常的修改;6、集成后,每个模块的误差是否会累计扩大,是否会达到了不可接受的程度;4.1.4集成测试的层次对于传统软件来说,按集成粒度不同,可以把集成测试分为3个层次,即:-模块内集成测试-子系统内集成测试-子系统间集成测试对于面向对象应用系统来说,按集成粒度不同,可以把集成测试分为2个层次:-类内集成测试-类间集成测试4.2如何进行集成测试4.2.1集成测试分析一、体系结构分析首先,跟踪需求分析,对要实现的系统划分出结构层次图。其次,是对系统各个组件之间的依赖关系进行分析,然后据此确定集成测试的粒度,即集成模块的大小。二、模块分析一般,可从以下几个角度进行模块分析:1)确定本次要测试的模块;2)找出与该模块相关的所有模块,并且按优先级对这些模块进行排列;3)从优先级别最高的相关模块开始,把被测模块与其集成到一起;4)然后依次集成其他模块。三、接口分析接口的划分要以概要设计为基础,一般通过以下几个步骤来完成:(1)确定系统的边界、子系统的边界和模块的边界。(2)确定模块内部的接口。(3)确定子系统内模块间接口。(4)确定子系统间接口。(5)确定系统与操作系统的接口。(6)确定系统与硬件的接口。(7)确定系统与第三方软件的接口。四、风险分析风险通常被分为3种类型:1项目风险:包括项目管理和项目环境的风险。2商业风险:它和领域的相关概念及规则息息相关。3技术风险:这是针对应用程序的具体实现而言的,主要和代码级的测试有关。风险分析是一个定义风险并且找出阻止潜在的问题变成现实的方法的过程。通常把风险分析分为3个阶段:风险识别、风险评估和风险处理。五、可测试性分析必须尽可能早地分析接口的可测试性,提前为后续的测试工作做好准备。六、集成测试策略分析集成测试策略分析的主要任务就是根据被测对象选择合适的集成测试策略。4.2.2集成测试策略一、基于分解的集成大爆炸集成1.目的尽可能缩短测试时间,使用最少的测试用例验证系统。2.定义大爆炸集成也称为一次性组装或整体拼装,这种集成测试策略的做法就是把所有通过单元测试的模块一次性集成到一起进行测试,不考虑组件之间的互相依赖性及可能存在的风险。3.具体方法举例来说,假设要对某个系统的部分功能(包括4个模块)进行测试,其功能分解如图4-3所示。具体测试过程如下:①对模块A进行测试②对模块B进行测试③对模块C和模块D进行测试④把通过单元测试的所有模块组装到一起进行集成测试。以上测试过程如图4-4所示:ABDC图4-3程序结构图4.优点(1)可以并行调试所有模块。(2)需要的测试用例数目少。(3)测试方法简单、易行。Test(A;B;C;D)TestATestBTestCTestDTests◆TestA(withstubsforBandC)◆TestB(withdriverforAandstubforD)◆TestC(withdriverforA)◆TestD(withdriverforB)◆Test(A;B;C;D)图4-4大爆炸法示例图5.缺点(1)不能充分对各个模块之间的接口进行充分测试。(2)不能很好的对全局数据结构进行测试。(3)如果一次集成的模块数量多,集成测试后可能会出现大量的错误。另外,修改了一处错误之后,很可能新增更多的新错误,新旧错误混杂,给程序的完善带来很大的麻烦。•(4)使集成测试通过,也会遗漏很多错误。6.适用范围(1)只需要修改或增加少数几个模块的前期产品稳定的项目;(2)功能少,模块数量不多,程序逻辑简单,并且每个组件都已经过充分单元测试的小型项目;(3)基于严格的净室软件工程(由IBM公司开创的开发零缺陷或接近零缺陷的软件的成功做法)开发的产品,并且在每个开发阶段,产品质量和单元测试质量都相当高的产品。自顶向下集成1.目的从顶层控制(主控模块)开始,采用同设计顺序一样的思路对被测系统进行测试,来验证系统的稳定性。2.定义自顶向下的集成测试就是按照系统层次结构图,以主程序模块为中心,自上而下按照深度优先或者广度优先策略,对各个模块一边组装一边进行测试。3.方法集成测试的过程如下:1把主控模块作为测试驱动,所有与主控模块直接相连的模块作为桩模块;2根据集成的方式(深度优先或者广度优先),逐渐使用实际模块替换相应的下层桩模块;再用桩代替他们的直接下属模块,与已通过测试的模块或子系统组装成新的子系统。3在每个模块被集成时,都必须已经通过了单元测试;4进行回归测试(重新执行以前做过的全部或部分测试),以确定集成新模块后没有引入错误;5从上述过程中的第二步开始重复执行,直到所有模块都已经集成到系统中为止。4.优点1在测试的过程中,可以较早地验证主要的控制和判断点。2选择深度优先组合方式,可以首先实现和验证一个完整的软件功能,可先对逻辑输入的分支进行组装和测试,检查和克服潜藏的错误和缺陷,验证其功能的正确性,为此后主要分支的组装和测试提供保证;3能够较早的验证功能可行性,给开发者和用户带来成功的信心;4只有在个别情况下,才需要驱动程序(最多不超过一个),减少了测试驱动程序开发和维护的费用,5可以和开发设计工作一起并行执行集成测试,能够灵活的适应目标环境;6容易进行故障隔离和错误定位。5.缺点1在测试时需要为每个模块的下层模块提供桩模块,桩模块的开发和维护费用大;2底层组件的需求变更可能会影响到全局组件,需要修改整个系统的多个上层模块。3要求控制模块具有比较高的可测试性;4可能会导致底层模块特别是被重用的模块测试不够充分。6.适用范围1控制结构比较清晰和稳定的应用程序;2系统高层的模块接口变化的可能性比较小;3产品的低层模块接口还未定义或可能会经常因需求变更等原因被修改;4产品中的控制模块技术风险较大,需要尽可能提前验证;5需要尽早看到产品的系统功能行为;6在极限编程(ExtremeProgramming)中使用测试优先的开发方法。自底向上集成1.目的从依赖性最小的底层模块开始,按照层次结构图,逐层向上集成,验证系统的稳定性。2.定义自底向上集成是从系统层次结构图的最底层模块开始进行组装和集成测试的方式。3.方法1从最底层的模块开始组装,组合成一个能够完成制定的软件子功能的构件;2编制驱动程序,协调测试用例的输入与输出;3测试集成后的构件;4使用实际模块代替驱动程序,按程序结构向上组装测试后的构件;5重复上面的第二步,直到系统的最顶层模块被加入到系统中为止。4.优点1即使数据流并未构成有向的非环状图,生成测试数据也没有困难。2可以尽早的验证底层模块的行为。3提高了测试效率;4对实际被测模块的可测试性要求要少;5减少了桩模块的工作量;6容易对错误进行定位。5.缺点1直到最后一个模块加进去之后才能看到整个系统的框架;2只有到测试过程的后期才能发现时序问题和资源竞争问题;3驱动模块的设计工作量大;4不能被及时发现高层模块设计上的错误。6.适用范围1底层模块接口比较稳定的产品;2高层模块接口变更比较频繁的产品;3底层模块开发和单元测试工作完成较早的产品。二、三明治集成1.目的:综合利用自顶向下和自底向上两中集成测试策略的优点。2.定义:三明治集成是一种混合增殖式测试策略,综合了自顶向下和自底向上两种集成方法的优点,因此也属于基于功能分解集成。3、方法首先,确定以哪一层为界来决定使用三明治集成策略(在4-7中,我们确定以B模块为界);其次,对模块B及其所在层下面的各层使用自底向上的集成策略;ACBDEFG图4-7三明治集成策略示意图再次,对模块B所在层上面的层次使用自顶向下的集成策略;然后,把模块B所在层各模块同相应的下层集成;最后,对系统进行整体测试。4.优点除了具有自顶向下和自底向上两种集成策略的优点之外,运用一定的技巧,能够减少了桩模块和驱动模块的开发。5.缺点在被集成之前,中间层不能尽早得到充分的测试。6.适用范围多数软件开发项目都可以应用此集成测试策略。三、修改过的三明治集成1.目的充分发挥测试的并行性,弥补三明治集成中不能充分测试中间层的缺点。2.定义(略)3.方法1并行测试目标层,目标层上面一层,目标层下面一层。2并行测试目标层与目标层上面一层的集成和目标层与目标层下面一层的集成。4.优点1具有三明治集成的所有优点,且对中间层能够尽早进行比较充分的测试;2该策略的并行度相对比较高。5.缺点中间层如果选择不适当,可能会增加驱动模块和桩模块工作量的设计负担。6.适用范围大多数软件开发项目。四、基于调用图的集成基于调用图的集成方式有两种,即:成对集成和相邻集成。1、成对集成成对集成的思想就是免除桩/驱动器开发工作,使用实际代码来代替桩/驱动器。成对集成的方法就是对应调用图的每一个边建立并执行一个集成测试会话。2、相邻集成这里的相邻是针对节点而言的,节点的邻居就是由给定节点引出的节点集合。在有向图中,节点邻居包括所有直接前驱节点和所有直接后继节点。五、基于路径的集成首先,我们来看一下与基于路径的集成相关的几个概念:1.源节点程序中的源节点是指程序执行开始或重新开始处的语句片断。2.汇节点汇节点是程序执行结束处的语句片断。这里转移控制到其它单元的节点也是汇节点。3.模块执行路径模块执行路径是以源节点开始、以汇节点结束的一系列语句,中间没有插入汇节点。在图4-12中有七条模块执行路径:MEP(A,1)=〈1,2,3,6〉MEP(A,2)=〈1,2,4〉MEP(A,
本文标题:集成测试
链接地址:https://www.777doc.com/doc-3800604 .html