1、第7章 集成测试,软件测试课程组,测试过程单元测试集成测试系统测试,为什么需要集成测试?,问题引入,为什么总是集成不起来?,主要内容,7.1 集成测试概述 7.2 基于功能分解的集成 7.3 基于调用图的集成 7.4 基于路径的集成 7.5 其他集成测试方法 7.6 案例 7.7 本章小结,7.1集成测试概述,集成测试(Integration test)定义:是在单元测试的基础上,将所有模块按照设计要求集成为系统或子系统,并进行测试。测试单元在集成时是否有缺陷,通过测试识别组合单元时出现的问题,也叫组装测试或联合测试。验证程序和概要设计说明的一致性。,7.1集成测试概述,集成测试的目标:检测系
2、统是否达到需求;对业务流程及数据流的处理是否符合标准;检测系统对业务流处理是否存在逻辑不严谨或者错误;检测需求是否存在不合理的标准及要求。,7.1集成测试概述,集成测试的内容:具体检测包括功能正确性验证、接口测试、全局数据结构的测试以及计算精度检测等在集成测试时可能出现的错误。,7.1集成测试概述,集成测试的方法和策略:非增量型测试:先将所有软件模块统一集成后才进行整体测试,也称大棒集成。增量型(渐增式) 测试:从一个模块开始,测一次添加一个模块,边组装边测试,以发现与接口相联系的问题。增量型集成测试的实施策略有很多种,如自底向上集成测试、自顶向下集成测试、三明治集成测试等。,7.1集成测试概
3、述,集成测试的人员组织:由专门的测试人员负责测试,但开发人员有时也会参与集成测试的设计和执行。集成测试工程师一般都需要参加到产品的概要设计中去,尤其是概要设计的评审。,7.1集成测试概述,集成测试的过程:1计划阶段 2设计阶段3执行阶段4评估阶段,1计划阶段,时间:在概要设计完成评审后大约一个星期;需要准备集成测试的设计依据文档:需求规格说明书、概要设计文档等。确定测试范围和测试对象;准备测试工具和环境,进行人员组织等。考虑一定的风险及应急计划,外部技术支援的力度和深度以及相关培训安排。最后以完成集成测试计划书结束,并通过评审。,2设计阶段,要详细理解集成测试计划阶段准备的需求规格说明书、概要
4、设计以及集成测试计划。与软件系统的详细设计阶段同时进行。,2设计阶段,详细分析被测对象结构、集成测试模块、集成测试接口,并根据分析结果确定集成测试策略、测试工具、集成测试环境,以估计和安排集成测试工作量。根据软件需求、概要设计、集成测试计划来设计集成测试。部分测试用例可能需要进行集成测试代码(Driver、Stub)设计,部分测试用例需要借助测试工具。经过设计后,输出集成测试用例、集成测试规程、集成测试代码、集成测试脚本,最后输出集成测试设计报告,并通过评审。,3执行阶段,当单元测试已经完成后就可以开始执行集成测试了。执行过程中,根据前面的设计以及软件需求规格说明书、概要设计、详细设计、代码和
5、单元测试报告,执行所有集成测试用例、回归集成测试用例并记录和撰写集成测试报告。,4评估阶段,在修复和回归测试的交替和反复中,当达到测试要求后,就进入了评估阶段。所有测试需要由测试结果评估小组或评估人员对测试结果进行评测、分析,并输出分析结果。,7.2 基于功能分解的集成,要求在测试的准备阶段按照概要设计的规格说明,来确定模块之间的功能分层结果,明确被测功能模块,并在熟悉被测功能模块功能、接口等特性的基础上进行测试。,7.2 基于功能分解的集成,图中,软件系统包含7个功能模块,模块之间存在的层次结构以树型结构来表示:,图7-2-1 程序模块化设计示意图,7.2 基于功能分解的集成,定义从一个模块
6、开始,测一次添加一个模块,边组装边测试,以发现与接口相联系的问题。集成方式自顶向下集成自底向上集成三明治集成,1.自顶向下集成,定义自顶向下集成(Top-down Integration)按照系统层次结构图,以主程序模块为中心,自上而下按照深度优先或者广度优先策略,对各个模块一边组装一边进行测试。在测试过程中,需要设计Stub桩模块来模拟下层模块。,自顶向下集成的两种类型深度优先广度优先,A、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,广度优先:,深度优先策略,首先把主控制路径上的模块集成在一起,至于选择哪一条路径作为
7、主控制路径,这带有随意性,可以根据实际问题的特性确定其优先级。以图7-2-1为例,若选择了最左一条路径,则首先将模块M1、M2和M5集成在一起,再将M6集成起来,然后考虑中间和右边的路径。,图7-2-2 深度优先搜索测试过程,广度优先策略,沿控制层次结构水平地向下移动。以图7-2-1为例,它首先把M2、M3和M4与主控模块集成在一起,再将M5、M6和其他模块集成起来。,图7-2-3 广度优先搜索测试过程,自顶向下集成步骤:(1)以主控模块作为测试驱动模块,把对主控模块进行单元测试时引入的所有桩模块用实际模块替代(2)依据所选的集成策略,每次只替代一个桩模块(3)每集成一个模块立即测试一遍,自顶
8、向下集成步骤(续),(4)只有每组测试完成后,才着手替换下一个桩模块(5)为避免引入新错误,须不断地进行回归测试从第(2)步开始,循环执行上述步骤,直至整个程序结构构造完毕。,举例:,深度优先:A、B、E、C、D、F,广度优先:A、B、C、D、E、F,深度优先,2.自底向上集成,定义自底向上集成(Bottom-up Integration) 从系统层次结构图的最底层模块开始进行组装和集成测试的方式。,自底向上集成步骤 从最底层的模块开始组装,组合成一个能够完成某个子功能的构件; 编制驱动程序,协调测试用例的输入与输出; 测试集成后的构件; 使用实际模块代替驱动程序,按程序结构向上组装测试后的构
9、件; 重复上面的第二步,直到系统的最顶层模块被加入到系统中为止。,2.自底向上集成,以图7-2-4为例,控制力最弱的底层模块有M5、M3、M6,先选择其作为测试对象,三者可以并列进行,分别为它们建立好Driver,然后分别进行集成。,图7-2-4 自底向上的集成测试策事例,图7-2-5 自底向上的集成测试示例,举例:,优点可以尽早的验证底层模块的行为。 提高了测试效率;对实际被测模块的可测试性要求较少;减少了桩模块的工作量; 容易对错误进行定位。,自底向上集成,缺点直到最后一个模块加进去之后才能看到整个系统的框架;只有到测试过程的后期才能发现时序问题和资源竞争问题;驱动模块的设计工作量大;不能
10、及时发现高层模块设计上的错误。,自底向上集成,自底向上集成,适用范围 底层模块接口比较稳定的产品;高层模块接口变更比较频繁的产品;底层模块开发和单元测试工作完成较早的产品。,3. 三明治集成,定义三明治集成方法(Sandwich Integration)三明治集成是一种混合增殖式测试策略,综合了自顶向下和自底向上两种集成方法的优点。,方法一般对软件结构的上层使用自顶向下结合的方法;对下层使用自底向上结合的方法;,3. 三明治集成,举例,用三明治集成方式如何测试?,三明治集成步骤,首先,确定以哪一层为界来决定使用三明治集成策略。我们确定以B模块为界;其次,对模块B及其所在层下面的各层使用自底向上
11、的集成策略;再次,对模块B所在层上面的层次使用自顶向下的集成策略; 然后,把模块B所在层各模块同相应的下层集成;最后,对系统进行整体测试。,以图7-2-6(a)为例,在图中共有6个模块,图中以功能分层结构表示,共包括3层。,首先确定测试的中间层,在中心层之上采用自顶向下的集成,而目标层之下采用自底向上的集成,最后,测试在中心层汇合,直接将上下两个部分集成起来进行测试。本例中第二层为中心层,且中心层参与了自底向上的集成测试,具体的测试过程如图7-2-6(b)所示。,图7-2-6 三明治集成,优点除了具有自顶向下和自底向上两种集成策略的优点之外,运用一定的技巧,能够减少了桩模块和驱动模块的开发。
12、缺点在被集成之前,中间层不能尽早得到充分的测试。,3. 三明治集成,基于功能分解的缺点之一是以功能分解树为基础,这需要对需求、概要设计进行深入理解,并总结出功能模块间的分层结构关系图,但并不是所有的软件系统的功能层次关系都很明确。如果结合软件程序的内部结构,就可以缓解这类缺陷,基于调用图的集成测试方法就是这样的一种方法。,7.3 基于调用图的集成,7.3 基于调用图的集成,调用图是一种有向图,它反映了程序中模块之间的调用关系。基于调用图的集成测试就是根据其调用关系来设计和实施的,具体的做法有:成对集成和相邻集成。,1、成对集成,成对集成的思想就是免除桩/驱动器开发工作,使用实际代码来代替桩/驱
13、动器。成对集成的方法就是对应调用图的每一个边建立并执行一个集成测试会话。,图7-3-1 成对集成示意图,1、成对集成,图中表示出了15个模块(函数)之间的调用关系,其调用关系是通过连线连接的。根据成对集成的方法,共有15对集成测试会话。,图7-3-1 成对集成示意图,如测试会话14,需要设计桩模块来模拟模块Stub7进行测试,也就是要建立相应的桩模块;而测试会话812则需要建立驱动模块Driver6。,2. 相邻集成,相邻集成相邻集成是把节点邻居作为测试对象。节点邻居有向图中,节点邻居包括所有直接前驱节点和直接后继节点。,图7-3-2 相邻集成示意图,图中表示了处理模块间的调用关系:,每个内部
14、节点(即非零出度和非零入度的节点)都有邻居,即每个内部节点对应一组测试会话,另外还需要考虑入度为零的节点,它们也将构成一组测试会话。调用图中的节点和邻居的数量关系可以通过下面的公式来表示:(1) 内部节点=节点-(源节点+汇接节点)(2) 邻居=内部节点+源节点(3) 邻居=节点-汇接节点,计算邻居的数量:,图7-3-2 相邻集成示意图,图中表示了处理模块间的调用关系,计算出邻居的数量:,内部节点:3、4、5、8、9,源节点:1、6,邻居数量:7,由此可以得出图7-3-2中的邻居关系,如表7-3-1所示。,2. 相邻集成,相邻集成可大大降低集成测试的会话数量,并可避免桩和驱动器的开发相邻集成本
15、质上是三明治集成相邻集成具有“中爆炸”集成的缺陷:隔离困难,基于调用图的集成的优缺点,优点基于调用图的集成偏离了纯结构集成,转向行为基础。免除了桩/驱动器开发工作量。缺点缺陷隔离问题,7.4 基于路径的集成,概念源节点:程序执行的开始处或者重新开始处的语句片段。汇节点:程序执行结束处的语句。模块执行路径:以源节点开始、以汇节点结束的一系列语句,中间没有插入汇节点。消息:一种程序设计语言机制,通过这种机制将一个单元控制转移到另一个单元。,MM-路径,MM-路径是穿插出现模块执行路径和消息的序列。是一种路径描述,是描述模块执行路径中的单独单元之间的控制转移,该转移是通过消息来完成的。MM-路径,其
16、中的节点表示模块执行路径,边表示消息。注意:MM-路径不是可执行路径,并且要跨越单元边界。对于传统软件来说,MM-路径永远是从主程序开始,在主程序中结束。,MM-路径图,给定一组单元,其MM-路径图是一种有向图,其中节点表示模块执行路径,边表示消息和单元之间的返回。注意:MM-路径图是按照一组单元定义的。,例子,图7-4-1所示就是一个穿越了3个模块的MM-路径。MM-路径用粗线表示,表示模块A调用了模块B,模块B又调用了模块C。,图7-4-1 模块中的调用路径,在模块A中,节点1和4是源节点,节点2和5是汇节点。在模块B中,节点1是源节点,节点3是汇节点,节点5既是源节点又是汇节点。模块C只
17、有一个源节点1和一个汇节点4。,共有七个模块执行路径,分别为:(1) MEP(A,1)=。(2) MEP(A,2)=。(3) MEP(A,3)=。(4) MEP(B,1)=。(5) MEP(B,2)=。(6) MEP(B,3)=。(7) MEP(C,1)=。,图7-4-2 MM路径图,实线箭头表示消息,虚线箭头表示返回。,例:,13-8 跨三个单元的MM-路径,模块执行路径:MEP(A,1)=MEP(A,2)=MEP(A,3)=MEP(B,1)=MEP(B,2)=MEP(C,1)=MEP(C,2)=,例:,从图13-8中导出的MM-路径图,实线箭头表示消息,虚线箭头表示返回。,MM-路径图的特
18、点优点功能性和结构性的一种混合表达上:功能性标识方式上:结构性集成测试和系统测试无逢连接缺点标识MM-路径的工作量很大,优点:MM-路径是功能性测试和结构性测试的一种混合。基于路径的集成测试既适用于采用传统瀑布过程开发的软件,也适用于采用基于合成可选的生命周期模型开发的软件。缺点:需要更多的工作量标识MM-路径。,基于路径集成的优缺点,7.5 其他集成测试方法,1高频集成2基于功能的集成3基于进度的集成4基于风险的集成5客户/服务器的集成6分布式集成7面向对象的集成测试,1高频集成,定义:指同步于软件开发过程,每隔一段时间对开发团队的现有代码进行一次集成测试。特点:集成次数频繁,必须借助于自动
19、化工具来完成。优点:能在开发过程中及时发现代码错误,能直观地看到开发团队的有效工程进度。缺点:测试包可能比较简单,因而不能暴露深层次的编码错误,另外在开发的初始时间可能不易于平稳地进行集成。 高频集成主要应用于迭代(增量)过程模型开发的产品集成测试。,3基于进度的集成,要求:尽可能早地开始集成测试,以提高开发与集成的并行性,有效地缩短进度,并保证软件的质量。具体策略:对先开发的程序代码先进行集成测试,当然如果需要开发桩和驱动器,应在最大限度上保持测试和开发的并行性。缺点:测试早期缺乏整体性,仅能进行独立的集成,导致许多接口必须到了后期才能验证。桩和驱动的开发量可能会很大,还有可能因为进度的原因
20、,模块可能会很不稳定且会不断变动,导致测试的重复和浪费。,4基于风险的集成,要求:对高风险的模块间的接口先进行重点测试,从而保证系统的稳定性。该方法基于一种假设,即系统的错误往往多集中在系统风险最高的模块。因此尽早地验证这些高风险接口有助于加速系统稳定,从而增加对系统的信心。该方法对于系统中风险较大的模块比较实用。,5客户/服务器的集成,需要对客户端和服务器端的交互进行集成测试。策略:(1) 单独测试每个客户端和服务器端,必要时使用驱动和桩;(2) 把第一个客户端(客户端组)与服务器进行集成;(3) 把下一个客户端(客户端组)与步骤(2)完成的系统进行集成;(4) 重复步骤(3)直到客户端都被
21、加入到系统中。,5客户/服务器的集成,需要对客户端和服务器端的交互进行集成测试。优点:该方法集成次序没有约束,可以结合风险或功能优先级别,有利于复用和扩充,支持可控制和可重复的测试;缺点:驱动和桩的开发成本可能会比较高。,7.6 案例,拼图类游戏游戏通过Java Applet类来实现图片的载入、分割、移动、判定是否成功等功能。最后我们要将其嵌入到网页中。该实例中,通过参数确定要拼图的图片和要被分割的矩阵大小。如果初始化数据有误,应有响应的提示。通过鼠标点击可以移动可以交换的图片,并根据图片移动的新位置进行显示。如果拼图完成则需要给出提示信息,并且可以通过按动空格键,重新开始游戏。,图7-6-1
22、 拼图游戏界面,(a) 拼图界面 (b) 拼图拼接成功界面,拼图类游戏,本例中建立了一个java类,该类包含20个方法,通过HTML来调用。本例中包括三方面的集成测试内容:一是对类中的方法进行集成;二是HTML和Java Applet 的接口进行集成测试;三是界面接口测试。,集成测试案例拼图游戏方法功能的说明:,集成测试案例拼图游戏方法功能的说明:,拼图类游戏,对于类的方法间的集成测试,选择基于调用图的集成测试方法,原因是就类的内部方法之间的关系而言,从调用关系上分析是最为简单的。而HTML和Java Applet 的接口采用黑盒测试的方法。,拼图类游戏,方法的相互调用关系如图7-6-27-6
23、-4所示;图中忽略与界面相关的方法paint(Graphics g)、update(Graphics g),以及输入响应方法mouseReleased(MouseEvent arg0)、keyReleased(KeyEvent arg0)。对于调用层次作如下规定:若为独立方法,未调用其他方法,则规定其为0层,其他依次类推。,图7-6-2 init()方法的调用关系图,图7-6-3 clickMove()方法的调用关系图,图7-6-4 resetData()方法的调用关系图,集成测试分四个阶段来进行:,1计划阶段2集成测试设计3集成测试执行4测试评估,1计划阶段,1) 集成测试准备准备文档条件,
24、包括需求规格说明书、系统概要设计、项目计划。在人员组织上,需要包括测试人员、开发人员、软件质量控制人员、测试经理、项目开发经理、产品经理。,1计划阶段,2) 集成测试策略使用的测试技术和工具、测试完成标准、影响资源分配的特殊考虑。,1计划阶段,3) 集成测试日程计划在进行测试计划时,首先应该根据软件设计文档来评估测试项有哪些,然后根据工作量来进行集成测试的计划。,2集成测试设计,根据详细设计规格说明,建立集成测试环境,完成测试设计和开发。本例中,需要测试6个方面的内容。通过对测试内容的分解和细化,由测试项要求,开始设计测试用例,,集成测试项I_Spell_S02的所有测试用例,需要设计HTML
25、脚本。HTML脚本如下,每个测试用例根据输入修改ImageUrl和Num的参数设置。,集成测试项I_Spell_S04的测试用例中的桩的设计中,根据调用关系,需要建立setShowMode、loadImage两个桩模块。另外,集成测试项I_Spell_S02的所有测试用例,需要设置调用参数。为此需要建立桩模块来模拟该功能,所以在直接调用的桩模块的基础上还添加了getParameter桩。具体的桩代码如下:public void setShowMode() public boolean loadImage(String imageUrl) return true; /用例1,2,3,5,6,7返
26、回true/return false; /用例4返回false,public void imageSegment() public String getParameter(String arg0)if (arg0 = ImageUrl) return iImageRul; /返回ImageUrl else if (arg0 = Num) return iNum; /返回 Num else return null;,集成测试项I_Spell_S05的测试用例中桩的设计中,需要构建其调用的桩模块disorder,setNoShowNO。另外测试中由于没有通过appletviewer.exe(小程序
27、查看器)或者html的调用,所以没有容器显示图片。另外,还建立了三个桩来模拟JFrame 的方法,分别是getImage、getDocumentBase、createImage。桩代码在setUp()中调用,具体桩代码如下:,在集成测试项I_Spell_S06中,采用了等价类的分析方法来具体设计测试用例。将移动行为分成两大类:一类是空白块与移动图块不相邻;第二类情况是相邻。相邻又可分三类:(1) 空白位置在图块的中间,其上下左右的图块可以与其发生交换,而其他的不能。这里可以至少用两个用例来测试。(2) 空白位置为图块的四个顶点位置,这时仅有两个位置的图块可以交换,这里可以用42个测试用例,表7
28、-6-11仅列出了两个。(3) 空白块在四边上,这时仅有三个位置的图块可以交换,这里可以用42个测试用例,表7-6-11仅列出了两个。,集成测试项I_Spell_S06的测试用例中桩的设计中,需要构建其调用的桩模块有两个:repaint、isSucceed。具体实现代码如下:public void repaint() public boolean isSucceed(int no, int imageNo) return false; ,3集成测试执行,在测试执行时,我们需要在按照测试用例设计的要求进行。无论是自动化测试还是手工的测试,构建好测试平台,本案例的软件测试平台包括:Eclipse3.4.1、Jdk1.6.2、JUnit4.0、EMMA、CheckStyle4.4.4.1,,图7-6-5 集成测试案例-自动化测试执行报告,(a) CheckStyle检查报告,(b) JUnit执行报告,图7-6-5 集成测试案例-自动化测试执行报告,(c) EMMA测试覆盖率报告,4测试评估,最后由SQA组织会议,对此次集成测试活动进行测试评估,并对集成测试结果进行评测、分析、形成结论,并整理形成测试报告。,小 结,集成测试的几种方法基于分解的集成基于调用图的集成基于路径的集成,
Copyright © 2018-2021 Wenke99.com All rights reserved
工信部备案号:浙ICP备20026746号-2
公安局备案号:浙公网安备33038302330469号
本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。