为什么一定要做集成测试?
集成测试,我们都不陌生,几乎我们产品每天都在进行。但是我们真的有好好思考:为什么一定要做集成测试吗?只是为了简单的将“积木”搭起来就行,还是有什么其他的深意?
深意可能不一定会有,但是意义是肯定存在的。
如何看待集成测试?
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)任务 实时操作系统:使用分时设计,其中每个任务被分配一小段时间,在切换到另一…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...

Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...