你是否有过这样的经历?周五的午后,你完成了手头的工作,边摸鱼边考虑晚上下班去哪吃饭。突然同事的一条消息把你从轻松愉悦的氛围里拽了出来:“线上出现大量报错,赶紧看看!”。
你心想:“不应该啊,明明上线前测试的很充分,怎么会出问题呢?”。带着疑惑的心情点开了报错链接,推栈显示确实是你新版本里上线的代码,报错量呈指数上升。你心里一沉,心跳开始加速,赶紧打开问题代码的仓库,排查问题原因。好在发现上线前预留了一个动态配置控制这里的逻辑,赶紧配置好回滚,联系相关同学进行发布。发布完成后不久报错量果然下降了,面红耳赤的你终于松了一口气,擦了擦额头的汗。心想:“还好上线前预留了开关,不然这次就要出大锅了”。这种场景在我工作的前几年时常发生,有时候在重大功能上线之前我还会担心的睡不着觉。不过随着处理 bug 的经验越来越多,遇到 bug 的场景反而越来越少了。
现在回想起来,自己编程能力的提升很大一部分来自处理 bug 时学到的经验。我曾经遇到过非常严重的 bug,严重到把整个开发团队辞退都不过分的那种(虽然公司并没有这么做)。那段时间顶着巨大的压力,没日没夜的工作。从紧急止损,评估影响面,到开复盘会,落实改善措施等等。虽然过程很煎熬,但是这件事之后,我发现我再遇到的 bug 真的是不值一提,再出 bug 时也总是能冷静处理。想想也很合理,跟最严重的 bug 交过手之后,你还会怕那些小 bug 吗?相信大部分程序员都不希望自己写的代码出 bug。但是 bug 往往无法避免,如何正确的处理 bug,也是成为优秀程序员的必备技能。所以我把我的经验总结下来,希望可以跟大家分享我处理 bug 的经验,以及怎样才能少出 bug。
线上出 bug 之后该怎么办?
- **紧急止损。**遇到 bug 的第一件事一定是紧急止损。无论是用配置开关,后端兼容,hotfix,发版本等等手段。只有先止损,对用户/公司/你自身的影响才会最小,有的人遇到 bug 之后就开始推诿塞责,敷衍了事,总想着去甩锅。遇到这种人不必跟他们扯皮,优先处理 bug,记住止损是第一位的。
- **确定影响面。**bug 止损或者修复之后,要尽早确定影响面。通常影响面是评估一个 bug 严重性最重要的指标,在评估影响面上要做到准确真实。不要害怕由于影响面太大而瞒报数据,坦诚面对才能让你真正的成长。
- **向老板汇报。**及时汇报也是非常重要的,假如你害怕老板知道之后会影响你的绩效从而没汇报的话。那你可以想象一下,如果你老板的老板知道了这个 bug,再去询问你老板的时候,他却不知道,你觉得后果会是什么?永远不要让你的老板成为最后一个知道问题发生的人。
- **及时复盘。**通常严重的问题会组织复盘会,详细的分析前因后果,以及规划改进措施。但是如果不是很严重的问题。你可以自己做一个小小的复盘,流程跟复盘会基本一致,最好是通过文字记录下来,防止自己下次再犯类似的问题。
- **落实改进措施。**改进措施里通常会有一些长期的项目,比如监控系统的完善,告警系统的推进等等。由于推动起来比较麻烦,不少措施到最后也没有落实,最终引发了更严重的 bug。如果你想做的比别人更好的话,踏踏实实的把改进措施一项一项的落实,多做一些脏活累活,你会比别人成长的快的多。
怎样才能少出bug?
- **自测,站在用户角度的测试。**自测一定是必须的,这是对自己代码负责任的表现。不要过度指望测试同学可以帮你测出所有bug。同时你需要切换到用户的角度进行测试,多想想假如你是一个普通用户你会怎么使用这个产品。如果你只用你写代码时的思维去进行测试,那么你很难测试出线上真实发生的路径,从而导致 bug 的发生。
- **从别人的 bug 中吸取经验。**不要在别人出 bug 时幸灾乐祸,别人出 bug 的时候,也是你学习的机会,你可以想象假如这段代码是你来写的话,你会犯同样的错误吗?以及你会怎么来设计代码保证不出 bug?是否可以从别人的 bug 中学习经验防止以后自己出现类似的问题?
- **做好动态控制与灰度控制。**这一点往往是发现 bug 之后的救命稻草。在修改线上长久稳定运行代码的时候,尽可能的预留动态控制,同时进行灰度上线,防止上线之后立刻出现大规模的 bug。
- **熟悉自己负责的产品。**理解产品细节,可以让你在写代码的时候结合更多的业务场景考虑,从而避免代码影响到其他业务。另外由于你足够了解业务,你能更好的评估产品经理提出的需求是否合理。往往不合理的业务需求也是产生 bug 的导火索。别低估自己理解产品的能力,你也许是最了解产品的那个人。
- **谨慎对待紧急需求。**通常越是紧急的需求越容易出 bug,由于思考的时间太短,评估不充分,又缺乏测试,匆忙上线之后经常会出问题。面对这种紧急需求,越要谨慎评估。即使是很小的修改,能配合动态配置的也尽量加一个配置,因为我已经遇到过不少次临时修改了一行代码导致线上出 bug 的问题,说多了都是泪。
别怕出 bug!这是你成为优秀程序员的必经之路。如果你觉得这篇文章对你有帮助的话,不妨顺手给我点个赞、评论区留言或者转发支持一下呗~ 你的每一次分享都是对创作者最好的激励~
最后
在这里还分享一份收录整理的Android学习PDF+架构视频+面试文档+源码笔记,高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料
这些都是我现在闲暇时还会反复翻阅的精品资料。里面对近几年的大厂面试高频知识点都有详细的讲解。相信可以有效地帮助大家掌握知识、理解原理,帮助大家在面试季取到一份不错的答卷。
当然,你也可以拿去查漏补缺,提升自身的竞争力。
有需要的话,可以直接 点击这里快速免费获取