您好,欢迎访问三七文档
SoftwareTesting第7章集成测试软件测试课程组SoftwareTesting测试过程单元测试集成测试系统测试为什么需要集成测试?问题引入SoftwareTesting为什么总是集成不起来?SoftwareTesting主要内容7.1集成测试概述7.2基于功能分解的集成7.3基于调用图的集成7.4基于路径的集成7.5其他集成测试方法7.6案例7.7本章小结SoftwareTesting7.1集成测试概述集成测试(Integrationtest)定义:是在单元测试的基础上,将所有模块按照设计要求集成为系统或子系统,并进行测试。测试单元在集成时是否有缺陷,通过测试识别组合单元时出现的问题,也叫组装测试或联合测试。验证程序和概要设计说明的一致性。SoftwareTesting7.1集成测试概述集成测试的目标:检测系统是否达到需求;对业务流程及数据流的处理是否符合标准;检测系统对业务流处理是否存在逻辑不严谨或者错误;检测需求是否存在不合理的标准及要求。SoftwareTesting7.1集成测试概述集成测试的内容:具体检测包括功能正确性验证、接口测试、全局数据结构的测试以及计算精度检测等在集成测试时可能出现的错误。SoftwareTesting7.1集成测试概述集成测试的方法和策略:非增量型测试:先将所有软件模块统一集成后才进行整体测试,也称大棒集成。增量型(渐增式)测试:从一个模块开始,测一次添加一个模块,边组装边测试,以发现与接口相联系的问题。增量型集成测试的实施策略有很多种,如自底向上集成测试、自顶向下集成测试、三明治集成测试等。SoftwareTesting7.1集成测试概述集成测试的人员组织:由专门的测试人员负责测试,但开发人员有时也会参与集成测试的设计和执行。集成测试工程师一般都需要参加到产品的概要设计中去,尤其是概要设计的评审。SoftwareTesting7.1集成测试概述集成测试的过程:1.计划阶段2.设计阶段3.执行阶段4.评估阶段SoftwareTesting1.计划阶段时间:在概要设计完成评审后大约一个星期;需要准备集成测试的设计依据文档:需求规格说明书、概要设计文档等。确定测试范围和测试对象;准备测试工具和环境,进行人员组织等。考虑一定的风险及应急计划,外部技术支援的力度和深度以及相关培训安排。最后以完成集成测试计划书结束,并通过评审。SoftwareTesting2.设计阶段要详细理解集成测试计划阶段准备的需求规格说明书、概要设计以及集成测试计划。与软件系统的详细设计阶段同时进行。SoftwareTesting2.设计阶段详细分析被测对象结构、集成测试模块、集成测试接口,并根据分析结果确定集成测试策略、测试工具、集成测试环境,以估计和安排集成测试工作量。根据软件需求、概要设计、集成测试计划来设计集成测试。部分测试用例可能需要进行集成测试代码(Driver、Stub)设计,部分测试用例需要借助测试工具。经过设计后,输出集成测试用例、集成测试规程、集成测试代码、集成测试脚本,最后输出集成测试设计报告,并通过评审。SoftwareTesting3.执行阶段当单元测试已经完成后就可以开始执行集成测试了。执行过程中,根据前面的设计以及软件需求规格说明书、概要设计、详细设计、代码和单元测试报告,执行所有集成测试用例、回归集成测试用例并记录和撰写集成测试报告。SoftwareTesting4.评估阶段在修复和回归测试的交替和反复中,当达到测试要求后,就进入了评估阶段。所有测试需要由测试结果评估小组或评估人员对测试结果进行评测、分析,并输出分析结果。SoftwareTesting7.2基于功能分解的集成要求在测试的准备阶段按照概要设计的规格说明,来确定模块之间的功能分层结果,明确被测功能模块,并在熟悉被测功能模块功能、接口等特性的基础上进行测试。SoftwareTesting7.2基于功能分解的集成图中,软件系统包含7个功能模块,模块之间存在的层次结构以树型结构来表示:M1M3M4M7M6M5M2图7-2-1程序模块化设计示意图SoftwareTesting7.2基于功能分解的集成定义从一个模块开始,测一次添加一个模块,边组装边测试,以发现与接口相联系的问题。集成方式自顶向下集成自底向上集成三明治集成SoftwareTesting1.自顶向下集成定义自顶向下集成(Top-downIntegration)按照系统层次结构图,以主程序模块为中心,自上而下按照深度优先或者广度优先策略,对各个模块一边组装一边进行测试。在测试过程中,需要设计Stub桩模块来模拟下层模块。SoftwareTesting自顶向下集成的两种类型深度优先广度优先ABCDHGJEFIKLMNA、B、E、J、K、C、F、L、G、D、H、M、N、I深度优先:A、B、C、D、E、F、G、H、I、J、K、L、M、N广度优先:SoftwareTesting深度优先策略首先把主控制路径上的模块集成在一起,至于选择哪一条路径作为主控制路径,这带有随意性,可以根据实际问题的特性确定其优先级。以图7-2-1为例,若选择了最左一条路径,则首先将模块M1、M2和M5集成在一起,再将M6集成起来,然后考虑中间和右边的路径。SoftwareTesting图7-2-2深度优先搜索测试过程SoftwareTesting广度优先策略沿控制层次结构水平地向下移动。以图7-2-1为例,它首先把M2、M3和M4与主控模块集成在一起,再将M5、M6和其他模块集成起来。SoftwareTesting图7-2-3广度优先搜索测试过程SoftwareTesting自顶向下集成步骤:(1)以主控模块作为测试驱动模块,把对主控模块进行单元测试时引入的所有桩模块用实际模块替代(2)依据所选的集成策略,每次只替代一个桩模块(3)每集成一个模块立即测试一遍SoftwareTesting自顶向下集成步骤(续)(4)只有每组测试完成后,才着手替换下一个桩模块(5)为避免引入新错误,须不断地进行回归测试从第(2)步开始,循环执行上述步骤,直至整个程序结构构造完毕。SoftwareTesting举例:ADBECF深度优先:A、B、E、C、D、F广度优先:A、B、C、D、E、F自顶向下集成深度优先A加入ES2BS3EA测试AS2S1S3A加入BS2BS3S4加入FCBDEAFA加入CCBS3E加入DCBDEAS5SoftwareTesting2.自底向上集成定义自底向上集成(Bottom-upIntegration)从系统层次结构图的最底层模块开始进行组装和集成测试的方式。SoftwareTesting自底向上集成步骤1从最底层的模块开始组装,组合成一个能够完成某个子功能的构件;2编制驱动程序,协调测试用例的输入与输出;3测试集成后的构件;4使用实际模块代替驱动程序,按程序结构向上组装测试后的构件;5重复上面的第二步,直到系统的最顶层模块被加入到系统中为止。SoftwareTesting2.自底向上集成以图7-2-4为例,控制力最弱的底层模块有M5、M3、M6,先选择其作为测试对象,三者可以并列进行,分别为它们建立好Driver,然后分别进行集成。SoftwareTesting图7-2-4自底向上的集成测试策事例M1M2M3M4M5M6SoftwareTesting图7-2-5自底向上的集成测试示例SoftwareTesting举例:ACBDFEEd1Cd3Fd4EBd2Dd5FACBDFESoftwareTesting优点1可以尽早的验证底层模块的行为。2提高了测试效率;3对实际被测模块的可测试性要求较少;4减少了桩模块的工作量;5容易对错误进行定位。自底向上集成SoftwareTesting缺点1直到最后一个模块加进去之后才能看到整个系统的框架;2只有到测试过程的后期才能发现时序问题和资源竞争问题;3驱动模块的设计工作量大;4不能及时发现高层模块设计上的错误。自底向上集成SoftwareTesting自底向上集成适用范围底层模块接口比较稳定的产品;高层模块接口变更比较频繁的产品;底层模块开发和单元测试工作完成较早的产品。SoftwareTesting3.三明治集成定义三明治集成方法(SandwichIntegration)三明治集成是一种混合增殖式测试策略,综合了自顶向下和自底向上两种集成方法的优点。SoftwareTesting方法一般对软件结构的上层使用自顶向下结合的方法;对下层使用自底向上结合的方法;3.三明治集成SoftwareTesting举例用三明治集成方式如何测试?CBDEFASoftwareTesting三明治集成步骤首先,确定以哪一层为界来决定使用三明治集成策略。我们确定以B模块为界;其次,对模块B及其所在层下面的各层使用自底向上的集成策略;再次,对模块B所在层上面的层次使用自顶向下的集成策略;然后,把模块B所在层各模块同相应的下层集成;最后,对系统进行整体测试。SoftwareTestingSoftwareTesting以图7-2-6(a)为例,在图中共有6个模块,图中以功能分层结构表示,共包括3层。首先确定测试的中间层,在中心层之上采用自顶向下的集成,而目标层之下采用自底向上的集成,最后,测试在中心层汇合,直接将上下两个部分集成起来进行测试。本例中第二层为中心层,且中心层参与了自底向上的集成测试,具体的测试过程如图7-2-6(b)所示。SoftwareTesting图7-2-6三明治集成M1M2M3M4M5M6TestM5M2TestM4M6TestM5TestM1M2M3M4M5M6TestM3TestM1TestM6TestM2TestM4第一层第二层第三层(a)(b)SoftwareTesting优点除了具有自顶向下和自底向上两种集成策略的优点之外,运用一定的技巧,能够减少了桩模块和驱动模块的开发。缺点在被集成之前,中间层不能尽早得到充分的测试。3.三明治集成SoftwareTesting基于功能分解的缺点之一是以功能分解树为基础,这需要对需求、概要设计进行深入理解,并总结出功能模块间的分层结构关系图,但并不是所有的软件系统的功能层次关系都很明确。如果结合软件程序的内部结构,就可以缓解这类缺陷,基于调用图的集成测试方法就是这样的一种方法。7.3基于调用图的集成SoftwareTesting7.3基于调用图的集成调用图是一种有向图,它反映了程序中模块之间的调用关系。基于调用图的集成测试就是根据其调用关系来设计和实施的,具体的做法有:成对集成和相邻集成。SoftwareTesting1、成对集成成对集成的思想就是免除桩/驱动器开发工作,使用实际代码来代替桩/驱动器。成对集成的方法就是对应调用图的每一个边建立并执行一个集成测试会话。SoftwareTesting图7-3-1成对集成示意图1、成对集成图中表示出了15个模块(函数)之间的调用关系,其调用关系是通过连线连接的。根据成对集成的方法,共有15对集成测试会话。SoftwareTesting图7-3-1成对集成示意图如测试会话1~4,需要设计桩模块来模拟模块Stub7进行测试,也就是要建立相应的桩模块;而测试会话8~12则需要建立驱动模块Driver6。SoftwareTesting2.相邻集成相邻集成相邻集成是把节点邻居作为测试对象。节点邻居有向图中,节点邻居包括所有直接前驱节点和直接后继节点。SoftwareTesting图7-3-2相邻集成示意图图中表示了处理模块间的调用关系:SoftwareTesting每个内部节点(即非零出度和非零入度的节点)都有邻居,即每个内部节点对应一组测试
本文标题:第7章-集成测试
链接地址:https://www.777doc.com/doc-2144321 .html