Language agnostic 如何以智能方式报告bug

Language agnostic 如何以智能方式报告bug,language-agnostic,bug-reporting,Language Agnostic,Bug Reporting,我想以类似ESR的风格编写(或找到)一份有效的bug报告指南 关于有效的bug报告,你的主要提示是什么?写下重现bug的步骤。如果你不能复制它,它就不会被修复。 关于如何重新创建错误的分步说明 确保您已经尝试将错误隔离到您实际编写的错误所针对的内容,而不是其他可能是原因的内容 列出将错误隔离到您正在编写错误所针对的软件以外的其他软件的尝试 让自己能够回答问题,并帮助排除故障/重新创建错误 底线是,当遇到bug时,您必须进行一定程度的批判性思考。一旦你用尽了所有可能是你的错的可能性,写一个bug

我想以类似ESR的风格编写(或找到)一份有效的bug报告指南


关于有效的bug报告,你的主要提示是什么?

写下重现bug的步骤。如果你不能复制它,它就不会被修复。

  • 关于如何重新创建错误的分步说明
  • 确保您已经尝试将错误隔离到您实际编写的错误所针对的内容,而不是其他可能是原因的内容
  • 列出将错误隔离到您正在编写错误所针对的软件以外的其他软件的尝试
  • 让自己能够回答问题,并帮助排除故障/重新创建错误
底线是,当遇到bug时,您必须进行一定程度的批判性思考。一旦你用尽了所有可能是你的错的可能性,写一个bug。如果你发现是你的错误,但是你正在使用/测试的软件可以做一些更有用的事情来指出它是你的错误,仍然要写一个bug

此外,要成为一名真正伟大的bug报告者,您必须帮助那些测试bug的人重新创建bug。很可能你刚刚“掌握了重新创建bug的诀窍”,可能有些步骤你没有意识到。你不能抱怨然后走开,参与到过程中,通过测试、重新创建和故障排除来帮助团队。

  • 用于重新创建错误的过程,包括正在执行的操作、正在使用应用程序的哪个区域以及当时发生的事件
  • 可复制性声明(可靠,不可靠)-帮助开发人员知道复制应该有多困难,这样他们就不会很快放弃
  • 生成的错误消息/堆栈跟踪的屏幕截图或文档
  • 缺陷的关键性/优先级(是否可以避免、避免步骤、是否具有灾难性、是否有业务影响、业务风险等)
  • 环境-在哪个环境中发现错误。远程的、本地的等

很多时候,我们的QA人员认为他们可以在没有任何备份文档的情况下发出通知单说:“这是我的例外情况。”。在没有更多信息的情况下,复制几乎是不可能的,更不用说解决问题了。

报告可观察到的事实,然后你对这些事实的解释


有时候,最好的bug报告包括一些直觉上理解问题的东西。只有事实错误报告才会低估这一宝贵的人力资源。

不要假设错误报告的读者和你一样了解软件。即使是编写软件的人也可能不知道你在说什么,如果他们编写软件后的时间足够长的话。写下它,以便任何人都能理解并重现问题。

  • 始终报告被测软件的版本号
  • 始终报告任何其他软件(浏览器、操作系统等)的版本
  • 始终列出所有硬件
  • 复制步骤
  • 虫子症状
  • 屏幕截图、跟踪、日志、其他附件(如有)
  • 多么关键--崩溃、用户界面等
  • 报告是否可复制
  • 任何其他尝试过的,有或没有复制错误的东西

对于那些没有步骤复制就不会看东西的人:
我的第一份编程合作工作分配给我一个bug,它本质上是一个随机竞争条件,使系统不稳定。它发生在系统执行过程中的任何一点上,我们所拥有的只是一些堆栈跟踪,这些跟踪指向一段显然很好的代码。在某个地方,另一个线程正在处理数据,它不应该这样,如果这个线程在正确的位置,它就会崩溃。我们的QA大约每月发生一次故障。花了两周的时间在系统中寻找罪魁祸首(是的,对共享资源的未经检查的访问,大约2行修复)并修复它。从来没有一个合适的复制步骤,因为没有通用的复制方法(除了将一堆yield()推到正确的位置)。如果要在多线程系统上工作,最好准备好处理无法可靠复制的bug,可能没有稳定的复制步骤,而不是因为无法复制bug而向QA抱怨


请注意,上述内容并不是QA在可能的情况下不包含尽可能多的细节的借口,只是指出在现代软件上并不总是可以做到这一点。

推荐这篇文章:

回答得好。还有一步-尽量减少复制所需的“材料”数量。如果错误报告涉及一个50000行的程序,它将不会像一个100行的程序那样被处理,而这个程序会复制问题。@Jonathan:如果它需要整个50000行的程序来复制它呢?害怕丑陋的大错误吗?如果你不能用手来做,使用自动最小化50000行到所需的最小集。那么没有修复竞争条件或死锁?