

程序员如何描述清楚线上bug
source link: https://www.owenzhang.net/blog/207.html?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

案例
一个管理后台的bug,把操作记录中的操作员姓名,写成了该操作员的id。原因是修改了一个返回操作人姓名的函数,返回了操作人的id。但是还有其他地方也用这个函数,导致其他地方把姓名字段填写成了操作员的id。
该bug污染了一条修改记录,操作员手动删除就好了。回滚代码后恢复。
本质是修改了函数的返回值,却没有查看所有调用的地方。这个函数的名字叫getinfo,但是在代码的其他模块中也有同名函数,返回的都是id,让修改的人以为都是一个函数,引起了混淆。所以函数名也要修改,做到通过名字能够清晰看出函数功能。
本来很简单的一个线上bug,按照上面的描述几句话就说清楚了,但是一个组员说了一个小时,才勉强让组内的其他同学听明白。
他在描述的时候,先说代码,还有更改代码的背景,而且描述的只言片语,让大家不停提问,花了很多时间。
怎样能够描述清楚线上bug,也是有方法论的,大家可以看看。
描述的顺序
1. 对齐背景
对于线上bug,先描述影响,从用户角度把bug描述清晰。可以把自己想为测试,测试给我们报bug的时候,从来都不会说你代码哪里错了,只是把现象给出,再加上复现的步骤。
同时也说清楚影响范围,多久恢复,让大家放心,知道影响面。
2. 交代错误原因
用直白的语言,说明出错的原理。为什么出错?注意是直白的语言,不是交代代码层面那个函数出错。例如上面的例子,应该说是函数返回值修改导致,而不应该直接说getinfo是一个什么函数,为什么要修改这个函数。
3. 说明引入错误的始末
一般线上bug都是由于变更引起的。究竟是什么变更,为什么会有变更需求,也需要交代清楚。
4. 如何预防
发生bug不可怕,可怕的是重复发生。 吃一堑长一智,不让错误发生第二次,要反思预防的方法,防止再次发生。把预防的方案想好,说出来。
按照上面的顺序会比较清晰、快速地描述清楚线上bug。让听众能够快速了解到影响,和处理方式。
描述清楚线上bug是每个程序员都要必备的能力之一,也是日常经常遇到的场景。 掌握先交代背景和影响,再说明错误原因和如何预防,是一种行之有效的描述方法。
延伸阅读
通用的方法论可以学习《金字塔原理》《问题的分析与解决》中的SCQA、MECE等方法,这些才是根本,要努力学习和刻意练习才能够掌握。
Recommend
-
77
被现代都市的光鲜亮丽所吸引,仿佛全北京都是三里屯
-
27
“ 处理过线上问题的同学基本上都会遇到系统突然运行缓慢,CPU 100%,以及 Full GC 次数过多的问题。
-
33
正如大家所知,大数据建设的目标是为了融合组织数据,增加组织的洞察力和竞争力,实现业务创新和产业升级。而提高数据质量是为了巩固大数据建设成果,解决大数据建设成果不能满足业务要求的问题。并且,数据质量问题不仅仅是一个技术问题...
-
13
今天知识星球发文公告:8月20日之后产生的时候入,对个人用户将收取20%手续费。
-
11
作者:陈陈 一个小故事 周末 12 点的闹钟在回龙观均价 3000 的出租屋急促的响起,程序员小A慵懒的拿过手机,滑开手机通知栏,没有未接电话,点开手机的拦截信箱,没有报警短信,昨晚的发布一定很顺利。小A幸福的伸...
-
4
在 Java 中,文件是很常用的概念,这其中文件路径是一个很基础的内容,因为文件的创建,读取,写入和删除等操作都是依赖于文件路径的。但是你仔细看一下Java中 File的 API 你会发现有这样三个方法返回路径。 getPath(获取路径)...
-
9
设计模式|输入线索:如何让用户清楚该输入什么?浙江大学 工业设计工程硕士本文是《设计模式周周看·Ant Design 为你讲透设计模式》周刊第五期内容,上期内容,我们介...
-
6
借一次线上BUG学习Golang内存模型 线上代码BUG回顾: 主要是 config 配置文件(公共配置版,很多包都会去Init一下),利用全局变量进行替换加载,但是没加锁进行同步控制导致 config 里面对应的值读取有一定概率为 空值;...
-
6
出现线上bug,测试人能做些什么? 原创 多测师11 2022-07-20 10:36:20
-
3
1、锁的四种状态 无锁、偏向锁、轻量级锁、重量级锁 2、Java对象头描述 以下为32位对象头描述
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK