热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

怎么办_发版后报错指数级上升!代码出bug了怎么办?怎样才能少出bug?

篇首语:本文由编程笔记#小编为大家整理,主要介绍了发版后报错指数级上升!代码出bug了怎么办?怎样才能少出bug?相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了发版后报错指数级上升!代码出bug了怎么办?怎样才能少出bug?相关的知识,希望对你有一定的参考价值。






你是否有过这样的经历?周五的午后,你完成了手头的工作,边摸鱼边考虑晚上下班去哪吃饭。突然同事的一条消息把你从轻松愉悦的氛围里拽了出来:“线上出现大量报错,赶紧看看!”。

你心想:“不应该啊,明明上线前测试的很充分,怎么会出问题呢?”。带着疑惑的心情点开了报错链接,推栈显示确实是你新版本里上线的代码,报错量呈指数上升。你心里一沉,心跳开始加速,赶紧打开问题代码的仓库,排查问题原因。好在发现上线前预留了一个动态配置控制这里的逻辑,赶紧配置好回滚,联系相关同学进行发布。发布完成后不久报错量果然下降了,面红耳赤的你终于松了一口气,擦了擦额头的汗。心想:“还好上线前预留了开关,不然这次就要出大锅了”。这种场景在我工作的前几年时常发生,有时候在重大功能上线之前我还会担心的睡不着觉。不过随着处理 bug 的经验越来越多,遇到 bug 的场景反而越来越少了。

现在回想起来,自己编程能力的提升很大一部分来自处理 bug 时学到的经验。我曾经遇到过非常严重的 bug,严重到把整个开发团队辞退都不过分的那种(虽然公司并没有这么做)。那段时间顶着巨大的压力,没日没夜的工作。从紧急止损,评估影响面,到开复盘会,落实改善措施等等。虽然过程很煎熬,但是这件事之后,我发现我再遇到的 bug 真的是不值一提,再出 bug 时也总是能冷静处理。想想也很合理,跟最严重的 bug 交过手之后,你还会怕那些小 bug 吗?相信大部分程序员都不希望自己写的代码出 bug。但是 bug 往往无法避免,如何正确的处理 bug,也是成为优秀程序员的必备技能。所以我把我的经验总结下来,希望可以跟大家分享我处理 bug 的经验,以及怎样才能少出 bug。

线上出 bug 之后该怎么办?


  1. **紧急止损。**遇到 bug 的第一件事一定是紧急止损。无论是用配置开关,后端兼容,hotfix,发版本等等手段。只有先止损,对用户/公司/你自身的影响才会最小,有的人遇到 bug 之后就开始推诿塞责,敷衍了事,总想着去甩锅。遇到这种人不必跟他们扯皮,优先处理 bug,记住止损是第一位的。
  2. **确定影响面。**bug 止损或者修复之后,要尽早确定影响面。通常影响面是评估一个 bug 严重性最重要的指标,在评估影响面上要做到准确真实。不要害怕由于影响面太大而瞒报数据,坦诚面对才能让你真正的成长。
  3. **向老板汇报。**及时汇报也是非常重要的,假如你害怕老板知道之后会影响你的绩效从而没汇报的话。那你可以想象一下,如果你老板的老板知道了这个 bug,再去询问你老板的时候,他却不知道,你觉得后果会是什么?永远不要让你的老板成为最后一个知道问题发生的人。
  4. **及时复盘。**通常严重的问题会组织复盘会,详细的分析前因后果,以及规划改进措施。但是如果不是很严重的问题。你可以自己做一个小小的复盘,流程跟复盘会基本一致,最好是通过文字记录下来,防止自己下次再犯类似的问题。
  5. **落实改进措施。**改进措施里通常会有一些长期的项目,比如监控系统的完善,告警系统的推进等等。由于推动起来比较麻烦,不少措施到最后也没有落实,最终引发了更严重的 bug。如果你想做的比别人更好的话,踏踏实实的把改进措施一项一项的落实,多做一些脏活累活,你会比别人成长的快的多。

怎样才能少出bug?


  1. **自测,站在用户角度的测试。**自测一定是必须的,这是对自己代码负责任的表现。不要过度指望测试同学可以帮你测出所有bug。同时你需要切换到用户的角度进行测试,多想想假如你是一个普通用户你会怎么使用这个产品。如果你只用你写代码时的思维去进行测试,那么你很难测试出线上真实发生的路径,从而导致 bug 的发生。
  2. **从别人的 bug 中吸取经验。**不要在别人出 bug 时幸灾乐祸,别人出 bug 的时候,也是你学习的机会,你可以想象假如这段代码是你来写的话,你会犯同样的错误吗?以及你会怎么来设计代码保证不出 bug?是否可以从别人的 bug 中学习经验防止以后自己出现类似的问题?
  3. **做好动态控制与灰度控制。**这一点往往是发现 bug 之后的救命稻草。在修改线上长久稳定运行代码的时候,尽可能的预留动态控制,同时进行灰度上线,防止上线之后立刻出现大规模的 bug。
  4. **熟悉自己负责的产品。**理解产品细节,可以让你在写代码的时候结合更多的业务场景考虑,从而避免代码影响到其他业务。另外由于你足够了解业务,你能更好的评估产品经理提出的需求是否合理。往往不合理的业务需求也是产生 bug 的导火索。别低估自己理解产品的能力,你也许是最了解产品的那个人。
  5. **谨慎对待紧急需求。**通常越是紧急的需求越容易出 bug,由于思考的时间太短,评估不充分,又缺乏测试,匆忙上线之后经常会出问题。面对这种紧急需求,越要谨慎评估。即使是很小的修改,能配合动态配置的也尽量加一个配置,因为我已经遇到过不少次临时修改了一行代码导致线上出 bug 的问题,说多了都是泪。

