对于软件开发来说,软件测试是一个几乎贯穿所有阶段的活动,所以测试的重要性毋庸置疑。不同开发组织如何在不同的产品研发阶段进行测试,也在很大程度上反映了其研发能力和质量控制能力。软件测试有很多类型,包括单元测试,集成测试,压力测试... 其中,集成测试的投入产出比相对最高,因为它覆盖的基本上都是最常用的用例(用户影响权重高)。根据维基百科的定义,集成测试(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. 前端09 /jQuery标签操作、事件、补充

    前端09 /jQuery标签操作.事件.补充 目录 前端09 /jQuery标签操作.事件.补充 1.标签内文本操作 1.1 html标签元素中的所有内容 1.2 text 标签元素的文本内容 2.文 ...

  2. Resource exhausted: OOM when allocating tensor with shape[3,3,384,384] and type float on /job:localhost/replica:0/task:0/device:GPU:0 by allocator GPU_0。。。。。

    报错信息: OP_REQUIRES failed at assign_op.h:111 : Resource exhausted: OOM when allocating tensor with sh ...

  3. python处理json总结

    一.首先,了解下什么是JSON? JSON:JavaScript Object Notation [JavaScript 对象表示法] JSON 是一种轻量级的数据交换格式,完全独立于任何程序语言的文 ...

  4. 最佳开发工具大全,GitHub Star 6.2k+

    一位曾经的谷歌工程师,花费两年时间,辛苦整理了一份清单.本文转自量子位,作者晓查.栗子.方驭洋,如有侵,可删! 这个名为 "xg2xg" 的清单,原本是这位前谷歌工程师(ex-Go ...

  5. OSCP Learning Notes - Buffer Overflows(4)

    Finding the Right Module(mona) Mona Module Project website: https://github.com/corelan/mona 1. Downl ...

  6. try-catch- finally块中, finally块唯一不执行的情况是什么?

    除非在try块或者catch块中调用了退出虚拟机的方法(即System.exit(1);),否则不管在try块.catch块中执行怎样的代码,出现怎样的情况,异常处理的finally块总是会被执行的 ...

  7. faker生成器生成虚拟数据的Python模块

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:行哥 今天给大家介绍一个Faker模块,一款基于Python的测试数 ...

  8. CppUnit使用和源码解析

    前言 CppUnit是一个开源的单元测试框架,支持Linux和Windows操作系统,在linux上可以直接进行源码编译,得到动态库和静态库,直接链接就可以正常使用,在Windows上可以使用VC直接 ...

  9. OFDM通信系统的MATLAB仿真(1)

    由于是第一篇博客,想先说点废话,其实自己早就想把学到的一些东西总结成文章随笔之类的供自己复习时查看的了.但是一是觉得自己学的的不够深入,总结也写不出什么很深刻的东西:二是觉得网上也有海量的资料了,需要 ...

  10. 题解 洛谷 P2179 【[NOI2012]骑行川藏】

    题意为在满足\(\sum\limits_{i=1}^nk_i(v_i-v_i^\prime)^2s_i\leqslant E_U\)的条件下最小化\(\sum\limits_{i=1}^n\frac{ ...