程序员要懂的12个修复bug关键步骤

创业
onlyhome 2017-4-12 22:28:42 4463 1 来自 中国
要多少时间才能修复bug,事先是很难知道的,特别是如果你和这些代码还素不相识的话,情况就更加扑朔迷离了。
141129cukwyyyg2wemkh7m.png
James Shore在《The Art of Agile 》一书中,明确指出要想修复问题得先知道问题的所在。而我 们(藏宝库-28xin.com)之所以无法准确估计时间是因为我 们(藏宝库-28xin.com)不知道需要多久才能发现症结的所在,只有清楚这一点,我 们(藏宝库-28xin.com)才能合理估计修复bug所需要花费的时间。不过,这个时候恐怕黄花菜都凉了。


Steve McConnell曾说过:
“发现问题—理解问题—这就是程序员90%的工作。”


很多bug都只需改动某一行代码即可。但是需要投入大量时间的是,后面还得指出怎么样才是正确的——就像我 们(藏宝库-28xin.com)在钓鱼的时候,得知道往哪里下诱饵,什么时候鱼儿容易上钩等等。


话说bug有四种类型:

  • 第一种易寻易修复,
  • 第二种难寻易修复,
  • 第三种易寻难修复,
  • 第四种难寻难修复。


最悲剧的就是最后一型的,不但“寻寻觅觅,凄凄凉凉戚戚”,哪怕终于千辛万苦滴水穿石,也只能在那边不由自主地抓耳挠腮,无奈叹一句“路漫漫其修远兮”。


可以这么说,除非是新鲜出炉的代码,不然让你找bug就跟瞎子摸象一样——糊里糊涂,不知道归属于哪种bug类型。



查找和修复bug



你知道“查找和修复bug”意味着什么吗?没错,就是调试!不断的调试,无数次的调试!


Paul Butcher通过大量工作,总结出以下结构化的步骤:


1.明确目的。仔细查阅异常报告,确定是否是个bug,找出各种有用的信息发现问题的症结,予以重现。再次检查是否与报告发生重复。如果发生重复,那看看曾经的相关人员是如何处理的。


2.准备工作——找出正确的代码,用排除法清理工作区域。


3.匹配测试环境。如果客户正在操作计算机配置,那么此过程可以跳跃。


4.明确代码的用途,确保现有测试工具一切正常。


5.好了,现在可以出发钓鱼去咯——重现和诊断错误。如果你不能做到重现,那你就不能证明你已经完成修复工作。


6.编写测试案例,或者通过现成的测试案例来捕获bug。


7.进入修复模式——请务必确保不会影响到其他任何部分。但是,在开展修复工作之前,可能你还要包揽重构工作,因为只有这样,你才能无所顾忌地捣鼓代码。而且事后回归测试,还能确保你不会加入任何新的bug。


8.整理代码。通过一步一步重构,让你的代码更易于理解,更安全。


9.找别人来审查一下,当局者迷旁观者清。


10.再次检查此修复过程。


11.试着不从主线出发,以检查这些bug是否会影响其他支线。合并这些变化,处理代码中的差异,回顾所有的审查和测试等工作。


12.思考。好好想一想哪里错了以及为什么错了?为什么你的修复会起效?这种类型的bug还会出现在哪里?


在《 The Pragmatic Programmer》一书中,Andy Hunt 和Dave Thomas也如是指出“如果一个bug需要耗费你很多时间,那么一定要好好弄清楚原因”。


此外,还需要思考的是,怎么做才能吸取经验教训,将来在类似的问题上不再栽跟头?以及,我 们(藏宝库-28xin.com)采用的方法、使用的工具是否还有可以改进的地方?以及这些bug的影响和严重程度。


找到bug,还是修复bug,哪个需要更多时间?



或许建立一个测试环境、重现问题和测试bug所需的时间,要远远多于找到bug和修复bug的时间。不过对于一小部分显而易见的bug,找到它们很简单——不过修复起来可能就不尽如人意了。


在《Making Software》一书中,有一章主要是探讨“大部分的软件漏洞的来源”,Dewayne Perry分析认为,相较于修复,发现bug(包括理解bug和重现bug)所需时间更长。


有研究表明,大多数的bug(差不多有3/4)既易于发现又易于修复:5天或许更少(这是基于大规模实时系统通过重量级SDLC、大量审查和测试得出的数据)。


但是也有很恶心的bug,即便你可以轻轻松松揪到它,还是还得“呕心沥血”才能修复好。


发现/修复修复时间5天能重现问题72.5%18.4%难以重现或根本没法重现5.9%3.2%
您需要登录后才可以回帖 登录 | 立即注册
感谢分享
2022-8-5 01:38:11 回复

Powered by CangBaoKu v1.0 小黑屋 藏宝库It社区 ( 冀ICP备14008649号 )

GMT+8, 2024-5-17 16:27 , Processed in 0.188976 second(s), 41 queries . © 2003-2025 cbk Team.

快速回复 返回顶部 返回列表