作者: Jim Bird  来源: CSDN  发布时间: 2012-09-13 10:43  阅读: 4224 次  推荐: 18   原文链接   [收藏]  

  英文原文:Fixing
a Bug is Like Catching a Fish

经理:该Bug何时能得到修复?

经验缺乏的程序员:也许一个小时?最多两个小时!马上去做!

经验丰富的程序员:嗯,捉一条鱼需要多少时间呢

  在现实操作中,很难能明确知道一个软件缺陷需要多久可以修复,尤其是当你对代码不了解的情况下。James Shore在“敏捷开发艺术”一书中指出:“在你需要修复Bug时,你必须找到是哪里出错了?”,问题的关键是不能准确估算多久才能找出是哪里报错的。只有知道“病源”在哪?你才能准确估算修复的时间。但那为时已晚,根据Steve
McConnell

“发现缺陷——理解缺陷——通常占了工作的90%”。

  有许多缺陷只需要改一行代码就可以修复。时间都花在确定该行上面,就好像钓鱼的时候该把鱼钩放哪?何时何地鱼会上钩一样。每个Bug都有它们自己的性格特征,有些可能很容易被发现,而有些可能会跟你玩“捉迷藏”,并且容易发现的Bug不一定就很难修复,当然,那些擅长玩“隐藏”的Bug有可能很容易被修复。

  查找和修复

  下面让我们来看看如何发现并修复Bug。当调试时,Paul Butcher把每个步骤都进行了很好的描述。经验丰富的程序员会很熟悉这种结构化和纪律性的步骤要领。

  1. 确定查找目标,审查Bug报告,看看该Bug描述是否很合理并且提供了足够的信息去发现和重现。检查一下该报告以前是否遇到过,如果是,可以检查以前是如何处理的。
  2. 清理桌面——找到正确的代码并检查、清理工作空间。
  3. 设置与之匹配的测试环境。这可能是微不足道的,或者是不可能出现的,如果客户是在一个你无法访问的配置下运行。
  4. 对代码的理解已经毫无问题,并且通过现有的测试套件。
  5. 钓鱼的时间到了,重现并且诊断错误。如果你不能重现这个错误,那么就无法去修复。
  6. 写新的(失败的)开发测试报告或者修复现有测试报告来捕捉Bug。
  7. 进行修复——确定没有破坏其他功能模块。这里可能会包括,在修复之前对代码进行重构使代码更容易被理解,并且使整个修复更安全。在后面的回归测试中确保没有引入任何新的错误。
  8. 努力让代码更安全,更清洁,做一些循序渐进的重构确保代码更健壮并且易于维护的。
  9. 修复完成后,让他人进行审查,确保你没有做一些愚蠢的事情。
  10. 再次检查。
  11. 检查该Bug在其他分支中是否存在,如果你不是主线,你可以在里面进行合并,然后在代码里面进行处理,并且浏览所有相同的评论和测试报告。
  12. 结束并且进行思考和总结。明白是哪里出错了?为什么?是否真正理解自己的修复?在别的地方还会发现这个错误吗?在Pragmatic
    Programmer
    ,Andy Hunt和Dave Thomas也同样问了这样的问题:“如果你花了很长时间去修复这个Bug,问问自己,到底是为什么?”在将来,如何让该Bug更容易被发现和修复?如何提高修复方法或许是使用工具?思考的是否深入,要看这个Bug影响和所花的时间有多长?

  发现和修复需要多久

  设置测试环境所需的时间,重现一个Bug或者修复可能远远超过在代码中查找和修复的时间。但是对于那种小缺陷,在发现时即可修复。

  在软件开发中,关于大多数软件缺陷来自哪里?Dewayne
Perry解释到:发现一个Bug(理解并重现Bug)比多久去修复更难。研究发现,大多数Bug(几乎3/4)很容易被发现和理解,并且不会花多少时间去修复:5天或更少(这是在大型实时系统与一个重量级的SDLC中,经过大量检查和测试发现的)。这里有一个长期隐藏型Bug,可能需要花更长的时间修复,即使这个Bug微不足道:

发现/修复工作 小于5天修复 大于5天
缺陷可以重现 72.5% 18.4%
很难或者不能重现 5.9% 3.2%

  所以在你发现Bug的时候,可以和自己打赌,它很快就会被修复,这个命中率会很高。但是当打赌失败时,你可能会错很多,或者彻底来个大错特错。

