线上bug分析
昨天下午大神把组内几十号人召集在一起开Online bug分析大会,主要是针对近期线上事故从事故原因和解决方案两个维度来分析。
对金融软件来说,每一次的线上事故都有可能给公司带来重大的损失,少扣了用户的钱,为公司带来资金方面的亏损;多扣了用户的钱,则为带来不必要的合约或法律纠纷,故测试金融软件不比其他行业的软件,后者线上bug大多不会直接引起资金方面损失,最多就是用户体验不好,功能没有实现,导致用户量的流失。
对金融软件来说没有小bug,一旦出现bug那就是重大的bug,必须引起高度重视。

俗话说”人非圣贤,孰能无过“,软件是由人编写的,所以再所难免都会有问题,而我们所要做就是尽量避免出现问题,或者是避免出现重复的问题。
对于软件测试人员来说分析线上BUG是非常好的一个措施,这样可以检测到测试人员在测试过程中哪些地方考虑不周,或没有考虑到,从而可以提醒测试人员下次思考的范围扩大,尽可能地完全覆盖测试范围。
从分析结果的角度出发,线上bug大多都是开发人员和测试人员麻痹大意所导致的,并不是不可避免的。
经过分析得出线上的bug出现的原因基本有以下几类:
1.开发人员使用java框架错误
2.开发人员上线时合并代码不仔细,导致代码有遗漏
3.测试人员回归测试流程不全
4.多系统一起上线,缺少联调或者联调不全

01
开发人员使用java框架错误
这个问题已经出现了两次,在8月份就出现过一次,原因就是开发人在使用多线程时,将多例使用成单例,导致系统在高并发进出现了串数据的现象,导致系统在处理时放错款,将A的钱放到B的账户中去了。
虽然使用单例能节省资源,降低系统的占用率,但这种情况并不合适目前的系统。
而此中情况在测试过程中并不一定能测试出来,这种出现的机率不定,必须在数据高并发时才有可能出现。
解决方案:技术问题,将单例修改成多例。
02
开发人员上线时合并代码有遗漏
开发人员上线时删除了master中的某行代码,引起有个变量没有定义,导致上线之后某功能失效。
开发人员将git分支上的代码合并到master时,master提示某一行代码没有,开发人员就将分支上的代码删除再合并到master,等将代码上线之后,导致某个功能失效。
解决方案1:开发人员将代码合并到master时,先将master上的代码拉到一个新分支上,然后再将要合并的代码合到新分支上,最终将新分支上的代码合并到master上。
解决方案2:开发人员建立良好的习惯,在开发某个项目时,每天(固定频率)都将master上的代码合并到自己代码的分支上

03
测试人员回归测试不全==漏测
说是回归测试不全,其实就是相当于一定程度上的漏测,漏测应该是软件测试人员尽量避免,一般漏测是因为测试人员思考不全,导致某个方面没有测试到。
这次线上bug分析有以下几个问题:
回归测试时,验证某个流程,但只验证到任务创建,就没有执行任务,上线后,该任务创建后执行会报错。
未测试幂等性,上线后,导致两次返回的结果不一样。
开发修改某一个bug,回归测试未回归以前的流程,导致上线后,原来正常的流程执行不通过。
解决方案:
1.回归测试时,主流程必须回归,并且有完整的回归步骤。
2.一个业务流程测试必须跑完一个完整流程。
3.测试过程中一定要细致,不能遗漏重要的点。

软件中的bug不可能完全测试出来,但最不应该出现的就是原本是正确的流程或功能,经过版本改动,在后期又出现,但测试人员再次测试时竟然没有发现,像这种情况是软件测试人员最应该避免的,所以回归测试很重要,不仅要回归主要流程,还需要回归修改bug相关的代码部分。
解决回归测试流程测试不全最好的解决方案就是引入自动化,就目前我们的系统不够成熟,改动太多,业务流程或需求都不稳定,所以自动化测试还未正式引入。

04
多系统一起上线,缺少联调或联调不全
因为联调出现问题也不再是一次二次了,为什么联调会出现问题呢?
公司业务是由有多个系统组成的,同时还需要调用其他公司业务接口,测试人员在测试时调用相关系统接口时模拟返回或回调,基本都是使用的mock,mock返回的值并不是真的从相应系统的返回值,所以如果联调测试时没有把握好,就非常容易出现问题。
在测试过程中联调就非常重要,但由于联调测试人员的放松,对联调内容的遗漏,导致业务上线之后:
1.调用某查询任务,对方会一直返回处理中,导致流程卡住。
2.A系统回调B系统失败,原因是编码方式不一样。
3.某系统功能失败后,调用查询接口报错。
4.调用某系统,应返回code=1,结果返回code=0,导致业务处理错误。
以上问题都是由于系统之间的调用或回调导致的线上bug。
解决方案:
1.在联调之前先将自己系统中本次项目所有用例测试完全。
2.编写联调用例,并且与多方测试人员沟通,确保联调用例能全面覆盖业务流程和任务。
3.在联调时,确保所有业务流程是全部走通,且返回的值正确。

