“出错了。”

没有那句话能像“出错了”一样让程序员/开发者如此沮丧,心里翻江倒海,怒火一点即燃,还要死掉一大片脑细胞。

这句生硬的开场白通常标志着让开发者恐惧的长时间排错工作要开始了。

在我的职业生涯中,我就进行过好几次这样的对话:

  • “出错了。”
  • “什么出错了?”
  • “网站。”
  • “网站什么地方出错了?”
  • “我不确定。你把它弄好就是了。“

对于很多的非技术人员来说,这句话在逻辑推理方面简直滴水不漏。毕竟,他的工作不是测试网站,所以指出哪里出错也不是他的职责。

但是,他发出了一个非常模糊的错误报告,意味着他决定承担起责任,报告一个需要修复的错误,同时,他也让修复过程变得耗时而混乱。

Bug:程序员的肉中刺

爱也好,恨也罢,bug是所有软件中不可避免的一部分。很多bug可以在程序员好几小时的试错中找到并修复。对于一名工程师,如果没有花大量时间去和问题提交者交谈,进行枯燥乏味的反复尝试以复现问题,他就不可能推断出问题到底是什么。修复bug的工作量很大。

“出错了”这样一句模糊的报告简直可以是任何情况——网站可能宕机,注册页面可能出错了,某个应用可能在你不知不觉时把用户的裸体拍下来并用电子邮件发给他们的朋友们——就是没有办法搞清楚是何种情况。

惊喜!你是质量管理员

即使进行了最严格的质量保证(QA)测试,还是会不时有漏网的bug。对于小型团队以及个人开发者,通常根本没有任何正规的质量保证测试——这使得客户、经理或是员工都要承担一部分质量保证工作职责。

作为一名和软件开发者一起工作的非技术人员,你总要在一定程度上扮演质量保证测试员的角色——无论这是否包括在你的岗位描述中。接受你的新职责对你有百利而无一害。当严重的bug影响了工作,让整个团队面色凝重,你若能帮助寻找bug,会让bug更快地得到解决。

报告Bug的正确方式

现在说说如何撰写一份bug报告,它可以帮助缩小问题的范围,可以让你的开发者高兴,还可以让你的软件尽快正常运行。

一份优秀的bug报告应该包括以下部分:

1)概述

出了什么问题?总结一下,不超过10个字。

2)定位

哪里出了问题?如果是一个网站,把网址复制粘贴下来。如果不是,给出发生问题的窗口名称。

3)软件的运行环境是什么?

你是用的PC还是MAC?Firefox还是Chrome?iPad还是iPhone?iOS还是安卓?软件的版本是什么?你安装了什么浏览器插件?后台有哪些奇怪的软件在运行?

4)描述问题。

详细描述发生的问题。

5)列出问题复现的步骤。

描述问题发生前你做的每一个步骤。例如:“1)打开浏览器;2)访问www.mysite.com;3)点击“登录”按钮”

6)期待情况以及实际情况

要写出当你执行了上述步骤后你期待发生什么,以及实际发生了什么。例如:“期待情况:显示登录表单。实际情况:一幅图片显示出来,上面有一只泰迪熊和一句话『网站故障,请耐心等待。』”

7)提出修复建议

你认为你知道如何搞定这个问题?太好了!为工程师节省点时间,让他们少些困扰,把你关于应该如何解决问题的想法写下来吧。

8)截屏!

如果你能看见问题的场景,将它截屏并附在报告中。有时,这是你在bug报告中提交的最重要的一件事。如果你能在截图上标示以指明问题,那就更好了。截屏取决于你使用的何种电脑或设备。如果无法截屏,用你的手机对屏幕拍照并发送出去。

9)优先级

优先级具有主观性,对于bug报告者总是觉得任何事都是最最重要。但是为了公平,先深呼吸一下,再考虑问题究竟有多重要。下列条目对你有所帮助。

1.极度重要:“停下其他事,马上修复此问题!!!!”
2.重要:“需要尽快解决。”
3.一般:“快点修复,但如果不能马上解决也可以。”
4.不重要:“如果有必要,这个问题可以推后处理。”
5.极不重要:“这个想法或建议应该暂缓执行,以后再说。”

让工程师们爱上你

如果你发现了错误——不管它看起来多么吓人,停下你手里的事,后退一步,写一份合适的bug报告吧。

如果你的开发者建有问题追踪系统,你应该登录上去,但如果你没有登上去(或是找不到),你可以发出电邮或是开始写一个文档。如果你经历了很多的bug,尝试着建立一个电子表格将它们全部列出来并分发出去。不要只是给工程师们打电话或是发给他们一行字的短信。对你发现的bug建档之后再发出警报,工程师们会利用你的报告来确定问题的优先级,并在修复过程中将其作为参考。

所以,现在你在检查开发者推出的全新软件或是让你气都喘不上来的东西时,你知道怎样可以修复得更快、更高效,还不会打击到你的工程师们。你成为了团队里有用的一份子,而不是半点线索都不能提供的局外人,而且也许在这一过程中你学到的东西可以让你成为一位软件内行呢。

原文链接: Ron Whitman   翻译: 伯乐在线toolate
译文链接: http://blog.jobbole.com/72214/

==================================================================

% 请给我的CSDN2014年度博文大赛决赛文章投票

==================================================================

