Fix Bug的五个阶段
一个非常严重和困难的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 第一个阶段。
此外,作为一个工作中的程序员,你会永远经历这些烂事,直到你——死亡,退休,或是被升到管理层。
转载于:https://www.cnblogs.com/yefengmeander/archive/2011/08/17/2887995.html
Fix Bug的五个阶段相关推荐
- 银行软件测试bug解决,解决软件测试Bug的五个阶段
4.犯贱 好吧,总之,你到底期望什么?想让我在一个没有高级调试器的环境下改这个BUG.我是什么?千里眼吗?我在我的Commodore 64上一个更好的调试器! 5. 瞎搞 看看我试试这么改?Kao,这 ...
- 零基础该如何系统地自学Python编程?五个阶段带你从小白到大佬
对于零基础学习或是已经学完基础不知道下一步该干什么的朋友,可以看看这篇缓解迷茫.今天分享下如何系统地自学Python规划目标,有一个学习目标在去行动. 有了目标,怎么行动呢?建议采用视频+书籍的方式进 ...
- 从工业云到工业互联网平台演进的五个阶段
工信部信软司副司长安筱鹏此前在中国国际工业博览会上参加会议,并发表"从工业云到工业互联网平台演进的五个阶段"主旨演讲,指出工业云向工业互联网平台的演进将经历成本驱动导向.集成应用导 ...
- 《系统集成项目管理工程师》必背100个知识点-53项目团队建设的五个阶段及其特点...
请简述一般项目团队建设的五个阶段及其特点? (1)形成,形成共同目标,怀有美好期待.(2)震荡,开始执行分配任务.个体之间开始争执,互相指责,开始怀疑项目经理的能力.(3)规范,经磨合,团队成员互相熟 ...
- 自动化wms仓储系统发展五个阶段?
自动化仓储的发展是一个经历过无数次失败与变革,在失败中寻找经验,在成功中寻求更加省时省力,进行变革的过程,这个过程不是一蹴而就的. 在整个自动化仓储技术的发展过程中,是经历着五个阶段的每一个阶段都有着 ...
- 数据分析的五个阶段及价值
如果将数据分析的产出作为产品来看,套用产品演进模型我们可以将数据分析分为五个阶段.在这五个阶段中每个都有固定的工作内容和价值体现,但总体来说,这又不仅是产品的演进路径,同时也是数据分析师自身的成长路径 ...
- qualys java 误报_从拒绝到接受 解析漏洞管理的五个阶段
很多人应该都记得2003年"蠕虫的一年",在那年的1月25日,我们看到了SQL Slammer蠕虫攻下了整个美国的自动提款机,同时感染了全球范围内数百万台个人电脑和服务器,该蠕虫病 ...
- 中国商业环境发展的五个阶段浅析
从中国改革开放到现在,中国的商业环境也是经历了很多的变化,这里主要总结下中国商业发展的五个阶段: 当我们在看很多商业案例的时候,真正懂得学习的人是会学习它背后的运作思维.理念而不是表面的方法.每个案例 ...
- 项目经理成长的五个阶段
项目经理成长的五个阶段 一个优秀项目经理炼成,并不是一朝一夕的事.特别是对于从程序员转型过来的情况,受制于其原有的思维方式.知识体系.管理经验乃至性格缺陷,往往要经过很长时间的才能逐渐胜任.我将这一过 ...
- DMAIC代表了六西格玛改进活动的五个阶段
DMAIC代表了六西格玛改进活动的五个阶段: 界定阶段(define) 策略阶段(measurement) 分析阶段(analysis) 改进阶段(improvement) 控制阶段(control) ...
最新文章
- mysql 自关联的子孙查询,Mysql自连接查询实例详解
- DCMTK:DcmItem类的测试程序
- 使.NET WebBrowser不与IE或其他实例共享cookie
- 数据结构—链表-循环链表
- 2018数据技术嘉年华-金融峰会·重庆站6.29相约相聚!
- mysql 5.7自定义安装路径_Mysql5.7.18版本(二进制包安装)自定义安装路径教程详解...
- VS2019,C#修改WinForm应用程序和窗体图标
- 《Windows编程循序渐进》——对话框应用程序
- android中finish和system.exit方法退出的区别
- 清北2017夏令营考试 day2
- i5处理器学计算机怎么设置,处理器怎么超频 酷睿i3/i5/i7系列CPU超频详细教程 (全文)...
- 三线制接近开关原理及接线图
- 基于ArcGIS:GIS空间分析复习-理论概念+案例分析
- JAVA通过tcp通信劳易测BCL 308i扫码枪获取数据
- BitLocker 秘钥如何获取
- bzoj2096[Poi2010]Pilots*
- 类加载及执行子系统的案例分析
- 基于matlab的光学薄膜特性分析,基于matlab的光学薄膜特性分析.doc
- Gartner陈勇:中国企业更积极探索双模IT
- pdf java解析_JAVA解析PDF内容