您好,欢迎访问三七文档
第7章集成测试第7章集成测试7.1集成测试概述7.2基于功能分解的集成7.3基于调用图的集成7.4基于路径的集成7.5其他集成测试方法7.6案例7.7本章小结第7章集成测试7.1集成测试概述实践表明,一些模块虽然能够单独地工作,但并不能保证连接起来也能正常地工作。为了改善这种情况,就要求在软件测试中引入集成测试,用以测试程序在某些局部反映不出来而在全局上很可能暴露出来的问题。第7章集成测试7.1.1集成测试的定义集成(Integration):把多个单元组合起来形成更大的单元。集成测试(IntegrationTesting):在假定各个软件单元已经通过了单元测试的前提下,检查各个软件单元之间的相互接口是否正确。也叫组装测试或联合测试第7章集成测试具体检测包括:功能正确性验证、接口测试、全局数据结构的测试以及计算精度检测等在集成测试时可能出现的错误。第7章集成测试集成测试的方法策略:非增量型集成测试和增量型(渐增式)集成测试。非增量型测试:将所有软件模块统一集成后才进行整体测试,也称大棒集成(Big-BangIntegrateTesting)。这种方法极容易出现混乱,因为测试时可能发现一大堆错误,为每个错误定位和纠正将非常困难。对于复杂的软件系统,一般不宜采用非增量型测试。第7章集成测试增量型(渐增式)集成测试:从一个模块开始,测一次添加一个模块,边组装边测试,以发现与接口相联系的问题。渐增式测试模式虽然需要编写Driver或Stub程序,但这样的方法可以更早发现模块间接口错误,并有利错误的定位和纠正。增量型集成测试的实施策略:自底向上集成测试、自顶向下集成测试、三明治集成测试、核心集成测试、分层集成测试、基于使用的集成测试等第7章集成测试人员组织单元测试:主要由开发人员来承担。集成测试:则主要由专门的测试人员负责测试开发人员有时也会参与集成测试的设计和执行集成测试工程师一般都需要参加产品的概要设计第7章集成测试在极限编程的实践中,一个新的名词又出现了——“持续集成”,其全称为ContinuousIntegration。实际上并非仅在极限编程中使用着它,其他开放模型下都可以使用持续集成。软件开发中各个模块不是同时完成的,根据进度将完成的模块尽可能早地进行集成,这样有助于尽早发现缺陷,避免集成阶段大量缺陷涌现第7章集成测试7.1.2集成测试的过程1.计划阶段在概要设计完成评审后大约一个星期,就可以开始进入到集成测试的计划阶段了。准备集成测试的设计依据文档:需求规格说明书、概要设计文档等。确定测试范围和测试对象,准备测试工具和环境,并进行人员组织等。考虑一定的风险及应急计划,外部技术支援的力度和深度以及相关培训安排。第7章集成测试2.设计阶段对于集成测试的设计,要详细理解集成测试计划阶段准备的需求规格说明书、概要设计以及集成测试计划。第7章集成测试集成测试的设计:(1)详细分析被测对象结构、集成测试模块、集成测试接口。根据分析结果确定集成测试策略、测试工具、集成测试环境,以估计和安排集成测试工作量。(2)集成测试设计结果:集成测试用例、集成测试规程、集成测试代码、集成测试脚本,最后输出集成测试设计报告,并通过评审。第7章集成测试3.执行阶段根据前面的设计以及软件需求规格说明书、概要设计、详细设计、代码和单元测试报告,执行所有集成测试用例、回归集成测试用例并记录和撰写集成测试报告。第7章集成测试4.评估阶段在修复和回归测试的交替和反复中,当达到测试要求后,就进入了评估阶段。所有测试需要由测试结果评估小组或评估人员对测试结果进行评测、分析,并输出分析结果。第7章集成测试7.2基于功能分解的集成系统在设计时,如果基于系统功能的分解来进行模块化程序设计,那么系统在集成时也可以基于功能模块来组装。第7章集成测试图7-2-1程序模块化设计示意图M1M3M4M7M6M5M2第7章集成测试1.自顶向下集成自顶向下集成(Top-DownIntegration):从最具控制力的主控模块开始,按照软件的控制层次结构,以深度优先或广度优先的策略,向系统中增加模块,直至实现整个系统。在测试过程中,需要设计Stub桩模块来模拟下层模块深度优先策略:首先把主控制路径上的模块集成在一起,至于选择哪一条路径作为主控制路径,这带有随意性,可以根据实际问题的特性确定其优先级。第7章集成测试图7-2-2深度优先搜索测试过程M1S2S3S4M1M2S3S4S5S6M1M2S3S4M5S6M1M2S3S4M5M6M1M2M3S4M5M6M1M2M3M4M5M6S7M1M2M3M4M5M6M7(g)(a)(b)(c)(d)(e)(f)第7章集成测试广度优先策略:它沿控制层次结构水平地向下移动。第7章集成测试图7-2-3广度优先搜索测试过程M1S2S3S4M1M2S3S4S5S6M1M2M3S4S5S6M1M2M3M4S5S6S7M1M2M3M4M5S6S7M1M2M3M4M5M6S7M1M2M3M4M5M6M7(g)(a)(b)(c)(d)(e)(f)第7章集成测试深度优先和广度优先两种集成测试的方法,其测试步骤可以分成如下五步:(1)以主控模块作为测试驱动模块,把对主控模块进行单元测试时引入的所有桩模块用实际模块替代,需要设计的桩模块的个数为模块总个数减一;(2)依据所选的集成策略(深度优先或广度优先),每次只替代一个桩模块;(3)每集成一个模块立即测试一遍;(4)只有每组测试完成后,才着手替换下一个桩模块;(5)为避免引入新错误,还需要不断地进行回归测试,即全部或部分地重复已做过的测试。第7章集成测试有助于最大限度地减少对驱动程序的需求不能很好地支持有限功能的早期发布桩模块(Stub)不能反映真实情况,重要数据不能及时回送到上层模块,则测试可能并不充分。第7章集成测试2.自底向上集成自底向上的集成(Bottom-UpIntegration)方式是最常使用的方法。自底向上集成方式从程序模块结构中最底层(即控制力最弱)的模块开始组装、按控制层次增强的顺序向系统中增加模块并测试,直至实现整个系统。不再需要编制桩模块实施步骤分为如下五步:第7章集成测试(1)由驱动模块控制最底层模块的并行测试,也可以把最底层模块组合起来以实现某一特定软件功能的簇,由驱动模块控制它进行测试。(2)用实际模块代替驱动模块,与它已测试的直属子模块集成为子系统。(3)为子系统配备驱动模块,进行新的测试。(4)判断是否已集成到达主模块,是否结束测试,否则执行(2)。(5)为避免引入新错误,还需要不断地进行回归测试,即全部或部分地重复已做过的测试。第7章集成测试以图7-2-4为例,控制力最弱的底层模块有M5、M3、M6,先选择其作为测试对象,三者可以并列进行,分别为它们建立好Driver,然后分别进行集成。具体的集成测试过程如下图7-2-5所示。图(a)、(b)、(c)分别为M5、M3、M6模块的单元测试。第7章集成测试图7-2-4自底向上的集成测试策事例M1M2M3M4M5M6第7章集成测试图7-2-5自底向上的集成测试示例M5D1M3D2M6D3M2M5D4M4M6D5M1M2M3M4M5M6(a)(b)(c)(d)(e)(f)第7章集成测试减少了对桩模块的需求自底向上增值的方式可以实施多个模块的并行测试,提高测试效率,且管理方便,测试人员能较好地锁定软件故障所在位置。对驱动程序的需求使得测试管理变得复杂起来。高级别的逻辑和数据流在晚期测试,只有程序最后一个模块加入时才具有整体形象。不能很好地支持有限功能的早期发布。第7章集成测试3.三明治集成三明治集成(SandwichIntegration):也称混合法,是将自顶向下集成和自底向上集成两种方式结合起来进行集成和测试。对软件结构中的较上层,使用的是自顶向下集成测试,而对软件结构中的较下层,使用的则是自底向上集成,两者结合完成测试。第7章集成测试图7-2-6三明治集成M1M2M3M4M5M6TestM5M2TestM4M6TestM5TestM1M2M3M4M5M6TestM3TestM1TestM6TestM2TestM4第一层第二层第三层(a)(b)第7章集成测试7.3基于调用图的集成基于功能分解:以功能分解树为基础需要对需求、概要设计进行深入理解,并总结出功能模块间的分层结构关系图,但并不是所有的软件系统的功能层次关系都很明确。调用图:一种有向图,它反映了程序中模块之间的调用关系。包括:成对集成和相邻集成。第7章集成测试1.成对集成把调用图中的一对单元作为测试对象需要测试的会话就对应到调用图的每一条边上图7-3-1中表示出了15个模块(函数)之间的调用关系,其调用关系是通过连线连接的。第7章集成测试图7-3-1成对集成示意图第7章集成测试2.相邻集成相邻集成:把节点邻居作为测试对象,节点的邻居包括该节点的直接前驱和所有后续节点。第7章集成测试图7-3-2相邻集成示意图第7章集成测试表7-3-1相邻集成事例邻居关系表测试会话编号节点前驱后继13113,14,1524173567,1048612,115961161—2,3,476—5,8,9第7章集成测试相邻集成降低测试会话的数量避免开发桩和驱动器相邻集成和三明治集成是相似的,不同的是相邻集成是基于调用图的,而三明治集成是基于功能分解树的在相邻集成测试中也具有“大爆炸”集成的缺陷隔离困难第7章集成测试7.4基于路径的集成要关注模块间的调用关系,还要关注代码中模块调用的位置不是光将测试的重点放到接口上,还要将注意力集中在这些单元的交互上第7章集成测试●源节点:程序执行的开始处或者重新开始处的语句片段。●汇节点:程序执行结束处的语句。●模块执行路径:以源节点开始、以汇节点结束的一系列语句,中间没有插入汇节点。●消息:一种程序设计语言机制,通过这种机制将一个单元控制转移到另一个单元。●MM-路径:穿插出现在模块执行路径和消息的序列。节点表示模块执行路径,边表示消息。MM-路径不仅是可执行路径,并且要跨越单元边界对于传统(过程)软件,MM-路径从主程序中开始,在主程序中结束第7章集成测试●MM-路径图:MM-路径图是一种有向图,对于给定的一组单元,其中节点表示模块执行路径,边表示消息和单元之间的返回。MM-路径是模块执行路径序列第7章集成测试图7-4-1模块中的调用路径第7章集成测试在模块A中,节点1和4是源节点,节点2和5是汇节点。类似地,在模块B中,节点1是源节点,节点3是汇节点,节点5既是源节点又是汇节点。模块C只有一个源节点1和一个汇节点4。共有七个模块执行路径,分别为:(1) MEP(A,1)=1,2。(2) MEP(A,2)=1,3,5。(3) MEP(A,3)=4,5。(4) MEP(B,1)=1,3。(5) MEP(B,2)=5。(6) MEP(B,3)=1,2,4,5。(7) MEP(C,1)=1,2,3,4。第7章集成测试图7-4-2MM路径图第7章集成测试7.5其他集成测试方法1.高频集成高频集成测试:同步于软件开发过程,每隔一段时间对开发团队的现有代码进行一次集成测试使用高频集成测试需要具备一定的条件:可以持续获得一个稳定的增量,并且该增量内部已被验证没有问题需要版本控制工具来保证始终维护的是测试脚本和代码的最新版本;必须借助于自动化工具来完成应用于迭代(增量)过程模型开发的产品集成测试第7章集成测试2.基于功能的集成关注测试验证系统的关键功能从功能角度出发,按照功能的关键程度对模块的集成顺序进行组织,尽可能早地进行测试对有较大风险的产品、技术探索的项目或者对功能实现没有把握的产品,其功能的实现远比质量更关键第7章集成测试3.基于进度的集成该方法的提出是基于进度和质量两方面的考虑该方法要求尽可能早地开始集成测试,以提高开发与集成的并行性,有效地缩短进度,并保证软件的质量具体策略要求是对先开发的程序代码先进行集成测试,当然如果需要开发桩和驱动器,应在最大限度上保持测试和开发的并行性但测试早期缺乏整体性,仅能进行独立的集成,导致许多接口必须到了后期
本文标题:第7章 集成测试
链接地址:https://www.777doc.com/doc-3680921 .html