第7章 集成测试_第1页
第7章 集成测试_第2页
第7章 集成测试_第3页
第7章 集成测试_第4页
第7章 集成测试_第5页
已阅读5页,还剩98页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第7章集成测试,7.1集成测试概述7.2基于功能分解的集成7.3基于调用图的集成7.4基于路径的集成7.5其他集成测试方法7.6案例7.7本章小结,7.1集成测试概述实践表明,一些模块虽然能够单独地工作,但并不能保证连接起来也能正常地工作。为了改善这种情况,就要求在软件测试中引入集成测试,用以测试程序在某些局部反映不出来而在全局上很可能暴露出来的问题。,7.1.1集成测试的定义集成(Integration):把多个单元组合起来形成更大的单元。集成测试(IntegrationTesting):在假定各个软件单元已经通过了单元测试的前提下,检查各个软件单元之间的相互接口是否正确。也叫组装测试或联合

2、测试,具体检测包括:功能正确性验证、接口测试、全局数据结构的测试以及计算精度检测等在集成测试时可能出现的错误。,集成测试的方法策略:非增量型集成测试和增量型(渐增式)集成测试。非增量型测试:将所有软件模块统一集成后才进行整体测试,也称大棒集成(Big-BangIntegrateTesting)。这种方法极容易出现混乱,因为测试时可能发现一大堆错误,为每个错误定位和纠正将非常困难。对于复杂的软件系统,一般不宜采用非增量型测试。,增量型(渐增式)集成测试:从一个模块开始,测一次添加一个模块,边组装边测试,以发现与接口相联系的问题。渐增式测试模式虽然需要编写Driver或Stub程序,但这样的方法可

3、以更早发现模块间接口错误,并有利错误的定位和纠正。增量型集成测试的实施策略:自底向上集成测试、自顶向下集成测试、三明治集成测试、核心集成测试、分层集成测试、基于使用的集成测试等,人员组织单元测试:主要由开发人员来承担。集成测试:则主要由专门的测试人员负责测试开发人员有时也会参与集成测试的设计和执行集成测试工程师一般都需要参加产品的概要设计,在极限编程的实践中,一个新的名词又出现了“持续集成”,其全称为ContinuousIntegration。实际上并非仅在极限编程中使用着它,其他开放模型下都可以使用持续集成。软件开发中各个模块不是同时完成的,根据进度将完成的模块尽可能早地进行集成,这样有助于

4、尽早发现缺陷,避免集成阶段大量缺陷涌现,7.1.2集成测试的过程1计划阶段在概要设计完成评审后大约一个星期,就可以开始进入到集成测试的计划阶段了。准备集成测试的设计依据文档:需求规格说明书、概要设计文档等。确定测试范围和测试对象,准备测试工具和环境,并进行人员组织等。考虑一定的风险及应急计划,外部技术支援的力度和深度以及相关培训安排。,2设计阶段对于集成测试的设计,要详细理解集成测试计划阶段准备的需求规格说明书、概要设计以及集成测试计划。,集成测试的设计:(1)详细分析被测对象结构、集成测试模块、集成测试接口。根据分析结果确定集成测试策略、测试工具、集成测试环境,以估计和安排集成测试工作量。(

5、2)集成测试设计结果:集成测试用例、集成测试规程、集成测试代码、集成测试脚本,最后输出集成测试设计报告,并通过评审。,3执行阶段根据前面的设计以及软件需求规格说明书、概要设计、详细设计、代码和单元测试报告,执行所有集成测试用例、回归集成测试用例并记录和撰写集成测试报告。,4评估阶段在修复和回归测试的交替和反复中,当达到测试要求后,就进入了评估阶段。所有测试需要由测试结果评估小组或评估人员对测试结果进行评测、分析,并输出分析结果。,7.2基于功能分解的集成系统在设计时,如果基于系统功能的分解来进行模块化程序设计,那么系统在集成时也可以基于功能模块来组装。,图7-2-1程序模块化设计示意图,1自顶

6、向下集成自顶向下集成(Top-DownIntegration):从最具控制力的主控模块开始,按照软件的控制层次结构,以深度优先或广度优先的策略,向系统中增加模块,直至实现整个系统。在测试过程中,需要设计Stub桩模块来模拟下层模块深度优先策略:首先把主控制路径上的模块集成在一起,至于选择哪一条路径作为主控制路径,这带有随意性,可以根据实际问题的特性确定其优先级。,图7-2-2深度优先搜索测试过程,广度优先策略:它沿控制层次结构水平地向下移动。,图7-2-3广度优先搜索测试过程,深度优先和广度优先两种集成测试的方法,其测试步骤可以分成如下五步:(1)以主控模块作为测试驱动模块,把对主控模块进行单

