关于线上的bug什么时候修复的思考
这里系统专门指的是那种用户量大的系统,比如有几百万或者上千万的注册会员。因为小系统因为用户量少,不存在这种思考,考虑有时候是多余的。另外还有内部系统,给自己公司内部人员使用的,即便是出现了问题,也不会造成很大的问题,内部协调一下即可。
而针对客户的系统,公司的收入和价值来源于给客户提供稳定的服务。这是关系到公司命脉的。如果系统不稳定,在客户心中造成的印象就会不好。
快速修复与稳定测试之间的权衡
如果线上系统出现了bug,用户反馈问题。作为开发人员,肯定要修复bug。是马修复代码后上传到生产环境,还是在灰度或测试环境把修复的代码测一遍后,再上传到生产环境呢?
有时候为了快速解决线上问题,所以修改代码后,就想发布上去。大一点的网站,都要走发布流程,填写发布单的。不能随便ftp上传代码的。都是业务系统,一点问题会存在影响。
看《淘宝技术这10年》里面也出现过类似问题,改改,编译(java语言要编译)好后发布上去,发现还是有问题,又得重新找,一天过去了。
我自己也有类似的体会:有时候发现bug,想快速修复bug,就懒得在灰度测试了。于是发布到线上。但是会出现其他问题来。
有的时候还会犯低级错误。
比如我自己亲身经历过好几次了。一次是邮箱的激活状态。发现有这个bug,去修复,想快速修复,在测试环境测验了后,程序是没问题,但是发布到线上,就出现问题。
这次不是程序出现问题。是没沟通好,不应该改为激活状态。这种办法只是一个临时办法,没有从整体角度考虑,即其他系统也会用到数据库的状态,根据这个状态来拦截发广告行为。这样改掉就造成数据错误了。
很多人都有类似的习惯,干脆懒得测了,自己觉得有信心,就发布到生产环境去(身边一些开发人员改好代码,自己不测试,直接发到灰度去给测试人员测试,实际上还是要打回来。这样来回折腾的耗费的精力和时间其实还更多)
表面以为快,实际上并没有快。有时候,我们修改简单的功能,发布上去,没有出现问题,于是就养成这样的习惯了。几次没有出现问题,但是某次就会出现意外,造成了系统的不稳定,也让开发人员到处救火的行为,比如这里修复好后,出现新的问题,继续修复,到处救火弄得精疲力竭的。
我如今越来越有如下感悟:追求快速可以,但如果追求快速,质量得不到保证,这种快速有多大意义呢?为了保证质量,宁愿慢一点,放到测试环境和灰度环境把问题还原出来,测验没问题再发布。
靠人的经验和能力来控制是否靠谱
开发人员出于自信和经验考虑,觉得自己修改的东西不用经过测验,反正就修改那么一点点代码,我有信心保证不出错。
我现在发现,靠人的经验来保证质量,不太靠谱了。因为任何人再厉害,都有犯错的时候,都会有疏忽。比如今天刚好因为家庭有事,情绪比较低落。修改代码就忽略掉一些部分了。眼睛看失误了。或者今天睡眠不充足,或者今天心情不好。就会造成类似的事故出来。一个人的大脑负担多的时候,就更加容易失误了。
靠一个人的智力终究有限,怎么防火才能从源头上来解决问题。如果能够设计一种办法,哪怕是人会犯错,但是可以纠错,就会好很多。
很多时候之所以那么赶,是因为觉得自己再去测验浪费时间,还有上面也不给你时间来测验?
这方面的投入时间相比后续出现问题再去救火到处的成本,是非常值得的。
古代人说,慢工出细活,的确非常有道理。编程就是一个慢共出细活的工种。心理越乱月容易出错。
线上的bug怎么处理?
分清楚优先级,重要程度。如果影响的面不是很广,只是一部分用户。可以放在测试环境把这个问题还原出来。这样确保找到了原因,再去修复问题。
避免越修越乱的局面!
没有找到确切的原因,像苍蝇一样,各个去尝试,这样会造成更多的问题出来。以前只是影响一部分用户,后来影响更多的用户了。得到反馈回来,这个时候会惊动更多人(比如产品、老板),开发人员得到的心里压力会更大。这样干的也不愉快。产品对系统频繁出问题也心里不爽,反馈到老板那里,老板也觉得是这样,开发人员也因为受到压力干的不愉快。最后是一个双输的局面。
总结:不要因为线上出了问题,为了快速修复bug,而忽略掉了节奏。开发人员能够做到面临外界压力,不乱其实是一种心里素质。
如果乱,心智不稳定的状态下,还会造成更多的问题出来,以前的修改代码就白劳动一场。有时候要庆幸现在自己冷静,没有去乱动,还没有因为乱动而造成更多问题(到时候吃不了兜着走)。
以前我的思想是,既然是面对用户的系统出现了bug,那么就要快速修复,我或多或少是出于假设某天我的公司遇到类似问题我应该如何办的思维模式来做事。
面对用户的bug,会引起我的特别重视。但是后来我发现,完全这样子也不行的。要权衡一下质量。如果没有质量保证的修复,那就会造成其他问题的出现。其实有些用户是可以缓一缓的,没想象那么紧急。比如线上程序就的确有这个bug:在app注册后,跑到pc版本去登录,需要邮箱激活。我仔细跟产品沟通会发现,没有想象的那么重要。周五本来想发布修复bug,但是可以缓到周一去发布的(这样有足够的时间来测验修改代码后造成的影响)。我没有抓住里面的关键点,目前只有这一个用户反馈这个问题。没有出现大面积的用户反馈。
因为通过手机app注册的用户,并不像我们想象那样,会去pc端页面进行登录。所以用户没有遇到这样的问题。
由于一个瓶子放在桌面上,每个人观察到的面是不同的。我们会忽略掉一些看不到的面。
我们内部开发人员观察到的永远是bug,因为产品反馈给我们了,我们看到的就是这个bug这一面。但是我们没有从整体角度来考虑。我们只是关注这是一个影响用户登录的bug。
我们以为改掉可以很有成就感,但可能是杨白劳,周五去发布,如果无法确保自己的代码不会造成其他影响。就少干。原地不动,反而风险更低。
顶着错误前进,错误次数多了后,就会是经验。有人宣扬,人生没有后退的路子。但我在想,如果一个人无法从错误的经历中吸取教训,避免下一次犯错,那么还是一样的浪费折腾。比如修复bug的事情,如何权衡,这样的错误继续再犯,总是到处救火。还是没有形成稳定的局面。
关于线上的bug什么时候修复的思考的更多相关文章
- 被产品经理怼了,线上出Bug为啥你不知道
前言 前几天跟读者聊天,他说被产品经理给怼了.原因是线上出 Bug 了,最后是客户反馈才知道的. 我就问他:你们是不是没做监控? 读者:我们是刚成立的创业团队,目前最重要的就是堆功能,很多基础设施都没 ...
- 一个线上程序bug,由通用补数程序引起
下游发现接口可用率非100%,马上线上查看,发现数据在有些情况下通用补数的数据是空, 有20%的用户是没有相应偏好等的数据的,需要通用补数来补数,结果通用补数没有数据. 通用补数数据的检查报警时必须要 ...
- 线上出bug了?别怕,这么定位!
摘要: Source Map还是很神奇的. 原文:线上出bug了?别怕,这么定位! 公众号:前端小苑 Fundebug经授权转载并修改,版权归原作者所有. 工作中,生产环境代码是编译后代码,搜集到报错 ...
- 线上调试bug
在以往的工作中,线上一有bug,就需要把文件弄到本地来改,但经常会碰见本地环境又和线上不一样,导致调试困难,闭着眼睛改好之后传到线上去看对不对,不对的话又要改,循环往复,要多麻烦就有多麻烦啊. 今天给 ...
- 线上应用bug跟踪查找-友盟统计
线上的应用只要用心点点都能发现些bug,连微信,QQ也不列外.但是bug中最严重的算是闪退了,这导致了用户直接不能使用我们的app. 我们公司是特别注重用户反馈和体验的,我们会定期打电话咨询用户的使用 ...
- 互联网IT当线上出现 bug 时,是怎么处理的?
线上BUG说处理方法:1.关于线上BUG问题,目前公司有一整套线上故障流程规范,包括故障定义.定级.处理流程.故障处理超时升级机制.故障处理小组.故障处罚(与故障存在时长有关)等:2.最主要的是,线上 ...
- 不停机不更新代码线上调试BUG的工具
如果你有以下痛点,请你查看本文章: 1.我改的代码为什么没有执行到?难道是我没 commit?分支搞错了? 2.遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗? 3.线上遇到某个用户的 ...
- 线上Bug无法复现怎么办?老司机教你一招,SpringBoot远程调试不用愁!
前言 在部署线上项目时,相信大家都会遇到一个问题,线上的 Bug 但是在本地不会复现,多么无奈. 此时最常用的就是取到前端传递的数据用接口测试工具测试,比如 POSTMAN,复杂不,难受不? 今天陈某 ...
- 测试老司机都在用的表白神器你会吗?-Fiddler之AutoResponse线上调试
一.Fiddler在线调试功能和表白神器介绍 在以往的工作中,线上有bug,就需要把文件弄到本地来改,但经常会碰见本地环境又和线上不一样,导致调试困难,闭着眼睛改好之后传到线上去看对不对,不对的话 ...
随机推荐
- Java environment variables and their functionality
Explanations of Functionalities: 1. PATH env variable It is used to search the command directory whe ...
- CSS层模型
参考:慕课网 点此可进 如何让html元素在网页中精确定位,就像图像软件PhotoShop中的图层一样可以对每个图层能够精确定位操作.CSS定义了一组定位(positioning)属性来支持层布局模型 ...
- Java 线程 — ThreadLocal
ThreadLocal 先来看看ThreadLocal的注释: This class provides** thread-local variables**. These variables diff ...
- VMware虚拟机Mac OS X无法调整扩展硬盘大小,更新xcode时出现磁盘空间不足
使用VMware虚拟机搭建的MacOSX,安装xcode时出现磁盘空间不足的错误. 因为很多朋友在初次安装MacOSX的时候都默认选择40G的磁盘大小,结果用了没两天之后就发现磁盘不够用了. 这时,百 ...
- Nodejs从有门道无门菜鸟起飞教程。
这是一篇菜鸟教程,这是一篇菜鸟教程,如果你是菜鸟到话. 简单来说Nodejs并不是一门新的语言,但是它可以让我们的JS运行在服务器端,在服务器端写JS代码并且输入输出,也就是说以后要是有人问你JS是不 ...
- java.util.Arrays.sort两种方式的排序(及文件读写练习)
import java.io.*; import java.util.*; public class SortTest{ public static void main(String args[]) ...
- JavaWeb:Web与HTTP协议简介
JavaWeb:Web与HTTP协议简介 Web的概念 什么是Web: Web是网络上使用最广泛的分布式应用架构. 旨在共享分布在网络上的各个Web服务器中的所有互相连接的信息. 三个特征: 用HTM ...
- JS实现单击按钮后弹出新的窗口页面
点击按钮后,弹出指定大小的页面窗口. 效果图: 源码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&qu ...
- 漫谈可视化Prefuse(一)---从SQL Server数据库读取数据
上篇<可视化工具solo show-----Prefuse自带例子GraphView讲解>主要介绍了整个Prefuse工具集具有的一些特征.框架的运行流程,分析并展现了官方提供的例子Gra ...
- 可视化工具solo show
辗转一圈还是回到了我魂牵梦绕的可视化上来了. 在Gephi+Netbeans上折腾了将近一个星期后,我深深的体会到个人对于代码的驾驭能力尚有提升的空间^_^,路很长,方向很重要,三思而行. 转载请标明 ...