“出错了”和报告Bug的艺术
“出错了。”
没有那句话能像“出错了”一样让程序员/开发者如此沮丧,心里翻江倒海,怒火一点即燃,还要死掉一大片脑细胞。
这句生硬的开场白通常标志着让开发者恐惧的长时间排错工作要开始了。
在我的职业生涯中,我就进行过好几次这样的对话:
- “出错了。”
- “什么出错了?”
- “网站。”
- “网站什么地方出错了?”
- “我不确定。你把它弄好就是了。“
对于很多的非技术人员来说,这句话在逻辑推理方面简直滴水不漏。毕竟,他的工作不是测试网站,所以指出哪里出错也不是他的职责。
但是,他发出了一个非常模糊的错误报告,意味着他决定承担起责任,报告一个需要修复的错误,同时,他也让修复过程变得耗时而混乱。
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/
==================================================================
==================================================================
“出错了”和报告Bug的艺术的更多相关文章
- 如何有效地报告 Bug
如何有效地报告 Bug 引言 为公众写过软件的人,大概都收到过很拙劣的bug(计算机程序代码中的错误或程序运行时的瑕疵--译者注)报告,例如: 在报告中说"不好用": 所报告内容毫 ...
- [中英对照]The Art Of Reporting Bugs | 报bug的艺术
前言:因为最近要给兄弟Team分享一下如何有效地报告bug, 故多做一做功课.下面给出一篇博客的中英文对照翻译. The Art Of Reporting Bugs | 报bug的艺术 My init ...
- [转]如何有效地报告Bug
英文原文:Simon Tatham,编译:Dasn 引言 为公众写过软件的人,大概都收到过很拙劣的bug报告,例如: 在报告中说“不好用”: 所报告内容毫无意义: 在报告中用户没有提供足够的信息: 在 ...
- 如何有效地报告Bug
英文原文:Simon Tatham,编译:Dasn 引言 为公众写过软件的人,大概都收到过很拙劣的bug报告,例如: 在报告中说“不好用”: 所报告内容毫无意义: 在报告中用户没有提供足够的信息: 在 ...
- Testlink1.9.17使用方法(第八章 测试执行/报告BUG)
第八章 测试执行/报告BUG QQ群交流:585499566 把他们放到一起,是因为报告bug是在执行的过程中同步进行的——即执行用例的过程中一旦发现bug我们需要立即把其报告到我们的bug管理系统r ...
- Chrome出了个小bug:论如何在Chrome下劫持原生只读对象
Chrome出了个小bug:论如何在Chrome下劫持原生只读对象 概述 众所周知,虽然JavaScript是个很灵活的语言,浏览器里很多原生的方法都可以随意覆盖或者重写,比如alert.但是为了保证 ...
- 【阅读】提问的智慧+有效的报告BUG
这两项可谓是我们测试人员的基本要求了,不过实话说的是,我自己这两方面很薄弱.哎!!! 这两篇文章都看过了,不过我在这也记个笔记吧.督促自己!!! <提问的智慧> <如何有效地报告Bu ...
- 使用VSS2005的时候报错:输入正确的服务器地址依然出错了
使用VSS2005的时候报错:输入正确的服务器地址依然出错了 使用VSS2005的时候报错: 在安装完vss客户端,进入vss服务器的时候,需要vss服务器的ip和数据库名称.以及初始化文件, 我在进 ...
- eclipse中的出现在打包一次后,后面新建的项目都出错了,出现support_v7下面出现红线及解决方法及为什么eclipse中项目继承ActionBarActivity解决方法一样
第一次写博客,有什么问题或者想法的希望各位可以进行评论交流,望大家多多包涵! 遇到的问题是在新建的项目都出错了,出现support_v7下面出现红线及解决方法及为什么eclipse中项目继承Actio ...
随机推荐
- JDK和tomcat的安装配置
一.JDK8安装与配置 分别配置如下三个系统变量 JAVA_HOME设置变量值为java JDK的安装目录例如: C:\Program Files\Java\jdk1.8.0 PATH添加变量值 %J ...
- spring data学习
在Spring Data模块中定义依赖: <dependencies> <dependency> <groupId>org.springframework.data ...
- [SCOI 2012]滑雪与时间胶囊
Description a180285非常喜欢滑雪.他来到一座雪山,这里分布着M条供滑行的轨道和N个轨道之间的交点(同时也是景点),而且每个景点都有一编号i(1<=i<=N)和一高度Hi. ...
- bzoj3831 [Poi2014]Little Bird 单调队列优化dp
3831: [Poi2014]Little Bird Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 505 Solved: 322[Submit][ ...
- mysql的连接处理过程
在mysqld_main函数中经过一系列的初始化后,mysql开始监听客户端的连接 mysqld_socket_acceptor->connection_event_loop(); 查看my ...
- 实现string类
/* 实现string类 */ class String { public: String(const char *str=NULL); //构造函数 S ...
- Debugging TensorFlow models 调试 TensorFlow 模型
Debugging TensorFlow models Symbolic nature of TensorFlow makes it relatively more difficult to debu ...
- Windows2003无法连接远程桌面问题 解决方法!
按照以下步骤来一一排除问题吧! 步骤1.遇到这样的情况,通常情况下我们都是先检查远程有没有开启,就是右击我的电脑查看属性里的远程前面的框框有没有勾上,勾上后即可远程,metsc 127.0.0.1 ...
- MySQL 内连接与外连接
1.内连接 MySQL中,join,cross join,inner join 是等价的. 2.外连接 2.1 左外连接 left join 2.2 右外连接 right join 3.连接条件 使 ...
- vue拦截器实现统一token,并兼容IE9验证
项目中使用vue搭建前端页面,并通过axios请求后台api接口,完成数据交互.如果验证口令token写在在每次的接口中,也是个不小的体力活,而且也不灵活.这里分享使用vue自带拦截器,给每次请求的头 ...