zoukankan      html  css  js  c++  java
  • 线上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就是人为的,避免这些情况就需要开发人员在开发过程中多注意,培养良好的编程习惯,而测试人员在测试过程中需要将测试范围考虑完全,尽量避免遗漏测试点,对于不清楚的点,不管是开发还是测试人员,都应该拿出来讨论,切忌闭门造车,不懂装懂。

    大家可以一起来说说你们线上发生了哪些重大事故?让你开始引以为戒了。

  • 相关阅读:
    LeetCode 515. 在每个树行中找最大值(Find Largest Value in Each Tree Row)
    LeetCode 114. 二叉树展开为链表(Flatten Binary Tree to Linked List)
    LeetCode 199. 二叉树的右视图(Binary Tree Right Side View)
    LeetCode 1022. 从根到叶的二进制数之和(Sum of Root To Leaf Binary Numbers)
    LeetCode 897. 递增顺序查找树(Increasing Order Search Tree)
    LeetCode 617. 合并二叉树(Merge Two Binary Trees)
    LeetCode 206. 反转链表(Reverse Linked List) 16
    LeetCode 104. 二叉树的最大深度(Maximum Depth of Binary Tree)
    LeetCode 110. 平衡二叉树(Balanced Binary Tree) 15
    LeetCode 108. 将有序数组转换为二叉搜索树(Convert Sorted Array to Binary Search Tree) 14
  • 原文地址:https://www.cnblogs.com/lifangzhen/p/10044800.html
Copyright © 2011-2022 走看看