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

    处理连续性特征 二值化与分段 sklearn.preprocessing.Binarizer根据阈值将数据二值化(将特征值设置为0或1),用于处理连续型变量.大于阈值的值映射为1,而小于或等于阈值的值 ...

  2. c++运行程序 改变字和背景的颜色与窗口大小和位置 (c++)(windows)

    关于改变字体的颜色和背景颜色: 在#include <windows.h> 库里 0=黑色 1=蓝色 2=绿色 3=湖蓝色 4=红色 5=紫色 6=黄色 7=白色 8=灰色 9=淡蓝色 A ...

  3. bzoj2296【POJ Challenge】随机种子*

    bzoj2296[POJ Challenge]随机种子 题意: 求一个≤10^16的数,使这个数包含123456789且为x的倍数.x≤1000000. 题解: 16-6刚好等于10.因此我们可以直接 ...

  4. ubuntu 下安装QQ TIM QQ轻聊版 微信 Foxmail 百度网盘 360压缩 WinRAR 迅雷极速版

    第1步,安装deepin-wine环境:上https://github.com/wszqkzqk/deepin-wine-ubuntu页面下载zip包(或用git方式克隆),解压到本地文件夹,在文件夹 ...

  5. C++算法 链式前向星存图

    这个东西恶心了我一阵子,那个什么是什么的上一个一直是背下来的,上次比赛忘了,回来有个题也要用,只能再学一遍,之前也是,不会为什么不学呢.我觉得是因为他们讲的不太容易理解,所以我自己给那些不会的人们讲一 ...

  6. 重学数据结构(三)——使用单链表实现LRU淘汰缓存机制

    使用单链表实现LRU(Least Recently Used)淘汰缓存机制 需求:存在一个单链表,在单链表尾部的都是越早之前添加的元素. 当元素被访问到时,会添加进缓存(也就是这个单链表中). 如果这 ...

  7. Unity 基于excel2json批处理读取Excel表并反序列化

    excel2json是一款将Excel表格文件快速生成json和C#数据类的高效插件,详情了解如下: https://neil3d.github.io/coding/excel2json.html 该 ...

  8. 常见的HTTP返回状态值

    200 (成功) 服务器已成功处理了请求. 通常,这表示服务器提供了请求的网页. 301 (永久移动) 请求的网页已永久移动到新位置. 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自 ...

  9. 论文阅读 ORBSLAM3

    这周末ORB-SLAM3出现了.先看了看论文.IMU部分没细看,后面补上. Abstract 视觉,视觉惯导,多地图SLAM系统 支持单目/立体/RGBD相机 支持pinhole/鱼眼相机 基于特征/ ...

  10. ken桑带你读源码 之 scrapy_redis

    首先更大家说下  正式部署上线的爬虫会有分布式爬虫的需求  而且原本scrapy 的seen (判断重复url的池  不知道用啥词  已抓url吧 )  保存在磁盘 url 队列 也是保存在磁盘 (保 ...