为何我们要将测试左移?回到过去的美好时光

以下为作者观点:

为何我们将测试左移?在传统的开发周期中,测试通常在功能完成后甚至在开发阶段结束时进行。左移测试通过从开发过程开始到整个开发过程整合测试活动来挑战这一点。

让我们首先讨论一下为什么我们选择“左移”,因为这不是解决软件开发生命周期(SDLC)扩展问题的唯一方法。

一个古老的故事:无法扩展的 SDLC

在我们决定将更多的测试转移到流程的开发之前,让我们首先讨论一下领导者为什么会做出这个决定。

有一种对“左移”的愤世嫉俗的解读是“让人们做更多的工作,但支付相同的报酬”。压力重重的开发团队可能会反对在他们的工作清单上增加更多关注点的想法。但将测试左移的真正动机是对软件发布周期陷入僵局的沮丧,开发人员被迫进行上下文切换,永远无法进入流动状态,以及缓慢的开发速度。

一家测试流程不完善的扩张型公司

想象一下,你所在的公司已经从初创阶段发展到现在。你都记得曾经有一段时间,功能会在几周甚至几天内发布,但那样的日子已经一去不复返了。现在,多个团队正在尝试同时发布分支,而 QA 则在发布到生产之前努力发现问题,压力很大。

更糟糕的是,微服务架构的复杂性意味着开发人员无法在将代码交付 QA 之前有效地进行集成测试。关于改进合同测试的讨论很多,但同样,事情正在迅速发展,编写清晰的服务内合同并进行相应的重构估计需要几个月的时间。与此同时,开发人员被困在编写单元测试和为外部服务(如支付提供商)甚至其他团队的服务创建粗略的模拟上。当代码部署到预发布环境(如暂存)时,这会导致更多意外。

选择将测试转移到左侧

因此,我们的工程主管面临着一个选择:如何提高开发速度,同时减少生产过程中的错误?你有几个选择,其一:

增加QA团队,并扩展其测试/登台环境的资源,以便他们能够更快地进行更多测试。

这不是一个可扩展性极强的选择。团队已经偶尔会就谁可以部署到临时环境以及需要保留环境多长时间发生冲突。此外,即使有更多的 QA 工程师,你仍然需要让开发人员编写代码、运行有限的测试、推送,然后等待人工回复检测到的问题。结果是一个“外循环”反馈周期,开发人员要么必须暂停所有工作,直到他们得到 QA 反馈,要么在两个分支之间切换上下文,因为他们试图开发下一个功能,同时切换回来并发现他们推送的最后一个内容存在问题。即使 QA 团队的预算无限,这也绝对无法扩展到数百名开发人员。

增加QA并不是向左移动的替代方案

随着工程团队将测试工作向左转移,QA 在测试的战略愿景和架构决策中发挥着重要作用。但仅仅扩大 QA 团队并不能完美地实现确保更多版本成功的目标。这是为什么呢?

由于开发人员在合并代码之前只进行基本测试,因此 QA 很可能会发现琐碎的集成错误。

属性列表是数组还是对象?定位器是否从 0 开始索引?当 QA 测试这些小的集成错误时,它们可能会阻止发布。现在 QA 需要记录并反馈问题,而不是由开发人员自己发现代码中的小问题并快速修复错误。更糟糕的是,QA 不知道该与谁沟通:

QA 团队通常会编写端到端测试来测试业务/用户流程。如果任何测试失败,则不清楚该将问题归咎于谁,因为流程可能会涉及多个前端和后端服务。

作为开发人员,你会更新user_state_controller,但作为 QA,你可能正在测试诸如“用户能够更新其登录信息”之类的内容。这并不是不匹配,因为团队有不同的目标。但是,当 QA 在用户流程中发现错误时,他们不一定知道开发部门中谁是最适合沟通的人。这会导致进一步的延迟。

运行测试的节奏不明确。QA 应该每天运行测试吗?每次合并拉取请求后都运行测试吗?由于测试套件可能很大,因此每次提交都运行整个套件是不切实际的。

如果没有一个工程师团队来确定要运行的最佳测试集,QA 最终会以较低的节奏运行测试,并且只能在大型组中发现问题。

当测试在 QA 阶段失败时,开发人员会经历非常缓慢的调试周期。当有多个提交一起测试时,不清楚哪一个是有问题的提交。

