生产环境出现问题,测试人如何做工作复盘?

很多时候我们能把大部分的Bug或一些部署等问题在业务上线之前就解决了,但由于某些因素,线上问题还是时而出现,影响业务生产甚至是公司效益。

避免线上问题的发生以及线上问题及时处理是测试人员的一项重要职责,如何快速地处理,最大限度地降低影响范围,后续如何避免此类问题的发生,是我们需要复盘的重点内容。

一 为什么要复盘?

在发布上线后,对测试过程进行复盘,总结遇到的问题,对当时的解决方案进行探讨。通过复盘,从而达到指导后续工作,减少重复踩坑。并在可以在个人复盘完成后,在部门内进行信息共享。每个人负责的项目虽然不同,但是测试思想确有共通之处。通过复盘分享,可以有效提升团队整体测试经验。

从质量保障的角度来说,针对线上问题进行复盘可以发现工作中的不足并持续改进,不断提高线上的交付质量。

从团队管理的角度来说,针对线上问题进行复盘也可以发现团队短板并针对性的补齐技术体系,提高团队效率。

从业务目标的角度来说,技术团队作为成本中心,也需要不断提高自身的交付产出质量,来支撑业务目标更好的达成。

图片

二 故障复盘的步骤

故障复盘的实施步骤通常包含以下步骤:

理解故障的技术背景

梳理故障的整体情况

识别故障的直接/间接影响

梳理故障时间线

识别和分析故障触发条件和关键环节

层层下钻故障根因

分析解决方案

归纳推演出后续的跟进措施

总结经验教训

复盘的意义:

1.不是为了逃避现实,也不是为了炫耀,而是能真正解决某些问题。

2.检验完成的结果,回溯过程,总结利弊得失,做好资源沉淀。

3.为后续工作积累经验,提升个人能力。

4.作为跟领导汇报的材料用,方便未来查询。

GRAI复盘法:

G(Goal)回顾目标:回顾最初情景,列出当时的目标。

R(Rult)对比结果:列出目标完成情况,将结果和目标进行比较。

A(Analysis)分析过程:用今天的眼光和能力审视昨天的做法,学到对未来有用的信息。

I(Insight)总结规律:总结提炼出适用于类似情况的规律,合理进行模块整理。

图片

三 问题跟进前提

进行一切线上问题跟进的活动是基于测试人员本身对业务系统的熟悉程度,业务系统,也就是指业务和系统,除了业务之外,需要测试人员对业务所在的整体系统架构具备一定的熟悉程度,这里从上到下分应用层,软件层,系统层来分析。

图片

1、应用层

在应用层,我们主要关注的是我们能直接接触到的内容。首先,我们需要了解自己负责的业务系统在整体业务系统中的位置。除了了解业务系统内部的情况,我们还需要了解外部系统如何调用我们的业务系统,以及我们的业务系统如何调用外部系统。

同时,我们也需要清楚最基本的关键要素:量。这包括了业务系统的访问量,比如日访问量等。此外,我们还需要熟悉核心接口或核心功能的最大并发量,以应对突然的高流量以及网络攻击等问题。

2、软件层

在软件层,我们主要涉及到数据、配置和相关组件。数据通常指的是数据库,了解数据库的部署情况可以帮助我们解决数据读写等问题。同时,对于基础组件如nginx,涉及到负载均衡和跨域访问等业务配置,了解这些信息可以帮助我们定位问题。此外,对于缓存的合理使用情况的分析也有助于我们分析持久化和数据库使用方面的问题。还有一些相关的事项,比如JDK版本、JVM的启动参数等等,也需要了解。

3、系统层

在系统层面,与硬件相关的内容更多。这包括业务系统的部署方式,是在单台机器上还是分布式部署,具体所在的机房和网络段,以及部署时使用的是物理机还是docker等虚拟化技术。同时,还需要了解部署机器的硬件信息,比如内存大小、CPU数量和磁盘类型大小等。

要做好线上问题跟进,就得对自己所负责的业务系统了如指掌,只有知己知彼,才能百战百胜。

在这里插入图片描述

四 问题跟进策略

对于问题跟进的策略,可以分为四个环节,包括影响范围评估、快速恢复、定位方法和问题复盘,接下来具体介绍这四个环节的内容。

策略1:影响范围评估

在跟进问题时,首要步骤是评估问题的影响范围,根据评估结果来设计应对策略和救火方案。评估过程中,首先要确定问题的类型,例如功能、性能或硬件方面的故障。例如,突然的大流量和大并发可能导致资源不足,造成许多待处理请求;内存故障可能导致资源效率下降等等。

对于功能上的故障,可以确定功能的重要性和优先级。对于核心功能的故障,需要尽快制定救火策略,减少影响范围,并确保敏感功能和信息的安全稳定。根据问题的影响范围采取相应措施。如果是面向用户的功能,应尽量避免问题功能与用户接触;如果是与上下游业务相关的功能,应及时通知相关业务方采取规避措施。

在评估和制定救火策略时,必须迅速行动,因为问题的影响范围和程度会随时间扩大。建立良好的告警反馈体系至关重要,通过线上监控、客服反馈等手段实时了解问题情况,以有效降低时间带来的影响。

策略2:快速恢复

在评估问题的影响范围后,需要快速响应并恢复系统。一般情况下,问题的定位速度可分为快速定位和无法快速定位两种情况。

对于可以快速定位问题的情况,如果是由业务功能导致的问题,通常会采取修复补丁的方式。但对于无法立即回收或发布版本的客户端应用程序(如移动应用),可以通过后台配置功能降级或关闭来处理。此外,一些问题可以通过调整配置参数来规避,也可以采取这种方式减小线上问题的影响范围。

当无法快速定位问题时,就需要果断行动,首要原则是将问题的影响范围降到最低。可以通过回滚版本来规避问题,这是最有效且首选的方法,回滚版本可以切断问题发生的原因,并保证最初的稳定业务。

当然,对于负载过高导致的问题,回滚版本并不能解决。这时通常采用重启的策略,重新启动后继续观察资源情况,通常是由于新版本的问题导致资源死锁等情况,所以有必要时回滚版本和重启策略可以同时使用。

如果问题涉及硬件方面,一般可以通过扩容来解决,例如增加硬盘、增加内存等,先提供足够的资源,然后再考虑性能优化方案。

对于已进行功能配置的情况,可以先关闭。

或降级功能,然后在测试环境中继续定位和解决问题,最后再发布修复版本。

策略3:定位方法

在处理线上问题时,降低影响范围后的下一步是定位问题的原因。无论是功能问题、性能问题还是环境问题,日志是重要的定位工具。因此,通常要求业务日志要准确记录,并及时告警错误。然而,也不能将所有内容都记录在日志中,只有精确的业务日志才能为业务系统的稳定运行提供有效依据。通过排查日志信息来定位问题的原因是最有效的方法。

功能问题通常可以在测试环境中重新出现,尽量模拟线上的情况,包括数据和配置,这样问题再次发生的概率就会增加,便于更容易地定位。

对于资源性能问题,可以通过监控告警日志和一些常用命令来获取信息,然后采取相应的解决措施。

一旦定位到问题,就要迅速制定修复和上线方案,确保业务系统在稳定状态下继续运行。

策略4:问题复盘

经过上述过程的执行,我们还需要进行总结,也就是问题复盘。我们都不希望问题再次发生,因此通过复盘来总结经验,可以提升大家规避问题和处理线上问题的能力。

在问题复盘中,我们可以分析问题的原因,是由人为因素导致的还是系统Bug,是遗漏的Bug还是新引入的Bug,以及是否由于外部系统数据流或组件不兼容等问题导致的。

处理问题的流程是否合理也是需要考虑的。有时候明明需要回滚版本却没有做,有时候又回滚了不必要的版本。在这方面需要权衡成本和方案的合理性,毕竟有时候版本很紧急,回滚会延迟进度,对业务来说并不是理想的结果。

