`

Fix Bug的五个阶段

阅读更多

转自:

http://coolshell.cn/articles/4045.html

 

Fix Bug的五个阶段

2011年3月24日陈皓发表评论阅读评论3,659 次点击    

下面的文章和《各种流行的编程方式》有异曲同工,请你不要理解错了。本文来源,翻译如下:

——————————————————

一个非常严重和困难的bug,能够成就一个饱经沧桑深受压力的有经验的专业程序员的职业生涯。经受这种考验的创伤程度,相当你受到了一次严重的身体伤害,离婚,或是家庭成为的离世。

研究人员在研究了计算机编程心理学后,得出了一个程序员们在解决一个困难的bug时的心路里程。这些不同的境界,很像为大众所知的Kübler-Ross Stages of Grief(这个模型描述了人对待哀伤与灾难过程中的5个独立阶段(否认,愤怒,耍赖,抑郁,接受)。绝症患者被认为会经历这些阶段),而且原因都很相似。就好像死亡所伴随的悲伤一样,fix一个bug是一个过程其初始化了一个事件,一开始是拒绝相信,其造就了你苦闷的情绪并开始逐步影响你的心智。这种苦闷的情结果会让你纠结要努力忍受,最终会你会找到一个满意的结果。

了解下面这几个bug-fixing的阶段,会让我们更好的生存下来,并持之以恒,最终带来……关闭我们所有的bug的结果。

第一阶段:抵触

本阶段的状态: 多疑 Skeptical. 生气 Offended. 易怒 Petulant.

1. 不理睬

也许这个bug会安静地离开。

2. 标记上“不是bug”

也许这是用户的错,或是本地配置有问题。是的,我确信就是那样,一会就会好的。

 

3. 就是一次小故障

我想这就是一次小故障,很奇怪地发生了一次,它不会再发生的,虽然没有搞清楚是为什么发生了,不过这就好像我们的数据库,网格,浏览器或别的什么打了几个嗝一样。一会就会好的,我确信。

4. 躲藏.

我要休几天病假,也许他们会把这个bug转给别人的。

5. 标记为“修改需求中”

你看,我是按照需求实现的。如果你们想要改这个行为和UI,就一定要修改需求。也许他们会决定就这样了。

6. 需要更多的信息

我不能确定这是一个bug,除非我能在错误日志中看到一条特定的报错信息。

7. 转给其他人

我调查这个bug中看到了其它模块中我看不懂的数据,问题很大。我应该把这个bug转给开发那个模块的人。我可以在我的模块中检查一下那个边边角角的情况,但是正确的fix应该是在别人的模块中。反正那个在别的国家,我见不着他。

第二阶段:接受

本阶段的状态: 认命 Resigned. 被打击 Defeated. 被激怒 Annoyed.

1. 接受现实

行了,行了,行了!这是我的bug,我会修正它的。

2. 把这个bug放到最后

也许,我可以在我需要fix这个bug之前找到一个新的工作。

3. 和你的经理讨价还价

好的,你看,我可以正确地fix这个问题,不过我需要一个月。也就是说,我可以给这个问题贴个创可贴,那不会真正的解决它,但是我们可以避免用户的抱怨,这可以为我们赢得几天的时间。

4. 为这个bug标记一个无耻的时间

上帝啊,我希望这时间够了。

第三阶段: 投入和沮丧

本阶段的状态: 眼花 Giddy. 头晕 Light-headed. 紧张 Nauseous.

1. 开始调查

我能搞定它,我能搞定它!只需要小小的调整一下,小小的关注一下,多一点咖啡因,再加上一点时间,我能搞定它。

2. 迷惘

Shit. 这太扯了。我居然没有一点进展。这代码真是乱。这样的代码居然能编译和运行,真TMD的神奇,我有机会能搞清楚它什么不正常吗?

3. 再次躲藏

你看,很对不起。我不得不要去切除我的阑尾。再一次,是的,既然你提到了它,我的确有两个阑尾。现在我一个也没有了,你高兴了吧?。

4. 犯贱

好吧,总之,你到底期望什么?想让我在一个没有高级调试器的环境下改这个BUG。我是什么?千里眼吗?我在我的Commodore 64上一个更好的调试器!

5. 瞎搞

看看我试试这么改?Kao,这样不行。要不然这样搞?也不行。那么那样搞呢?Shit,居然变得更糟了。

6. 绝望

我不可能fix这个bug了。我是个糟糕的程序员。我太笨了。我在这个满是聪明人的地方干什么?迟早他们会知道我的能力太差,那时我就玩完了,在这也混不下去了。

7.耻辱

我的经理问我为什么我用了一个月的时候来fix这个只需要两天就可以解决的bug?老实说,我不知道怎么去读日志信息,我搞坏了我们的编译脚本。现在,我不敢去让别人来帮我,因为这样只会让我显得更愚蠢。

8. 恐慌!

这事变得比我相像的要复杂!而我开始觉得复杂的事变得简单……而我觉得简单的事变成需要重定半打的类。为什么我以前在我的经理前拍着胸说我可以搞定这个事?

9. 通宵工作,远离朋友和家人

(语无论次的喃喃自语,一阵一阵地大声咒骂)

第四个阶段:愚蠢的快感

本阶段的状态: 感恩 Grateful. 安心 Relieved. 极端地自我欣赏 Awfully Impressed with Yourself.

1. 醒悟

哦!我终于明白怎么搞定它了……

2. 写正确的代码

我真NB,我是编码机器!

3. 测试

牛!通过一个测试。真牛!又通过一个测试了。靠!有测试失败了。这是为什么……

4. 隐藏测试失败

反正这完全是一个不重要的测试案例。没有人会检查它,这个测试真是毫无意义。

5. 提交代码

我太牛了,厨房里有个馅饼可以庆祝一下吗?

6. 关闭 bug.

我听说那里有个馅饼可以庆祝一下

第五个阶段: 与“完成”肉搏

本阶段的状态: 焦燥不安 Twitchy. 神经过敏 Nervous. 迷信 Superstitious.

1. 有人reopen了这个 Bug

真的?他们发现了你引入了另一个bug? Shit – 那只是一个不重要的案例永远不会发生的。

2. 修正以前的修正

是的,我甚至检查了员工的年龄是一个虚数的情况,就是为了防止出错。

3. 关闭 bug

是的,贱货,你被关闭了。全部都关了,再也不用心烦了。

4. 发誓以后再也不干这种事了

5. 大家都意识到你现在是那个模块的专家了

哦,不!现在他们又给了我三个那个模块的新bug

没关系,现在你只需要GOTO 第一个阶段。

此外,作为一个工作中的程序员,你会永远经历这些烂事,直到你——死亡,退休,或是被升到管理层。

(全文完)

分享到:
评论

相关推荐

    仿360桌面bugfix

    7. 错误处理和调试:在“bugfix”阶段,开发者需要关注错误处理和调试技巧,使用断点、日志记录、异常处理等方法找出并修复问题。 8. 资源管理:项目中的`bin.rar`可能包含编译后的可执行文件和其他运行时所需的...

    Road_congnition-Fix-Bug-0923.tar.gz

    5. **解压与查看修复**: 对于"Road_congnition-Fix-Bug-0923.tar.gz"这样的文件,开发者会使用命令行工具(如Linux的tar命令)进行解压,然后检查修复的代码、修改的日志或测试用例,以确认问题是否已被正确解决。...

    delphi2005 IDE UPDATE FIX BUG 2005-9-24

    修复可能涉及到断点设置、变量查看、调用堆栈显示等方面的bug,以确保开发者在调试阶段能够准确无误地追踪代码执行情况。 这次更新着重于提高Delphi 2005 IDE的稳定性和性能,通过修复一系列的内部bug,为开发者...

    Bug的分级和流程处理说明

    Bug 的生命周期:Bug 的生命周期可以分为多个阶段,包括报告、接受、修复、验证和关闭等。在整个生命周期中,Bug 的状态会不断变化,直到最终被关闭。 流程处理:流程处理是指 Bug 的处理过程中的一系列步骤,包括...

    BUG生命周期流程图.vsd

    1. **提交(Submit)**:这是BUG生命周期的第一个阶段,当测试人员或用户在使用过程中发现了问题,会将其记录下来并提交给相关人员。在这个阶段,通常需要详细记录BUG的复现步骤、预期结果与实际结果等信息。 2. **...

    bug生命周期和管理

    5. **Reopen(重新打开)**:回归测试后,如果问题仍然存在或者新问题出现,Bug将被重新打开,返回到处理阶段。 6. **Closed(关闭)**:经过回归测试确认问题已完全修复,没有再次出现,Bug报告的状态最终变为...

    软件测试过程中BUG的基本知识

    - **Won’t Fix**:表示这是一个错误,但当前版本不需要修复。 #### 测试状态(Test State) 测试状态是对Bug的进一步分类,有助于更好地管理测试过程中发现的新问题: - **New Defects**:新发现的Bug。 - **...

    Mantis Bug处理流程

    每个阶段都有明确的动作和确认步骤,确保所有参与者都清楚问题的状态和进展。这样的流程有助于团队协同工作,提高效率,减少沟通成本,并确保软件质量得到持续提升。完成度的标记(如:已修正、未处理等)帮助团队...

    安卓热修复,android打补丁,不用发版本就能实时的解决一些线上版本的bug

    这个过程可能涉及到如AndFix(Android Fast Fix)、Tinker、Qihoo360的Xpatch等开源库。 AndFixDemo是本次提供的示例,它是基于阿里巴巴的AndFix库的一个演示项目。AndFix库利用了Java虚拟机(JVM)的类加载机制,...

    安卓_NSV2_v2.1.4-fix-1.zip

    3. **版本控制**:软件的版本号如2.1.4,代表了软件的发展阶段,主要版本号(如2)通常是重大更新,次要版本号(如1)可能涉及功能增加,补丁版本号(如4)通常用于修复bug或小改进。“-fix”后缀表示这是针对前一...

    android hot fix

    在移动应用开发领域,"Android Hot Fix" 是一个至关重要的概念,它允许开发者在不更新应用程序的情况下修复已发布的应用程序中的错误或添加新功能。这种技术极大地提高了用户体验,因为用户无需手动下载并安装更新,...

    软件缺陷定义及分类.docx

    微软公司的缺陷流程包括 Bug 报告、Bug 评估和分配、Bug 处理、Bug 关闭等四个阶段。 在软件开发过程中,软件缺陷的定义和分类对于测试和质量控制非常重要。tester 需要正确地定义和分类软件缺陷,以便于有效地跟踪...

    软件质量量化指标.doc

    - bug的生命周期:从open到Accept、Fix再到Verify的整个过程,周期短意味着问题解决速度快,项目进展顺利。 4. **统计分析**: - 通过对历史数据的统计,可以发现趋势,预测未来的测试需求和资源分配。例如,bug...

    4.1、SVN trunk(主线) branch(分支) tag(标记) 1

    - bug_fix_1 - new_feature_2 - tags - v1.0 - testing_v1.1 这样的结构清晰地展示了项目的发展历程,方便团队成员理解和管理。trunk 保持了主线开发的连续性,branches 提供了隔离的开发环境,而 tags 则是...

    Bugzilla使用手册

    Bug 状态反映了其生命周期的不同阶段,例如: - **待确认的(Unconfirmed)**:新提交的 bug 还未被验证。 - **新提交的(New)**:已被确认但尚未分配处理人。 - **已修复(Fixed)**:问题已经被解决。 - **...

    gotor-static-fix:我试图解决它

    "gotor-static-fix:我试图解决它"这个标题似乎是在描述一个开发者或团队在处理一个特定的问题,可能是在静态代码分析或修复过程中遇到的挑战。由于标签为空,我们无法直接获取到具体的编程语言或技术领域,但从...

    svn教程转载

    如果在3.0版本中发现bug,就在`tag_release_3_0`上创建一个`branch_bugfix_3_0`,修复后创建新的tag`tag_release_3_0_1`。这个过程保证了主开发线(trunk)的连续性和稳定性,同时也方便对特定版本进行维护。 总之...

    初级golang个人笔记

    1. 对源码编译后,再执行:Go 的执行流程包括编译、链接、加载、运行四个阶段。 2. 对源码直接执行:Go 的执行流程包括解析、语法分析、编译、运行四个阶段。 四、Golang 的特点 Golang 语言保证了既能到达静态...

    git版本管理使用规范-团队开发规范文档

    - **Bugfix分支**:修复分支,针对已发现的bug进行修复,修复后同样合并回Master。 ### 4. 参考资料 本规范参考了Git的最佳实践,结合团队的具体情况进行了定制。 ### 5. 修改历史 记录每次规范更新的时间和内容...

Global site tag (gtag.js) - Google Analytics