集成测试

什么是集成测试

  集成测试是指在单元测试的基础上,将所有模块按照设计要求组装成为子系统或系统,进行测试。

  集成测试最简单的形式是:把两个已经测试过的单元组合成一个组件,测试它们之间的接口。从这一层意义上讲,组件是指多个单元的集成聚合。在现实方案中,许多单元组合成组件,而这些组件又聚合为程序的更大部分。方法是测试片段的组合,并最终扩展成进程,将模块与其他组的模块一起测试。最后,将构成进程的所有模块一起测试。此外,如果程序由多个进程组成,应该成对测试它们,而不是同时测试所有进程。

  集成测试测试组合单元时出现的问题。通过使用要求在组合单元前测试每个单元并确保每个单元的生存能力测试计划,可以知道在组合单元时所发现的任何错误很可能与单元之间的接口有关。这种方法将可能发生的情况数量减少到更简单的分析级别。一个有效的集成测试有助于解决相关的软件与其它系统的兼容性和可操作性的问题。

  集成测试是在单元测试的基础上,测试在将所有的软件单元按照概要设计规格说明的要求组装成模块、子系统或系统的过程中各部分工作是否达到或实现相应技术指标及要求的活动。也就是说,在集成测试之前,单元测试应该已经完成,集成测试中所使用的对象应该是已经经过单元测试的软件单元。这一点很重要,因为如果不经过单元测试,那么集成测试的效果将会受到很大影响,并且会大幅增加软件单元代码纠错的代价。

  集成测试是单元测试的逻辑扩展。在现实方案中,集成是指多个单元的聚合,许多单元组合成模块,而这些模块又聚合成程序的更大部分,如分系统或系统。集成测试采用的方法是测试软件单元的组合能否正常工作,以及与其他组的模块能否集成起来工作。最后,还要测试构成系统的所有模块组合能否正常工作。集成测试所持的主要标准是《软件概要设计规格说明》,任何不符合该说明的程序模块行为都应该加以记载并上报。

  所有的软件项目都不能摆脱系统集成这个阶段。不管采用什么开发模式,具体的开发工作总得从一个一个的软件单元做起,软件单元只有经过集成才能形成一个有机的整体。具体的集成过程可能是显性的也可能是隐性的。只要有集成,总是会出现一些常见问题,工程实践中,几乎不存在软件单元组装过程中不出任何问题的情况。从表中可以看出,集成测试需要花费的时间远远超过单元测试,直接从单元测试过渡到系统测试是极不妥当的做法。

活动 输入 输出 参与角色和职责
制定集成测试计划 设计模型
设计模型
集成测试用例
测试过程
测试设计员负责设计集成测试用例和测试过程
实施集成测试 集成测试用例
测试过程
工作版本
测试脚本(可选)
测试过程(更新)
测试设计员负责编制测试脚本(可选),更新测试过程。
驱动程序或稳定桩 设计员负责设计驱动程序和装,实施员负责实施驱动程序和桩
执行集成测试 测试脚本(可选)
工作版本
测试结果 测试员负责执行测试并记录测试结果
评估集成测试 集成测试计划
测试结果
测试评估摘要 测试员负责会同及成员、编码员、设计员等有关人员(具体化)评估此次测试,并生成测试评估摘要。
[ 编辑]

集成测试的目标

  集成测试的目标是按照设计要求使用那些通过单元测试的构件来构造程序结构。单个模块具有高质量但不足以保证整个系统的质量。有许多隐蔽的失效是高质量模块间发生非预期交互而产生的。以下两种测试技术是用于集成测试:

  1、功能性测试。使用黑盒测试技术针对被测模块的接口规格说明进行测试。

  2、非功能性测试。对模块的性能或可靠性进行测试。

  另外,集成测试的必要性还在于一些模块虽然能够单独地工作,但并不能保证连接起来也能正常工作。程序在某些局部反映不出来的问题,有可能在全局上会暴露出来,影响功能的实现。此外,在某些开发模式中,如迭代式开发,设计和实现是迭代进行的。在这种情况下,集成测试的意义还在于它能间接地验证概要设计是否具有可行性。

[ 编辑]