联调测试与平时的功能测试重点和关注点都不同:
1.联调测试保证业务流程是通的。
2.联调测试时要检查其他系统返回来的数据是否正确?检查相同数据在各个系统存的值是否相同?
3.检查推送的报文mapping与其他系统接口文档中的mapping是否一致(映射)。
此次线上BUG分析再次验证程序中的bug就是人为的,避免这些情况就需要开发人员在开发过程中多注意,培养良好的编程习惯,而测试人员在测试过程中需要将测试范围考虑完全,尽量避免遗漏测试点,对于不清楚的点,不管是开发还是测试人员,都应该拿出来讨论,切忌闭门造车,不懂装懂。
大家可以一起来说说你们线上发生了哪些重大事故?让你开始引以为戒了。
线上bug分析的更多相关文章
- 【MySQL 线上 BUG 分析】之 多表同字段异常:Column ‘xxx’ in field list is ambiguous
一.生产出错! 今天早上11点左右,我在工作休息之余,撸了一下猫.突然,工作群响了,老大在里面说:APP出错了! 妈啊,这太吓人了,因为只是说了出错,但是没说错误的信息.所以我赶紧到APP上看看. 这 ...
- 线上BUG:MySQL死锁分析实战
原文链接:线上BUG:MySQL死锁分析实战 1 线上告警 我们不需要关注截图中得其他信息,只要能看到打印得org.springframework.dao.DeadlockLoserDataAcces ...
- 程序员如何描述清楚线上bug
案例 一个管理后台的bug,把操作记录中的操作员姓名,写成了该操作员的id.原因是修改了一个返回操作人姓名的函数,返回了操作人的id.但是还有其他地方也用这个函数,导致其他地方把姓名字段填写成了操作员 ...
- 记一次线上bug排查-quartz线程调度相关
记一次线上bug排查,与各位共同探讨. 概述:使用quartz做的定时任务,正式生产环境有个任务延迟了1小时之久才触发.在这一小时里各种排查找不出问题,直到延迟时间结束了,该任务才珊珊触发.原因主要就 ...
- MySQL慢日志线上问题分析及功能优化
本文来源于数据库内核专栏. MySQL慢日志(slow log)是MySQL DBA及其他开发.运维人员需经常关注的一类信息.使用慢日志可找出执行时间较长或未走索引等SQL语句,为进行系统调优提供依据 ...
- 听说”双11”是这么解决线上bug的
听说"双11"是这么解决线上bug的 --Android线上热修复的使用与原理 预备知识和开发环境 Android NDK编程 AndFix浅析 Android线上热修复的原理大同 ...
- 关于线上bug
之所以想写下线上bug,因为发觉有些公司对线上bug的处理是比较严格甚至是很苛刻,涉及到的相关人可能会因此而背黑锅. 之所以会存在这样情况,因为公司各部门都有关联,特别是用户.老板的投诉,也给公司会造 ...
- 「日常开发」记一次因使用Date引起的线上BUG处理
生活中,我们需要掌控自己的时间,减少加班,提高效率:日常开发中,我们需要操作时间API,保证效率.安全.稳定.现在都2020年了,了解如何在JDK8及以后的版本中更好地操控时间就很有必要,尤其是一次线 ...
- 出现线上bug,测试人能做些什么?
测试奇谭,BUG不见. 大家好,我是谭叔. 一提到线上问题,很多测试小白要么"原则性"恐惧,要么憨憨如也,不知如何下手. 本篇文章,我再细化下这道常见的面试题,跟大家捋捋发生线上问 ...
随机推荐
- 深度学习中交叉熵和KL散度和最大似然估计之间的关系
机器学习的面试题中经常会被问到交叉熵(cross entropy)和最大似然估计(MLE)或者KL散度有什么关系,查了一些资料发现优化这3个东西其实是等价的. 熵和交叉熵 提到交叉熵就需要了解下信息论 ...
- 判断当前的Activity的是否处于栈顶
lockAppName 是需要判断Activity的全称(包括包名). private boolean getTopApp(Context mContext) { String lockAppName ...
- 使用PHP几种写99乘法表的方式
首先按照规矩,还是先废话一番,对于刚学PHP的新手来讲,用php写九九乘法表无疑是非常经典的一道练习题. 但不要小看这道练习题,它对于逻辑的考验还是相当到位的. 也许有人会觉得,九九乘法表有什么难的, ...
- PHP利用get_headers()函数判断远程的url地址是否有效
问题: 利用url访问远程的文件.图片.视频时有时需要请求前判断url地址是否有效. 解决办法: (PHP 5, PHP 7) get_headers — 取得服务器响应一个 HTTP 请求所发送的所 ...
- M - 非诚勿扰 优先队列
来源 作为2013年699万应届毕业生中的一员,由于宏观经济的不景气,小明在毕业当天就华丽丽地失业了! 经历了千难万苦的求职过程,小明特别能理解毕业生的就业之难,所以,他现在准备创建一家专门针对IT人 ...
- 删除或修改本地Git保存的账号密码
win10 系统下进入 控制面板 > 用户帐户 > 管理你的凭据 选择 [Windows 凭据] git 保存的用户信息在普通凭据列表里 >>编辑>>>完成
- 算法提高 最小方差生成树(Kruskal)_模板
算法提高 最小方差生成树 时间限制:1.0s 内存限制:256.0MB 问题描述 给定带权无向图,求出一颗方差最小的生成树. 输入格式 输入多组测试数据.第一行为N,M,依次是 ...
- 12.vue属性.监听.组件
1.计算属性 https://cn.vuejs.org/v2/guide/computed.html new Vue({ computed:{//定义 show(){ } } }) ++计算属性1.h ...
- Linux命令 printf
定长: $ printf '%s\t%s\t%s\t%s\t%s\t\n' $(cat printf.txt) # %s 表示一个不固定长度的字符串:printf不是管道命令,因此需要通过类似cat的 ...
- [No000017F]如何监控注册表的修改
今天我们将向您展示如何使用我们最喜欢的工具之一Proc Mon,在您更改PC上的组策略设置时查看编辑的注册表项. 使用Proc Mon查看组策略对象修改的注册表设置 您要做的第一件事就是从Sys In ...