Hello!大家好,我是BugBear,一个专注于分享软件测试干货的测试开发。上一篇文章我们讲了 单元测试 相关知识,今天我们来聊聊集成测试的相关内容。

一、什么是集成测试?

我们通过工厂组装手机的例子明白了单元测试,每个电子元件或者零部件就是一个单元测试,那么将这些电子元件或者零部件组装起来形成一个功能模块组件,例如喇叭,听筒,麦克,FPC,按键板,摄像头,LCD等。针对这些功能模块组件进行测试,就类比于我们所知的集成测试。

集成测试的定义如下:

集成测试也叫组装测试、联合测试、子系统测试或部件测试。集成测试是在单元测试的基础上,将所有模块按照概要设计要求组装成为子系统或系统。

集成测试的含义非常简单,就是将单元测试模块逐个集成/组合,并将行为测试为组合单元。该测试的主要功能或目标是测试单元/模块之间的接口。我们通常在单元测试之后进行集成测试。一旦创建并测试了所有单个单元,我们就开始组合这些“单元测试”模块并开始进行集成测试。首先单独测试各个模块。模块经过单元测试后,逐个集成,直到所有模块都集成在一起,检查组合行为,验证需求是否正确实现。在这里我们应该理解,集成测试不会在周期结束时发生,而是与开发同时进行,基于开发实现不断在原来的基础上逐步融入新的子模块进行集成测试。

二、为什么要做集成测试?

有人可能会提出疑问,我们把每个单元测试都测试完毕了,每个单元都按照要求实现了对应功能,为什么还需要将单元组合起来进行集成测试?

  • 各单元实现逻辑不同:在现实世界中,当开发应用程序时,它被分解为更小的模块,并且为每个开发人员分配1个模块。每个开发人员实现的逻辑完全不同,因此检查开发人员实现的逻辑是否符合预期并根据规定的标准呈现正确的值变得很重要。

  • 数据流转校验:很多时候,当数据从一个模块移动到另一个模块时,数据的面或结构会发生变化。附加或删除某些值,这会导致后续模块出现问题。

  • 数据交互校验:模块还与某些第三方工具或API进行交互,这些工具或API也需要进行测试,以确保该API /工具接受的数据是正确的,并且生成的响应也是预期的。

  • 单元频繁变更:需求频繁变更导致单元代码迭代更新,但是多数时候开发人员在没有单元测试的情况下部署更改,此时集成测试就非常重要。

我们知道集成测试的重要性,那么集成测试会给我们带来什么好处呢?

  • 此测试可确保集成模块/组件正常工作。

  • 一旦要测试的模块可用,就可以开始集成测试。它不需要完成其他模块以进行测试,因为Stubs和Drivers可以用于相同的操作

  • 它检测与接口相关的错误

三、集成测试层次

集成测试层次如下:

  • 模块内集成测试:软件模块1、软件模块2、软件模块3、软件模块4、软件模块5

  • 子系统内集成测试:软件模块1+软件模块2、软件模块3+软件模块4+软件模块5

  • 子系统间集成测试:子系统1+子系统2

四、集成测试类型

集成测试基于不同的测试策略衍生出不同类型的测试方式,下面将介绍主要的集成测试的类型。

1、大爆炸集成类型

大爆炸集成类型(俗称Big bang)一次性集成了所有模块,即它不会逐个集成模块。它会在集成后验证系统是否按预期工作。如果在完全集成的模块中检测到任何问题,则很难找出导致该问题的模块。

- 优点:

  • 对于小型系统来说可以迅速完成集成测试,井且只要极少数的驱动和桩模块设计。它需要的测试用例也是最少的;

  • 该方法比较简单;

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

- 缺点:

大爆炸集成类型是一个耗时的过程,找到一个自身有缺陷的模块会耗费大量时间与精力,因为他是一次性集成了所有模块,我们无法明确知道具体是哪个模块出了问题,必须要进行逐一排查来定位问题模块。修复完毕问题模块后若继续出现问题,我们没法判断是由于修复代码时造成了其他缺陷还是其他模块本身存在的缺陷导致,为了定位问题又需要花费时间排查。

