对于软件开发来说,软件测试是一个几乎贯穿所有阶段的活动,所以测试的重要性毋庸置疑。不同开发组织如何在不同的产品研发阶段进行测试,也在很大程度上反映了其研发能力和质量控制能力。软件测试有很多类型,包括单元测试,集成测试,压力测试... 其中,集成测试的投入产出比相对最高,因为它覆盖的基本上都是最常用的用例(用户影响权重高)。根据维基百科的定义,集成测试(integration testing)是将若干的软件模块组合起来,测试某项特定功能。不同于单元测试只孤立的测试软件模块,集成测试更关注不同软件模块之间的交互。冒烟测试可以被认为是最小化的集成测试。所以从广义角度来说,几乎所有开发组织都会做不同规模的集成测试。

  集成测试策略基本分为4种:大爆炸测试(big-bang),自顶而下测试(Top-down),自底而上测试(Bottom-up),三明治测试。大爆炸测试就是把大部分软件模块在同一时间组合在一起进行测试。很明显,这种测试策略总体上来说是非常低效的,也违背迭代式开发的基本原则。问题会在同一时间大量爆发,并且因为每个模块都可能存在严重问题,问题定位也将非常艰难,从而使项目进度和质量都不可控制。因此,大爆炸测试是最糟糕的测试策略。自顶而下测试(Top-down)是先测试最低层模块,然后向上逐级测试更高级的模块。自底而上测试(Bottom-up)则与之相反。三明治测试是把自顶而下测试(Top-down)和自底而上测试(Bottom-up)结合在一起的测试策略。在四种策略中,三明治测试应该最优先被采用,因为它兼具高效性和可控性,使得开发并行性成为可能。

  集成测试的测试用例(test case)必须基于用例(use case)进行开发。一个用例对应一个或多个集成测试用例。(用例属于需求分析的范畴,不在本文讨论之列,可参阅相关资料)。覆盖用例的主要路径(happy path)当然是测试用例的最基本要求。对用例的异常路径(exceptions)的覆盖程度,则是提高软件质量的重要因子。因此,提高测试用例覆盖度的首要前提,是提高用例的完备度。在现实中,一些开发组织不做正式的需求分析,有些即使做需求分析但是不对用例进行文档化,造成的结果是集成测试甚至不能保证覆盖所有的主要路径。不同于单元测试可运行于宿主开发机或模拟器系统(针对嵌入式开发),集成测试必须运行于真实的目标系统,因为集成测试属于功能测试。集成测试一般基于API级别,介于白盒测试和黑盒测试之间。除了基于用例的路径覆盖,也应采取等价类测试和边界测试等功能测试方法,以提高测试覆盖度。

  系统集成测试(System integration testing)是集成测试一个特例,是将被测系统(包括所有的硬件和软件)作为一个整体来进行测试,因此属于完全的黑盒测试。测试用例代码可以不运行于待测系统中,而运行于另外的测试系统中。测试系统通过被测系统提供的接口(比如硬件引脚、通信信道,软件接口等),根据用户需求或者被测系统规格书,对被测系统进行测试。同一般的集成测试类似,如果能根据用户需求和系统规格书产生完整的用例文档,将极大的方便创建系统集成测试的测试用例。

  虽然某些系统集成测试也可以手动进行,但是集成测试应尽可能的自动化。测试用例需要周期性的运行,相比于手动测试,自动化测试可极大的缩短测试时间和减少人力成本。同时,测试用例代码应同功能代码一起统一管理和维护。也就是说,测试用例代码应达到或接近功能代码的质量要求。否则如果测试用例代码本身的问题反而会托慢开发进程,甚至应不被信任被抛弃。

  综上所述,集成测试对于任何软件开发组织都是必选项,因此对于集成测试的任何改善都能极大的帮助质量控制水平。需求分析和用例文档是集成测试的重要前提,应重视测试用例的代码质量。开发组织可根据其特点,选择合适自身的集成测试策略。

  

  

