当前位置: 首页 > news >正文

为什么一定要做集成测试?

集成测试,我们都不陌生,几乎我们产品每天都在进行。但是我们真的有好好思考:为什么一定要做集成测试吗?只是为了简单的将“积木”搭起来就行,还是有什么其他的深意?

深意可能不一定会有,但是意义是肯定存在的。

如何看待集成测试?

James Bach认为,集成测试的动机是挖掘与集成相关的潜在风险,是专门为评估与整合相关的风险而设计的测试。而我认为,集成测试是检验一个产品是否初具雏形的关键。

试想一下,如果一个生产,多个部门负责生产车轮、轴承、发动机等零件,如果零件各自生产出来了,但不经过组装测试,而直接等待最终组装成整车,这会是一个多么大的风险?

为什么要集成测试?

我们先来看看整体的意义。

我们还是采用汽车生产这个比喻,很容易就能发现:对于一个产品整体来说,在某种程度上和某种程度上它由部分组成,为各部分创造一个内部环境,整体拥有部分不具有的属性。

我们分别来理解上面所说的三个观点。

整体由部分组成

例如:我们汽车由车轮、发动机、轴承、车架、方向盘等部分组成,而每个部分可能有不同的来源(不同的部门或者不同的提供者)。

各部分是为不同的目的而生产,比如车轮是为了行驶,发动机是为了提供动力来源,方向盘是为了方便使用者掌握方向。它们具有不同的属性,还有可能不是同时间周期创造,比如,车轮可能通过第三方购买,而第三方是早前存货。

整体为各部分创造一个内部环境

这个创造或割离出来的内部环境可以使各部分相互作用,相互依存,以及与外部环境的相互作用,而这个内部环境从外部是看不见的。

例如:汽车点火按钮与发动机之间的联系,这就属于一个内部环境。

整体拥有部分不具有的属性

整体依赖于部分,但又与部分不同,拥有他们不具有的属性。例如:汽车可以很方便的切速形势,但单独的车轮不行。又比如,一个简单的例子是三脚架的稳定性,它不是在它的任何一个单独的腿上,而是在所有的腿一起工作时。

由此可见,仅仅通过观察一个积分的各个部分,你可能无法分辨出你想知道的关于它的一切。这就是集成风险存在的原因。在复杂或重要的系统中,集成测试将是极其重要的,特别是在进行了更改之后。

集成测试时的启发性关注点?

既关注整体,也要关注部分”

“整体”由“部分”构成,但并意味着一定先存于整体之前,或者在集成的过程中没有改变。

这意味着我们需要我们可以富有成效地思考产品的各个部分,以及它们如何与其他部分相互作用。

既关注集成,也要关注解体

“解体也会带来整合”,当你把某部分拿走,或者把产品拆开,你最终会得到一个新的整合,这个时候也会有风险存在。

举个例子:集成过程中某个组件延迟集成,对整个产品造成的风险。

要关注集成的程度和种类

“融合不是全或无——有不同的程度和种类“。

一个产品可能会意外地集成,因为它使用的是没有人意识到它拥有的部分。它可能是松散集成的,比如一只可以丢弃尾巴的壁虎,或者一个带有插件的浏览器,它可能是紧密集成的。

再举个例子:当我们从一个产品中获取代码,并将其添加到另一个产品的不同位置时,我们可以边走边编辑,它可能会保留其部件的现有接口,或违反它们,或重新设计它们,或消除它们。

特别是在集成测试时,我们往往重心在正向集成上,而忽略了解体时存在的一些风险。举例:常见来说,产品多组件安装,我们常关注安装是否成功,而容易忽略部分卸载或整体卸载时的风险。

怎么进行集成测试? 

本节我们要说的是怎么拆分集成测试。

从整个产品来说,我们可以做两层或更多层的集成测试。例如:我们可以对发动机这个组件设置一个集成测试,因为放大来看,发动机也是由许多小组件构成。同样的,还可以对车轮设置一个集成测试。

而从整体来说,汽车本身也可以设置一个集成测试,因为它是一个对外交付的产品。

有的人可能就会说,到汽车应该是系统测试了!这两者的差异主要在于你的关注点是什么:

  • 如果你关注的是组件间的接口是否合理可用,那么你可以把这个环节叫做集成测试;

  • 如果你关注的是整车的可用性和功能性,你可以叫它系统测试。