如何避免类似问题再次发生也是问题复盘的核心环节。我们需要检查监控是否完善,是否由于监控告警不及时或信息不完善而影响了整体救火进度。同时,在系统架构上是否可以进行性能相关的优化,建立起对系统的保护措施,例如过载保护、服务降级、数据解耦等。

问题的复盘对于团队救火能力的提升是最有效果的,同时建立起相关文档,加强团队对业务以及系统的了解程度。

总结: 线上问题跟进是测试工程师的一项重要的职责,也是测试工程师的一门重要的能力,除了发现在研发测试阶段的问题,我们需要去解决线上的问题,为业务系统保驾护航,对于测试工程师来说责无旁贷。

提升自己代码能力,测试工具使用能力,写用例能力的同时,也要提升自己应对问题处理的能力,丰满自己在各个质量保证环节的能力,这样才能成为一名优秀的测试工程师。

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

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

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

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

相关文章

XG916Ⅱ轮式装载机后驱动桥设计机械设计CAD

wx供重浩:创享日记 对话框发送:装载机 获取完整论文报告工程源文件 本次设计内容为XG916Ⅱ装载机后驱动桥设计,大致上分为主传动的设计,差速器的设计,半轴的设计,最终传动的设计四大部分。其中主传动锥齿轮…

【多线程】Thread类的使用

目录 1.概述 2.Thread的常见构造方法 3.Thread的几个常见属性 4.启动一个线程-start() 5.中断一个线程 5.1通过共享的标记来进行沟通 5.2 调用 interrupt() 方法来通知 6.等待一个进程 7.获取当前线程引用 8.线程的状态 8.1所有状态 8.2线程状态和转移的意义 1.概述 …

Relabel与Metic Relabel

Prometheus支持多种方式的自动发现目标(targets),以下是一些常见的自动发现方式: 静态配置:您可以在Prometheus配置文件中直接列出要监测的目标。这种方式适用于目标相对稳定的情况下,例如固定的服务器或设…

HCIA-RS基础:动态路由协议基础

摘要:本文介绍动态路由协议的基本概念,为后续动态路由协议原理课程提供基础和引入。主要讲解常见的动态路由协议、动态路由协议的分类,以及路由协议的功能和自治系统的概念。文章旨在优化标题吸引力,并通过详细的内容夯实读者对动…

自求导的方法实现线性回归算法

线性回归是一种常用的回归算法,用于建立输入变量和连续输出变量之间的关系。传统的线性回归算法通常依赖于繁琐的数学推导和梯度计算。但是,随着深度学习的兴起,自求导的方法逐渐成为实现线性回归算法的有效途径。本文将介绍如何使用自求导的…

VMware安装windows操作系统

一、下载镜像包 地址:镜像包地址。 找到需要的版本下载镜像包。 二、安装 打开VMware新建虚拟机,选择用镜像文件。将下载的镜像包加载进去即可。

python opencv 边缘检测(sobel、沙尔算子、拉普拉斯算子、Canny)

python opencv 边缘检测(sobel、沙尔算子、拉普拉斯算子、Canny) 这次实验,我们分别使用opencv 的 sobel算子、沙尔算子、拉普拉斯算子三种算子取进行边缘检测,然后后面又使用了Canny算法进行边缘检测。 直接看代码,代…

论文导读 | 10月专题内容精选:人的预测

编者按 本次论文导读,编者选择了10月份OR和MS上与"人的预测"有关的三篇文章,分别涉及群体智慧的提取,个体序列预测的评估,以及决策者对风险的扭曲感知在分布式鲁棒优化中的应用。其中,从基于"生成式可能…

使用VUE3实现简单颜色盘,吸管组件,useEyeDropper和<input type=“color“ />的使用

1.使用vueuse中的useEyeDropper来实现滴管的功能和使用input中的type"color"属性来实现颜色盘 效果&#xff1a; 图标触发吸管 input触发颜色盘 组件代码部分 &#xff1a;<dropper> ---- vueuse使用 <template><div class"sRGBHexWrap fbc…

补充:如何提高selenium的运行速度?