谈谈集成测试(integration testing)的更多相关文章

  1. 系统内部集成测试(System Integration Testing) SIT 用户验收测试(User Acceptance Testing)

    系统内部集成测试(System Integration Testing) SIT 用户验收测试(User Acceptance Testing) UAT SIT在前,UAT在后,UAT测完才可以上线

  2. Integration testing

    Integration testing 集成测试用来确保app的不同模块之间可以正确的一起工作.ASP.NET Core提供单元测试框架和内建的测试网络服务来支持集成测试,并且测试网络服务不需要网络开 ...

  3. 单元测试unit test,集成测试integration test和功能测试functional test的区别

    以下内容转自 https://codeutopia.net/blog/2015/04/11/what-are-unit-testing-integration-testing-and-function ...

  4. Unit Testing, Integration Testing and Functional Testing

    转载自:https://codeutopia.net/blog/2015/04/11/what-are-unit-testing-integration-testing-and-functional- ...

  5. Rails 5 Test Prescriptions 第8章 Integration Testing with Capybara and Cucumber

    Capybara:  A complete reference is available atrubydoc.info. 集成测试就是把局部的程序组合起来测试. 端到端测试是一个特殊的集成测试,覆盖了 ...

  6. 学习笔记之Unit testing/Integration testing/dotnet test and xUnit

    source code https://github.com/haotang923/dotnet/tree/master/src Unit testing C# code in .NET Core u ...

  7. Rails 5 Test Prescriptions 第9章 Testing-JavaScript: Integration Testing,❌挂一个问题webpacker::helper

    使用Capybara进行JS的集成测试 谈论驱动 让测试通过 Webpack in Development Mode Js设计 是用户在网页上有好的体验的重要因素. 尽管如此,许多网页不测试JS. 部 ...

  8. dict-命令行下中英文翻译工具

    命令行下中英文翻译工具(Chinese and English translation tools in the command line) 安装(Install) ubuntu 安装 pip sud ...

  9. Java高级特性 第11节 JUnit 3.x和JUnit 4.x测试框架

    一.软件测试 1.软件测试的概念及分类 软件测试是使用人工或者自动手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别.它是帮助识别开发完成(中间或最终 ...

随机推荐

  1. Python之协程、异步IO、redis缓存、rabbitMQ队列

    本节内容 Gevent协程 Select\Poll\Epoll异步IO与事件驱动 Python连接Mysql数据库操作 RabbitMQ队列 Redis\Memcached缓存 Paramiko SS ...

  2. 6 个珍藏已久 IDEA 小技巧,这一波全部分享给你!

    每周趣图 产品经理设计体验/用户实际体验 本周就不写技术分析文章了,分享几个珍藏已久的 IDEA 的「骚技巧」,助你快速完成代码. 还等什么?赶紧上车吧...... 先赞后看,养成习惯.微信搜索「程序 ...

  3. 理解js中的几种设计模式

    目录 工厂模式 构造函数模式 原型模式 组合使用构造函数模式和原型模式 动态原型模式 其它模式 工厂模式 function createPerson(name, age){ var o = new O ...

  4. python监控服务器应用日志,推送钉钉机器人,实时关注日志异常

    生产环境多台服务器上部署了多个应用,日志出现报错时,无法及时反馈到开发人员.部署一个大型的运维监控应用,不但耗资源,而且配置也不简单. 简简单单写个python脚本来监控服务器日志就简单多了,废话不多 ...

  5. 手写SpringBoot自动配置及自定义注解搭配Aop,实现升级版@Value()功能

    背景 项目中为了统一管理项目的配置,比如接口地址,操作类别等信息,需要一个统一的配置管理中心,类似nacos. 我根据项目的需求写了一套分布式配置中心,测试无误后,改为单体应用并耦合到项目中.项目中使 ...

  6. python学完可以做什么?Python就业方向最全面的解析

    乔布斯说过:“每一个人都应该学习如何编程,因为编程会教会你如何思考.”下一个时代是人机交互的时代,学习编程不是要让你成为程序员,而让你理解这个时代. 点击免费领取:全网最全python学习导图+14张 ...

  7. 有关 Session 的那些事儿

    原文链接: https://blog.by24.cn/archives/about-session.html Web 开发中,Session 是经常用到的概念,但是在日常交流中,似乎又经常引起误解. ...

  8. windows如何解决Error: Registry key 'Software\JavaSoft\Java Runtime Environment'\CurrentVersion'

    问题再现与解读 首次,使用 java 命令+任意参数 都会报这个错误,最典型的就是java -version 解读一下这个报错信息,注册表路径 Software\JavaSoft\Java Runti ...

  9. 什么是CSV

    逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本).纯文本意味着该文件是一个字符序列,不 ...

  10. DNA Consensus String UVA - 1368

    题目链接:https://vjudge.net/problem/UVA-1368 题意:给出一组字符串,求出一组串,使与其他不同的点的和最小 题解:这个题就是一个点一个点求,利用桶排序,求出最多点数目 ...