软件测试金字塔是什么,它的目的是什么,以及它包含哪些层次?

news2024/11/17 10:45:00

一、测试金字塔的概念:

测试金字塔是2009年Mike Cohn在他的著作《Succeeding with Agile》一书正式提出的。他是一个类比的概念,形容每一层,或者说不同集成阶段测试覆盖率和知行效率之间的一个相对关系。

测试金字塔最初的原型分三层,底层是单元测试,中间层是 API 测试,上层 是UI 自动化测试。而且底层的单元测试需要做最多的测试工作,越往上测试工作应该越少。根据《谷歌软件测试之道》的经验,三者对于精力投入的比例是:把 70%的精力放在单元测试,20%放在 API 测试,而剩下 10%的精力放在 UI 测试。

测试金字塔的这个理念和时下流行的“测试左移”的理念是一致的。测试左移(Shift Left Testing)是指要把质量保障的活动尽量前移到更早的开发生命周期中。这个理念和测试金字塔的思想是不谋而合的,也就是我们要把测试工作往前移(对应于测试金字塔是往下沉),要把单元测试、集成测试做得更加充分和完善。而上面的 UI 测试只需要针对关键业务进行自动化回归测试即可。

二、测试金字塔的目的:

在最初的三层金字塔中,最下层是单元测试,单元测试是自动化测试策略稳固的根基,因此也是金字塔结构的最底层;最上层是用户界面,通常用户界面是脆弱的,测试和修改的经济成本和时间成本较高;中间服务层是为了过渡用户界面和程序单元而设计的,认为所有应用程序都由各种服务组成,服务是指实现某一具体功能的程序集合,服务通过对输入进行响应而体现。通过对服务进行测试,而不是对用户界面进行测试,可以极大缩短时间和成本。

三、测试金字塔分层:

1.单元(Unit )测试

单元测试是针对代码单元(通常是类/方法)的测试,单元测试的价值在于能提供最快的反馈,在开发过程中就可以对逻辑单元进行验证。

2.接口(Service/服务/API)测试

接口测试是针对业务接口进行的测试,主要测试内部接口功能实现是否完整。如主要业务流是否能走通,异常处理是否正确,数据为空时校验等等。接口测试的主要价值在于接口定义相对稳定,不像界面或底层代码会经常发生变化,所以接口测试比较容易编写,用例的维护成本也相对较低。在接口层面准备测试的性价比相对较高。

3.集成(UI)测试

集成测试从用户的角度验证产品功能的正确性,测的是端到端的流程,并且加入用户场景和数据,验证整个业务流。集成测试的业务价值最高,它验证的是一个完整的流程,但因为需要验证完整流程,在环境部署、准备用例及实施等方面成本较高,实施起来并不容易。

4.覆盖率

覆盖率是金字塔的核心,底层是最宽的,象征着UT覆盖率应该是最高的,越往上越低,这一点大家都能达成共识。但是有一点需要注意的是,每网上一层应该是对下面一层覆盖率的一个补充。简单说集成测试应该聚焦于UT不好覆盖的场景或者UT采用mock方式测试的场景,而顶层的UI自动化应该聚焦于整个流程的集成测试,覆盖集成测试和UT难以覆盖到的场景。

5.执行速度

越接近代码层的测试,也就是单元测试,执行速度越快,离代码越远的测试,也就是UI测试,或者说端到端的测试,执行速度越慢。执行速度越快,意味着我们发现问题的时间越快,从而进一步减少了测试失败->定位问题->解决问题->再次触发自动化测试这个闭环的时间。

6.用例开发和维护成本

我们构建自动化测试通常是一个中间产品,是为了提高回归测试效率而产生的一个工具,并不是最终向客户交付的产品,因此我们更要考虑投入投入成本,也就是用例开发和维护的成本,成本对应图上标记的dollar。从图上可以看出,UI自动化显然是最不划算的,因为界面变化相对比较频繁,UI自动化自然很容易受影响,UI自动化用例的创建和维护也相对比较麻烦。

7.颗粒度

越往底层,颗粒度越细,问题越好隔离,发现问题越快,解决问题越快,越往上颗粒度越粗,问题越不好隔离,解决问题越慢。

四、分层测试的优势

  1. 尽量测试前移,在开发前期发现问题解决问题,开发成本会迅速下降。
  2. 不同时间段关注不同,分重点测试,层层防护。
  3. 容易定位问题,测的哪一层,出现问题,就是哪一层的问题,很明确;
  4. 分层测试在用例设计和执行测试的时候,更具有针对性,思维更加清晰,不容易遗漏;
  5. 加强测试对代码实现的理解;可以更好的进行测试技能拓展。

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/695226.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何找回删除的文件?这些文件恢复方法,超实用!

大家快看看我!我一不小心删除了非常重要的文件,突然不知道该怎么办了!我对电脑的操作也不熟悉,不敢轻易进行操作!大家有什么比较好的方式可以找回删除的文件吗? 在使用电脑时,误删文件的情况经常…

基于Python所写的五子棋设计

点击以下链接获取源码资源: https://download.csdn.net/download/qq_64505944/87952977 《五子棋(控制台版)》程序使用说明 在PyCharm中运行《五子棋(控制台版)》即可进入如图1所示的系统主界面。 图1 游戏主界面 具…

掌握客户参与:终极指南有效的CRM管理

随着信息技术的快速发展,企业面对的市场竞争日益激烈,客户需求也变得越来越多样化和个性化。传统的销售和营销模式已经不能适应当前的市场环境,企业需要更加精细化、个性化的管理客户关系。CRM管理应用解决方案应运而生,它能够帮助…

