为什么你要读这份指南?
简单地说,如果你报告Bug越有效, 工程师完全修复它的可能性就越大这份Bug写作指南是针对新手在书写有效的Bug报告方面进行指导的常规指南,并非每个建议都正好适用于你的软件项目。
如何写一份有用的Bug报告?
有用的Bug报告是用于正确修复Bug的。因此一份有用的Bug报告通常地有两个特征:
可复现:
如果工程师不能发现或最终证明这一Bug存在,工程师或许会将它标记为WORKSFORME(所有要重新产生这个bug的企图是无效的)"或 " INVALID(描述的问题不是一个bug ),并且继续进行下一个Bug的修复工作。任何你能提供的详尽描述将为工程师修复Bug提供帮助。
详细精确:
如果工程师能越早隔离、定位问题,就越可能方便地修复。
让我们举一个例子:你正在测试一个Web阅览器,在访问foo.com网站时崩溃了,因此你想写一个Bug报告:
糟糕的Bug报告:“我的浏览器崩溃了。我正在访问foo.com。我的计算机使用Windows系统。这真是个大问题,你们应该马上修复它。顺便说一下,你们的图标真恶心,如果你们保留那些丑陋的图标,没有人将再使用你们的软件。还有我的祖母的主页看上去外观也不正确,或者,它们全被搞乱了。祝好运。”有用的Bug报告:“每当我访问foo.com时应用程序就崩溃了,我使用的是在Win NT 4.0 (Service Pack 5)系统上的 10.28.99版本。 我也曾重新引导进入 Linux,使用10.28.99
Linux版本,这个问题也出现了。我发现每次崩溃都发生在绘制这个页面位于上端的 Foo横幅的时候。我分析了页面,发现除非你删除border=0属性,否则下列图片链接将导致应用程序崩溃 :(附图片)
如何在Bugzilla中输入你有用的Bug报告?
在你输入你发现的Bug前,应使用
Bugzilla查询页检查是否你发现的是已知并被报告的Bug。(如果你发现的Bug同第37条已经知道的结果相同,你报告的话,就可能骚扰工程师,从而影响工程师修复Bug的效率。)
下一步,确认你发现的Bug是在最新的版本中所发生的。(工程师更倾向于对那些他们正在编写的代码中的严重问题感兴趣,而不是对以前那些废弃代码中数以百计的Bug进行修复。)
如果你已经在当前版本中发现了一个新的Bug,请在Bugzilla中报告:从你的Bugzilla主页中,选择“Enter a new bug”。
选择你发现Bug的产品。
输入你的电子邮件地址、密码,然后按“Login”按钮。(如果你遗忘或还没有得到密码,让密码正文框空白,并且按E-mail me a password 按钮,不久你将收到包含你的密码的电子邮件。)
现在,填写那张出现的表格。以下说明表格中的所有含义:
你在哪儿发现了Bug?
1,产品:在哪一个产品中你发现了Bug?你在上一页已选择 ,enter前已经选择,
2,版本:在产品的哪一个版本中你找到了Bug?If applicable.如果有的话。
3,产品单元:在产品的哪一个单元中存在Bug?Bugzilla在你输入一个Bug时,要求你必须选择一个产品单元。(如果你无法确定所列产品单元的意思,单击产品单元链接,那将联接到对每个产品单元的详细描述,这会帮助你作出最好选择。)
4, 平台:在哪一个硬件平台上你找到了这个Bug例如Macintosh、SGI、Sun、PC如果你知道这个Bug会发生在所有硬件平台上,请选择“All”,否则请选择相应的你发现Bug的硬件平台,如果列表中没有出现你的硬件平台,请选择“Other”。
5,OS:在哪一个操作系统(OS)中你找到了这个Bug?例如Linux、Windows NT、Mac OS 8.5如果你知道这个Bug会发生在所有OS中,请选择“All”,否则请选择相应的你发现Bug的OS,如果列表中没有出现你的OS,请选择“Other”。
这个Bug有多重要?
1,严重性:这个Bug的破坏性有多大?
这项值默认为“normal”。(要为一个特定的Bug界定最适当的严重性,单击严重性链接,你将得到每个选择的完全解释,从Critical到Enhancement。)
2,谁将跟踪解决Bug?
3,分配给:哪一个工程师将负责修复这个Bug?
在你提交Bug报告后,Bugzilla将自动把Bug分配给默认工程师;填写正文框将允许你用手工方式把它分配给其他工程师。(要察看每个产品单元的默认工程师列表,请单击产品单元链接。)
4,Cc:还有哪些人将收到这个Bug修复更新的电子邮件? 列出其他需要通过电子邮件收到这个Bug修复更新的人的完整的电子邮件地址。只要你愿意,你可以输入足够多的电子邮件地址,电子邮件地址之间必须用逗号分隔,不可有空格。
5,关于这个Bug你还能告诉工程师什么?
6,URL:在什么 URL中你发现这个Bug?
如果你是在特殊的URL中遇到Bug,请在这里提供它(们)。如果你已经将Bug隔离在一段特殊的HTML程序段中,也请在这里为它提供URL。
7,概述:你如何在大约60个字符之内将这个Bug进行描述?
一个好的概述能很快和唯一识别一份Bug报告,否则,开发者将不能通过Bug概述进行有意义的查询,并且在浏览一份有10页长的Bug列表时,可能忽略你的Bug报告。
关于“在Tosh Tecra 780DVD w/ 3c589C上安装PCMCIA失败”的概述是有用的标题,而“软件失败”或安装问题将是糟糕的标题的例子。
8,描述:还有什么你能告诉工程师关于这个Bug的?
如果可能,在这个域中请提供问题诊断的详细细节。
如果适用,下列的Bug报告模板将帮助你保证不会漏掉所有相关信息:(翻译是我自己加的,不准确的话请见谅!)
总的描述:对概述的更为详细的补充
Drag-selecting any page crashes Mac builds in NSGetFactory
Bug复现的步骤:是跟踪Bug必须的最小集,包含所有的特殊安装步骤。
1) View any web page. (I used the default sample page, resource:/res/samples/test0.html) 观看所有网页。 (我使用了缺省样页资源:/res/samples/test0.html)
2) Drag-select the page. (Specifically, while holding down the mousebutton, drag the mouse pointer downwards from any point in the browserscontent region to the bottom of the browsers content region.) 扯拽选择页。
(具体地, 当持续鼠标键时, 扯拽鼠标向下从任何点在浏览器的美满的区域对浏览器的美满的区域的底部。)
目前的结果:应用程序在经过那些步骤后的结果The application crashed.应用被碰撞。(程序崩溃)
期望的结果:当Bug不再出现时,应用程序应有的结果
The window should scroll downwards. Scrolled content should be selected.
Or, at least, the application should not crash.) 窗口应该移动向下。 应该选择移动的内容。 (或,至少, 应用不应该碰撞。)
时间及硬件平台:第一次出现这个Bug的时间及硬件平台。
11/2/99 build on Mac OS (Checked Viewer & Apprunner) 11/2/99修造在Mac OS(被检查的观察者& Apprunner)
其它环境及硬件平台:Bug是否出现在其他硬件平台或浏览器上。- Occurs On
Seamonkey (11/2/99 build on Windows NT 4.0)
- Doesnt Occur On
Seamonkey (11/4/99 build on Red Hat Linux; feature not supported) Internet
Explorer 5.0 (RTM build on Windows NT 4.0)
Netscape Communicator 4.5 (RTM build on Mac OS)
-在Seamonkey (11/2/99修造在Seamonkey (基于windows NT 4.0)-不发生在11/4/99Red Hat Linux; 特点没支持的) Internet Explorer 5.0 (RTM修造在windows NT4.0)Netscape Communicator 4.5 (RTM基于Mac OS)
其它信息:任何其他调试信息
Win32: if you receive a Dr. Watson error, please note the type of the crash, and the module that the application crashed in. (e.g. access violation in apprunner.exe)
Mac OS: if youre running MacsBug, please provide the results of a how and
an sc.Unix: please provide a minimized stack trace, which can be generated by typing gdb apprunner core into a shell prompt.
Win32: 如果您接受一个 Dr. Watson 错误, 请注意崩溃的型, 和模块, 应用碰撞了in. (即访问违例在apprunner.exe)
Mac OS: 如果你是在运行MacsBug, 请提供怎么和sc 的结果。
Unix: 请提供减到最小的栈检索, 可能由键入的gdb apprunner 核心引起入壳提示。
你已经完成了一篇不错的bug报告!