阅读更多

7顶
0踩

非技术
引用
本文由伯乐在线 - Jyy 翻译
英文出处:Henrik Warne




Bug 是绝佳的学习机会。所以我们怎样尽可能多地从修复的 bug 中吸取经验?我至今已经用了 13 年的一个方法是,写下这个 bug 的简单描述、修复方法以及吸取的经验。

遥想 2002 年,我偶然发现一篇描述这个方法的博客(很不幸,我没再找到)。我从那时起就使用这个方法了,并且相信它能帮助我成为一个更出色的程序员。

每当我修复一个特别棘手或有趣的 bug,我总会花几分钟写下一些这个 bug 的信息。这有一个典型记录的例子:
例子
引用
【日期】:2004-08-17

【问题】:当解码 Q.931 信令时无限循环

【原因】:当在Q.931信令中发现一个未知的元素id时,我们试图通过读取它的长度来跳过它,并且将位置指针迁移几个字节。但是,在这个例子中的长度是零,导致我们反复跳过相同的元素id。

【怎么发现的】:在解码一个 Ethereal 从 Nortel 追踪到的安装信息时发现了这个问题。他们的信息是 1016 字节长度(包含大量快速启动元素),但我们的 MSG_MAX_LEN 是 1000。通常我们会收到一条来自 common/Communication.cxx 的信息,但现在,当直接输入需要解析的数据时,数组末端内存访问越界,其恰好是 0,暴露了这个问题。

为了找到它,我仅仅在 9931 解码中添加一些打印输出。但很幸运数据恰好是零。

【修复】:如果长度是零,设置为 1。这方式总是行得通。

【在哪些文件修改了】:
callh/q931_msg.cxx
callh/q931_msg.cxx

【我导致的】:是的

【解决Bug的时间】:1小时

【教训】:信任收到信息中获得的数据。不仅仅是产生大量可能导致问题的数据。显示长度为 0 也同样不好。

实施方式

我有一个命名为 bugs.txt 的纯文本文件。在文件的顶部是一个具备所有标题的模板,但是没有包含信息。当我添加一个新的记录,我复制模板部分,粘贴在模板下面。然后完成记录并且填满信息。大多数展示在上面例子中的 fields 应该是不需要声明的。

有必要指出这并不是 bug 追踪器。我并没有添加所有我修复的 bug 。例如,如果我只是忘记在代码中添加声明,一旦发生这种情况,我就意识到问题出在哪里了,我并不会添加这条记录。仅仅当 bug 本身,或是修复,或是调试过程特别有趣,我才会添加一条新的记录。通常,是我导致了这个 bug。但是偶尔,特别是花几天时间才追踪到的困难 bug,尽管不是我造成的我也会添加一条记录。

一旦修复了一个 bug,我的第一反应是松了口气然后继续前进。我试着一更正后就写下这个记录。这时我的脑海中依然清晰保留所有的细节。拖延会让精确回忆发生的事情变得很困难(或者我压根忘记写下这条记录)。

至今,我已经有 194 条记录,平均每个月有一条新的记录。最重要的是教训部分。这里需要自我反省。是什么导致这个 bug 的特殊性?我发现经验常常来自于三个不同的方面:

编码。我在代码中犯了什么错误?我是否忘记了 else 部分代码?是否系统调用失败,但没有检查 response?我在未来应该怎么调整代码来防止这些问题?

测试。一般不包括本可以在测试中捕获的 bug 。要是这样的话,应该在哪个阶段测试——单元、功能、系统?丢失了哪个测试用例?

调试。我本可以怎样快速定位 bug?我是否使用了正确的方法?我是否假定了太多?我是否需要在代码中使用更好的日志记录?

益处

Nassim Nicholas Taleb 在《Antifragile》中写到:“错误包含丰富的信息”。我完全同意这个观点。Bug 帮助我们更好地理解系统,告诉我们怎样提高编码、测试和调试技巧。所以我认为尽可能从 bug 中学习经验,是再正常不过的事了。

我发现为每个有趣的bug记录下来,让我轻易学习到很多。在记录的行为中我会对发生的事情思考得更深刻。同样,一旦记录下来,我可以在之后检查发生的事情。偶尔,我也会浏览文件,只阅读教训部分,对我认为是从 bug 中学到的最有价值的经验加强记忆。

我记录 bug 文件至今已经有 13 年了。这是一段漫长的时间,但是我坚持下来了,因为作为一名程序员,它帮助我进步。尝试一下吧,看看它是否也对你有益!
  • 大小: 37.4 KB
