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

    可迭代的对象 如果对象实现了能返回迭代器的 __iter__ 方法,那么对象就是可迭代的. 序列都可以迭代:实现了 __getitem__ 方法,而且其参数是从零开始的索引,这种对象也可以迭代. &g ...

  2. 数据可视化之分析篇(九)PowerBI数据分析实践第三弹 | 趋势分析法

    https://zhuanlan.zhihu.com/p/133484654 以财务报表分析为例,介绍通用的分析方法论,整体架构如下图所示: (点击查看大图) 我会围绕这五种不同的方法论,逐步阐述他们 ...

  3. 初级软件工程师怎么走向BATJ?——献给迷茫中的测试人

    软件测试,邀你同行.你好,我是爱码小哥. 又是一个深夜,打开手机备忘录,想记录一些东西,本人比较静的一个人,所以经常会去 IT行业的贴吧论坛交流一下,逛知乎,论坛,社区你就会发现大量这样的帖子,都会出 ...

  4. Ethical Hacking - NETWORK PENETRATION TESTING(6)

    Creating a fake access point (honeypot) Fake access points can be handy in many scenarios, one examp ...

  5. xenomai内核解析之信号signal(一)---Linux信号机制

    版权声明:本文为本文为博主原创文章,转载请注明出处.如有错误,欢迎指正.博客地址:https://www.cnblogs.com/wsg1100/ 目录 1. Linux信号 1.1注册信号处理函数 ...

  6. 题解 CF1359B 【New Theatre Square】

    题意 有一个 n×m 的广场,其中一部分要铺地砖,地砖有两种, 1 × 1 和 1×2 的,后者只能横着铺,其中, 1 × 1的单价为 x , 1 × 2 的单价为 y , 输入这个广场," ...

  7. 利用服务器+jsDelivr+GitHub搭建咱的免费图床

    前言 有人就问了你这个标题写错了?不应该是PicGo+jsDelivr+GitHub搭建咱的免费图床吗? 2333,是一个上传程序啊,不系写错了. 程序介绍 目前程序已实现两种模式上传到GitHub或 ...

  8. 3.OSPF协议及链路状态算法

    OSPF的特点: 1.使用洪泛法向自治系统内所有路由器发送信息,即路由器通过输出端口向所有相邻的路由器发送信息,而每一个相邻路由器又再次将此信息发往其所有的相邻路由器.最终整个区域内所有路由器都得到了 ...

  9. JavaScript经典实例(浏览器事件)

    跨浏览器事件 1.跨浏览器添加事件 function addEvent(obj,type,fn){ if(obj.addEventListener){ obj.addEventListener(typ ...

  10. 题解 洛谷 P2254 【[NOI2005]瑰丽华尔兹】

    发现在同一时间段中,滑动的方向具有唯一性,所以不难得出\(DP\)方程. \(f_{i,j}=max(f_{i,j},f_{i-dx_,j-dy}+dis_{i,j,i-dx_,j-dy})\) \( ...