烂大街的测试左移和右移!

news2024/12/28 12:10:20

01、测试左移与右移的定义

通俗的讲:左移是往开发阶段移,右移是往发布之后移。

正常测试:提测后的测试工作——到——发布验证完成阶段。

  • 测试左移:提测之前的测试。
    如:代码单元测试,代码质量检测,代码接口持续测试 等。
  • 测试右移:发布验证之后的测试。
    如:灰度发布测试的问题,生产服务监测处理,用户反馈问题处理,对客户的技术支持等。

1、什么是测试左移?

测试左移的思想本质是越早的发现不合理的地方,出问题的几率就越低。测试左移的原则支持测试团队在软件开发周期早期和所有干系人合作,因此他们能清晰地理解需求以及设计测试用例去帮助软件“快速失败”,促使团队更早的修改所有的bug。

参与和理解会使测试人员获取产品完整的知识,彻底想清楚各种场景,根据软件行为设计实时的场景,这些都会帮助团队在编码完成之前识别出一些缺陷。

2、什么是测试右移?

测试右移是产品上线了之后也可以进行一些测试活动。当然在生产环境直接做测试是不推荐的,但是我们可以在生产环境做监控,监控线上性能和可用率,一旦线上发生任何问题,尽快反应,提前反应,给用户良好的体验。尽量做到技术人员要比业务方先发现问题。

测试右移其实还可以理解为如果线上发生任何问题,我们有没有能力第一时间发现问题并解决问题,并保证线上数据的一致性或尽可能少的影响线上用户,以及并且实时获取用户反馈

测试左移:本质上是借助工具和测试手段更早地发现问题和预防问题。

  • 需求:对需求、架构和设计模型的测试;
  • 开发:着重增加对单元、组件和服务层的测试;
  • 持续测试:自动化测试。

测试右移:对测试同学来说,版本上线后需要持续关注线上监控和预警,及时发现问题并跟进解决,将影响范围降到最低。

  • 灰度发布:新版本线上测试;
  • 监控:合理的性能监测、数据监控和预警机制;
  • 用户反馈:线上问题处理、跟踪机制。

02、测试左移内容

1、PRD评审
这一点相信很多测试同学都有参与过,需求的PRD评审,但是很多时候可能只是局限于听需求,而缺少了分析or测试需求的部分。测试一方面是熟悉需求的内容,另一方面也是找出需求的问题,确认需求的合理性,判断需求是否全面、正确,上下文具备不二性。

2、研发设计评审
这一点当我们测试在做测试方案、用例设计的时候,研发也在做研发设计,做好了之后通常会有研发设计的评审。测试在这个阶段是非常有必要参与研发设计的评审的。

避免纯粹从黑盒的角度去设计测试用例,导致有一些个别情况下的缺失测试用例覆盖的情况。当然,如果测试具备走读研发代码的能力,参与研发的设计评审,对于提升测试用例覆盖率,会更加的事半功倍

3、单元测试

这一点现在应该只有一些大厂会执行得好一些,很多中小公司都没有严格要求研发必须做单元测试。一方面是中小公司流程上要求普遍不会那么严格,另一方面也是需求开发时间越来越短,导致研发们普遍都没有很多的时间去执行单元测试的工作,为保障按时交货,都直接开发完成就扔给测试去做相应的测试。

在这一点上我依然坚持研发为主、测试为辅的思路。测试辅助研发更好的完成单元测试。为什么不是测试直接去做单元测试呢?因为这一方面需要测试具备白盒测试

4、模块集成联调测试
这一点我们测试可以做一个mock平台或者mock服务提供给研发,帮助研发可以快速mock接口内容,提高联调测试的效率。

5、代码规范检查
这一点也是提高研发提测质量的手段,可以通过各类代码检查工具来规范提高研发的代码质量。比如Java系比较流行的SonarQube, 可以结合进CICD的流程,作为代码提测的必查项。

6、代码复杂度检查
这一点也一样,只是很多公司目前不太在意这一点。其实越复杂的代码,也就意味着其存在bug的可能性越高。同样代码越复杂,也意味着编码质量可能不高或者后期代码维护成本的升高。SonarQube目前也能扫描代码的复杂度,编译器Idea的也有类似的插件提供该项检查,因此这一点也可以列为流程中的必查项。

