首页 程序笔记 修复bug的12个关键步骤

修复bug的12个关键步骤

要多少时间才能修复bug,事先是很难知道的,特别是如果你和这些代码还素不相识的话,情况就更加扑朔迷离了。James Shore在《The Art of Agile 》一书中,明确指出要想修复问题得先知道问题的所在。而我们之所以无法准确估计时间是因为我们不知道需要多久才能发现症结的所在,只有清楚这一点,我们才能合理估计修复bug所需要花费的时间。不过,这个时候恐怕黄花菜都凉了。

很多bug都只需改动某一行代码即可。但是需要投入大量时间的是,后面还得指出怎么样才是正确的——就像我们在钓鱼的时候,得知道往哪里下诱饵,什么时候鱼儿容易上钩等等。话说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需要耗费你很多时间,那么一定要好好弄清楚原因”。此外,还需要思考的是,怎么做才能吸取经验教训,将来在类似的问题上不再栽跟头?以及,我们采用的方法、使用的工具是否还有可以改进的地方?以及这些bug的影响和严重程度。

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

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

在《Making Software》一书中,有一章主要是探讨“大部分的软件漏洞的来源”,Dewayne Perry分析认为,相较于修复,发现bug(包括理解bug和重现bug)所需时间更长。有研究表明,大多数的bug(差不多有3/4)既易于发现又易于修复:5天或许更少(这是基于大规模实时系统通过重量级SDLC、大量审查和测试得出的数据)。但是也有很恶心的bug,即便你可以轻轻松松揪到它,还是还得“呕心沥血”才能修复好。

所以如果你打赌说你能很快修复bug,大多数情况下你还真没说错。不过当你打赌输了的时候,那么,嘿嘿,就意味着你有大麻烦了。

所以,下次,boss再问什么时候能修复bug,别再傻乎乎地回答“马上就能搞定”了。

2

站心网

要多少时间才能修复bug,事先是很难知道的,特别是如果你和这些代码还素不相识的话,情况就更加扑朔迷离了..

为您推荐

如何修复 Linux 终端中的“apt-get:找不到命令”

在 Linux 上使用 apt-get 命令遇到困难?以下是修复终端中的错误的方法。要点如果您遇到“apt-get:找不到命令”错误,请确保您使用的是基于 Debian 的 Linux 发行版。如果您使用不同的发行版,例如 CentOS 或 RHEL..

修复 Ubuntu 上“E: 无法找到软件包”错误的 5 种方法

如果您在 Ubuntu 上安装软件包时遇到“E:无法找到软件包”错误,请不要担心,因为修复它很容易。要点定期更新软件包列表,以维护安全且最新的 Ubuntu 系统,确保访问最新的软件包、安全补丁、错误修复和改进的依赖..

免费在线图像修复和放大工具 Inpaint-web

Inpaint-Web 是一款易于使用的工具。用户只需将需要修复的图像上传到 Inpaint-Web 网站,然后选择要修复的区域,Inpaint-Web 就会自动修复图像。Inpaint-Web 基于 WebGPU 技术开发,可直接运行在浏览器上,无需客户..

Fedora 39 发布 - 在计算机中安装它的步骤

Fedora 39 的漫长等待终于结束了! Fedora Workstation 正式发布,它采用 GNOME 45 桌面环境,在可用性和性能方面进行了许多增强。随着 Fedora 39 的发布,Fedora Onyx 也随之发布,它是在不可变的 Fedora Silverblu..

如何在 Ubuntu 24.04 上安装 Kubernetes(完整步骤)

您对如何在 Ubuntu 24.04 (Noble Numbat) Linux 系统上安装 Kubernetes 感兴趣吗? Kubernetes 是一个开源容器编排系统,它彻底改变了服务的部署、管理和扩展方式。它提供了一个标准化平台,开发人员和系统管理员可..

Ubuntu 24.04 中的 OneDrive 文件访问问题?这是一个修复

Ubuntu 24.04 LTS 中的(许多)便捷新功能之一是能够通过 Nautilus 文件管理器作为远程挂载访问 OneDrive 文件。这是通过 msgraph 包、Nautilus 可以使用的新 gvfs 后端、通过 GNOME 在线帐户 (GOA) 进行帐户集成以..

修改文章后时间变为1970年的修复

有的说修改JS 有的说的含糊不清我给你们一个具体的修改方案吧 十分完美的解决了官方的这个BUG打开inc目录 artic_function.php搜索:function post_edit(){在下面看见了else{$postdb['list']=($rsdb['lis..

发表回复

返回顶部