集成测试应考虑问题

  1、在把各个模块连接起来的时候,穿越模块接口的数据是否会丢失;

  2、各个子功能组合起来,能否达到预期要求的父功能;

  3、一个模块的功能是否会对另一个模块的功能产生不利的影响;

  4、全局数据结构是否有问题;

  5、是采用何种系统组装方法来进行组装测试;

  6、组装测试过程中连接各个模块的顺序;

  7、模块代码编制和测试进度是否与组装测试的顺序一致;

  8、测试过程中是否需要专门的硬件设备;

  9、单个模块的误差积累起来,是否会放大,从而达到不可接受的程度。

  因此,单元测试后,有必要进行集成测试,发现并排除在模块连接中可能发生的上述问题,最终构成要求的软件子系统或系统。对子系统,集成测试也叫部件测试。

  任何合理地组织集成测试,即选择什么方式把模块组装起来形成一个可运行的系统,直接影响到模块测试用例的形式、所用测试工具的类型、模块编号和测试的次序、生成测试用例和调试的费用。通常,有两种不同的组装方式:一次性组装方式和增值式组装方式。

[ 编辑]

集成测试过程

  根据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、出口条件集成测试报告通过集成测试阶段基线评审。

[ 编辑]

集成测试的实施方案

  集成测试的实施方案有很多种,如自底向上集成测试、自顶向下集成测试、Big-Bang集成测试、三明治集成测试、核心集成测试、分层集成测试、基于使用的集成测试等。常见的有:

[ 编辑]

自顶向下测试

  自顶向下集成(Top-Down Integration)方式是一个递增的组装软件结构的方法。从主控模块(主程序)开始沿控制层向下移动,把模块一一组合起来。分两种方法:

  第一:先深度:按照结构,用一条主控制路径将所有模块组合起来;

  第二:先宽度:逐层组合所有下属模块,在每一层水平地沿着移动。

  组装过程分以下五个步骤:

  步骤一:用主控模块作为测试驱动程序,其直接下属模块用承接模块来代替;

  步骤二:根据所选择的集成测试法(先深度或先宽度),每次用实际模块代替下属的承接模块

  步骤三:在组合每个实际模块时都要进行测试;

  步骤四:完成一组测试后再用一个实际模块代替另一个承接模块;

  步骤五:可以进行回归测试(即重新再做所有的或者部分已做过的测试),以保证不引入新的错误。

[ 编辑]

自底向上测试

  自底向上的集成(Bottom-Up Integration)方式是最常使用的方法。其他集成方法都或多或少地继承、吸收了这种集成方式的思想。自底向上集成方式从程序模块结构中最底层的模块开始组装和测试。因为模块是自底向上进行组装的,对于一个给定层次的模块,它的子模块(包括子模块的所有下属模块)事前已经完成组装并经过测试,所以不再需要编制桩模块(一种能模拟真实模块,给待测模块提供调用接口或数据的测试用软件模块)。自底向上集成测试的步骤大致如下:

  步骤一: 按照概要设计规格说明,明确有哪些被测模块。在熟悉被测模块性质的基础上对被测模块进行分层,在同一层次上的测试可以并行进行,然后排出测试活动的先后关系,制定测试进度计划。图2给出了自底向上的集成测试过程中各测试活动的拓扑关系。利用图论的相关知识,可以排出各活动之间的时间序列关系,处于同一层次的测试活动可以同时进行,而不会相互影响。

  步骤二: 在步骤一的基础上,按时间线序关系,将软件单元集成为模块,并测试在集成过程中出现的问题。这里,可能需要测试人员开发一些驱动模块来驱动集成活动中形成的被测模块。对于比较大的模块,可以先将其中的某几个软件单元集成为子模块,然后再集成为一个较大的模块。

  步骤三: 将各软件模块集成为子系统(或分系统)。检测各自子系统是否能正常工作。同样,可能需要测试人员开发少量的驱动模块来驱动被测子系统。

  步骤四: 将各子系统集成为最终用户系统,测试是否存在各分系统能否在最终用户系统中正常工作。

  方案点评: 自底向上的集成测试方案是工程实践中最常用的测试方法。相关技术也较为成熟。它的优点很明显: 管理方便、测试人员能较好地锁定软件故障所在位置。但它对于某些开发模式不适用,如使用XP开发方法,它会要求测试人员在全部软件单元实现之前完成核心软件部件的集成测试。尽管如此,自底向上的集成测试方法仍不失为一个可供参考的集成测试方案。

[ 编辑]