我认为这是一个值得进一步讨论的基本问题:由 QA 团队运行大型测试套件是一种确保一切都按设计端到端运行的有吸引力的方法。但高保真测试也需要高频率。否则,我们将失去源代码控制的基本好处:如果不对每个提交运行测试,我们将无法轻松回滚和修复。这是“左移”测试回归旧标准的众多方式之一:开发人员应该能够立即判断他们当前的一组更改是否破坏了某些东西。第一次依靠 QA 来发现问题意味着你要从一长串失败中挑选出哪些是由哪个提交引起的。

这个过程变得更像瀑布模型,其中开发和 QA 是截然不同的连续阶段。这与具有明显优势的敏捷方法相反。

再次强调,我们谈论的是 2005 年编码和交付标准的倒退。瀑布模型使得真正的持续交付生产变得不可能。

这里的一个基本思想是,QA 作为错误的唯一发现者会削弱工程师的权力。

图片

增强工程师的能力

即使领导层不担心速度影响,你也可以想象,大多数反馈来自外循环的设置对工程师来说可能是令人沮丧和痛苦的。抛开我自己的自尊,我不想推广我没有信心的代码。这给我们带来了第二个选择:

将测试左移,让开发人员在编写代码的几分钟内就能运行集成测试甚至端到端测试,并确保在无法 95% 确定一切正常的情况下,不会对预发布版本进行任何质量保证。

在这种情况下,作为一名开发人员,打破常规又会变得有趣:我们正在试验,看看其他服务可以支持什么,并且只推动我们知道有效的方法。QA 仍然在这种设计中扮演着重要角色,但他们的角色不再是手动测试和发现单个错误。相反,QA 团队成为定义自动化策略、选择测试框架和让开发人员对自己的代码更有信心的战略领导者。由于每天都有测试可供每位工程师使用,因此将编写和运行更多的测试,但他们的反馈会通过内部反馈循环直接传递给开发人员。

将测试向左移动意味着回归更古老、更完善的系统

在最近的一次平台工程精益咖啡小组讨论中,一些参与者提到了一个想法,让我印象深刻:

“微服务有很多优点,但微服务的测试难度要大得多。这个问题非常严重,以至于许多团队看不到微服务的真正好处。”

我之前写过关于这个的文章,但总结一下:在单体时代,通常有一种方法可以在笔记本电脑上以最小的阻力运行整个系统或复制品。这意味着重要的测试可以在开发过程中进行。

所以,实际上,当我们谈论将测试向左移动时,我们谈论的是将其向后移动。我们仍然有 QA 团队的作用,但我们希望将第一轮测试重新交到编写该功能的工程师手中。

质量保证仍然发挥重要作用

有理由问,将测试工作向左转移是否意味着 QA 工程师将失业。

这完全是错的。当团队中的技术专家由于设计变更而将部分职责转移时,结果是这些专家最终会做更多而不是更少的工作,并且对他们所能实现的目标抱有更高的期望。

“这里还有谁配置电子邮件服务器?”

几年前,我听了 Kelsey Hightower 的一次演讲,他提倡转向无服务器和公有云托管工具,而不是直接管理虚拟机。听众中有人问:“你想让系统管理员丢掉工作吗?”

Kelsey 的回答很有见地。“这个房间里的每个人,如果你曾经配置过电子邮件服务器、其证书和身份验证,请举手。”

大约有 80% 的人举手。

“如果你仍在维护电子邮件服务器的配置,请举手。”

没有人举手。我在这里转述一下,但这是他接下来所说的话的关键:

“你们所有人都拥有丰富的系统管理经验。当一项服务出现并消除部分工作量时,正常结果并不是你们的工作量减少,而是我们期望更多。现在,我们希望虚拟机能够随着配置更改而自动出现,而不是要求启动新服务器并等待至少一天才能部署它。不要让我开始自动集群扩展。”

观点很正确:当一支合格团队的工作被取消时,结果是更高的期望,而不是工作量减少。被取消的是那些随意的繁重工作,而不是人。

想想过去几年许多系统管理员的遭遇:他们曾经负责手动设置和管理数十台服务器,而现在,同样的人负责编排数百或数千个容器。虽然没有人再配置电子邮件服务器,但我们对这些人的期望却只增不减。

质量保证作为战略领导者

将测试左移的目标不是要取消 QA,而是让 QA 成为战略领导者,帮助标准化测试文化,维护自动化以使事情顺利进行,并选择测试框架和标准以便共享结果。想象一下一个可以做到以下事情的 QA 团队:

  • 帮助选择并更新应用程序不同领域的测试框架;

  • 定义测试策略以及哪些新功能需要新测试;

  • 监控“垃圾”,例如长期失败的测试或反馈不佳的测试,并努力解决技术债务,从而改善每个开发人员的体验;

  • 添加已知边缘情况、安全风险和隐私故障的测试覆盖率,以确保代码保持合规。