修复Bug好比钓鱼的更多相关文章

  1. [课程设计]Scrum 3.5 多鱼点餐系统开发进度(修复Bug&美化页面)

    Scrum 3.5 多鱼点餐系统开发进度(修复Bug&美化页面) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队选题:餐厅 ...

  2. [转载]基于TFS实践敏捷-修复Bug和执行代码评审

    本主题阐释了这些功能,以继续这一关注虚拟敏捷团队成员的一天的教程. Peter 忙于编写一些代码以完成积压工作 (backlog) 项任务.但是,他的同事发现了一个阻碍他们工作的 Bug,他想立即修复 ...

  3. Cordova webapp实战开发:(7)如何通过简单的方法做到,不重新发布APP来修复bug、增加功能、或者躲开苹果的一些严格审核?

    到<Cordova webapp实战开发:(6)如何写一个iOS下获取APP版本号的插件?>为止,我们已经大体学会了如何使用Cordova了,那些都是使用Cordova的开发者必备的技能. ...

  4. [课程设计]Scrum 1. 9 多鱼点餐系统开发进度(最后页面完善&修复BUG&用户测试反馈)

    [课程设计]Scrum 1. 9 多鱼点餐系统开发进度(最后页面完善&修复BUG&用户测试) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢 ...

  5. CloudStack修复bug

    CloudStack应用越来越广,但是随着测试也遇到了越来越多的bug. 不想等待新版本发布而且又急于修复某些bug的童鞋,可以参考下本文内容. CloudStack是java语言写成,发布时会发布为 ...

  6. 献身说法---修复bug时的一些小技巧

    最近,修复了项目当中的一些bug,觉着有些思路可以分享出来供大家借鉴. 场景一 开发环境中系统正常运行,测试环境中,部分机器未能正常运行. 解决过程:远程连接了测试环境中的机器,观察了系统的运行情况, ...

  7. 修复bug有哪些更快的技术?做好这6点就够了

    你有没有想过为什么有时修复错误似乎比它应该花费更长的时间?当你终于找到问题时,事实证明你所需要的只是一个小小的改变.然而,花了很多时间才能找到正在发生的事情.这种情况比我想象的更频繁. 另一方面,当您 ...

  8. 程序员:统治世界or修复bug?

    程序员:统治世界or修复bug? 时至今日,我们依然生活在一个市场和技术受到高度崇拜的世界里,但是历史演化的规律提醒着我们:当一个东西开始成为社会崇拜的对象时,其中暗藏的不利因素将悄然的进行着.有人认 ...

  9. 使用Git分支开发新特性或修复Bug与使用Git分支开发新特性或修复Bug

    使用Git分支开发新特性或修复Bug 通过分支,可以在不影响原有代码的前提下改变代码,主要用于开发新功能新特性.下 一代产品 为已经发布的正式版修复bug 团队开发时为每个人建立一个分支,从而避免相互 ...

  10. Git 之 修复bug

    前面介绍了Git版本控制,为我们省去了很多不必要的麻烦. 回滚 有没有想过,在我们开发过程中,修改需要是常有的事,如果我们现在不想要这个功能了,那么如何回到之前的版本呢?回滚,回到上一个版本. 那如果 ...

随机推荐

  1. 【论文解读】Faster sorting algorithm

    一.简要介绍     基本的算法,如排序或哈希,在任何一天都被使用数万亿次.随着对计算需求的增长,这些算法的性能变得至关重要.尽管在过去的2年中已经取得了显著的进展,但进一步改进这些现有的算法路线的有 ...

  2. Readme3.0 Final

    Download Using 解压后放于不明显的地方 打开Devc++,点击 工具 > 编译选项 > 目录,在 C包含文件 与 C++包含文件 中复制完整路径并添加 选中刚添加的路径后,点 ...

  3. 第41天:WEB攻防-ASP应用&HTTP.SYS&短文件&文件解析&Access注入&数据库泄漏

    #ASP-中间件-CVE&短文件&解析&写权限 -HTTP.SYS(CVE-2015-1635) 1.漏洞描述 远程执行代码漏洞存在于 HTTP 协议堆栈 (HTTP.sys) ...

  4. 【赵渝强老师】Redis案例分析:用setbit统计活跃用户

    一.需求背景 首先,我们来看一下需求:网站统计用户登录的次数,具体如下: 网站有1亿个用户,有经常登录的,也有不经常登录的 如何来记录用户的登录信息 如何查询活跃用户:比如:一周内,登录3次的 二.使 ...

  5. android 代码如何增加atrace跟踪

    在 Android 代码中增加 Atrace 跟踪,可以使用 Android 提供的 android.os.Trace 类.这允许你在应用代码中手动添加自定义的跟踪点,以捕获特定代码段的执行情况.以下 ...

  6. Android Perfetto 系列 2:Perfetto Trace 抓取

    使用 Perfetto 分析问题跟使用 Systrace 分析问题的步骤是一样的: 首先你需要抓取 Perfetto 文件 在ui.perfetto.dev 中打开 Trace 文件进行分析或者使用命 ...

  7. Android复习(五)设备兼容—>屏幕适配

    1. 适配使用的布局 目前版本Google还是希望开发者通过 ConstraintLayout 布局完成适配 2. 对于特定屏幕 创建备用布局,即在res/layout/目录下创建对应尺寸的布局文件 ...

  8. OpenAI官方开源多智能体框架「Swarm」,并不是我想要的多智能体框架

    今天早上,OpenAI实施团队的 @shyamal在Github上开源了Swarm这个OpenAI官方的多智能体框架.不得不说,OpenAI官方下场,获得的社区影响就是不一样,在微信群.朋友圈里已经出 ...

  9. Nessus 安装 笔记

    Nessus 安装 笔记 根据 https://www.zwnblog.com/archives/nessus-jie-shao-yu-an-zhuang#2.kali%E5%AE%89%E8%A3% ...

  10. Oracle ASM 常用巡检脚本

    1.查看磁盘组 sqlplus "/ as sysasm" set line 200 set pagesize 200 select group_number,name,state ...