集成测试

Posted 软件测试学习笔记分享

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了集成测试相关的知识,希望对你有一定的参考价值。

集成测试


学习目标

 掌握什么是集成测试

 掌握集成测试的层次

 理解集成测试关注的重点

 能说出至少6种集成测试策略

 能正确描述前4种集成测试策略

 掌握集成测试过程四个阶段的入口准则、出口准则、输入输出



一、集成测试的定义和目的


集成测试概念

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

 集成测试和单元测试所关注的范围是不同的,因此,它们在发现问题的集合上包含有不相交的区域,不能使用集成测试来替代单元测试,反之也是一样;

 集成测试,也叫组装测试、联合测试、子系统测试或部件测试。


集成测试的目的

 是确保各组件组合在一起后能够按既定意图协作运行,并确保增量的行为正确。

 集成测试属于灰盒测试。

 验证接口是与设计相符合的;

 发现设计和需求中存在的错误。



二、集成测试关注的重点


单元间的接口

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

  全局数据结构是否有问题,会不会被异常修改。


集成后的功能

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

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

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



集成测试举例

 有一个模块包含以下三个函数:

   函数A:主控函数int ctr(int x, int y),当x不小于y时,调用add函数,否则调用sub函数

   函数B:加法函数int add(int x, int y),返回x和y的和

   函数C:减法函数int sub(int x, int y),返回x和y的差

 需要对这三个函数进行集成,集成步骤如下:

   先对函数A和B进行集成,函数C用桩替代

   然后将集成的函数A、B和C进行集成



三、集成测试的层次


从最低层的单元测试到最终的产品,其中所有各层测试都要通过集成测试来完成,一般可把集成测试划分成三个级别:

  模块内集成测试;

  子系统内集成测试;

  子系统间集成测试。



四、集成测试的策略


集成测试策略的主要模式

 大爆炸集成

 自顶向下集成

 自底向上集成

 三明治集成

 基干集成

 分层集成

 基于功能的集成

 基于消息的集成

 基于进度的集成

 基于风险的集成



大爆炸集成(big bang integration)

策略:

 在这种集成方式中,首先对每个模块分别进行单元测试,然后再把所有单元组装在一起进行测试,最终得到要求的软件系统


优点:

 大爆炸集成可以迅速完成集成测试,并且只要极少数的驱动和桩模块设计。

 它需要的测试用例也是最少的;

 该方法比较简单;

 多个测试人员可以并行工作,对人力,物力资源利用率较高。


缺点:

 这种一次性组装方式试图在辅助模块的协助下,在模块单元测试的基础上,将所测模块连接起来进行测试。

 但是由于程序中不可避免地存在模块间接口、全局数据结构等方面的问题,所以一次试运行成功的可能性并不很大;

 在发现错误的时候,其问题定位和修改都比较困难;

 即使被测系统能够被一次性集成,但还是会有许多接口错误很容易的躲过测试而进入到系统测试范围内。


适用范围:

 一个维护型项目(或功能增强型项目),其以前的产品已经很稳定,并且新增的项目只有少数几个组件被增加或修改;

 被测系统比较小,并且它的每个函数都经过了充分的单元测试。



自顶向下集成(top-down integration)

策略:

 自顶向下的集成测试策略采用了和设计一样的顺序对系统进行测试,它在第一时间内对系统的控制接口进行了验证;

 采用自顶向下的集成测试首先集中于顶层的组件,然后逐步测试处于底层的组件;

 自顶向下的集成方式可以采用深度优先策略和广度优先策略。


优点:

 自顶向下的集成方式在测试过程中较早地验证了主要的控制和判断点;

 如果选用按深度方向组装的方式,可以首先实现和验证一个完整的软件功能;

 功能可行性较早得到证实,还能够给开发者和用户带来成功的信心;

 最多只需一个驱动,减少了驱动器开发的费用;

 支持故障隔离。


缺点:

 桩的开发和维护是本策略的最大成本;

 底层组件行为的验证被推迟了;

 随着底层组件的不断增加,整个系统越来越复杂,导致底层组件的测试不充分,尤其是那些被重用的组件。


适用范围:

 产品控制结构比较清晰和稳定;

 产品的高层接口变化比较小;

 产品的底层接口未定义或经常可能被修改;

 产品的控制组件具有较大的技术风险,需要尽早被验证;

 希望尽早能够看到产品的系统功能行为。



自底向上集成(bottom-up integration)