由于没有不断的合并失败,QA 可以专注于发现自动化测试可能遗漏的突发行为和回归问题。QA 还可以花时间了解开发团队最需要的测试类型,定义使测试编写花费最少时间的实践,并优化测试运行器以减少测试执行时间,从而加快开发人员的内部反馈循环。

嵌入式QA:始终值得思考

在我的第一份技术工作中,每个语言团队都有一名QA专家和一名文档专家。我记得这一点,因为唯一的例外是Ruby和Java。Ruby没有QA,因为“Rails 不需要 QA。”Java 没有技术作家,因为“Java 是自文档化的。”我们真是太傻了!但在整个团队中嵌入 QA 的基本想法仍然很强大。

多年前,QA 专家使用了一些自动化技术,但同时也是手动操作产品以查找故障的大师。回想起来,我们低估了所有语言中 QA 和文档的必要性。Ruby on Rails 不需要 QA 或 Java 是自文档化的信念现在看来很幼稚。

如今,考虑嵌入式 QA 甚至更加重要,特别是软件开发测试工程师 (SDET)。这个想法是将 SDET 嵌入到可以拥有自动化的产品团队中。SDET 专注于编写自动化测试,通过嵌入到每个产品团队中,他们也具有领域意识并可以编写有意义的测试。

结论:向左移动是回到过去的美好时光

左移的动机主要源于希望提高开发速度并减少生产中出现错误的频率。

对于正在成长的公司来说,系统的复杂性(尤其是微服务)又增加了一层挑战。开发人员编写代码并依靠 QA 来发现问题的传统方法无法随着公司的发展而有效扩展。

测试左移选项提供了一种解决方案,它使开发人员能够在开发过程的早期执行更全面的测试(包括集成测试甚至端到端测试)。这一变化恢复了开发人员的主人翁意识和满足感,因为他们可以立即验证自己的工作并更有信心地提交拉取请求。

这种转变不会削弱 QA 的作用,而是会改变它。QA 更多地是领导战略、定义和维护自动化框架以及确保整个开发过程的质量。将测试向左移动不仅仅是回归更高效的开发实践,让人回想起以前系统更简单、可以更直接测试的时代,而且这是对现代软件开发复杂性的必要适应。这一转变旨在提高软件发布的速度和质量,这对于希望在不影响质量的情况下有效扩展的公司来说至关重要

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

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

软件测试面试文档

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

 

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java项目之基于智能推荐的卫生健康系统(springboot)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的基于智能推荐的卫生健康系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 基于智能推荐…

性能测试详解

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 一、 性能测试术语解释 1. 响应时间 响应时间即从应用系统发出请求开始,到客户端接收到最后一个字节数据为止所消耗的时间。响应时间按软件的特点…

深度学习基础—循环神经网络(RNN)

引言 从本系列博客开始,我们将来一起学习一下NLP领域的相关基础知识,NLP领域重要的模型是RNN,在此之前,先来了解一些符号的含义。 1.符号定义 (1)符号定义 假设建立一个能够自动识别句中人名位置的序列模型…

【工具变量】自由贸易试验区试点DID数据集(2003-2023年)

数据简介:自由贸易试验区(Free Trade Zone,简称FTZ)是中国ZF在新形势下为了推进GG开放、提高开放型经济水平而采取的重要战略举措。自贸试验区在一国的部分领土内运入任何货物,被认为在关境以外,免于实施惯…

Flask

创建项目 Pycharm专业版 默认文件 Pycharm社区版没有自动创建这几个文件,手动创建即可。 运行 常规功能 debug模式 修改内容自动更新,否则需要重新启动运行项目才生效。 修改host 通网络内其他人可以通过我得ip访问该服务。 修改端口号 空格分隔…

[Wireshark] 使用Wireshark抓包https数据包并显示为明文、配置SSLKEYLOGFILE变量(附下载链接)

前言 wireshark安装包 链接:https://pan.quark.cn/s/febb28f57c01 提取码:fUCQ 链接失效(可能会被官方和谐)可评论或私信我重发 chrome与firefox在访问https网站的时候会将密钥写入这个环境变量SSLKEYLOGFILE中,在wir…

野火鲁班猫4 (RK3588)系统配置

