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

5分钟了解回归测试

1. 什么是回归测试(Regression Testing)

回归测试是一个系统的质量控制过程,用于验证最近对软件的更改或更新是否无意中引入了新错误或对以前的功能方面产生了负面影响(比如你在家中安装了新的空调系统,发现虽然新的空调系统可以按预期工作,但是本来亮的等却不亮了)。其主要目标是确保旨在改进的修改不会破坏软件的既定性能和可靠性。回归测试是软件开发过程质量控制措施的一个重要方面。每次进行更改时,都会将其付诸实践,以确保它不会无意中导致任何功能或性能问题。

那我们为什么需要回归测试呢?

当软件开发人员修复错误、添加新功能或修改现有特性或功能时,他们必须更改程序代码。即使是微小的更改也可能导致大量新错误。在这种情况下,测试工程师可以通过回归测试来揭示和查明不良副作用。正确执行的回归测试套件至关重要。至关重要的一点是,在错误修复后原始产品不会停止工作。

回归测试是软件开发生命周期的基本组成部分。ProtoTech Solutions用这张图很好地说明了这个概念:

2. 什么时候进行回归测试

将新功能或增强功能部署到现有代码库或应用程序时,需要进行回归测试。它确保现有应用程序的任何新功能或更新都能正常工作,而不会出现任何错误或缺陷。开发人员和测试人员通常难以跟踪每个代码线程,因此很有可能出现代码不兼容问题。因此,对他们的代码库(或应用程序)执行回归测试使他们能够更早地检测到缺陷,并以更低的风险交付应用程序。

当部署花费的时间比预期的要长时,可以使用它。在这种情况下,测试人员应每天运行回归测试。此外,最好在每周发布的功能测试之后运行回归测试。

当某些功能被大修时,回归测试变得更加重要,因为它可能会危及代码库的现有功能。此外,修复一个缺陷有时会导致另一个缺陷。在这种情况下,可以混合使用调试和回归测试,以确保一切按预期工作。

3. 回归测试的种类

根据软件开发生命周期 (SDLC) 和要部署的新功能或更新,可以实现各种类型的回归测试。但是,必须了解几种回归测试类型才能选择正确的回归测试类型。

以下是不同类型的回归测试——

纠正性回归测试

纠正性回归测试是更简单的回归测试形式之一,需要最少的工作量。纠正性回归测试不涉及对现有代码库的更改,也不涉及向应用程序添加新功能。您只需要测试现有功能和与之相关的测试用例,而不是创建新功能。

单元回归测试

单元回归测试是回归测试的一个组成部分,在回归测试中,代码是单独测试的。在执行单元回归测试时,所有其他交互、集成和依赖项都将被禁用,重点是单个单元代码。通常,此测试在低流量和非高峰时段进行。

选择性回归测试

选择性回归测试分析现有代码的影响以及新代码和现有代码的影响。变量和函数等常见元素被合并到应用程序中,以便在不影响过程的情况下快速识别结果。

渐进式回归测试

测试用例是根据渐进式回归测试的要求创建的。当只有微小的产品改进时,设计新的测试用例时不会影响产品的现有代码。

完全回归测试

一些微小或重大的更改可能会对产品产生巨大影响。在这种情况下,当对当前代码进行重大修改时,将使用完整的回归测试。它有助于修复在测试过程中所做的任何修改。

部分回归测试

将新代码添加到现有代码库时,将执行部分回归测试。这有助于发现现有代码中的关键错误,并允许在不影响系统的情况下对其进行测试。

重测所有回归测试

重新测试所有 回归测试是重新执行所有测试用例的过程,以确保没有由于应用程序中的代码更改而导致的错误。这种类型的测试需要 QA 方面付出巨大的努力。

4. 重测试和回归测试之间的区别

重测试是测试特定测试用例的持续过程,以确保错误得到修复,并且 Web 产品的功能在最终执行中运行良好。在重测试中重复同一组单元测试,以验证代码的功能。换句话说,重新测试是执行相同的手动或自动测试,以验证新版本是否完美运行。

回归测试是一种在发生任何代码提交时验证新生成的技术。在这个过程中,测试人员的工作是验证代码中没有由于软件修改和调整而包含新的错误。开发回归测试套件后,您可以使用自动化测试工具将其自动化。但是,这不适用于重测试。

以下是重测试与回归测试的详细比较