策略:

 自底向上的集成方式是从程序结构的最底层的组件开始组装和测试;

 组件是自底向上进行组装,对于一个给定层次的组件,它的子组件(包括子组件的所有下属组件)已经组装并测试完成,所以不再需要桩。


优点:

 允许对底层组件行为的早期验证。可以在任何一个叶子节点已经就绪的情况下进行集成测试;

 在工作的最初可能会并行进行集成,在这一点上比使用自顶向下的策略效率高;

 减少了桩的工作量,毕竟在集成测试中,桩的工作量远比驱动的工作量要大得多。但是为了模拟一些中断或异常,可能还是需要设计一定的桩;

 该方法也支持故障隔离。


缺点:

 驱动的开发工作量也是很庞大的;

 对高层的验证被推迟到了最后,设计上的错误不能被及时发现,尤其对于那些控制结构在整个体系中非常关键的产品。


适用范围:

 底层接口比较稳定、变动较少的产品;

 高层接口变化比较频繁的产品;

 底层组件较早被完成的产品。



三明治集成(sandwich integration)

策略:

 三明治集成就是这样一种方法,它把系统划分成三层,中间一层为目标层。

 测试的时候,对目标层上面的一层使用由顶向下的集成策略,对目标层下面的一层使用自底向上的集成策略,最后测试在目标层会合。


优点:

 集合了自顶向下和自底向上两种策略的优点


缺点:

 中间层在被集成前测试不充分


适用范围:

 大部分软件开发项目都可以使用这种集成策略


修改的三明治集成

策略:

 在三明治集成基础上,补充对目标层使用独立测试策略。

优点:

 具有三明治集成的优点,而且能对目标层进行比较充分测试

缺点:

 目标层如果选取不当,可能有比较大的驱动模块和桩模块的工作量。



基干集成(backbone integration)

介绍:

 在很多系统中,尤其在嵌入式系统中,一般可以划分成两个部分:

 内核部分(基干部分)和外围部分,这两部分经常会被不同的项目组并行开发。

 它具有如下特点:

   内核部分提供了系统最基本的功能和服务;

   外围部分以内核为基础,不能脱离内核而独自使用;

   内核具有很高的耦合性,并且相当复杂,试图设置桩会是相当困难且成本很高的事情;

   外围部分可以分为应用子系统和控制子系统,应用子系统内耦合性不大,而控制子系统内具有较高的耦合性。


策略:

 识别外围的应用子系统部分、控制子系统部分,基干部分;

 对基干中所有的组件进行大爆炸集成,形成基干子系统,并使用一个驱动检查经过大爆炸的基干;

 对控制子系统进行自顶向下的集成;

 对各应用子系统进行自底向上的集成;

 对基干子系统,控制子系统和各应用子系统进行大爆炸集成形成整个系统。


优点:

 具有三明治集成的优点,更适合于大型复杂项目的集成


缺点:

 必须对系统的结构和相互依存性进行仔细的分析;

 必须开发驱动和桩,并且由于被测系统的复杂性导致驱动和桩开发工作量的加大;

 由于局部采用了大爆炸的策略,因此有些接口可能测试不充分。


适用范围:

 大型复杂项目,优先考虑:

   具有多层协议的嵌入式系统

   操作系统产品



分层集成

介绍:

 通过增量式集成的方法验证一个具有层次体系结构的应用系统的稳定性和可互操作性;

 一般通过功能把系统划分成不同功能层次的子系统,子系统内部具有较高的耦合性,子系统间的关系具有线性层次关系;

 适用于有明显层次关系的系统。


策略:

 划分系统的层次

 确定每个层次内部的集成策略,该策略可以使用大爆炸集成,自顶向下集成,自底向上集成和三明治集成中的任何一种策略

 确定层次间的集成策略,该策略可以使用大爆炸集成,自顶向下集成,自底向上集成和三明治集成中的任何一种策略


优点:

 优点与使用的层间集成测试策略类似


缺点:

 同上


适用范围:

 有明显线性层次关系的产品系统。



基于功能的集成

介绍:

 基于功能的集成是从功能角度出发,按照功能的关键程度对组件的集成顺序进行组织,目的是尽早的验证系统关键功能。


策略:

 确定功能的优先级别;

 分析优先级最高的功能路径,把该路径上的所有组件集成到一起,必要时使用驱动和桩;

 分析下一个关键功能,继续步骤2,直到针对所有功能都进行了集成。