- 适用范围:

  • 一个维护型项目(或功能增强型项目),其以前的产品已经很稳定;

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

  • 新增的项目只有少数几个组件被增加或修改,一旦集成测试出现问题,能够快速排查问题所在;

2、自上而下集成策略类型

自上而下集成策略分为 深度优先集成 与 广度优先集成 两种策略。我们先来看看深度优先集成策略。

- 深度优先集成策略

从上图可以看出深度优先集成策略纵向为基础不断向下集成模块组件进行集成测试,给A加一个驱动调用A,先给A加一个B,其他的虚拟数据(使用Stub桩程序),然后才给B加入E(替换S4),以此类推。。观察各单元的功能是否正常。深度优先集成策略的核心是先保证一条流程先走下来。

- 广度优先集成策略

从上图可以看出广度优先集成策略以横向为基础不断横向集成模块组件进行集成测试,给A加一个驱动调用A,先给A加一个B,其他的虚拟数据(使用Stub桩程序),然后才给B加入E(替换S2),以此类推。。观察各单元的功能是否正常。广度优先集成策略的核心是先保证同一级的单元先集成。

- 自上而下集成策略优点:

  • 自顶向下的集成方式在测试过程中较早地验证了主要的控制和判断点;如果选用按深度方向组装的方式,可以首先实现和验证个完整的软件功能;

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

  • 最多只需一个驱动(Driver程序),减少了驱动器开发的费用;

  • 支持故障隔离。

- 自上而下集成策略缺点:

  • 桩(Stub)的开发和维护是本策略的最大成本

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

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

- 自上而下集成策略适用范围:

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

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

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

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

3、自下而上集成策略类型

自下而上集成策略是先对程序结构最底层的代码进行集成与测试,然后不断融入上级模块或代码再次进行扩展测试。

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

通过上图可以看到,从程序结构最底层从下往上进行组装与测试,先测试E,然后E+B,以此类推。其他分支按照同样的方式进行组装测试,最后将所有分支与上级模块A组装进行测试。

​- 自下而上集成策略优点:

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

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

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

  • 该方法也支持故障隔离。

- 自下而上集成策略缺点:

  • 驱动的开发工作量也是很庞大的,每次组装后都需要设定一个驱动程序来模拟上层模块程序;

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

- 自下而上集成策略适用范围:

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

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

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

4、三明治集成策略类型

通过上面的学习我们不难发现,自上而下集成策略与自下而上集成策略都有各自的优点与缺点,那么我们能不能发展两者所长,避其两者所短呢?答案是当然的,这就出现了三明治集成策略!

三明治集成策略相当于将自下而上集成策略和自上而下集成策略结合起来

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

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

- 优点:集合了自下而上集成策略和自上而下集成策略,发展两者所长,避其两者所短

- 缺点:中间层在被集成前测试不充分

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


BugBear软件测试,专注于分享测试干货,在分享的过程中提升自己,欢迎关注,交流成长。

