`

修复bug的12个关键步骤

阅读更多

修复bug的12个关键步骤

boss:那么,你需要多长时间来修复这个bug

    没有经验的程序员:给我一个小时?最多两个小时?我能马上搞定它!

    有经验的程序员:这么说吧,钓到一条鱼要多久我就要多久?!

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

      “发现问题理解问题这就是程序员90%的工作。

  很多bug都只需改动某一行代码即可。但是需要投入大量时间的是,后面还得指出怎么样才是正确的——就像我们在钓鱼的时候,得知道往哪里下诱饵,什么时候鱼儿容易上钩等等。话说bug有四种类型:第一种易寻易修复,第二种难寻易修复,第三种易寻难修复,第四种难寻难修复。最悲剧的就是最后一型的,不但寻寻觅觅,凄凄凉凉戚戚,哪怕终于千辛万苦滴水穿石,也只能在那边不由自主地抓耳挠腮,无奈叹一句路漫漫其修远兮。可以这么说,除非是新鲜出炉的代码,不然让你找bug就跟瞎子摸象一样——糊里糊涂,不知道归属于哪种bug类型。



 

 

<!--[if !supportLists]-->一、        <!--[endif]--> 查找和修复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的影响和严重程度。

<!--[if !supportLists]-->二、        <!--[endif]--> 找到bug,还是修复bug,哪个需要更多时间?

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

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

发现/修复

修复时间<=5

修复时间>5

能重现问题

72.5%

18.4%

难以重现或根本没法重现

5.9%

3.2%

  所以如果你打赌说你能很快修复bug,大多数情况下你还真没说错。不过当你打赌输了的时候,那么,嘿嘿,就意味着你有大麻烦了,顺便介绍个不错的平台—DevStore,源码下载,第三方服务,很实用。

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

 

from  http://demon614.iteye.com/blog/2126515

分享到:
评论

相关推荐

    072源码大量修复_072已大量修复BUG_072源码_

    修复BUG是提高软件质量、用户体验的关键步骤,也是持续改进和优化软件生命周期的一部分。 其次,关于组队任务、技能任务和转职任务,这些都是游戏中常见的功能模块。在游戏开发中,这些模块涉及到玩家之间的交互、...

    windows server 2008 r2 bug修复补丁

    在Windows Server 2008 R2操作系统中,可能会遇到一个严重的性能问题,尤其是在服务器环境中,这涉及到套接字(socket)资源的管理。...因此,及时更新系统补丁,是保持IT基础设施健康运行的关键步骤。

    uview左滑组件 group-swipe-action-item:修复bug,左滑删除当前行,下一项自动打开左滑删除场景

    修复这个bug可能涉及到以下步骤: 1. **分析问题**:首先,开发者需要重现这个问题,理解为什么左滑删除会触发下一项的左滑状态。 2. **定位代码**:然后,通过断点调试,查看相关事件的触发和传播路径,找出可能...

    关于一些bug的修复问题的解决

    在IT行业中,修复bug是软件开发过程中的常态。"关于一些bug的修复问题的解决"这一标题揭示了我们要探讨的核心内容:如何有效地诊断、定位并修复软件中的错误,以提高程序的稳定性和用户体验。在软件工程中,bug是指...

    phpcmsv9 bug修复文档

    **phpcmsv9 bug修复文档** phpcmsv9是一款基于PHP开发的内容管理系统,广泛应用于企业网站建设和个人博客等场合。然而,在使用过程中,用户可能会遇到各种bug,影响系统的正常运行和用户体验。本文档将详细讲解如何...

    duilib UITreeView bug修复2

    在IT行业中,UI框架是构建用户界面的关键工具,Duilib是一个流行且开源的Windows平台上的UI库,尤其适用于快速开发桌面应用程序。这个压缩包文件"duilib UITreeView bug修复2"显然针对的是Duilib中的一个特定组件...

    CloudStack 生产环境创建patch修复bug

    对于不愿意等待官方新版本发布的用户而言,创建和应用patch来修复bug便成为了解决问题的有效手段。本文内容将详细介绍如何在CloudStack生产环境中创建patch以及相关的版本控制和代码修改知识。 首先,我们需要了解...

    BUG记录模版(带汇总、统计、分析功能)

    4. **步骤复现**:列出重现BUG的步骤,让开发者可以按照这些步骤尝试复现问题。 5. **期望结果与实际结果**:明确指出在正常情况下应出现什么结果,以及实际观察到的结果是什么,对比有助于理解问题的本质。 6. **...

    软件测试 BUG管理 经验和实践

    BUG管理涉及几个关键步骤:报告、分类、优先级设定、追踪和关闭。当测试人员发现BUG时,他们需要详细地记录问题,包括复现步骤、影响范围和期望结果,以便开发团队能快速理解和修复。分类则帮助组织和优先处理BUG,...

    积木报表换行bug修复的资源

    5. **测试与调试**:修复BUG不仅仅是编写新的代码,还需要进行充分的测试以验证问题是否已被解决,这可能涉及到单元测试、集成测试和系统测试。此外,使用调试工具进行逐步执行,查看变量状态也是必不可少的步骤。 ...

    bug管理系统--我的备份

    在IT行业中,Bug管理是软件开发过程中的一个关键环节,它确保了软件的质量和稳定性。"bug管理系统"是一个专门用于追踪、记录、修复和预防软件缺陷的工具,它帮助开发团队高效地处理软件中的错误和问题。下面我们将...

    designer-bug-20120525

    修复bug是软件开发过程中的常规步骤,它有助于提升软件的可靠性和性能,减少用户遇到的故障或异常情况。 【标签】"oryx jbpm designer" 提供了更多关于这个设计师工具的背景信息。"Oryx"通常指的是Oryx编辑器,这是...

    uilib gdi泄漏bug修复

    修复这个问题的关键在于确保对象生命周期管理和资源释放的正确性。 修复GDI泄漏的常见步骤包括: 1. **追踪GDI对象创建**:使用调试工具(如Visual Studio的诊断工具或第三方内存检测工具)来定位创建GDI对象的...

    交友盲盒5.0源码修复bug更新版源码.zip

    【交友盲盒5.0源码修复bug更新版源码】是一个针对线上交友应用的软件开发项目,旨在提供一个新颖的社交体验。该版本源码是针对先前版本的bug进行了修复和完善,确保了系统的稳定性和用户体验。源码是程序开发的基础...

    mmseg4j-1.9.1 分词器 包含修复bug的mmseg4j-analysis-1.9.1.jar

    中文分词是处理中文文本的关键步骤,因为中文没有明显的空格来区分单词,因此需要借助算法进行词语切分。mmseg4j采用的是MaxMatch(最大匹配法)算法,它结合了动态规划的思想,能够根据词汇库找出最长的可能词语...

    Bugfree3.0用户手册v1.0.docx

    Bug 处理过程主要包括新建 Bug、解决 Bug、验证 Bug 三个步骤。新建的 Bug 可以通过编辑指派给合适的解决者,解决 Bug 之后状态变为 Resolved,并自动指派给创建者。创建者验证 Bug,如果未修复,再重新激活,Bug ...

    sdcms2.2_数据库备份插件亲测已修复bug

    首先,我们来看标题提到的“sdcms2.2_数据库备份插件亲测已修复bug”。这意味着开发者针对SDCMS2.2的原生备份插件进行了一次全面的排查和修复工作,解决了原有的问题,提高了插件的稳定性和可靠性。修复的bug可能...

    Bug状态流程描述--简便

    4. **修复(Fixed)**:开发人员修复Bug后,会将状态更改为“修复”,同时可能提供一个修复版本号或者代码分支供测试验证。 5. **验证(Verified)**:测试人员收到修复的Bug后,会进行重新测试,确保问题已被正确...

    006RJPOS:增加实现JVM的6条指令,修复若干BUG

    修复BUG则是维护和提升软件质量的关键步骤。在JVM中,BUG可能导致程序崩溃、性能下降或者安全性问题。修复这些BUG可以提高程序的稳定性,减少运行时错误,同时也有助于优化资源使用,使得整体性能得到提升。 描述中...

    淘宝bug展示图片

    10. **修复策略**:修复bug通常包括复现问题、定位原因、修改代码、测试验证和上线部署等多个步骤,每一步都需要专业技能和严谨态度。 在淘宝这样的大流量平台,bug管理通常涉及严格的流程,包括bug报告、优先级...

Global site tag (gtag.js) - Google Analytics