优点:

 采用该方法,可以尽快的看到关键功能的实现,并验证关键功能的正确性;

 由于该方法在验证某个功能的时候,可能会同时加入多个组件,因此在进度上比自底向上,自顶向下或三明治集成要短;

 可以减少驱动的开发,原因与自顶向下的集成策略类似。


缺点:

 对有些接口的测试不充分,会丢失许多接口错误;

 可能会有比较大的冗余测试。



基于消息的集成

介绍:

 许多系统其工作原理是基于状态变迁,内部组件间的接口主要是通过消息来完成的。

 因此验证消息路径的正确性对于这类系统具有比较重要的位置,基于消息的集成就是针对这一特点而设计的一种策略。


策略:

 从系统的外部看,分析系统可能输入的消息集;

 选取一条消息,分析其穿越的组件;

 集成这些组件进行消息接口测试;

 选取下一条消息,重复步骤2和3,直到针对所有消息都进行了集成。


优点:

 采用该方法,可以尽快的看到关键消息处理的实现,并验证关键消息处理的正确性;

 由于该方法在验证某个消息处理的时候,可能会同时加入多个组件,因此在进度上比自底向上,自顶向下或三明治集成要短;

 可以减少驱动的开发,原因与自顶向下的集成策略类似。


缺点:

 对有些接口的测试不充分,会丢失许多接口错误;

 可能会有比较大的冗余测试。



基于进度的集成

介绍:

 进度压力是每个软件开发项目都会遇到的问题。

 基于进度的集成就是在兼顾进度和质量两者之间寻找了一个均衡点。

 该集成的一个最基本的策略就是把最早可获得的代码拿来立即进行集成,必要的时候开发桩和驱动,在最大程度上保持与开发的并行性,从而缩短了项目集成的时间。


优点:

 具有比较高的并行度;

 能够有效缩短项目开发的进度 。


缺点:

 可能最早拿到的组件之间缺乏整体性,只能进行独立的集成,导致许多接口必须等到后期才能验证,但此时系统可能已经很复杂,往往无法发现有效的接口问题;

 桩和驱动的工作量可能会变得很庞大;

 由于进度的原因,组件可能很不稳定且会不断变动,导致测试的重复和浪费。


适用范围:

 进度优先级高于质量的项目



基于风险的集成

介绍:

  基于风险的集成是基于这样一个假设,既系统风险最高的组件间的接口往往是错误集中的地方,

  因此尽早的验证这些接口有助于加速系统的稳定,从而增加对系统的信心。


优点:

 最具有风险的组件最早进行验证,有助于系统的快速稳定。


缺点:

 需要对各组件的风险有一个清晰的分析。


适用范围:



五、集成测试的过程


集成测试的四个阶段

 集成测试计划阶段:完成集成测试计划

 集成测试设计阶段:完成集成测试方案

 集成测试实现阶段:完成集成测试用例、集成测试规程、集成测试脚本及数据文件

 集成测试执行阶段:执行集成测试用例,修改发现的问题并进行回归测试,提交集成测试报告


集成测试过程与开发阶段

集成测试计划 -> 概要设计

集成测试设计 -> 详细设计

集成测试实现 -> 详细设计

集成测试执行 -> 集成测试执行


出入口准则,输入输出

 集成测试计划阶段:

   入口准则:概要设计已经完成,并且成立了概要设计基线

   出口准则:集成测试计划评审并通过

   输入:软件测试计划,概要设计说明书

   输出:集成测试计划


 集成测试设计阶段:

   入口准则:集成测试计划评审并通过

   出口准则:集成测试方案评审并通过

   输入:集成测试计划,概要设计说明书

   输出:集成测试方案


 集成测试实现阶段:

   入口准则:集成测试方案评审并通过

   出口准则:集成测试用例、集成测试规程评审并通过

   输入:集成测试计划,集成测试方案,概要设计说明书

   输出:集成测试用例,集成测试规程


 集成测试执行阶段:

   入口准则:集成测试用例、集成测试规程、集成测试脚本、集成测试数据文件评审并通过,单元测试执行结束

   出口准则:集成测试报告评审并通过

   输入:集成测试计划,集成测试方案,集成测试用例,集成测试规程

   输出:集成测试报告,缺陷报告


备注:本节课老师为51testing上海校区高级讲师:马文涛。


以上是关于集成测试的主要内容,如果未能解决你的问题,请参考以下文章

单元测试集成测试

集成测试

新书连载13软件测试核心技术—集成测试

SYS.4系统集成及集成测试

什么是集成测试?如何运用集成测试?

集成测试概述