软件测试基础 (二): 集成测试相关推荐

  1. 软件测试基础知识 - 集成测试和系统测试的区别,以及它们的应用场景

    分享一个大牛的人工智能教程.零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net 区别 1.测试计划和测试用例编制的先后顺序:从V模型 ...

  2. 测试培训大纲第一课时,软件测试基础(培训待续中....)

    一.软件测试基础 1.软件测试的概念 1.1软件测试的定义与目的 为什么要测试? 测试的目的是什么? 测试的内容是什么? 主要内容:发现(discover)验证(verification)和确认(va ...

  3. 软件测试基础理论学习和小案例(一)

    文章目录 一.软件测试基础笔记 1.软件测试基本介绍 2.测试对象 3.测试级别 1. 单元测试 2.集成测试 3.系统测试 4.验证测试 4.系统测试分类 5 .常见的系统测试方法 6.软件质量 7 ...

  4. 软件测试基础知识大全【乐搏TestPRO】

    在很多人的认知里,软件测试入门门槛低,简单易学.确实,软件测试基础知识更偏向于理论方法的学习,及部分常用工具的学习. 接下来的70个基础知识讲解,弄明白后这些问题后,软件测试入门也基本掌握了.本篇共分 ...

  5. 软件测试基础知识回顾复习

    目录 一.软件测试概述 二.白盒测试 三.黑盒测试 四.测试用例 五.单元测试 六.功能测试 七.集成测试 八.系统测试 九.验收测试 十.回归测试 十一.配置测试 一.软件测试概述 1.什么是软件 ...

  6. 全网最详细软件测试基础知识,零基础自学的【建议收藏】

    目录 一.软件的定义 二.软件测试的定义与原则 三.测试模型的介绍 四.软件测试的流程 五.软件测试的分类 测试开发工程师技能成长路径 一.软件的定义 1. 软件的定义 软件测试(英语:Softwar ...

  7. 【软考软件评测师】软件测试基础知识

    [软考软件评测师]软件测试基础知识 软件测试基础知识 [软考软件评测师]软件测试基础知识 一. 软件测试的概念 1)软件测试定义的发展 2)软件测试的目的 3)软件测试的对象 4)对于测试组织者和实施 ...

  8. 想要踏入测试门这些软件测试基础知识必须闹记在心

    目录 一.软件测试概述 二.白盒测试 三.黑盒测试 四.测试用例 五.单元测试 六.功能测试 七.集成测试 八.系统测试 九.验收测试 十.回归测试 十一.配置测试 一.软件测试概述 1.什么是软件 ...

  9. 软件测试系列---软件测试基础

    软件测试系列--软件测试基础 1.什么是软件测试? **软件测试是一个过程,包含了若干活动,运行软件进行测试只是活动之一**进行软件测试可以人工方式也可以借助于工具**进行软件测试可以运行软件也可以不 ...

最新文章

  1. 边缘计算 — 与 AI
  2. java后台处理ajax请求_java后台怎么对ajax请求的内容进行xss转义?
  3. 腾讯百度等22家股东退出 链家注册资本缩水34%
  4. java请求报错(原因:CORS 头缺少 ‘Access-Control-Allow-Origin‘)
  5. 截取文件最后10行_10 行 Python 代码自动清理电脑内重复文件,解放双手
  6. 虚拟机 django 端口无法连接
  7. java list增改查_Java编程通过list接口实现数据的增删改查代码示例
  8. LeetCode:3Sum_15
  9. Vue学习笔记(利用网易云API实现音乐播放器 实例)
  10. HTTP长连接和短连接
  11. 操作系统死锁 四个必要条件
  12. 丁昊 北大计算机,北大清华17人!2018自主招生等类型入选名单公示,苏州333人!...
  13. 现有的数字版权保护大全
  14. 视频图像的I帧、P帧、B帧详解
  15. JS时间戳进行判断,判断是否超时三十分钟
  16. 【激励自己】牛人职场分享汇总
  17. 订单系统设计 —— 订单号设计
  18. 更改Pycharm的配置文件的存放路径
  19. Go mgo+Mongodb连接失败问题
  20. 逍遥安卓 出现android,解决逍遥安卓模拟器一直卡在99%的方法

热门文章

  1. safari浏览网页打开速度很慢怎样解决
  2. TCP基于窗口的端到端的拥塞控制机制
  3. An中的共轭类的个数
  4. windows-运维-12 Windows 防火墙
  5. 【缅怀妈妈系列诗歌】之二十四:一份永不忘却的思念
  6. httpd配置三种虚拟主机带访问控制
  7. CSS圆角边框、盒子阴影、文字阴影(01-07课)
  8. SpringClude核心组件之Eureka
  9. sql 计算法定假节假日解决方案一
  10. h5页面跳转关注公众号