专业的测试,如何确保缺陷报告的有效性

写过软件的人,大概都收到过很糟糕的缺陷( bug)报告,特别来自用户的报告,而不是专业的测试人员的报告,例如:

  • 在报告中说“不好用”;
  • 所报告内容毫无意义;
  • 在报告中没有提供足够的信息;
  • 在报告中提供了错误信息;
  • 所报告的问题是由于错误的操作而产生的;
  • 所报告的问题是由于其它程序的错误而产生的;
  • 所报告的问题是由于网络错误而产生的;
  • ……

这便是为什么“技术支持” 被认为是一件可怕的工作,因为有拙劣的 bug 报告需要处理。我非常希望每一个人在报告 bug之前都读一下这篇短文,当然我也希望用户在给我报告 bug 之前已经读过这篇文章。

专业的测试,如何确保缺陷报告的有效性

简单地说,报告 bug 的目的是为了让程序员再现该问题。你可以亲自演示,也可以给出能导致程序出错的、详尽的操作步骤。如果程序出错了,程序员会收集额外的信息直到找到错误的原因;如果无法再现问题,那么他们会请你继续关注这个问题,收集相关的信息。

在 bug 报告里,要设法搞清什么是事实、什么是推测。如果愿意的话,可以省去推测,但是千万别省略事实。

当你报告 bug 的时候,一定是希望 bug 得到及时修复。所以此时针对程序员的任何过激甚至谩骂的言语都是与事无补的——因为这可能是程序员的错误,也有可能是你的错误,也许你有权对他们发火,但是如果你能多提供一些有用的信息(而不是激愤之词)或许 bug 会被更快的修正。

1、信息越多越好

程序员不是弱智:如果程序一点都不好用,他们不可能不知道。他们不知道一定是因为程序在他们看来工作得很正常。所以,或许是你做过一些与他们不同的操作,或许是你的环境与他们不同。他们需要信息,报告 bug 也是为了提供信息,信息总是越多越好。

2、当面演示bug

报告 bug 的最好的方法之一是「演示」给程序员看。让程序员站在电脑前,运行他们的程序,指出程序的错误。

他们对自己写的软件了如指掌,他们知道哪些地方不会出问题,而哪些地方最可能出问题。他们本能地知道应该注意什么。在程序真的出错之前,他们可能已经注意到某些地方不对劲,这些都会给他们一些线索。他们会观察程序测试中的每一个细节,并且选出他们认为有用的信息。

这些可能还不够。也许他们觉得还需要更多的信息,会请你重复刚才的操作。他们可能在这期间需要与你交流一下,以便在某个时间点让 bug 重新出现。他们可能会改变一些操作,看看这个错误的产生是个别问题还是普遍相关的一类问题。如果不走运,他们可能坐下来、拿出一堆开发工具,花上几个小时来好好地研究一下。但是最重要的是在程序出错的时候让程序员在电脑旁。一旦他们看到了问题,他们通常会找到原因并开始试着修改。

3、准确地告诉程序员,你做了什么

“演示”是很好的办法,但是常常做不到。如果你必须报告 bug,而此时程序员又不在你身边,那么你就要想办法确切地告诉程序员你做了些什么,让他们能够自己再现 bug。当他们亲眼看到错误时,就能够进行处理了。

把你能想到的所有的输入方式都告诉程序员,如果程序要读取一个文件,你可能需要发一个文件的拷贝给他们。如果程序需要通过网络与另一台电脑通讯,你或许不能把那台电脑复制过去,但至少可以说一下电脑的类型和安装了哪些软件。

4、哪儿出错了?在我看来一切正常哦!

如果你给了程序员一长串输入和指令,他们执行以后没有出现错误,那是因为你没有给他们足够的信息,可能错误不是在每台计算机上都出现,你的系统可能和他们的系统在某些地方不一样。有时候程序的行为可能和你预想的不一样,这也许是误会,但是你会认为程序出错了,程序员却认为这是对的。

同样也要描述发生了什么。精确的描述你看到了什么。告诉他们为什么你觉得自己所看到的是错误的,最好再告诉他们,你认为自己应该看到什么。如果你只是说:「程序出错了」,那等于没说。

如果有错误日志,一定要把这些告诉程序员。有了错误日志,程序员知道什么地方出错了,了解到重要的线索,排错工作会十分高效。

5、出了问题之后,我做了……

当一个错误或 bug 发生的时候,你可能会做许多事情。但是大多数人会使事情变得更糟糕。有人误删了所有的 Word 文件,在找人帮忙之前他重装了 Word,又运行了一遍碎片整理程序,这些操作对于恢复文件制造了巨大的麻烦,因为这些操作搞乱了磁盘的文件区块。如果她不做任何操作,或许还有一线希望。

当程序出毛病的时候,立刻停止正在做的任何操作,仔细地看一下屏幕,注意那些不正常的地方,记住它或者写下来。学着养成一种条件反射——一旦电脑出了问题,先不要动。关掉受影响的程序或者重新启动计算机都不好,最好是能保护“出错”的现场

6、我想粒子的跃迁与错误的极化有关

并不只有非专业的用户才会写出拙劣的 bug 报告,我见过一些非常差的 bug 报告出自测试员之手,有些还是非常优秀的测试员。

有一次我与一个测试员一起工作,他一直在找代码中的 bug。「出什么毛病了?」我问。而他的回答却总是一些关于 bug 的意见。如果他的观点正确,那的确是一件好事,但事实上他常常是错的。这就会使我们花上半个小时在原本正确的代码里来回寻找错误,而实际上问题出在别的地方。

我敢肯定他不会对医生这么做。「大夫,我得了XX病,给我开个方子」,人们知道不该对一位医生说这些。你描述一下症状,哪个地方不舒服,哪里疼、起皮疹、发烧……让医生诊断你得了什么病,应该怎样治疗。否则医生会把你当做疑心病或精神病患者打发了。

做测试员也是一样。即便你自己的「诊断」有时真的有帮助,也要只说「症状」。「诊断」是可说可不说的,但是「症状」一定要说。同样,在 bug 报告里面附上一份针对 bug 而做出修改的源代码是有用处的,但它并不能替代 bug 报告本身。

测试人员多动动脑筋对程序员的工作是有帮助的。即使你的推断是错误的,程序员也应该感谢你,至少你想去帮助他们,使他们的工作变得更简单。不过千万别忘了报告「症状」,否则只会使事情变得更糟。

7、真是奇怪,刚才还不好用,怎么现在又好了?

[间歇性错误」着实让程序员发愁,也就是我们经常说的,缺陷发生频率不是100%。但大多数「间歇性错误」并不是真正的「间歇」,其中的大多数错误与某些地方是有联系的,只是不知道这些地方(引起bug的错误代码)。有些错误可能是内存泄漏产生的,有些可能是空指针造成的,有些是在特定条件下产生的。

上一页12下一页


留言