重测试回归测试
是一种确保测试用例没有错误并在错误修复后的最终执行中完美运行的技术。是一种确保代码功能在应用程序调整或修改后不受影响的技术,
是针对失败的测试用例执行的。是对通过的测试用例执行的。
确保修复构建中的原始错误。测试代码是否存在意外的副作用。
无法对测试进行自动重新测试。自动回归测试是可能的。
也称为计划测试。也称为通用测试。
由于其高优先级,它不能与回归测试并行执行。它可以与重新测试并行执行,因为它在少数实例中的优先级较低,并且资源可用性较低。
不包括 bug 验证作为测试的一部分。把错误验证作为测试的一部分。
在所有软件版本中执行。是在一些最新版本的软件中执行的。

5. 回归测试的策略

  • 再次执行所有现有测试:产品发布后,测试工程师必须再次检查问题区域。很多时候,这可能是一个挑战,尤其是在执行手动测试时。此处建议进行自动化测试。
  • 首先运行高优先级测试:在回归测试上花费的大约 50% 的时间应该用于重复与应用程序基本功能相关的测试。
  • 接下来检查复杂的功能:许多应用程序都有精密而复杂的部件,这可能会导致问题。尽管该功能很难理解,但其功能的质量必须非常出色。
  • 执行探索性测试:在学习软件版本的新功能的同时,为它们设计新的测试并执行它们。在这次测试过程中,会发现许多新的错误。
  • 借助自动化测试:提高生产力并减少运行测试所花费的时间/精力。使用自动化脚本,可以更快、更有效地执行测试。

最后,必须进行随机测试。软件测试人员扮演用户的角色并随机测试。因为总是存在一些问题,所以进行随机测试很重要。

6. 选择用于回归测试的测试用例

端到端测试对于在所有浏览器和操作系统上顺利运行应用程序至关重要。但是,据观察,在部署阶段,大量缺陷会泄漏到应用程序中。从客户的角度来看,这可能至关重要,因为它可能会增加营业额并造成糟糕的客户体验。因此,根据客户要求明智地选择测试用例至关重要。

以下是选择回归测试用例的步骤 -

  1. 选择具有频繁错误的测试用例:简单的代码提交有时会破坏应用程序的完整功能。因此,测试人员在选择涉及频繁缺陷的测试用例时应牢记这些因素。他们还可以根据他们在回归测试周期中的先验知识和经验来选择测试用例。
  2. 选择具有关键核心功能的测试用例:为确保应用程序在多个平台上顺利运行,测试人员应首先专注于选择涵盖应用程序基本关键功能的测试用例。例如,电子商务应用程序必须包括多种支付方式、网站导航、广泛的搜索功能等。
  3. 选择具有最近代码更新的测试用例:当新代码或功能合并到应用程序中时,缺陷的可能性会增加,并且必须多次修改代码。因此,确定测试用例的优先级并选择那些涉及频繁代码库调整和升级的测试用例至关重要。
  4. 根据用户界面选择测试用例:测试人员需要根据用户可见的区域来选择测试用例。用户界面的可见元素包括品牌徽标、图像、按钮文本等。然而,这些问题的优先级较低,但从用户的角度来看,它们至关重要。
  5. 选择基于集成的测试用例:端到端测试可确保应用程序在不同平台上平稳运行。在某些情况下,一个组件的功能可能依赖于另一个组件。例如,如果组件 C2 的功能依赖于 C1 并且修改了 C2,则 C1 的行为可能会受到影响。因此,对此类 bug 运行回归测试对于验证基于集成的测试方案至关重要。
  6. 选择复杂的测试用例:执行复杂的测试用例可能会导致应用崩溃和性能不佳。测试人员必须使用各种技术来测试复杂性,并确保解决所有复杂的测试场景。
  7. 合并基于风险的测试:在基于风险的测试方法中,测试人员根据最近的代码更改确定测试用例的优先级,从而减少回归时间和工作量。

回归测试用例的优先级可以分为三类——

  • 高优先级:它涵盖了应用程序的关键和核心功能、最近的代码修改以及很有可能出现错误的组件。
  • 中等优先级:它涉及现场验证和其他负面测试场景等方面。
  • 低优先级:它包括其他功能,如用户界面区域,如品牌徽标、按钮文本等。

7. 回归测试示例

以下是 Apple 网站所需的回归测试示例。该公司通过其网站产生数十亿美元的年收入。因此,他们的网站必须始终正常运行——功能、可靠且性能良好。

示例 – 苹果

在 apple.com的首页上,您可以看到苹果的所有产品。