不同的人可能会将不同的事物识别为部件、环境或产品,没关系,我们也可以自由地移动镜头,尝试不同的视角。所以说,我们集成测试设置的粒度取决于我们的关注范围,并没有一个一成不变的标准。

因此,我们可以从产品层面划分集成测试,也可以从团队层面划分集成测试。

产品层面划分

假如产品P由组件C1、C2、…、C7组成,我们可以针对单个组件设置一级集成测试。

如,ItergrationTest1、ItergrationTest2、…、ItergrationTest7,再往上,交互组件C1和C2,C3和C4、…、C7之间可以设置二级集成测试ItergrationTest12、ItergrationTest34567,直到产品级集成测试ItergrationTestP

团队层面划分 

 根据不同团队划分集成测试。一个团队可能会负责多个组件,组件的集成测试交由团队考虑。因此,从团队层面考虑,我们可以划分为团队集成测试TeamItergrationTest1、TeamItergrationTest2……,以及项目级集成测试ProjectItergrationTest。

最后说一说 

从上面描述我们可以看出集成测试在产品研发过程中的重要性,以及我们在设计集成测试和分层集成测试时容易忽略的一些思考点。希望能够帮助正在阅读的你有所收获~ 

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走: 

 

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取 

相关文章:

为什么一定要做集成测试?

集成测试,我们都不陌生,几乎我们产品每天都在进行。但是我们真的有好好思考:为什么一定要做集成测试吗?只是为了简单的将“积木”搭起来就行,还是有什么其他的深意? 深意可能不一定会有,但是意…...

前端:CSS

CSS基本语法规则:选择器若干属性声明 style标签:可以放到代码的任意位置处,head/body中都可以 三种写CSS的方式: 1、内部样式:使用style标签,直接把CSS写到html文件中。此时的style标签可以放到任何位置…...

CMMI—组织级过程定义(OPD)

大家好,我是Doker 多克!一、目的组织级过程定义(Organizational Process Definition, OPD)的目的在于建立并维护一套可用的组织级过程资产、工作环境标准以及团队规则与指南二、简介组织级过程资产使得整个组织具有一致…...

华为OD机试真题Python实现【猜字谜】真题+解题思路+代码(20222023)

猜字谜 题目 小王设计了一个简单的猜字谜游戏,游戏的谜面是一个错误的单词,比如nesw,玩家需要猜出谜底库中正确的单词。 猜中的要求如下: 对于某个谜面和谜底单词,满足下面任一条件都表示猜中: 变换顺序以后一样的,比如通过变换w和e的顺序,nwes跟news是可以完全对应的…...

软测入门(三)Selenium(Web自动化测试基础)

Selenium(Web端自动测试) Selenium是一个用于Web应用程序测试的工具:中文是硒 开源跨平台:linux、windows、mac核心:可以在多个浏览器上进行自动化测试多语言 Selenium WebDriver控制原理 Selenium Client Library…...

备战蓝桥杯——sort函数