7、元测试时引入的所有桩模块用实际模块替代,需要设计的桩模块的个数为模块总个数减一;(2)依据所选的集成策略(深度优先或广度优先),每次只替代一个桩模块;(3)每集成一个模块立即测试一遍;(4)只有每组测试完成后,才着手替换下一个桩模块;(5)为避免引入新错误,还需要不断地进行回归测试,即全部或部分地重复已做过的测试。,有助于最大限度地减少对驱动程序的需求不能很好地支持有限功能的早期发布桩模块(Stub)不能反映真实情况,重要数据不能及时回送到上层模块,则测试可能并不充分。,2自底向上集成自底向上的集成(Bottom-UpIntegration)方式是最常使用的方法。自底向上集成方式从程序模块结构

8、中最底层(即控制力最弱)的模块开始组装、按控制层次增强的顺序向系统中增加模块并测试,直至实现整个系统。不再需要编制桩模块实施步骤分为如下五步:,(1)由驱动模块控制最底层模块的并行测试,也可以把最底层模块组合起来以实现某一特定软件功能的簇,由驱动模块控制它进行测试。(2)用实际模块代替驱动模块,与它已测试的直属子模块集成为子系统。(3)为子系统配备驱动模块,进行新的测试。(4)判断是否已集成到达主模块,是否结束测试,否则执行(2)。(5)为避免引入新错误,还需要不断地进行回归测试,即全部或部分地重复已做过的测试。,以图7-2-4为例,控制力最弱的底层模块有M5、M3、M6,先选择其作为测试对象

9、,三者可以并列进行,分别为它们建立好Driver,然后分别进行集成。具体的集成测试过程如下图7-2-5所示。图(a)、(b)、(c)分别为M5、M3、M6模块的单元测试。,图7-2-4自底向上的集成测试策事例,图7-2-5自底向上的集成测试示例,减少了对桩模块的需求自底向上增值的方式可以实施多个模块的并行测试,提高测试效率,且管理方便,测试人员能较好地锁定软件故障所在位置。对驱动程序的需求使得测试管理变得复杂起来。高级别的逻辑和数据流在晚期测试,只有程序最后一个模块加入时才具有整体形象。不能很好地支持有限功能的早期发布。,3三明治集成三明治集成(SandwichIntegration):也称混

10、合法,是将自顶向下集成和自底向上集成两种方式结合起来进行集成和测试。对软件结构中的较上层,使用的是自顶向下集成测试,而对软件结构中的较下层,使用的则是自底向上集成,两者结合完成测试。,图7-2-6三明治集成,7.3基于调用图的集成基于功能分解:以功能分解树为基础需要对需求、概要设计进行深入理解,并总结出功能模块间的分层结构关系图,但并不是所有的软件系统的功能层次关系都很明确。调用图:一种有向图,它反映了程序中模块之间的调用关系。包括:成对集成和相邻集成。,1成对集成把调用图中的一对单元作为测试对象需要测试的会话就对应到调用图的每一条边上图7-3-1中表示出了15个模块(函数)之间的调用关系,其

11、调用关系是通过连线连接的。,图7-3-1成对集成示意图,2相邻集成相邻集成:把节点邻居作为测试对象,节点的邻居包括该节点的直接前驱和所有后续节点。,图7-3-2相邻集成示意图,相邻集成降低测试会话的数量避免开发桩和驱动器相邻集成和三明治集成是相似的,不同的是相邻集成是基于调用图的,而三明治集成是基于功能分解树的在相邻集成测试中也具有“大爆炸”集成的缺陷隔离困难,7.4基于路径的集成要关注模块间的调用关系,还要关注代码中模块调用的位置不是光将测试的重点放到接口上,还要将注意力集中在这些单元的交互上,源节点:程序执行的开始处或者重新开始处的语句片段。汇节点:程序执行结束处的语句。模块执行路径:以源

12、节点开始、以汇节点结束的一系列语句,中间没有插入汇节点。消息:一种程序设计语言机制,通过这种机制将一个单元控制转移到另一个单元。MM-路径:穿插出现在模块执行路径和消息的序列。节点表示模块执行路径,边表示消息。MM-路径不仅是可执行路径,并且要跨越单元边界对于传统(过程)软件,MM-路径从主程序中开始,在主程序中结束,MM-路径图:MM-路径图是一种有向图,对于给定的一组单元,其中节点表示模块执行路径,边表示消息和单元之间的返回。MM-路径是模块执行路径序列,图7-4-1模块中的调用路径,在模块A中,节点1和4是源节点,节点2和5是汇节点。类似地,在模块B中,节点1是源节点,节点3是汇节点,节

13、点5既是源节点又是汇节点。模块C只有一个源节点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-2MM路径图,7.5其他集成测试方法1高频集成高频集成测试:同步于软件开发过程,每隔一段时间对开发团队的现有代码进行一次集成测试使用高频集成测试需要具备一定的条件:可以持续获得一个稳定的增量,并且该增量内部已被验证没有问题需要版本控制工具来保证始终维护的是测试脚本和代码的最新版本;必须借助于自动化工具来完成应用

14、于迭代(增量)过程模型开发的产品集成测试,2基于功能的集成关注测试验证系统的关键功能从功能角度出发,按照功能的关键程度对模块的集成顺序进行组织,尽可能早地进行测试对有较大风险的产品、技术探索的项目或者对功能实现没有把握的产品,其功能的实现远比质量更关键,3基于进度的集成该方法的提出是基于进度和质量两方面的考虑该方法要求尽可能早地开始集成测试,以提高开发与集成的并行性,有效地缩短进度,并保证软件的质量具体策略要求是对先开发的程序代码先进行集成测试,当然如果需要开发桩和驱动器,应在最大限度上保持测试和开发的并行性但测试早期缺乏整体性,仅能进行独立的集成,导致许多接口必须到了后期才能验证。桩和驱动的

15、开发量可能会很大,还有可能因为进度的原因,模块可能会很不稳定且会不断变动,导致测试的重复和浪费。,4基于风险的集成该方法要求对高风险的模块间的接口先进行重点测试,从而保证系统的稳定性该方法基于一种假设,即系统的错误往往多集中在系统风险最高的模块尽早地验证这些高风险接口有助于加速系统稳定,从而增加对系统的信心。该方法与基于功能的集成有一定相似的地方,可以结合起来使用。该方法对于系统中风险较大的模块比较实用。,5客户/服务器的集成该方法所测试的系统是客户/服务器,该类系统需要对客户端和服务器端的交互进行集成测试。具体的策略如下:(1)单独测试每个客户端和服务器端,必要时使用驱动和桩;(2)把第一个

16、客户端(客户端组)与服务器进行集成;(3)把下一个客户端(客户端组)与步骤(2)完成的系统进行集成;(4)重复步骤(3)直到客户端都被加入到系统中。该方法集成次序没有约束,可以结合风险或功能优先级别,有利于复用和扩充,支持可控制和可重复的测试;缺点是驱动和桩的开发成本可能会比较高。,7.6案例本案例中,我们要来对一个小游戏进行集成测试,该游戏是一个拼图类游戏。游戏通过JavaApplet类来实现图片的载入、分割、移动、判定是否成功等功能。最后我们要将其嵌入到网页中。该实例中,通过参数确定要拼图的图片和要被分割的矩阵大小。如果初始化数据有误,应有响应的提示。通过鼠标点击可以移动可以交换的图片,并

17、根据图片移动的新位置进行显示。如果拼图完成则需要给出提示信息,并且可以通过按动空格键,重新开始游戏。图7-6-1所示是游戏的界面。,图7-6-1拼图游戏界面,(a)拼图界面(b)拼图拼接成功界面,注:本例以面向对象测试的类测试方法间的集成测试为例,在类测试中,方法间的集成测试策略与传统的测试方法相类似。其中类的成员变量对应于传统设计中的全局变量。本例中建立了一个java类,具体实现代码可从出版社网站下载。该类包含20个方法,通过HTML来调用。本例中包括三方面的集成测试内容:一是对类中的方法进行集成;二是HTML和JavaApplet的接口进行集成测试;三是界面接口测试。具体的方法功能说明如表

18、7-6-1所示。,在集成测试中对接口的理解要与Java中的接口概念有所区别。Java语言中,接口是一个特殊的语法结构,其中可以包含一组方法的声明(没有实现的方法)和一些常量;而测试中,对于类而言,所要测试的接口可以是该类的公有方法。但在类的内部,其内部方法也有集成,同时存在接口测试,该类测试可以理解为方法的参数。,通过被测试对象的分析,对于类的方法间的集成测试,选择基于调用图的集成测试方法,原因是就类的内部方法之间的关系而言,从调用关系上分析是最为简单的。而HTML和JavaApplet的接口采用黑盒测试的方法。这些方法的相互调用关系如图7-6-27-6-4所示,图中忽略与界面相关的方法pai

19、nt(Graphicsg)、update(Graphicsg),以及输入响应方法mouseReleased(MouseEventarg0)、keyReleased(KeyEventarg0)。对于调用层次作如下规定:若为独立方法,未调用其他方法,则规定其为0层,其他依次类推。,图7-6-2init()方法的调用关系图,图7-6-3clickMove()方法的调用关系图,图7-6-4resetData()方法的调用关系图,根据集成测试的过程要求,在本案例中我们对其测试也分四个阶段来进行。1计划阶段1)集成测试准备单元测试首先是要准备文档条件,包括需求规格说明书、系统概要设计、项目计划。在查阅这些