当苹果发布他们的下一个产品,也许是iPhone 16时,苹果的开发人员将在网站上添加一个新条目,很可能在iPhone 15 Pro上面。但是,需要非常小心地确保:将新的 UI 流添加到主页上的新“iPhone 16”条目中后,其余的产品 UI 流仍能像以前一样继续正常工作。为此,我们执行了回归测试套件。这些回归测试用例可以手动执行,也可以使用称为 Selenium 的流行测试自动化框架自动执行。

假设其中一个回归测试失败;这意味着在添加新的产品流时,网站的现有功能中断了。此错误需要立即记录并修复。每次对网站进行次要或重大的 UI 流程添加/更改时,都应执行此回归测试套件。

同样,回归测试套件也应该得到增强,以在较新的测试用例的帮助下覆盖更多的 UI 流。这确保了网站始终正常运行;每当出现破损时,都会在回归测试套件的帮助下立即检测并标记。

相关文章:

5分钟了解回归测试

1. 什么是回归测试(Regression Testing) 回归测试是一个系统的质量控制过程,用于验证最近对软件的更改或更新是否无意中引入了新错误或对以前的功能方面产生了负面影响(比如你在家中安装了新的空调系统,发现虽然新的空…...

路由器如何进行数据包转发?

路由器进行数据包转发的过程是网络通信的核心之一,主要涉及以下几个步骤: 接收数据包:当一个数据包到达路由器的一个接口时,它首先被暂时存储在该接口的缓冲区中。 解析目标地址:路由器会检查数据包中的目标IP地址。…...

【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(四) -> 常见组件(一)

目录 1 -> List 1.1 -> 创建List组件 1.2 -> 添加滚动条 1.3 -> 添加侧边索引栏 1.4 -> 实现列表折叠和展开 1.5 -> 场景示例 2 -> dialog 2.1 -> 创建Dialog组件 2.2 -> 设置弹窗响应 2.3 -> 场景示例 3 -> form 3.1 -> 创建…...

iOS 自动翻滚广告条(榜单条)实现方案

引言 在直播场景中,榜单信息、活动公告或者广告推广通常需要以醒目的方式展示,但由于屏幕空间有限,一次只能显示一条内容。为了让用户能够持续关注这些信息,我们可以实现一个自动翻滚的广告条(或榜单条)&a…...

TensorFlow深度学习实战(7)——分类任务详解

TensorFlow深度学习实战(7)——分类任务详解 0. 前言1. 分类任务1.1 分类任务简介1.2 分类与回归的区别 2. 逻辑回归3. 使用 TensorFlow 实现逻辑回归小结系列链接 0. 前言 分类任务 (Classification Task) 是机器学习中的一种监督学习问题,…...

动态规划问题——青蛙跳台阶案例分析

问题描述: 一只青蛙要跳上n级台阶,它每次可以跳 1级或者2级。问:青蛙有多少种不同的跳法可以跳完这些台阶? 举个例子: 假设台阶数 n 3 ,我们来看看青蛙有多少种跳法。 可能的跳法: 1. 跳1级…...

element-ui使用el-table,保留字段前的空白

项目名称项目编号1、XXXXX1111111111111111111 1.1 XXXXX11111111111111222222222 如上表格中&#xff0c;实现项目名称字段1.1前空白的效果。 从JAVA返回的数据带有空白&#xff0c;即数据库中插入的数据带有空白。 原先写法&#xff1a; <el-table><el-tabl…...

kamailio中路由模块汇总

功能模块描述请求路由 (request_route)主要处理进入的SIP请求&#xff0c;包含初步检查、NAT检测、CANCEL请求处理、重传处理等。处理通过REQINIT、NATDETECT、RELAY等子模块的调用。CANCEL处理对CANCEL请求进行处理&#xff0c;包括更新对话状态并检查事务。如果事务检查通过&…...

如何使用 DeepSeek 搭建本地知识库

使用 DeepSeek 搭建本地知识库可以帮助您高效管理和检索本地文档、数据或知识资源。以下是详细的步骤指南&#xff1a; 1. 准备工作 (1) 安装 DeepSeek 确保您的系统已安装 Python 3.8 或更高版本。使用 pip 安装 DeepSeek&#xff1a; bash pip install deepseek (2) 准备…...

网络HTTP详细讲解

学习目标 什么是HTTPHTTP的请求和响应常见的HTTP状态码HTTP的安全性 什么是HTTP&#xff1f;HTTP的请求和响应&#xff0c;常见的HTTP状态码&#xff0c;HTTP的安全性 什么是HTTP HTTP&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09;是一种用…...

《Origin画百图》之边际分布曲线图

《Origin画百图》第六集——边际分布曲线图 入门操作可看《30秒&#xff0c;带你入门Origin》 边际分布曲线图&#xff0c;其中包含散点图形&#xff0c;而在图的边际有着分布曲线图。在比较数据以查看多个变量之间是否存在关系时非常有用。 1.数据准备&#xff1a;为多列XY数…...

【Milvus】向量数据库pymilvus使用教程

以下是根据 Milvus 官方文档整理的详细 PyMilvus 使用教程&#xff0c;基于 Milvus 2.5.x 版本&#xff1a; PyMilvus 使用教程 目录 安装与环境准备连接 Milvus 服务数据模型基础概念创建集合&#xff08;Collection&#xff09;插入数据创建索引向量搜索删除操作完整示例注…...

React 生命周期函数详解

React 组件在其生命周期中有多个阶段&#xff0c;每个阶段都有特定的生命周期函数&#xff08;Lifecycle Methods&#xff09;。这些函数允许你在组件的不同阶段执行特定的操作。以下是 React 组件生命周期的主要阶段及其对应的生命周期函数&#xff0c;并结合了 React 16.3 的…...

第 26 场 蓝桥入门赛

2.对联【算法赛】 - 蓝桥云课 问题描述 大年三十&#xff0c;小蓝和爷爷一起贴对联。爷爷拿出了两副对联&#xff0c;每副对联都由 N 个“福”字组成&#xff0c;每个“福”字要么是正的&#xff08;用 1 表示&#xff09;&#xff0c;要么是倒的&#xff08;用 0 表示&#…...

组合(力扣77)

从这道题开始&#xff0c;我们正式进入回溯算法的学习。之前在二叉树中只是接触到了一丢丢&#xff0c;而这里我们将使用回溯算法解决很多经典问题。 那么这道题是如何使用回溯算法的呢&#xff1f;在讲回溯之前&#xff0c;先说明一下此题是如何递归的。毕竟回溯递归不分家&a…...

网络工程师 (22)网络协议

前言 网络协议是计算机网络中进行数据交换而建立的规则、标准或约定的集合&#xff0c;它规定了通信时信息必须采用的格式和这些格式的意义。 一、基本要素 语法&#xff1a;规定信息格式&#xff0c;包括数据及控制信息的格式、编码及信号电平等。这是协议的基础&#xff0c;确…...

Linux之文件IO前世今生

在 Linux之文件系统前世今生&#xff08;一&#xff09; VFS中&#xff0c;我们提到了文件的读写&#xff0c;并给出了简要的读写示意图&#xff0c;本文将分析文件I/O的细节。 一、Buffered I/O&#xff08;缓存I/O&#xff09;& Directed I/O&#xff08;直接I/O&#…...

如何在Windows中配置MySQL?

MySQL是一个广泛使用的开源关系型数据库管理系统&#xff0c;它支持多种操作系统平台&#xff0c;其中包括Windows。无论是开发者进行本地开发&#xff0c;还是管理员为应用程序配置数据库&#xff0c;MySQL都是一个非常流行的选择。本篇文章将详细介绍如何在Windows操作系统中…...

Kafka 入门与实战

一、Kafka 基础 1.1 创建topic kafka-topics.bat --bootstrap-server localhost:9092 --topic test --create 1.2 查看消费者偏移量位置 kafka-consumer-groups.bat --bootstrap-server localhost:9092 --describe --group test 1.3 消息的生产与发送 #生产者 kafka-cons…...

数学知识学习1

1、数论 1质数判定 i<n/i优化O(sqrt(n)) bool is_prime(int n){if(n<2)return false;for(int i2;i<n/i;i){if(n%i0)return false;} true; } 分解质因数 i<n/i优化O(sqrt(n)) // 定义一个函数 divide&#xff0c;接收一个整数 n 作为参数&#xff0c;用于分解质…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

Qt 事件处理中 return 的深入解析

Qt 事件处理中 return 的深入解析 在 Qt 事件处理中&#xff0c;return 语句的使用是另一个关键概念&#xff0c;它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别&#xff1a;不同层级的事件处理 方…...

WPF八大法则:告别模态窗口卡顿

⚙️ 核心问题&#xff1a;阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程&#xff0c;导致后续逻辑无法执行&#xff1a; var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题&#xff1a…...

协议转换利器,profinet转ethercat网关的两大派系,各有千秋

随着工业以太网的发展&#xff0c;其高效、便捷、协议开放、易于冗余等诸多优点&#xff0c;被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口&#xff0c;具有实时性、开放性&#xff0c;使用TCP/IP和IT标准&#xff0c;符合基于工业以太网的…...