核心系统测试

  核心系统先行集成测试法的思想是先对核心软件部件进行集成测试,在测试通过的基础上再按各外围软件部件的重要程度逐个集成到核心系统中。每次加入一个外围软件部件都产生一个产品基线,直至最后形成稳定的软件产品。核心系统先行集成测试法对应的集成过程是一个逐渐趋于闭合的螺旋形曲线,代表产品逐步定型的过程。其步骤如下:

  步骤一: 对核心系统中的每个模块进行单独的、充分的测试,必要时使用驱动模块和桩模块;

  步骤二: 对于核心系统中的所有模块一次性集合到被测系统中,解决集成中出现的各类问题。在核心系统规模相对较大的情况下,也可以按照自底向上的步骤,集成核心系统的各组成模块。

  步骤三: 按照各外围软件部件的重要程度以及模块间的相互制约关系,拟定外围软件部件集成到核心系统中的顺序方案。方案经评审以后,即可进行外围软件部件的集成。

  步骤四: 在外围软件部件添加到核心系统以前,外围软件部件应先完成内部的模块级集成测试。

  步骤五: 按顺序不断加入外围软件部件,排除外围软件部件集成中出现的问题,形成最终的用户系统。

  方案点评: 该集成测试方法对于快速软件开发很有效果,适合较复杂系统的集成测试,能保证一些重要的功能和服务的实现。缺点是采用此法的系统一般应能明确区分核心软件部件和外围软件部件,核心软件部件应具有较高的耦合度,外围软件部件内部也应具有较高的耦合度,但各外围软件部件之间应具有较低的耦合度。

[ 编辑]

高频集成测试

  高频集成测试是指同步于软件开发过程,每隔一段时间对开发团队的现有代码进行一次集成测试。如某些自动化集成测试工具能实现每日深夜对开发团队的现有代码进行一次集成测试,然后将测试结果发到各开发人员的电子邮箱中。该集成测试方法频繁地将新代码加入到一个已经稳定的基线中,以免集成故障难以发现,同时控制可能出现的基线偏差。使用高频集成测试需要具备一定的条件: 可以持续获得一个稳定的增量,并且该增量内部已被验证没有问题; 大部分有意义的功能增加可以在一个相对稳定的时间间隔(如每个工作日)内获得; 测试包和代码的开发工作必须是并行进行的,并且需要版本控制工具来保证始终维护的是测试脚本和代码的最新版本; 必须借助于使用自动化工具来完成。高频集成一个显著的特点就是集成次数频繁,显然,人工的方法是不胜任的。

  高频集成测试一般采用如下步骤来完成:

  步骤一: 选择集成测试自动化工具。如很多Java项目采用Junit+Ant方案来实现集成测试的自动化,也有一些商业集成测试工具可供选择。

  步骤二: 设置版本控制工具,以确保集成测试自动化工具所获得的版本是最新版本。如使用CVS进行版本控制。

  步骤三: 测试人员和开发人员负责编写对应程序代码的测试脚本。

  步骤四: 设置自动化集成测试工具,每隔一段时间对配置管理库的新添加的代码进行自动化的集成测试,并将测试报告汇报给开发人员和测试人员。

  步骤五: 测试人员监督代码开发人员及时关闭不合格项。

  按照步骤三至步骤五不断循环,直至形成最终软件产品。

  方案点评: 该测试方案能在开发过程中及时发现代码错误,能直观地看到开发团队的有效工程进度。在此方案中,开发维护源代码与开发维护软件测试包被赋予了同等的重要性,这对有效防止错误、及时纠正错误都很有帮助。该方案的缺点在于测试包有时候可能不能暴露深层次的编码错误和图形界面错误。

文件转载来自:http://wiki.mbalib.com/wiki/%E9%9B%86%E6%88%90%E6%B5%8B%E8%AF%95

