回归测试?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

高优先级:它涵盖了应用程序的关键和核心功能、最近的代码修改以及很有可能出现错误的组件。
中等优先级:它涉及现场验证和其他负面测试场景等方面。
低优先级:它包括其他功能,如用户界面区域,如品牌徽标、按钮文本等。
7. 回归测试示例
以下是 Apple 网站所需的回归测试示例。该公司通过其网站产生数十亿美元的年收入。因此,他们的网站必须始终正常运行——功能、可靠且性能良好。

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

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

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

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

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

     视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。  

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2023年全国职业院校技能大赛(高职组)“云计算应用”赛项赛卷⑧

2023年全国职业院校技能大赛(高职组) “云计算应用”赛项赛卷8 目录 需要竞赛软件包环境以及备赛资源可私信博主!!! 2023年全国职业院校技能大赛(高职组) “云计算应用”赛项赛卷8 模块一 …

git撤销提交到本地的commit

有些时候,当我们提交代码到本地后,突然发现因为某些原因需要撤销提交本地的代码。 就比如我,因为代码写错了分支,已经提交到本地了,而我需要取消,并且还要把代码搞得另外的分支上。 提交前: …

RabbitMQ(十)队列的声明方式

目录 1.编程式声明补充:RabbitTemplate 和 AmqpAdmin 的区别 2.声明式声明补充:new Queue() 和 QueueBuilder.durable(queueName).build() 的区别 背景: 在学习 RabbitMQ 的使用时, 经常会遇到不同的队列声明方式,有的…

行为型设计模式——责任链模式

责任链模式 在现实生活中,常常会出现这样的事例:一个请求有多个对象可以处理,但每个对象的处理条件或权限不同。例如,公司员工请假,可批假的领导有部门负责人、副总经理、总经理等,但每个领导能批准的天数…

怎么用 Excel 做出专业的 project 甘特图?10个步骤和60个模板

使用Excel来创建Project甘特图的步骤包括:1、基本设置和布局调整、2、数据输入和时间线配置、3、任务依赖性和进度跟踪、4、视觉效果优化、5、数据更新和维护、6、模板保存和共享。尤其突出基本设置和布局调整,它是构建一个清晰、有效的甘特图的基础。 甘…

适用于 Windows 的 12 个最佳免费磁盘分区管理器软件

分区是与其他部分分开的硬盘驱动器部分。它使您能够将硬盘划分为不同的逻辑部分。分区软件是一种工具,可帮助您执行基本选项,例如创建、调整大小和删除物理磁盘的分区。许多此类程序允许您更改磁盘片的标签以便于识别数据。 适用于 Windows 的 12 个最佳…

编译工具 Cmake 教程——翻译自外网

Make Tutorial hello:echo "Hello, World"Makefile Syntax targets: prerequisitescommandcommandcommand目标是文件名,以空格分隔。通常,每条规则只有一个。 这些命令是通常用于创建目标的一系列步骤。这些需要以制表符开头,而不…

RLHF与LLM训练的碰撞:寻找最佳实践之路!

了解更多公众号:芝士AI吃鱼 在讨论大型语言模型(LLM)时,无论是在研究新闻还是教程中,经常提到一个称为“带有人类反馈的强化学习”(RLHF)的过程。由于RLHF能够将人类偏好纳入优化过程&#xff0…

K8s Pod详解

1.Pod结构 每个Pod中都可以包含一个或者多个容器,这些容器可以分为两类: 用户程序所在的容器,数量可多可少 Pause容器,这是每个Pod都会有的一个根容器,它的作用有两个: 可以以它为依据,评估整个…

Redis 发布订阅

目录 1.Redis Unsubscribe 命令 - 指退订给定的频道。简介语法可用版本: > 2.0.0返回值: 这个命令在不同的客户端中有不同的表现。 示例 2.Redis Subscribe 命令 - 订阅给定的一个或多个频道的信息。简介语法可用版本: > 2.0.0返回值: 接收到的信息 示例 3.Redis Pubsub …

功能自动化测试流程

1概述 本流程是描述软件功能自动化测试过程中的步骤、内容与方法,明确各阶段的职责、活动与产出物。 2流程活动图 3活动说明 3.1测试计划(可选) 与以前的测试计划过程一致,只是在原来的测试计划中,添加对项目实施自动…

Vue+element-china-area-data实现省市区三级联动

安装依赖 npm install element-china-area-data -S cnpm install element-china-area-data -S 引用 import { provinceAndCityData, regionData, provinceAndCityDataPlus, regionDataPlus, CodeToText, TextToCode } from element-china-area-data; provinceAnd…

父类,父类的分类、子类 同时重写方法,调用问题

做一个猜想,当父类、父类的分类、子类 都写了同一个方法,那么在调用的时候会优先调用哪个方法呢?我们可以先写一个简单的demo implementation Person (void)test {NSLog("%",self.class); }end然后是Person的分类 #import "…

springBoot容器功能

一、添加组件 1、Configuration 1.1基本使用 新建一个MyConfig类 , 演示Configuration Bean的作用 , 即相当于spring中的beanx.xml, Bean 就是bean标签 此方法,默认是单实例, 即获取多少次都是同一个对象 自定义名字&#xff0…

核酸汇·2024第三届中国核酸药物与新型疫苗产业大会将于5月上海召开

近年来,全球上市的核酸药物数量逐年递增,核酸药物也逐渐成为生物医药投资的重点以及医药企业研发的热点。作为一种具有颠覆性技术的药物,小核酸药物具备多种优势,在抗击传染病、治疗罕见病和慢性病等领域具有巨大的发展潜力, 目前…

安防视频监控系统EasyCVR设备分组中在线/离线数量统计的开发与实现

安防视频监控EasyCVR系统具备较强的兼容性,它可以支持国标GB28181、RTSP/Onvif、RTMP,以及厂家的私有协议与SDK,如:海康ehome、海康sdk、大华sdk、宇视sdk、华为sdk、萤石云sdk、乐橙sdk等。EasyCVR平台可覆盖多类型的设备接入&am…

数据加工:从原始数据到有价值的信息

在当今数字化的时代,数据已经成为了企业和组织最宝贵的资产之一。然而,原始数据往往需要经过加工和处理,才能转化为有价值的信息和知识。数据加工是指将原始数据进行处理和分析,以提取有用的信息和知识的过程。数据加工的重要性不…

YOLOv8-Seg改进:轻量化改进 | MobileNetV3,轻量级骨架首选

🚀🚀🚀本文改进:MobileNetV3的创新点包括:使用自适应瓶颈宽度、借鉴SENet中的Squeeze-and-Excitation机制、引入h-swish激活函数等。 🚀🚀🚀YOLOv8-seg创新专栏:http://t.csdnimg.cn/KLSdv 学姐带你学习YOLOv8,从入门到创新,轻轻松松搞定科研; 1)手把手教…

base64与BytesIO图片进行编码、解码;api调用

base64与BytesIO简单介绍 io.BytesIO 和 Base64 编码都是用于在内存中处理二进制数据的方法,但它们的目的和使用场景有所不同。 1) io.BytesIO io.BytesIO 是 Python io 库中的一个类,它提供了一个在内存中处理二进制数据的接口&#xff0…

使用srs_librtmp实现RTMP推流

1、背景 由于项目有需求在一个现有的产品上增加RTMP推流的功能,目前只推视频流。 2、方案选择 由于是在现有的产品上新增功能,那么为了减少总的成本,故选择只动应用软件的来实现需求。 现有的产品中的第三方库比较有限,连个ffmp…