来自: 伯乐在线
7
0
评论 共 1 条 请登录后发表评论
1 楼 samrenyou2 2016-10-18 17:17
的确每次遇到bug都能学到东西,不管是别人还是自己,那是对代码的一种了解,如今开发两年,虽然至今没有记录bug情况,但脑海还是存在不少bug情况解决办法和寻找办法。日记demo我拿下了,谢谢了

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 遇到程序员不修改bug时怎么办?我教你

    可能是觉得封版之前bug就应该全部解决(强迫症),也可能是觉得程序员没有理解bug的严重性,也许是bug明显违反规范,也可能是觉得缺陷肯定会影响到用户。 5、我们为什么难以说服程序员去修改那些bug? 说一说我看到...

  • 【C/调试实用技巧】—作为程序员应如何面对并尝试解决Bug?

    面对Bug应如何进行调试,通过具体代码进行调试分析,进一步帮助理解。

  • Chat GPT横空出世,会替代程序员吗?

    如果你问它,一辆车从A到B需要2小时,五辆车从A到B需要多久,它会回答10小时,所以现在还是继续精进你的代码能力,以备以后有机会取代你的职业。 如今的AI,文能写诗、画画、搞创作,武能编码、分析、做高数,本以为...

  • 有哪些事是你当了程序员之后才知道的?

    比如程序员真的不好找女朋友

  • @程序员,这四个学习建议值得收藏

    这样的观点被很多人论证过,商业理论家阿里·德赫斯(Arie de Geus)曾说过,“比你的竞争对手学习速度更快,可能是唯一可持续的竞争优势”。 如今,IT 技术更新日新月异,不论是新版本的更新还是新框架的产生,都以...

  • 程序员坐牢了,会被安排去写代码吗?

    加个“星标”,每天和你一起多进步一点点! 今天给大家分享一篇有意思的爽文,但也是根据多年之前一个真实报道改编而来的。 本文字数较多,建议先收藏,上下班路上、带薪上厕所、浑水摸鱼时再慢慢看~ 来源: ...

  • 听说你们害怕异常?保姆式的图文手把手教你如何调试出程序的 bug

    程序中出现的错误,但又没有通过异常去捕获,以至于直接抛出,从能导致程序的崩溃,继而造成对应的功能未达到想要的效果,这就是我们经常说的 `程序出bug了`。测试工程师一般也会将软件缺陷叫做 bug,当然了这是一种...

  • 程序员如何在复杂代码中查找到程序的bug?

    程序员新人怎样在复杂代码中找 bug? 姚冬,程序员: 我曾经做了两年大型软件的维护工作,那个项目有10多年了,大约3000万行以上的代码,参与过开发的有数千人,代码checkout出来有大约5个GB,而且bug特别多,...

  • 程序员遇到 Bug 时的 30 个反应,你是哪一种?

    点击下方“前端开发博客”关注公众号回复“2”加入前端群开发应用程序是一个非常有压力的工作。没有人是完美的,因此在这个行业中,代码中出现bug是相当普遍的现象。面对bug,一些程序员会生气,...

  • 优秀的程序员真的不写注释吗?

    有些大牛也有孟子这样的觉悟,如果有人要他给自己的代码加上注释,就好像是对他的一种侮辱:“我的代码写得这么优雅,你难道看不懂吗?注释是多余的!” 我必须得承认,每个程序员都应该有一颗追求“优雅”的心,...

  • 新手程序员怎么修改bug?贯穿debug的经验,送给你们~

    2. 对于某些bug没有头绪或者现象古怪不知道从哪里下手,找有经验的同事问一下思路,因为在那种开发多年的大型系统里,经常会反复出现同样原因的bug, 原因都类似,改了一处,过一阵子另外一处又冒出来,而且无法...

  • 在中国程序员工作是青春饭吗?

    现在的互联网公司摇身一变,在招聘市场上从“买家”变成了“卖家”,如果要招聘一个初级程序员,便会有成百上千份简历投来,再从这些简历中来挑选。 由于初级程序员的技术门槛较低,即便平均薪资较低但是竞争也十分...

  • 程序员不修改Bug,我们该怎么办??

    不久前,笔者身边一位测试老人提了一个打印文字溢出的缺陷,但该缺陷的负责人,一个年轻的程序员以项目临近上线没时间修改,且该缺陷影响很小而驳回,态度强硬(强硬的诉苦),那位测试专家从开始的坚持到最后无奈...

  • 11款程序员实用工具,老少皆宜,你一定用得上

    今天给大家分享11个程序员建议收藏的工具,老少皆宜,尤其是新手程序员,技术水平一时半会儿可能难以提升,需要持之以恒地学习和练习,但工具用得好,做事效率是可以快速提升的。 一、CSDN浏览器助手(开发者必备的...

  • 如何正确的跟程序员提交bug问题?学会这个,轻松应对!

    报告bug的最好的方法之一是“演示”给程序员看。让程序员站在电脑前,运行他们的程序,指出程序的错误。让他们看着您启动电脑、运行程序、如何进行操作以及程序对您的输入有何反应。 他们对自己写的软件了如指掌,...

  • 你印象中的程序员是什么样子的?

    不知道大家对程序员的印象是什么样的 前阵子爱情公寓5出来了,一时间所有的热度都被爱5占领了。很多人在下面评论说,等了那么久,终于等到它来了。然后我看到,评论里最多的一句话是,“爱情公寓是我们90后的青春”...

  • 程序员的bug修复宝典

    程序员对bug的感情可谓是五味杂陈:一方面bug非常可恶,尤其是一些偶现的bug,它强大到可以摧毁一个优秀程序员的意志;另一方面很多bug又是程序员自己亲手写下的,无奈之余只能自嘲一句:不写bug我们就要失业了! ...

  • 程序员,如何从平庸走向理想?

    如何成为一名理想程序员?

  • ChatGPT修bug横扫全场,准确率达78%!程序员该开心还是难过?

    但若是你现在再重头问一次这个问题,就会发现ChatGPT可以“一遍过”: 那么这是否意味着ChatGPT已经从这次研究过程中学会求解了呢? 参考链接: [1] https://arxiv.org/abs/2301.08653 [2] ...

  • 程序员如何学习

    不断的输入又不断地输出,水池的容量以及水的质量决定了输出的高效与否,输入大于输出,你的池塘就会不断扩大,换句话说你会的技能就越来越多,只输入不输出,你的池塘就是一滩浑浊不堪的死水,一实操就bug满屏。...

Global site tag (gtag.js) - Google Analytics