“出错了”和报告Bug的艺术的更多相关文章

  1. 如何有效地报告 Bug

    如何有效地报告 Bug 引言 为公众写过软件的人,大概都收到过很拙劣的bug(计算机程序代码中的错误或程序运行时的瑕疵--译者注)报告,例如: 在报告中说"不好用": 所报告内容毫 ...

  2. [中英对照]The Art Of Reporting Bugs | 报bug的艺术

    前言:因为最近要给兄弟Team分享一下如何有效地报告bug, 故多做一做功课.下面给出一篇博客的中英文对照翻译. The Art Of Reporting Bugs | 报bug的艺术 My init ...

  3. [转]如何有效地报告Bug

    英文原文:Simon Tatham,编译:Dasn 引言 为公众写过软件的人,大概都收到过很拙劣的bug报告,例如: 在报告中说“不好用”: 所报告内容毫无意义: 在报告中用户没有提供足够的信息: 在 ...

  4. 如何有效地报告Bug

    英文原文:Simon Tatham,编译:Dasn 引言 为公众写过软件的人,大概都收到过很拙劣的bug报告,例如: 在报告中说“不好用”: 所报告内容毫无意义: 在报告中用户没有提供足够的信息: 在 ...

  5. Testlink1.9.17使用方法(第八章 测试执行/报告BUG)

    第八章 测试执行/报告BUG QQ群交流:585499566 把他们放到一起,是因为报告bug是在执行的过程中同步进行的——即执行用例的过程中一旦发现bug我们需要立即把其报告到我们的bug管理系统r ...

  6. Chrome出了个小bug:论如何在Chrome下劫持原生只读对象

    Chrome出了个小bug:论如何在Chrome下劫持原生只读对象 概述 众所周知,虽然JavaScript是个很灵活的语言,浏览器里很多原生的方法都可以随意覆盖或者重写,比如alert.但是为了保证 ...

  7. 【阅读】提问的智慧+有效的报告BUG

    这两项可谓是我们测试人员的基本要求了,不过实话说的是,我自己这两方面很薄弱.哎!!! 这两篇文章都看过了,不过我在这也记个笔记吧.督促自己!!! <提问的智慧> <如何有效地报告Bu ...

  8. 使用VSS2005的时候报错:输入正确的服务器地址依然出错了

    使用VSS2005的时候报错:输入正确的服务器地址依然出错了 使用VSS2005的时候报错: 在安装完vss客户端,进入vss服务器的时候,需要vss服务器的ip和数据库名称.以及初始化文件, 我在进 ...

  9. eclipse中的出现在打包一次后,后面新建的项目都出错了,出现support_v7下面出现红线及解决方法及为什么eclipse中项目继承ActionBarActivity解决方法一样

    第一次写博客,有什么问题或者想法的希望各位可以进行评论交流,望大家多多包涵! 遇到的问题是在新建的项目都出错了,出现support_v7下面出现红线及解决方法及为什么eclipse中项目继承Actio ...

随机推荐

  1. jq图片展示插件highslide.js简单dom

    今天用用了一款图片展示插件highslide.js,感觉用起来很是舒畅,几乎不用怎么写代码,只需要知道如何写参数就行了. 那么这么牛叉的插件我们该如何用哪,下面我就跟大家讲解一下. 一.引入   首先 ...

  2. 下载python的Crypto库出现的问题的解决:ModuleNotFoundError: No module named 'Crypto'

    在网上找了很多下载Crypto的方法,感觉作用都不算很大,然后自己瞎搞瞎搞就搞好了

  3. [HNOI 2004]宠物收养场

    Description 凡凡开了一间宠物收养场.收养场提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物. 每个领养者都希望领养到自己满意的宠物,凡凡根据领养者的要求通过他自己发明的一个特殊的 ...

  4. [HNOI 2006]鬼谷子的钱袋

    Description 鬼谷子非常聪明,正因为这样,他非常繁忙,经常有各诸侯车的特派员前来向他咨询时政.有一天,他在咸阳游历的时候,朋友告诉他在咸阳最大的拍卖行(聚宝商行)将要举行一场拍卖会,其中有一 ...

  5. slab机制

    1.内部碎片和外部碎片 外部碎片 什么是外部碎片呢?我们通过一个图来解释: 假设这是一段连续的页框,阴影部分表示已经被使用的页框,现在需要申请一个连续的5个页框.这个时候,在这段内存上不能找到连续的5 ...

  6. ●UVA 1608 Non-boring sequences

    题链: https://vjudge.net/problem/UVA-1608#author=chenchonghan题解: 分治 如果一个区间[l,r]里面在p位置出现了一个只出现一次的元素,(如果 ...

  7. 【LA3938】"Ray, Pass me the dishes!"

    原题链接 Description After doing Ray a great favor to collect sticks for Ray, Poor Neal becomes very hun ...

  8. hdu 5724 SG+状态压缩

    Chess Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submi ...

  9. BZOJ3065(替罪羊树套线段树)

    以前看到这题都瑟瑟发抖,终于过了心情舒畅. 按下标为关键字建替罪羊树,每个结点开一个权值线段树,维护的这个结点代表的子树的信息. 这题还得垃圾回收,自己yy的,不知对不对.. #include < ...

  10. CSS3中三种清除浮动(float)的方法

    方法一:添加新的元素 .应用 clear:both .clear{ clear:both; height:; height:; overflow:hidden; } 方法二:父级div定义 overf ...