集成测试计划 版本:V1.3 文 档 编 号 保 密 等 级 作 者 最后修改日期 审 核 人 最后审批日期 批 准 人 最后批准日期 修订记录 日期 版本 修订说明 修订人 目 录 1 简介 3 1.1 目的 3 1.2 背景 3 1.3 范围 3 1.4 参考文档 3 2 测试约束 3 2.1 测试进出条件 3 2.1.1 进入条件 3 2.1.2 退出条件 3 2.2 测试通过和失败准则 3 2.2.1 通过准则: 3 2.2.2 失败准则: 4 2.3 测试启动/结束/暂停/再启动准则 4 2.3.1 测试启动准则 4 2.3.2 测试结束准则 4 2.3.3 测试暂停/再启动准则 4 3 测试需求 4 4 测试风险 5 5 集成策略 5 6 测试策略 5 6.1 策略描述 5 6.2 测试类型 5 6.2.1 功能测试 5 6.2.2 接口测试 6 6.2.3 容错测试 6 6.2.4 回归测试 6 6.3 测试轮数 7 7 测试资源 7 7.1 人力需求 7 7.2 测试环境 8 7.3 测试工具 8 8 测试进度 8 9 本阶段量化计划 9 10 交付物 9 简介 目的 【描述集成测试计划的编写目的及本次集成测试的主要目的。】 如,编写目的:本文档用于描述XXX开发项目集成测试所要遵循的规范以及确定测试方法、测试环境、测试用例的编写和测试整体进度的计划安排、人力资源安排等。 测试目的:集成测试的目的是测试组成XXX系统的各子模块间的接口及功能实现等。 背景 【描述项目或产品的背景。】 范围 【描述集成测试在项目的整体范围。如,需要集成的各功能模块的描述。】 参考文档 【描述本次集成测试所需要参考的文档。】 测试约束 【描述本次集成测试所要遵循的准则及条件约束等。】 测试进出条件 进入条件 【描述集成测试的测试依据和满足该阶段测试进入的条件和约束。】 退出条件 【描述满足该阶段测试退出的条件,要根据 《项目量化管理计划》中第3节的内容来制定退出条件,例如 致命和严重级别的缺陷清除率达到 100%,致命和严重的缺陷修复率达到100%,一般缺陷的修复率达到99%并且遗留缺陷数小于5个;同时参考《测试过程》中的相关描述,并要求系统测试每轮发现的缺陷数量呈收敛趋势。】 测试通过和失败准则 通过准则: 【描述集成测试每一轮测试通过的条件。】 如,每轮测试所有用例全部执行完毕,且没有出现致命性错误,回归测试或执行新增测试用例时不再出现问题,则测试工作通过; 失败准则: 【描述集成测试某轮次测试失败的条件。】 如,每轮测试所有用例全部执行完毕,没有出现致命性错误,回归测试或执行新增测试用例时不再出现问题,且回归测试的周期不少于X天,回归测试执行的测试用例数比例不低于XX%,则测试工作通过。 测试启动/结束/暂停/再启动准则 测试启动准则 【描述集成测试执行启动的约束准则。】 如, 配置管理员提交给测试组每次build的正确版本及集成的模块清单。 测试环境通过检验之后。 测试结束准则 【描述集成测试执行结束的约束准则。】 如,测试案例全部执行完毕,测试结果证明系统符合需求,遗留的问题满足测试退出条件且在质量标准允许范围内,即可结束测试。 测试暂停/再启动准则 【描述集成测试执行过程中出现的特殊情况的约束准则。】 如,被测模块出现某个致命性错误。测试案例无法继续执行,测试工作需暂停,如果非关联模块可以进行测试则执行非关联模块的测试;当这些问题得到解决后重新启动该模块的测试工作。 测试需求 【根据系统集成构建计划,列举每次集成的新版本产生新的测试需求功能点,包括接口的测试需求。】 需求ID 模块 子模块 待测试功能需求点 优先级 模块一 子模块1 功能点1 功能点2 … 功能点N 子模块2 … 子模块N 测试风险 【此处描述测试任务可能遇到的风险,以及规避的方法】 风险 编号 风险描述 风险发生可能性 (高、中、低) 风险的影响程度 (高、中、低) 责任人 规避方法 集成策略 【描述集成的方法、集成的顺序和集成的环境。详细的集成环境见《环境配置清单-集成环境》 集成顺序一般有:深度优先、自下而上、自上而下等; 深度优先:即关键(主控路径上的)业务流程涉及到的模块先集成到一起,然后再集成辅助业务模块; 自下而上:即已实现的较底层的功能优先集成,然后逐层上升,形成整个系统; 自上而下:即事先存在一个稳定的架构,不断地向下细化,最后实现所有具体的功能细节; 集成顺序的选择可以是不同集成顺序的综合。 】 集成计划 【说明项目周期内计划执行的集成活动的时间安排】 集成次号 集成目标 被集成对象 计划集成时间 包含的接口 测试策略 【测试策略提供了对以上测试对象实施测试的方法。上一节“测试需求”中说明了将要测试哪些对象,而本节则要说明如何对这些测试对象进行测试。】 【对每一个工作版本将进行以下三种类型的测试:A、接口测试,测试接口调用。B、功能测试,测试工作版本应该实现的功能。C、回归测试,在新版本中执行以前集成版本的测试用例脚本。】 策略描述 【此处描述根据项目的具体特征所确定的集成测试的策略(如:测试可行性分析,测试技术方法确定,测试类型选择以及集成的方案环境描述等】 测试类型 【此处描述集成测试选择的测试类型,一般建议有如下四种:】 功能测试 测试目标: 确保已经集成的工作版本的正确性,能够实现该集成版本应该具有的功能的正确性以及完整性。 技术: 重用为系统功能测试设计的部分测试用例,部分测试过程。生成测试脚本,实现测试自动化。 完成标准: 所计划的测试全部执行、 对以前版本的接口完成了回归测试、 所发现的高优先级缺陷和高等级的缺陷已完全解决。 需考虑的特殊事项: 开发人员应该保证每个后续的集成版本的基本界面元素都未改变。 考虑测试脚本的重用性以及自动化测试。 测试方法描述 【此处描述一个特定的测试类型在项目测试活动中如何具体的执行。】 接口测试 测试目标: 确保“测试需求”中对应的所有工作版本的内部单元组合到一起后能够按照设计的意图协作运行,接口的调用正确。 技术: 重用为系统测试准备的测试用例、 分析测试用例对接口的覆盖情况,对没有覆盖的接口设计足够的测试用例,以覆盖所有的调用接口。 为每个测试用例制定测试过程,生成测试脚本。以实现测试的自动化。 完成标准: 所计划的测试全部执行、 对以前版本的接口完成了回归测试、 所发现的高优先级缺陷和高等级的缺陷已完全解决。 需考虑的特殊事项: 开发人员应该保证每个后续的集成版本的基本界面元素都未改变。 考虑测试脚本的重用性以及自动化测试。 测试方法描述 【此处描述一个特定的测试类型在项目测试活动中如何具体的执行。】 容错测试 测试目标: 验证异常错误流程能顺利执行,并有易懂的提示信息 技术: 包含在上述功能和接口的测试用例设计中 完成标准: 对每一个非法的操作显示相应的错误信息或警告信息。 需考虑的特殊事项: 测试方法描述 【此处描述一个特定的测试类型在项目测试活动中如何具体的执行。】 回归测试 测试目标: 确保前一个集成的版本并未因为新版本的增量集成而带来缺陷。 技术: 在新的集成版本中使用前一个集成版本的自动化测试脚本执行自动化测试。 完成标准: 前一个集成版本的所用测试用例已全部执行。 所发现的缺陷已全部解决。 需考虑的特殊事项: 开发人员应该保证每个后续的集成版本的基本界面元素都未改变。 考虑测试脚本的重用性以及自动化测试。 测试方法描述 【此处描述一个特定的测试类型在项目测试活动中如何具体的执行。】 测试轮数 【根据集成计划确定的集成次数,计划整个产品开发周期内集成测试的次数】 测试资源 人力需求 【列出此项目的测试人员配备方面的需求。】  角色 人员 具体职责 测试经理 进行管理监督。 职责:          提供技术指导          获取适当的资源          提供管理报告 测试设计员   确定测试用例、确定测试用例的优先级并实施测试用例。 职责: 生成测试计划 生成测试模型 评估测试工作的有效性 测试员 执行测试。 职责: 执行测试 记录结果 从错误中恢复 记录变更请求 测试系统管理员 确保测试环境和资产得到管理和维护。 职责:管理测试系统    分配和管理角色对测试系统的访问权 数据库管理员 确保测试数据(数据库)环境和资产得到管理和维护。 职责:  管理测试数据(数据库)   测试环境 【列出了测试项目所需的系统资源。 】 资源 名称/类型 硬件和网路环境 数据库服务器 - 网络或子网 - 服务器名称 - 数据库名称 用户端测试 PC 包括特殊的配置需求 测试数据存储库 \\JJJ\Test\Data - 网络或子网 内部局域网 - 服务器名称 \\JJJ 测试开发 PC \\03824-1,\\02194-2,\\02336。 软件环境 DBMS 中间件 AppServer 浏览器 其它 测试工具 【本次测试将使用的工具】 用途 工具 厂商/自产 版本 测试管理 测试执行 缺陷报告 测试进度  【根据集成测试的轮次,分解测试工作,计算工作量(N:人数,M:工作日)。每一轮次任务均包括上轮次的回归验证工作】 编号 任务 工作量(人日) 开始日期 结束日期 制定测试计划 N*M 设计测试用例 执行测试(第一轮) 执行测试(第二轮) … 执行测试(第N轮) 最后一轮回归测试 对测试进行评估 合计工作量 交付物 【描述集成测试需要交付的工作产品】 交付物名称 责任人 参与者 交付日期 测试计划 测试用例 测试脚本 测试报告 。。。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值