已经通读该专栏文章的同学,或许对UI自动化测试有了一定的掌握,细心的同学肯定会发现一个问题,当用例量达到一定程度时,对于整体用例的执行速度肯定不会很满意。除了应用多线程运行用例的方式加快速度,有没有其他的方法呢? 今天告诉大家,方法是有的!也是本人新学的。即…

[PyTorch][chapter 66][强化学习-值函数近似]

前言 现实强化学习任务面临的状态空间往往是连续的,无穷多个。 这里主要针对这种连续的状态空间处理。后面DQN 也是这种处理思路。 目录&#xff1a; 1&#xff1a; 原理 2&#xff1a; 梯度更新 3&#xff1a; target 和 预测值 4 流程 一 原理 强化学习最重要的是得到 …

c++版本opencv计算灰度图像的轮廓点

代码 #include<iostream> #include<opencv.hpp>int main() {std::string imgPath("D:\\prostate_run\\result_US_20230804_141531\\mask\\us\\104.bmp");cv::Mat imgGray cv::imread(imgPath, 0);cv::Mat kernel cv::getStructuringElement(cv::MORPH…

任意分圆环下的 RLWE:如何产生正确的噪声分布

参考文献&#xff1a; [Con09] Conrad K. The different ideal[J]. Expository papers/Lecture notes. Available at: http://www.math.uconn.edu/∼kconrad/blurbs/gradnumthy/different.pdf, 2009.[LPR10] Lyubashevsky V, Peikert C, Regev O. On ideal lattices and learn…

thinkphp6生成PDF自动换行

composer安装 composer require tecnickcom/tcpdf 示例 use TCPDF;public function info($university,$performance,$grade,$major){//获取到当前域名$domain request()->domain();//实例化$pdf new TCPDF(P, mm, A4, true, UTF-8, false);// 设置文档信息$pdf->SetCr…

Azkaban极简使用文档

登录 地址: http://服务器ip:8081/, 用户名密码默认都是azkaban 构建项目流程 添加Project 编写工作流文件 在本机新建文件夹如test, 创建一个flow20.project 文件, 内容 azkaban-flow-version: 2.0(固定步骤)编写flow文件, 例如一个最基础的实例 test1.flow nodes:- name…

JAVA序列化和反序列化

JAVA序列化和反序列化 文章目录 JAVA序列化和反序列化序列化什么是序列化&#xff1f;为什么要进行序列化?如何将对线进行序列化具体实现过程 完整代码 序列化 什么是序列化&#xff1f; 就是将对象转化为字节的过程 为什么要进行序列化? 让数据更高效的传输让数据更好的…

Vue中的$nextTick

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;Vue篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来vue篇专栏内容:vue中的$nextTick 目录 &#x1f40b;Vue中的$nextTick有什么作用&#xff1f; &#x1f40b;一、…

socket can中是如何根据 结构体can_bittiming_const中的字段 计算bitrate的?

在 SocketCAN 中&#xff0c;can_bittiming_const 结构体用于表示 CAN 总线的定时参数&#xff0c;包括位率&#xff08;bitrate&#xff09;的计算。can_bittiming_const 包含了许多与位率相关的参数&#xff0c;其中一些参数用于计算实际的位率。 下面是一些与位率计算相关的…

小辰的智慧树(差分+前缀和)

登录—专业IT笔试面试备考平台_牛客网 1.考虑总长度之和不能超过m&#xff0c;2考虑限制每棵树高度不能低于ci&#xff0c;如果用二分最短输能截到的高度&#xff0c;还要另外去判断&#xff0c;是否每棵树mid都能严格大于ci &#xff0c;这样容易超时&#xff0c;换个角度&…

SQL常见函数整理 _ lead() 向下偏移

1. 用法 是在窗口函数中使用的函数&#xff0c;它用于获取当前行的下一行&#xff08;后一行&#xff09;的某个列的值。具体来说&#xff0c;LEAD() 函数可用于查找任何给定行的下一行&#xff08;后一行&#xff09;的值&#xff0c;同时也可控制行数偏移量&#xff08;offse…