为什么一定要做集成测试?
集成测试,我们都不陌生,几乎我们产品每天都在进行。但是我们真的有好好思考:为什么一定要做集成测试吗?只是为了简单的将“积木”搭起来就行,还是有什么其他的深意?
深意可能不一定会有,但是意义是肯定存在的。
如何看待集成测试?
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)任务 实时操作系统:使用分时设计,其中每个任务被分配一小段时间,在切换到另一…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...
关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...
2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...
基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...
数据结构:递归的种类(Types of Recursion)
目录 尾递归(Tail Recursion) 什么是 Loop(循环)? 复杂度分析 头递归(Head Recursion) 树形递归(Tree Recursion) 线性递归(Linear Recursion)…...
VisualXML全新升级 | 新增数据库编辑功能
VisualXML是一个功能强大的网络总线设计工具,专注于简化汽车电子系统中复杂的网络数据设计操作。它支持多种主流总线网络格式的数据编辑(如DBC、LDF、ARXML、HEX等),并能够基于Excel表格的方式生成和转换多种数据库文件。由此&…...
若依登录用户名和密码加密
/*** 获取公钥:前端用来密码加密* return*/GetMapping("/getPublicKey")public RSAUtil.RSAKeyPair getPublicKey() {return RSAUtil.rsaKeyPair();}新建RSAUti.Java package com.ruoyi.common.utils;import org.apache.commons.codec.binary.Base64; im…...
Xcode 16 集成 cocoapods 报错
基于 Xcode 16 新建工程项目,集成 cocoapods 执行 pod init 报错 ### Error RuntimeError - PBXGroup attempted to initialize an object with unknown ISA PBXFileSystemSynchronizedRootGroup from attributes: {"isa">"PBXFileSystemSynchro…...
