实验三集成测试1实验类型:设计性要求:必做学时:62实验内容:在单元测试的基础上,将所有模块按照设计要求组装成为子系统或系统,进行集成测试。3实验的基本要求:1、要求学生掌握桩模块和驱动模块的开发。2、发现并排除在单元模块连接中可能发生的问题。4实验主要方法1定义:集成测试,也叫组装测试或联合测试。在单元测试的基础上,将所有模块按照设计要求(如根据结构图)组装成为子系统或系统,进行集成测试。实践表明,一些模块虽然能够单独地工作,但并不能保证连接起来也能正常的工作。一些局部反映不出来的问题,在全局上很可能暴露出来。子系统:子系统是一种模型元素,它具有包(其中可包含其他模型元素)和类(其具有行为)的语义。子系统的行为由它所包含的类或其他子系统提供。子系统实现一个或多个接口,这些接口定义子系统可以执行的行为。使用可以通过多种互补的方法来使用子系统,将系统分为若干个单元,这些单元:可以独立预定、配置或交付可以独立开发(只要接口保持不变)可以在一组分布式计算节点上独立部署可以在不破坏系统其他部分的情况下独立地进行更改此外,子系统还可以:将系统分为若干单元,以提供对关键资源的有限安全保护在设计中代表现有产品或外部系统从类协作中确定子系统如果某个协作中的各个类只是在相互之间进行交互,并且可生成一组定义明确的结果,就应将该协作和它的类封装在一个子系统中。这一规则同样适用于协作的子集。可以对协作的任何部分或全部进行封装和简化,这将会使设计更易于理解。桩模块和驱动模块:软件测试技术的一种,主要用在单元测试阶段。由于对已开发的单元模块功能和行为测试会涉及到仿真对象的概念,比如说驱动模块和桩模块。驱动模块是用来模拟被测试模块的上一级模块,相当于被测模块的主程序。它接收数据,将相关数据传送给被测模块,启用被测模块,并打印出相应的结果。桩模块(Stub)是指模拟被测试的模块所调用的模块,而不是软件产品的组成的部分。主模块作为驱动模块,与之直接相连的模块用桩模块代替。在集成测试前要为被测模块编制一些模拟其下级模块功能的“替身”模块,以代替被测模块的接口,接受或传递被测模块的数据,这些专供测试用的“假”模块称为被测模块的桩模块。如果被测试的单元模块需要调用其他模块中的功能或者函数(method),我们就应该设计一个和被调用模块名称相同的桩模块(Stub)来模拟被调用模块。这个桩模块本身不执行任何功能仅在被调用时返回静态值来模拟被调用模块的行为。举例说明:如果被测试单元中需要调用另一个模块customer的函数getCustomerAddress(customerID:Integer),这个函数应该查询数据库后返回某一个客户的地址。我们设计的同名桩模块(Stub)中的同名函数并没有真正对数据库进行查询而仅模拟了这个行为,直接返回了一个静态的地址例如123NewtonStreet。桩模块(Stub)的设置使得单元测试的进行成为一个相对独立且简单的过程。模块连接:传统的单元测试包括了驱动模块(driver)和桩模块(stub)。驱动模块的目的很单纯,就是为了访问类库的属性和方法,来检测类库的功能是否正确;Normal002falsefalseEN-USKOX-NONEMicrosoftInternetExplorer4如果被测试模块中的函数是提供给其他函数调用的,在设计测试用例时就应该设计驱动模块(Driver)。举例来说:驱动模块(Driver)可以通过模拟一系列用户操作行为,比如选择用户界面上的某一个选项或者按下某个按钮等,自动调用被测试模块中的函数。驱动模块(Driver)设置,使对模块的测试不必与用户界面真正交互。2目标:集成测试的目标是按照设计要求使用那些通过单元测试的构件来构造程序结构。单个模块具有高质量但不足以保证整个系统的质量。有许多隐蔽的失效是高质量模块间发生非预期交互而产生的。以下两种测试技术是用于集成测试:1)功能性测试。使用黑盒测试技术针对被测模块的接口规格说明进行测试。2)非功能性测试。对模块的性能或可靠性进行测试。集成测试另外,集成测试的必要性还在于一些模块虽然能够单独地工作,但并不能保证连接起来也能正常工作。程序在某些局部反映不出来的问题,有可能在全局上会暴露出来,影响功能的实现。此外,在某些开发模式中,如迭代式开发,设计和实现是迭代进行的。在这种情况下,集成测试的意义还在于它能间接地验证概要设计是否具有可行性。集成测试是确保各单元组合在一起后能够按既定意图协作运行,并确保增量的行为正确。它所测试的内容包括单元间的接口以及集成后的功能。使用黑盒测试方法测试集成的功能。并且对以前的集成进行回归测试。3实施:集成测试是一种正规测试过程,必须精心计划,并与单元测试的完成时间协调起来。在制定测试计划时,应考虑如下因素:1、是采用何种系统组装方法来进行组装测试;2、组装测试过程中连接各个模块的顺序;3、模块代码编制和测试进度是否与组装测试的顺序一致4、测试过程中是否需要专门的硬件设备;解决了上述问题之后,就可以列出各个模块的编制、测试计划表,标明每个模块单元测试完成的日期、首次集成测试的日期、集成测试全部完成的日期、以及需要的测试用例和所期望的测试结果。在缺少软件测试所需要的硬件设备时,应检查该硬件的交付日期是否与集成测试计划一致。例如,若测试需要数字化仪和绘图仪,则相应测试应安排在这些设备能够投入使用之时,并需要为硬件的安装和交付使用保留一段时间,以留下时间余量。此外,在测试计划中需要考虑测试所需软件(驱动模块、桩模块、测试用例生成程序等)的准备情况。单元测试后,有必要进行集成测试,发现并排除在模块连接中可能发生的上述问题,最终构成要求的软件子系统或系统。对子系统,集成测试也叫部件测试。任何合理地组织集成测试,即选择什么方式把模块组装起来形成一个可运行的系统,直接影响到模块测试用例的形式、所用测试工具的类型、模块编号和测试的次序、生成测试用例和调试的费用。通常,有两种不同的组装方式:一次性组装方式和增值式组装方式。4完成标准怎样判定集成测试过程完成了,可按以下几个方面检查:1、成功地执行了测试计划中规定的所有集成测试;2、修正了所发现的错误;3、测试结果通过了专门小组的评审。集成测试应由专门的测试小组来进行,测试小组由有经验的系统设计人员和程序员组成。整个测试活动要在评审人员出席的情况下进行。在完成预定的组装测试工作之后,测试小组应负责对测试结果进行整理、分析,形成测试报告。测试报告中要记录实际的测试结果、在测试中发现的问题、解决这些问题的方法以及解决之后再次测试的结果。此外还应提出不能解决、还需要管理人员和开发人员注意的一些问题,提供测试评审和最终决策,以提出处理意见。5内容集成测试过程根据IEEE标准集成测试划分为4个阶段:计划阶段,设计阶段,实现阶段,执行阶段(实施阶段)计划阶段1)时间安排概要设计完成评审后大约一个星期2)输入需求规格说明书概要设计文档产品开发计划路标3)入口条件概要设计文档已经通过评审4)活动步骤1.定被测试对象和测试范围2.评估集成测试被测试对象的数量及难度,即工作量3.确定角色分工和作任务4.标识出测试各阶段的时间,任务,约束等条件5.考虑一定的风险分析及应急计划6.考虑和准备集成测试需要的测试工具,测试仪器,环境等资源7.考虑外部技术支援的力度和深度,以及相关培训安排8.定义测试完成标准5)输出集成测试计划6)出口条件集成测试计划通过概要设计阶段基线评审设计阶段1)时间安排详细设计阶段开始2)输入需求规格说明书概要设计集成测试计划3)入口条件概要设计基线通过评审4)活动步骤1.被测对象结构分析2.集成测试模块分析3.集成测试接口分析4.集成测试策略分析5.集成测试工具分析6.集成测试环境分析7.集成测试工作量估计和安排。5)输出集成测试设计(方案)6.出口条件集成测试设计通过详细设计基线评审。实现阶段1)时间安排在编码阶段开始后进行2)输入需求规格说明书概要设计集成测试计划集成测试设计3)入口条件详细设计阶段4)活动步骤:1.集成测试用例设计2.集成测试代码设计(如果需要)3.集成测试脚本(如果需要)4.集成测试工具(如果需要)5)输出集成测试用例集成测试规程集成测试代码集成测试脚本集成测试工具6)出口条件测试用例和测试规程通过编码阶段基线评审执行阶段1)时间安排单元测试已经完成后就可以开始执行集成测试了2)输入需求规格说明书概要设计集成测试计划集成高度设计集成测试例集成测试规程集成测试代码(如果有)集成测试脚本集成测试工具详细设计代码单元测试报告3)入口条件单元测试阶段已经通过基线化评审4)活动步骤执行集成测试用例回归集成测试用例撰写集成测试报告5)输出集成测试报告6)出口条件集成测试报告通过集成测试阶段基线评审集成测试过程工作内容单元测试工作内容及其流程需求获取集成测试需求所确定的是对某一集成工作版本的测集成测试试的内容,即测试的具体对象。集成测试需求主要来源于设计模型(DesignModel)和集成构件计划(IntegrationBuildPlan)。集成测试着重于集成版本的外部接口的行为。因此,测试需求须具有可观测、可测评性。1.集成工作版本应分析其类协作与消息序列,从而找出该工作版本的外部接口。2.由集成工作版本的外部接口确定集成测试用例。3.测试用例应覆盖工作版本每一外部接口的所有消息流序列。注意:一个外部接口和测试用例的关系是多对多,部分集成工作版本的测试需求可映射到系统测试需求,因此对这些集成测试用例可采用重用系统测试用例技术。工件清单1、软件集成测试计划2、集成测试用例3、测试过程4、测试脚本5、测试日志6、测试评估摘要常用方案选型综述集成测试的实施方案有很多种,如自底向上集成测试、自顶向下集成测试、Big-Bang集成测试、三明治集成测试、核心集成测试、分层集成测试、基于使用的集成测试等。自顶向下测试自顶向下集成(Top-DownIntegration)方式是一个递增的组装软件结构的方法。从主控模块(主程序)开始沿控制层向下移动,把模块一一组合起来。分两种方法:第一:先深度:按照结构,用一条主控制路径将所有模块组合起来;第二:先宽度:逐层组合所有下属模块,在每一层水平地集成测试沿着移动。组装过程分以下五个步骤:步骤一:用主控模块作为测试驱动程序,其直接下属模块用承接模块来代替;步骤二:根据所选择的集成测试法(先深度或先宽度),每次用实际模块代替下属的承接模块步骤三:在组合每个实际模块时都要进行测试;步骤四:完成一组测试后再用一个实际模块代替另一个承接模块;步骤五:可以进行回归测试(即重新再做所有的或者部分已做过的测试),以保证不引入新的错误。自底向上测试自底向上的集成(Bottom-UpIntegration)方式是最常使用的方法。其他集成方法都或多或少地继承、吸收了这种集成方式的思想。自底向上集成方式从程序模块结构中最底层的模块开始组装和测试。因为模块是自底向上进行组装的,对于一个给定层次的模块,它的子模块(包括子模块的所有下属模块)事前已经完成组装并经过测试,所以不再需要编制桩模块(一种能模拟真实模块,给待测模块提供调用接口或数据的测试用软件模块)。自底向上集成测试的步骤大致如下:步骤一:按照概要设计规格说明,明确有哪些被测模块。在熟悉被测模块性质的基础上对被测模块进行分层,在同一层次上的测试可以并行进行,然后排出测试活动的先后关系,制定测试进度计划。图2给出了自底向上的集成测试过程中各测试活动的拓扑关系。利用图论的相关知识,可以排出各活动之间的时间序列关系,处于同一层次的测试活动可以同时进行,而不会相互影响。步骤二:在步骤一的基础上,按时间线序关系,将软件单元集成为模块,并测试在集成过程中出现的问题。这里,可能需要测试人员开发一些驱动模块来驱动集成活动中形成的被测模块。对于比较大的模块,可以先将其中的某几个软件单元集成为子模块,然后再集成为一个较大的模块。步骤三:将各软件模块集成为子系统(或分系统)。检测各自子系统是否能正常工作。同样,可能需要测试人员开发少量的驱动模