allure环境搭建教程

pytest的安装:(这里着重介绍Windows) allure是基于Java的一个程序,需要Java1.8的环境,所以安装之前需要配置jdk环境 pytest是python的一个第三方单元测试框架,在这里用于生成原始的执行结果。 一、一定别选最新的,3.…

新品上市:ATA-2048高压放大器技术参数、特点及应用

作为中国电子测试仪器行业的优秀民族企业之一,Aigtek安泰电子始终坚持国产替代的发展战略,将产品研发和市场需求紧密结合,实现高效的研发产出,现已拥有ATA系列功率放大器、ATA系列功率放大器模块、ATG系列功率信号源、ATS系列高精…

SpringBoot + Vue前后端分离项目实战 || 五:用户管理功能后续

系列文章: SpringBoot Vue前后端分离项目实战 || 一:Vue前端设计 SpringBoot Vue前后端分离项目实战 || 二:Spring Boot后端与数据库连接 SpringBoot Vue前后端分离项目实战 || 三:Spring Boot后端与Vue前端连接 SpringBoot V…

vscode调试python配置

{// 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid830387"version": "0.2.0","configurations": [{"name": "Python: 当前文…

域渗透(1)

域基础信息搜集 ping 域名ipconfig /all 判断当前是否在域环境中,看dns后缀和dns服务器net view 查看本工作组/域环境中的设备关闭防火墙开启服务net view /domain 查询域数量net view | net view /domain:域名 查询主机数量net group /domain 域控组别信…

使用el-tree实现不同区域的拖拽功能时遇到的坑点

问题再现 利用el-tree实现在两个区域的拖拽,1.树上的拖拽排序,2.将树上节点拖拽到画布上。 在将节点拖拽到画布上的时候,只要在树上移动过,松开鼠标的时候,树上的拖拽排序功能也生效了,那么如何使这两个拖…

蓝海卓越计费管理系统 download.php 任意文件读取漏洞

0x01、漏洞描述 蓝海卓越计费管理系统 download.php文件存在任意文件读取漏洞,攻击者通过 …/ 遍历目录可以读取服务器上的敏感文件 0x02、漏洞影响 蓝海卓越计费管理系统 0x03、fofa title“蓝海卓越计费管理系统” 0x04、漏洞复现 登录页面如下&#xff1a…

shell中快速遍历文件下指定的内容

1.举例 遍历当前目录下所有Makefile文件,找到内容适配CONFIG_SMP的所有Makefile find -type f -name Makefile | xargs grep "CONFIG_SMP" 2.find命令 3.xargs命令 3.1. 命令由来 xargs (英文全拼: eXtended ARGuments&#xff…

关于Idea中springboot热部署,html,js保存不起作用

a、引入依赖&#xff1a; <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </depe…

浅谈智能还书车

智能还书车是一种新型的智能化设备&#xff0c;配备触摸显示屏或简单操作的人机交流界面、图形界面&#xff0c;通过协议或其他网络及专用接口与图书馆自动化系统数据相连接&#xff0c;由读者自行对图书进行快速归还&#xff0c;读者把图书放到书车上&#xff0c;系统自动对图…

2. 线性模型

b站刘二老师pytorch深度学习课程&#xff1a;https://www.bilibili.com/video/BV1Y7411d7Ys?p2&vd_sourceb17f113d28933824d753a0915d5e3a90 如果每周学习4个小时&#xff0c;那能够获得什么成绩&#xff1f; y已知的是采样得到的数据&#xff0c;属于训练集&#xff08;t…

使用 css 禁用 input 控件实现 disable 效果

文章目录 需求分析代码 需求 使用 css 禁用 input 控件实现 disable 效果 分析 在 js 中&#xff0c;我们使用以下方法来阻止input,select,checkbox的默认事件&#xff0c;如 javascript event.preventDefault() event.stopPropagation()但在 css 中&#xff0c;我们可以设置对…

Android App的几个核心概念

Application启动 点击桌面图标启动App(如下流程图) 针对以上流程图示&#xff1a; ActivityManagerService#startProcessLocked()Process#start()ActivityThread#main()&#xff0c;入口分析的地方ActivityThread#attach()&#xff0c;这个里面的逻辑很核心 ActivityManagerS…

20230621 taro+vue3+webpack5+antdv时,在vue文件中特定组件时,devH5环境报错

问题 在某个vue文件下 import { notification } from ant-design-vue;然后在终端开始 yarn dev:h5在浏览器看效果 回出现以下错误 Uncaught (in promise) TypeError: __webpack_require__.hmd is not a functionat ./node_modules/.taro/h5/prebundle/ant-design-vue.js原因…

提高客户体验:智能客服外包服务的优势

随着科技的发展&#xff0c;智能客服外包服务越来越受到企业的青睐。这种服务能够帮助企业提高客户体验&#xff0c;减少客服成本&#xff0c;提高工作效率。本文将从技术、用户体验等方面阐述智能客服外包服务的优势。 人工智能技术 智能客服外包服务采用了一系列的技术手段&…

自然语言处理库NLTK的初步环境配置和使用例子

NLTK的基本介绍见此&#xff0c; 了解自然语言处理_bcbobo21cn的博客-CSDN博客 先安装python&#xff1b;然后用pip命令安装nltk&#xff1b; 然后进入python&#xff0c;下载nltk的数据包&#xff1b;输入下图语句&#xff0c;弹出一个框&#xff0c; 一般选择 all&#xff…

PHP 实验室设备系统mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP 实验室设备系统 是一套完善的web设计系统&#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 代码下载 https://download.csdn.net/download/qq_41221322/87959348https://downlo…