20、资料时需要注意其版本和日期,防止以过期或者版本不一致的文档作为测试计划、用例设计和执行的依据。,在人员组织上,需要包括测试人员、开发人员、软件质量控制人员、测试经理、项目开发经理、产品经理。测试人员负责集成测试的用例设计、执行、记录、回归测试。软件开发人员负责定位和解决问题并修复缺陷。软件质量控制负责对集成测试进行监控、评审。测试经理负责制定测试计划、安排测试任务。项目开发经理负责代码的修复和安排管理。产品经理负责解决资源要求(包括人力资源、工具等)并对单元测试结果进行监督。本案例中简称Tester、Dev、SQA、TM、CPM、PM。,2)集成测试策略测试策略包括要使用的测试技术和工具、测试

21、完成标准、影响资源分配的特殊考虑,例如模拟物理损坏、安全性威胁等。本例中通过表7-6-2予以说明。,3)集成测试日程计划在进行测试计划时,首先应该根据软件设计文档来评估测试项有哪些,然后根据工作量来进行集成测试的计划,具体信息如表7-6-3所列。,2集成测试设计根据详细设计规格说明,建立集成测试环境,完成测试设计和开发。本例中,我们需要测试7个方面的内容。测试项如表7-6-5所示。,通过对测试内容的分解和细化,由测试项要求,开始设计测试用例,具体的测试用例如表7-6-67-6-11所示。,集成测试项I_Spell_S02的所有测试用例,需要设计HTML脚本。HTML脚本如下,每个测试用例根据输

22、入修改ImageUrl和Num的参数设置。,集成测试项I_Spell_S04的测试用例中的桩的设计中,根据调用关系,需要建立setShowMode、loadImage两个桩模块。另外,集成测试项I_Spell_S02的所有测试用例,需要设置调用参数。为此需要建立桩模块来模拟该功能,所以在直接调用的桩模块的基础上还添加了getParameter桩。具体的桩代码如下:publicvoidsetShowMode()publicbooleanloadImage(StringimageUrl)returntrue;/用例1,2,3,5,6,7返回true/returnfalse;/用例4返回false,

23、publicvoidimageSegment()publicStringgetParameter(Stringarg0)if(arg0=ImageUrl)returniImageRul;/返回ImageUrlelseif(arg0=Num)returniNum;/返回Numelsereturnnull;,集成测试项I_Spell_S05的测试用例中桩的设计中,需要构建其调用的桩模块disorder,setNoShowNO。另外测试中由于没有通过appletviewer.exe(小程序查看器)或者html的调用,所以没有容器显示图片。另外,还建立了三个桩来模拟JFrame的方法,分别是getIm

24、age、getDocumentBase、createImage。桩代码在setUp()中调用,具体桩代码如下:,在集成测试项I_Spell_S06中,采用了等价类的分析方法来具体设计测试用例。将移动行为分成两大类:一类是空白块与移动图块不相邻;第二类情况是相邻。相邻又可分三类:(1)空白位置在图块的中间,其上下左右的图块可以与其发生交换,而其他的不能。这里可以至少用两个用例来测试。(2)空白位置为图块的四个顶点位置,这时仅有两个位置的图块可以交换,这里可以用42个测试用例,表7-6-11仅列出了两个。(3)空白块在四边上,这时仅有三个位置的图块可以交换,这里可以用42个测试用例,表7-6-11

25、仅列出了两个。,集成测试项I_Spell_S06的测试用例中桩的设计中,需要构建其调用的桩模块有两个:repaint、isSucceed。具体实现代码如下:publicvoidrepaint()publicbooleanisSucceed(intno,intimageNo)returnfalse;,3集成测试执行设计结束后就进入了集成测试的执行阶段。在测试执行时,我们需要在按照测试用例设计的要求进行。同单元测试类似,我们需要构建好测试平台,无论是自动化测试还是手工的测试。本案例的软件测试平台包括Eclipse3.4.1、Jdk1.6.2、JUnit4.0、EMMA、CheckStyle4.4.4.1,部分执行结果如图7-6-5所示。,图7-6-5集成测试案例-自动化测试执行报告,(a)CheckStyle检查报告,(b)JUnit执行报告,图7-6-5集成测试案例-自动化测试执行报告,(c)EMMA测试覆盖率报告,最后需要对所有集成测试的结果进行统计,并生成测试执行报告和缺陷记录报告。同单元测试的测试执行报告类似,其需要包括测试用例的标识、版本、通过情况、缺陷标识和测试执行时间等内容。如果测试未通过则必须给出测试的缺陷记录。缺陷记录中包括缺陷标识、缺陷描述、位置、严重程度和缺陷类型,其中需要明确其位置和严重程度。在自

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论