别怕出 bug!这是你成为优秀程序员的必经之路。如果你觉得这篇文章对你有帮助的话,不妨顺手给我点个赞、评论区留言或者转发支持一下呗~ 你的每一次分享都是对创作者最好的激励~


最后

在这里还分享一份收录整理的Android学习PDF+架构视频+面试文档+源码笔记,高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料

这些都是我现在闲暇时还会反复翻阅的精品资料。里面对近几年的大厂面试高频知识点都有详细的讲解。相信可以有效地帮助大家掌握知识、理解原理,帮助大家在面试季取到一份不错的答卷。

当然,你也可以拿去查漏补缺,提升自身的竞争力。

有需要的话,可以直接 点击这里快速免费获取






推荐阅读
  • 持续集成持续部署持续交付今天,我将谈论开发人员的一个误解:持续集成是关于运行自动化集成管道的…什么是持续集成(CI) ... [详细]
  • DAO(Data Access Object)模式是一种用于抽象和封装所有对数据库或其他持久化机制访问的方法,它通过提供一个统一的接口来隐藏底层数据访问的复杂性。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 深入解析 Lifecycle 的实现原理
    本文将详细介绍 Android Jetpack 中 Lifecycle 组件的实现原理,帮助开发者更好地理解和使用 Lifecycle,避免常见的内存泄漏问题。 ... [详细]
  • 第二十五天接口、多态
    1.java是面向对象的语言。设计模式:接口接口类是从java里衍生出来的,不是python原生支持的主要用于继承里多继承抽象类是python原生支持的主要用于继承里的单继承但是接 ... [详细]
  • B站服务器故障影响豆瓣评分?别担心,阿里巴巴架构师分享预防策略与技术方案
    13日晚上,在视频观看高峰时段,B站出现了服务器故障,引发网友在各大平台上的广泛吐槽。这一事件导致了连锁反应,大量用户纷纷涌入A站、豆瓣和晋江等平台,给这些网站带来了突如其来的流量压力。为了防止类似问题的发生,阿里巴巴架构师分享了一系列预防策略和技术方案,包括负载均衡、弹性伸缩和容灾备份等措施,以确保系统的稳定性和可靠性。 ... [详细]
  • 数字经济浪潮下企业人才需求变化,优质IT培训机构助力技能提升
    随着云计算、大数据、人工智能、区块链和5G等技术的迅猛发展,数字经济已成为推动经济增长的重要动力。据信通院数据,2020年中国数字经济占GDP比重达38.6%,整体规模突破39.2万亿元。本文探讨了企业在数字化转型中对技术人才的需求变化,并介绍了优质IT培训机构如何助力人才培养。 ... [详细]
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • 并发控制与流程管理
    本文详细介绍了几种常用的并发控制工具及其应用场景,帮助开发者更好地管理和协调多线程程序中的并发流程。 ... [详细]
  • 结城浩(1963年7月出生),日本资深程序员和技术作家,居住在东京武藏野市。他开发了著名的YukiWiki软件,并在杂志上发表了大量程序入门文章和技术翻译作品。结城浩著有30多本关于编程和数学的书籍,其中许多被翻译成英文和韩文。 ... [详细]
  • 一篇关于五个编程问题的 Reddit 帖子引发了广泛讨论,特别是关于这些题目是否适合所有软件工程师。 ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • Python应用实例大揭秘:七大令人惊叹的高阶技巧展示
    2020年,Python无疑成为了最炙手可热的编程语言,其影响力已远远超出程序员的范畴。从初学者到资深从业者,甚至小学生,都在纷纷加入Python的学习热潮中。凭借其低门槛、易上手和强大的功能,Python正逐渐成为各行业不可或缺的工具。本文将揭示七个令人惊叹的Python高级应用技巧,帮助读者进一步提升编程水平。 ... [详细]
  • 在《Cocos2d-x学习笔记:基础概念解析与内存管理机制深入探讨》中,详细介绍了Cocos2d-x的基础概念,并深入分析了其内存管理机制。特别是针对Boost库引入的智能指针管理方法进行了详细的讲解,例如在处理鱼的运动过程中,可以通过编写自定义函数来动态计算角度变化,利用CallFunc回调机制实现高效的游戏逻辑控制。此外,文章还探讨了如何通过智能指针优化资源管理和避免内存泄漏,为开发者提供了实用的编程技巧和最佳实践。 ... [详细]
  • 在当前的软件开发领域,Lua 作为一种轻量级脚本语言,在 .NET 生态系统中的应用逐渐受到关注。本文探讨了 Lua 在 .NET 环境下的集成方法及其面临的挑战,包括性能优化、互操作性和生态支持等方面。尽管存在一定的技术障碍,但通过不断的学习和实践,开发者能够克服这些困难,拓展 Lua 在 .NET 中的应用场景。 ... [详细]
author-avatar
h40012222
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有