7、自动化测试
这一点就是测试最熟悉的了,自动化测试,目前主要包括UI自动化和接口自动化,实现的方式也是多种多样,编写脚本的方式、录制回放的方式,用平台、不用平台都OK。重点在于选择适合自身组织的方式,以及如何自动化是否真的提升了测试的效率,避免为了自动化而自动化。

03、测试右移内容

1、灰度发布

又称为“金丝雀发布”,本质就是另外构造一套环境,先把代码发布到这套环境中,只放少量指定的流量进来试用一段时间,通常为试用一周或两周,达到以实际的线上流量检测代码是否存在问题的目的,减少上线后大量流量运行下出问题的概率。引入这样的一个过程,那么测试就会先在灰度环境上做验证,也是目前大厂都必有的一个环节。

2、线上监控
项目上线后仍然需要关注服务的运行情况,以便在出现系统问题时能够快速做出反应。这一点主要是测试可以右移参与线上环境监控工具的部署,让整个线上的监控体系更加完善。

即使部署的工作都是运维在做,监控体系已经非常完善,测试也可以接入告警,当业务接口出错或者调用量超过阈值时,测试可以接收到对应的告警信息,和研发一起定位解决问题。

3、用户反馈
测试参与到线上用户反馈的问题中去,帮助复现和定位各类线上用户反馈的问题,既可以解决问题,也可以更多的了解用户实际使用过程中的问题和需求,帮助后续更好的做好需求评审和测试覆盖工作。

4、混沌工程
类似于“故障演练”,通过构造各类异常,验证系统在碰到这些异常时是否有做好对应的监控告警、预案处理,针对性地进行加固,防范,从而避免故障发生时所带来的严重后果。通过对各类异常提前做好监控告警和预案处理,增强系统的健壮性,增强分布式系统的信心。目前已经成为各大厂测试右移

5、A/B测试
ABTest 实验,其实本质上就是把平台的流量均匀分为几个组,每个组添加不同的策略,然后根据这几个组的用户数据指标,例如:留存、人均观看时长、基础互动率等等核心指标,最终选择一个最好的组上线。常用于验证不同的方案设计、算法设计的效果。

04、我们可以做什么

1,测试左移,我们可以做什么

  • 在需求评审时不只是了解需求,更是要去评估需求的质量,分析需求的合理性以及完整性。
  • 代码扫描,代码质量检查,进行单元测试,测试驱动开发,这些都是在开发阶段就引入测试的手段。
  • 测试人员尽早介入测试,参加需求分析,评审。
  • 持续测试:自动化测试。

对于测试左移其实我们还有很多东西要做,就好像一开始说到的都是为产品质量服务,那么在研发流程中的任何角色、人员都要为质量服务。

有哪些活动可以提高质量上限(举例)?

  • 健康的项目流程(合理并且严格遵守的项目流程)
  • 合理的需求分析(评估需求的质量,分析需求的合理性以及完整性)
  • 出色的系统架构
  • 完整的系统设计(评估设计的质量,分析需求的合理性以及完整性)
  • 充分利用静态代码扫描
  • 进行研发标准的定义
  • 更早的测试分析(先于开发完成需求的分析,做好各种评审的准备)
  • 尽早的测试执行(提早参与测试执行,在集成前就发现一些问题)

有哪些活动可以提高质量下限(举例)?

  • 健康的测试流程
  • 优秀的测试用例
  • 合理的测试计划
  • 合适的自动化
  • 适当的探索式测试
  • 开发自测(TDD、BDD,测试提供更好的用例、技术支持)
  • 团队质量意识的培养

对于测试左移,也需要一个重要的基础,工程习惯,SDLC成熟度,测试分层,持续集成,链路上延展发布的节奏,纵深上需要贴合业务的专精领域的深度探索,代码扫描(规范,问题,安全,异常等),CR, 代码提交行为分析,test double(mock , fake, stub,dummy), UT, 自动化,验收测试等。左移需要工程效率具备不亚于研发的代码能力

因此对于测试左移,笔者认为可以围绕质量服务思想展开,参与人员则不仅仅局限于测试人员当然实践起来会存在一些问题,例如笔者团队实践起来,就出现了

  • 测试要求提供概要设计、接口文档!!!
  • 测试要求单元测试必须通过!!!
  • 测试干预需求设计!!!

很多人都认为是测试在要求完成一些没必要的事情,测试在干预我的工作。其实问题的矛盾点在于前面说过的一句话:

不管是测试左移还是测试右移,都是为产品质量服务。不要把提测认为是测试活动的开始,上线是测试活动的结束,更不要认为质量只是测试同学需要关注的。对于测试左移的落实,最重要的就是全员质量服务意识的培养

2,测试右移,我们可以做什么

  • 测试上线及时验证,有问题,开发快速回滚代码
  • 上线后开发监控服务日志,日志报错,代码回滚
  • 监控服务流量,出现流量报警快速定位问题
  • 闭环的线上问题反馈-检查-解决-更新流程
  • 更便捷的日志查看、回传服务
  • 丰富有效的log,便于问题的快速定位
  • 丰富的监控指标(例如业务异常点指标)
  • 成本监控(例如短信发送等)
  • 关键指标每日监控(服务器指标)
  • 生产数据监控(警报)(通过sql语句实现生产数据监控,例如是否有多个订单号一样的订单出现等)
  • 用户反馈问题及时跟进,针对缺陷,通知开发尽快解决,针对体验,通知产品打磨细节。

因此对于测试右移,我认为可以围绕问题反馈、发现、定位、监控展开,参与人员则不仅仅局限于运维人员当然一样的,实践起来也是存在问题,除了技术问题之外,还有例如:

  • 线上监控搭建后无人使用
  • 线上问题反馈机制,业务人员不配合等等
  • 监控指标不合理,反而被认为增加服务器负载

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

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你! 

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

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

相关文章

家庭用洗地机哪个最好?家用洗地机选购

家里日常打扫,维持地面的清洁,清洁干湿垃圾这时候必不可缺的就是洗地机了,由于近年来洗地机行业的热度高涨,涌现了很多洗地机品牌,这也让消费者在挑选的时候无从下手,今天笔者就给大家讲讲洗地机挑选需要主…

数据结构笔记——查找、排序(王道408)

文章目录 查找基本概念线性表查找顺序查找折半查找(二分)分块查找 树查找二叉排序树(BST)平衡二叉树(AVL)的插入平衡化复杂度分析 平衡二叉树的删除 红黑树红黑树的定义和性质红黑树定义红黑树性质 红黑树的…

VS2022安装时碰到VsWebProtocolSelector.Msi包安装错误,2330code解决方法

未能安装包“Microsoft.VisualStudio.VsWebProtocolSelector.Msi,version17.8.34129.139”。 搜索 URL https://aka.ms/VSSetupErrorReports?qPackageIdMicrosoft.VisualStudio.VsWebProtocolSelector.Msi;PackageActionInstall;ReturnCode2330 详细信息 …

BIOS开发笔记 - DDR基础

简介 内存是计算机中重要的组成部分,主要为CPU计算时提供一个数据的临时存储的场所。CPU在处理数据前,会将数据从外存复制到内存中,然后再处理内存中的数据,如果需要将结果保存,则一次性写回外存,这样便大大提高CPU的处理效率。 …

【java学习—十二】io流(1)

文章目录 1. 主要内容2. File类3. 练习题4. Java IO原理 1. 主要内容 java.io.File 类的使用(计算机操作系统中的文件和文件夹) IO原理及流的分类。 IO即input和output。 流的解释:     比如:通过程序把图片放到某一个文件…

如何看待腾讯云双11活动3年轻量服务器突然涨价?

腾讯云双十一优惠活动提供的3轻量应用服务器涨价了,最初双11优惠活动3年轻量2核4G5M服务器从566.6元涨价到756元三年,3年轻量2核2G4M服务器从366.6元恢复到540元三年,大家抓紧吧,三年轻量已经库存已经不多了,看看隔壁阿…

@RunWith(SpringRunner.class)注解的作用

通俗点: RunWith(SpringRunner.class)的作用表明Test测试类要使用注入的类,比如Autowired注入的类,有了RunWith(SpringRunner.class)这些类才能实例化到spring容器中,自动注入才能生效 官方点: RunWith 注解是JUnit测…

线程池与工厂模式

目录 ♫什么是线程池 ♫线程池的优点 ♫工厂模式 ♫工厂模式的意义 ♫线程池的使用 ♫线程池常见的创建方法 ♫ThreadPoolExecutor ♫实现一个线程池 ♫什么是线程池 线程池是一种管理和复用线程的技术,它在应用程序启动时预先创建一组线程,并将它…