备战蓝桥杯——sort函数排列字母lambda匿名函数排列字母 链接: 排列字母 不用多说,很简单的签到题,我们先来了解一下sort函数的用法 list.sort(cmpNone, keyNone, reverseFalse) cmp:进行比较的方法(可以自定义排序的方法,通常…...

华为机试题:HJ86 求最大连续bit数(python)

文章目录(1)题目描述(2)Python3实现(3)知识点详解1、input():获取控制台(任意形式)的输入。输出均为字符串类型。1.1、input() 与 list(input()) 的区别、及其相互转换方…...

机器学习复习--logistic回归简单的介绍和代码调用

最近需要复习一下机器学习相关知识,记录一下 一、简介 线性回归:h(x)wTxbh(x)w^T x bh(x)wTxb logistic回归就是在线性模型的基础上加上一个sigmoid函数ggg,即h(x)g(wTxb)h(x)g(w^T xb)h(x)g(wTxb)。。。g(z)1/(1e−z)g(z)1/(1e^{-z})g(z)…...

uniapp小程序接入腾讯地图sdk

新建一个项目。配置uniapp配置文件设置小程序的appid注意:匿名用户可能存在地理定位失效。查uniapp官网官网->apiuni.getLocation(OBJECT) 获取当前的地理位置、速度。属性:success匿名函数返回值:uni.getLocation({type: gcj02,success: …...

总结JavaScript中的条件判断与比较运算

一、条件判断 JavaScript 中有三种方法可以用来进行条件判断: 1、使用 if-else 语句。这种方法用于在特定条件为 true 时执行一段代码,否则执行另一段代码。例如: let a 5; if (a > 10) {console.log("a is greater than 10"…...

算法练习-排序(一)

算法练习-排序(一) 文章目录算法练习-排序(一)1 排序算法1.1 冒泡排序1.1.1代码1.2插入排序1.2.1代码1.3 选择排序1.3.1代码1.4归并排序1.4.1代码1.5 快速排序1.5.1 思路1.5.2 代码2 题目2.1 特殊排序2.1.1 题目2.1.2 题解2.2 数组中的第k个最大元素2.2.1 题目2.2.2 题解2.3 对…...

CentOS7.6快速安装Docker

快速安装 官网安装参考手册:https://docs.docker.com/install/linux/docker-ce/centos/ 确定你是CentOS7及以上版本,yum是在线安装! [rootVM-4-5-centos ~]# cat /etc/redhat-releaseCentOS Linux release 7.6.1810 (Core)接下来您只管自上向下执行命令即可&#x…...

CentOS 7安装N卡驱动和CUDA和cuDNN

前言系统一开始是CentOS 7.6,安装依赖时yum给的内核文件的版本号和uname -r的结果不一样,这时不能直接装依赖,装上后后面装驱动时会报错找不到内核头文件(最开始我直接装依赖了,以为高版本兼容低版本,然后装驱动时报错…...

Java开发 - 分页查询初体验

前言在上一篇,我们对es进行了深入讲解,相信看过的小伙伴已经能基本掌握es的使用方法,我们知道,es主要针对的是搜索条件,在这方面es具有无可比拟的优势,但我们也会注意到,有时候搜索条件过于宽泛…...

C语言循环语句do while和嵌套循环语句讲解

C do…while 循环 不像 for 和 while 循环,它们是在循环头部测试循环条件。在 C 语言中,do…while 循环是在循环的尾部检查它的条件。 do…while 循环与 while 循环类似,但是 do…while 循环会确保至少执行一次循环。 语法 C 语言中 do…w…...

【计算机视觉】OpenCV 4高级编程与项目实战(Python版)【7】:拼接图像

我们已经知道,图像是通过数组描述的,那么拼接图像其实就是拼接数组。NumPy提供了2个拼接数组的函数,分别是hstack函数和vstack函数,这两个拼接函数可以将两个数组水平和垂直拼接在一起,也就相当于将两幅图像水平和垂直拼接在一起,本节将详细讲解如何使用这两个函数水平拼…...

王道操作系统课代表 - 考研计算机 第二章 进程与线程 究极精华总结笔记

本篇博客是考研期间学习王道课程 传送门 的笔记,以及一整年里对 操作系统 知识点的理解的总结。希望对新一届的计算机考研人提供帮助!!! 关于对 “进程与线程” 章节知识点总结的十分全面,涵括了《操作系统》课程里的全…...

C++修炼之练气期三层——函数重载

目录 1.引例 2.函数重载的概念 3.C支持函数重载的原理 1.引例 倘若现在要实现一个加法计算器,用C语言实现的话我们会选择这样的方式: int Add_int(int a, int b) {return a b; }double Add_double(double a, double b) {return a b; } 在使用加…...

在linux上运行jar程序操作记录

1.文件传送 使用ftp把打包后的项目jar包上传到linux服务器的目录上(这里有两个文件,一个pengning.jar,一个配置文件application.yml) 2.进入目录并运行程序 打开终端,进入pengning.jar所在的目录 [rootcampus /]# [rootcampu…...

【STM32】入门(十二):实时操作系统RTOS和通用操作系统GPOS的区别

1、简述 实时操作系统(RTOS,Real Time Operating System) 通用操作系统(GPOS,General Purpose Operating System) 2、区别 1)任务 实时操作系统:使用分时设计,其中每个任务被分配一小段时间,在切换到另一…...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

django filter 统计数量 按属性去重

在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...

FFmpeg:Windows系统小白安装及其使用

一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...

c++第七天 继承与派生2

这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分:派生类构造函数与析构函数 当创建一个派生类对象时,基类成员是如何初始化的? 1.当派生类对象创建的时候,基类成员的初始化顺序 …...

数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !

我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...

DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态

前言 在人工智能技术飞速发展的今天,深度学习与大模型技术已成为推动行业变革的核心驱动力,而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心,系统性地呈现了两部深度技术著作的精华:…...