烧写系统 参考文档 : https://doc.embedfire.com/linux/rk3588/quick_start/zh/latest/quick_start/apt/apt.html 先装第一个软件,然后打开第二个软件。点固件,选择Ubuntu最新的固件,这边目前是20240911这个。 我这边直接烧写到…

Servlet 3.0 新特性全解

文章目录 Servlet3.0新特性全解Servlet 3.0 新增特性Servlet3.0的注解Servlet3.0的Web模块支持servlet3.0提供的异步处理提供异步原因实现异步原理配置servlet类成为异步的servlet类具体实现异步监听器改进的ServletAPI(上传文件) Servlet3.0新特性全解 tomcat 7以上的版本都支…

[OceanBase-不止于记录]:揭秘双引擎战略,共探AI时代数据架构未来

前言 又到了一年一度大家最爱的探会文章,非常荣幸收到OceanBase官方的邀请参加2024 OceanBase 年度发布会,作为一个经常参加线下探会的博主,每一次体验都有所不同,每一次新技术的突破都让人感到无比兴奋。同时,作为数…

【论文复现】短期电力负荷

作者主页: 七七的个人主页 文章收录专栏: 论文复现 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 短期电力负荷 论文发表问题背景一. 基本问题二. 本论文发现的问题 对于论文发现问题的解决方案:复现…

Java-I/O框架:FileReader类使用、FileWriter类的使用、字符流复制文件

视频链接:16.19 字符流复制文件_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Tz4y1X7H7?spm_id_from333.788.videopod.episodes&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5&p19 1.FileReader类(文件字符输出流)使用 pac…

快速生成高质量提示词,Image to Prompt 更高效

抖知书老师推荐: 随着 AI 技术的不断发展,视觉信息与语言信息之间的转换变得越来越便捷。在如今的数字化生活中,图像与文字的交互需求愈发旺盛,很多人都希望能轻松将图像内容直接转化为文本描述。今天我们来推荐一款实用的 AI 工…

网安秋招面试

《Java代码审计》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484219&idx1&sn73564e316a4c9794019f15dd6b3ba9f6&chksmc0e47a67f793f371e9f6a4fbc06e7929cb1480b7320fae34c32563307df3a28aca49d1a4addd&scene21#wechat_redirect 《Web安全》h…

Python小游戏14——雷霆战机

首先,你需要确保安装了Pygame库。如果你还没有安装,可以使用pip来安装: bash pip install pygame 代码如下: python import pygame import sys import random # 初始化Pygame pygame.init() # 设置屏幕大小 screen_width 800 scr…

编程之路:蓝桥杯备赛指南

文章目录 一、蓝桥杯的起源与发展二、比赛的目的与意义三、比赛内容与形式四、比赛前的准备五、获奖与激励六、蓝桥杯的影响力七、蓝桥杯比赛注意事项详解使用Dev-C的注意事项 一、蓝桥杯的起源与发展 蓝桥杯全国软件和信息技术专业人才大赛,简称蓝桥杯&#xff0c…

Python3 No module named ‘pymysql‘

在使用python3链接数据库时,总是提示 No module named pymysql 错误,执行pip3 install pymysql后,提示安装成功,但是执行py文件还是提示此错误。 使用python2 执行时,链接数据库正确,百思不得其解 先使用…

SpringBoot调用SOAP接口步骤详解。

1、引入依赖 <dependency><groupId>org.springframework.ws</groupId><artifactId>spring-ws-core</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-oxm</ar…

移远通信闪耀2024香港秋灯展,以丰富的Matter产品及方案推动智能家居产业发展

10月27-30日&#xff0c;2024香港国际秋季灯饰展在香港会议展览中心盛大开展。 作为全球领先的物联网整体解决方案供应商&#xff0c;移远通信再次亮相&#xff0c;并重点展示了旗下支持Matter协议以及亚马逊ACK ( Alexa Connect Kit ) SDK for Matter方案的Wi-Fi模组、低功耗蓝…

【万户软件-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 1. 暴力破解密码&#xff0c;造成用户信息泄露 2. 短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉 3. 带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造…

107. 阴影范围.shadow.camera

上篇文章2.平行光阴影计算讲解过&#xff0c;通过光源的阴影相机属性.shadow.camera,来控制阴影的渲染范围&#xff0c;本节课继续.shadow.camera的讲解。 平行光阴影相机属性.shadow.camera回顾 平行光DirectionalLight的.shadow属性是平行光阴影对象DirectionalLightShadow…