三巨头的AI布局:微软领先,谷歌追赶,亚马逊待考

AI是当今科技领域的热门话题,也是三大云计算巨头微软、谷歌和亚马逊的核心战略。近日,微软和谷歌先后公布了2023年第三季度的财报,展示了各自在AI方面的进展和成果。亚马逊也即将发布财报,让我们一起来看看三巨头的AI布局有什么不…

安卓毕业设计:基于安卓Android的仓库货物管理app

项目介绍 本文介绍了仓库货物管理APP软件开发建设的意义和国内外发展现状,然后详细描述了所开发手机APP的可行性分析,并分析了手机APP所要实现的功能。因为仓库货物管理设施较多,而且人口密集,不能更好的管理仓库货物&#xff0c…

【vue】封装树形下拉框组件 el-popover+el-tree+el-select

父组件使用 <template><div>{{ array }} 更多属性详见wgyTreeSelect组件<wgyTreeSelectv-model"array":list"list":multiple"true":disabled-ids"[111,113,2]"/></div> </template><script> /*…

本地通过跳板机连接开发机流程简单记录

1、配置跳板机 主机名、端口、用户名&#xff0c;这些都是跳板机的&#xff0c;填完后选择PublicKey&#xff0c;点属性 属性设置打开后&#xff0c;选择使用全局公钥设置->使用身份或整数文件->配上相应的私钥地址&#xff0c;再选择使用整数作为武安市SSH2密钥指纹&am…

多线程环境下使用责任链,串链了

问题描述&#xff1a; 系统定义了一套校验链&#xff1a;链1,链2,,,链N&#xff1b;交由不同的业务初始化自定义的链结构。比如 业务a&#xff1a;定义的是链1、链3 业务b&#xff1a;定义的是链2、链4 结果&#xff1a; 业务a走的链成2、4了。 public abstract class Ch…

会声会影2024出来了吗?有哪些新功能?剪辑后音乐剪辑教程

会声会影 2024视频编辑软件&#xff0c;既加入光影、动态特效的滤镜效果&#xff0c;也提供了与色彩调整相关的LUT配置文件滤镜&#xff0c;可选择性大&#xff0c;运用起来更显灵活。会声会影在用户的陪伴下走过20余载&#xff0c;经过上百个版本的优化迭代&#xff0c;已将操…

硬件工程师到底可以从哪些方面提升自己?

大家好,这里是大话硬件。 最近在大话硬件群里,聊得比较多的就是讨论怎么提升自己的能力,怎么拿到更高的工资。我想,这可能并不是只在大话硬件群才有的话题,其实在每一位工作的人心里应该都在想的两个问题。 因此,这篇文章简单分享一下,作为一名硬件工程师,可以在做哪…

【LeetCode刷题-链表】--876.链表的中间结点

876.链表的中间结点 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListNode next) { this.val val; this.next next; }* }*…

Jmeter压测 —— 1秒发送1次请求

场景&#xff1a;有时候测试场景需要设置请求频率为一秒一次&#xff08;或几秒一次&#xff09;实现方法一&#xff1a;1、首先需要在线程组下设置循环次数&#xff08;可以理解为请求的次数&#xff09; 次数设置为请求300次&#xff0c;其中线程数跟时间自行设置 2、在设置…

Python数据分析实战-筛选出DataFrame中指定列都不包含缺失值的记录(附源码和实现效果)

实现功能 筛选出DataFrame中指定列都不包含缺失值的记录 实现代码 import pandas as pd# 创建示例DataFrame data {A: [1, 2, 3, None, 5],B: [1, None, 3, 4, 5],C: [1, 2, 3, 4, 5] } df pd.DataFrame(data)# 筛选出指定列都不包含缺失值的记录 columns_to_check [A, B…

【四、http】go的http的文件下载

一、日常下载图片到本地 //下载文件func downloadfile(url, filename string) {r, err : http.Get(url)if err ! nil {fmt.Println("err", err.Error())}defer r.Body.Close()f, err : os.Create(filename)if err ! nil {fmt.Println("err", err.Error())…

段错误如何调试

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言段错误产生的原因问题1&#xff1a;访问不存在的内存地址问题2&#xff1a;访问只读的内存地址问题3&#xff1a;栈溢出问题4&#xff1a;内存越界如何解决段错…