摘 要:本文简要分析了无法重现的Bug的可能产生原因,包括环境不一致、缺少最准确的描述和浏览器的不当设置。针对这些原因,本文给出了相应的对策。通过这些措施,可以重现许多以前认为不可重现的Bug。
        关键词:重现;Bug;环境

测试人员提交bug后,最不希望看到的结果是它们被标记为INVALID,尽管你坚信这一定是Bug。开发人员查看了bug的Description后,最不希望的结果是你无法重现它们,尽管他使用了所有可能的方法去重现它。一旦出现这样的情况,测试人员会很伤心,开发人员也会对测试人员有意见。这就使得关系本来就不怎么融洽的测试人员和开发人员之间的关系更加紧张。这对于关系紧张的测试人员和开发人员来说,无异于是火上浇油。
        为了减少这种情况的出现,非常有必要分析一下Bug不能重现的原因。根据我的测试经验,Bug不能重现的原因有:
一、 环境不一致
        这是bug不能重新的最主要的原因。在开发人员认为这是无效的bug 里面,估计至少有80%的Bug是因为环境不一致的原因造成的。这既包括开发环境和测试环境的不一致,也包括开发环境和系统的实际运行环境不一致。
        Bug产生是有一定原因的,它的重现也需要一定的环境。如果没有相应的环境,那么你可能很难这个Bug。
        从广义上来说,保证或影响系软件的任何因素都是环境。例如,硬件的配置、软件的设置、网络的带宽、网速等。通常,环境中的软件因素有:系统的Build、Application Server的类型和Version、Operation System 的语言和Version、浏览器的语言和Version等。
        下面是我的一些有趣的经历:某个Bug 只出现在WebSphere 6.0.2.15上,按照开发人员的要求,把WebSphere升级到6.0.2.17 后,此Bug就自动消失了。因此,此Bug是因为WebSphere的版本不一致引起地。
        几个图片在某个Build上莫名其妙地消失了,刚开始怀疑是开发人员修改别的Bug而引起的错误。后来经过仔细认真地测试才发现,原来是操作系统的语言搞的“鬼”:测试人员使用的机器的操作系统语言是简体中文,开发人员使用的是繁体中文。 
        Bug的Description里面缺少重现bug 的最准确的操作,下图是测试系统在增加一个Role时的页面:

图1:增加Role的页面
        测试人员在输入某些数据、然后点击Save后,“一不小心”就出现了java.lang.NullPointerException的错误。说一不小心,是因为这是测试人员在无意中发现了,并且出现这个错误后,你再也无法增加任何Role了(当然也无法重现此Bug了)。最糟糕的是,别的与Role有关的许多功能点也无法验证。尽管不知道为什么发生了这个错误,也无法重现此Bug,但考虑到此Bug的严重性,测试人员还是把此Bug提交到Bug库里去了(事后证明这是非常明智的举动)。
        在测试下一个Build的时候,我要求测试人员重点关注此Bug。后来在DBA的帮助下找到了产生此Bug的真正原因:输入Role Code后,如果Role Name为空,页面没有进行检查(前台没有检查);但点击Save后,数据需要保存到数据库时,Role所在的Table要求Role Code和Role Name都不能为空。因此就出现了java.lang.NullPointerException这个错误信息。
        找到此Bug发生的原因后,我建议开发人员把Role Code当作Role Name,如果用户输入Role Code而没有输入Role Name。经过测试,此Bug就再也不会出现了。
        下面是此bug 的完整历史记录:
[Step]
1. Add one Role on Role Manager;
2. Click on "Save" button to save it.

[Result & Memo]
     One error message appears: java.lang.NullPointerException. As a result, I could not do any operation on “Role Manager” tab. This bug appears even after I restart the application server.

------- Additional Comment #1 From Jim 2006-11-25 14:08 -------
I cannot reproduce this bug. Please describe testing scenario in details + attach error logs.

------- Additional Comment #2 From Mike 2006-12-15 10:28 ------
[Step]
1. On ‘Role Manager’ tab, Click on ‘Add’ button;
2. Enter one valid role code and click on ‘Save’ button. Note: you are forbidden to enter any value for ‘Role Name’ in order to reproduce this bug.
Now there is one error message on the page when clicking on ‘Role Manager’ tab.

[Memo]
According to the schema TBCN_WF_ROLE, the ‘Name’ column is forbidden to be null. But there is no code to check it when such occasion happens. For detail information, please view the attached file.
To avoid this bug happening, I suggest you set the value of “Role Code” as “Role Name” if such occasion happens.

------- Additional Comment #3 From Jim 2006-12-17 18:06 -------
Fixed in build # >= 484
二、 浏览器的不当设置
        对于Web测试来说,IE的设置又是对重现Bug起着重要的作用。下面的几个图片说明了浏览器的几个关键设置:

图2:Internet临时文件的设置

图3:“高级”选项的设置

说明:在“高级”选项中,对测试起重要作用的是“禁止脚步调试”(不选择,即前面不要有勾)和“显示每个脚本错误的通知”(选择它,即前面要出现勾)。

这些设置对重现有关脚本错误的Bug起着重要的作用。根据这些脚本错误的通知,开发人员可以快速发现代码中的错误,并及时修复它。

三、    内存泄露

某些系统长期运行后出现运行速度慢、反应迟钝等现象,其中一个主要的原因就是内存泄露。有的开发人员没有养成及时回收内存的习惯,结果系统在不断地申请内存空间,却没有一点内存释放。这类错误在短期内不会出现,但当系统长期运行时就会出现,并且由此会引发一系列的问题。此类问题只有经过长时间的运行测试,才可能会被发现。

四、    函数接口类型不匹配

此类错误难以重现,并且难以发现它的真正原因,一般只有在查看源代码后才能发现。某些类型的数据会被系统自动转换,一般也不会出现错误;但有些数据被截断或被强制转换成另外一种数据类型时,会出现一些潜在的错误。在集成测试时此类错误最有可能发生。

既然分析出了这些Bug不能重现的原因,我们就可以对症下药了:

1.  测试人员要有重视测试环境的意思,并在Bug Report里面增加对测试环境的准确描述,特别是影响重现此Bug的那些环境因素。

2.  Bug的Step要准确说明操作步骤。为了重现一个Bug,测试人员可能需要对几个Build进行连续跟踪、测试和定位产生这个Bug的最根本原因。

3.     正确设置浏览器的选项。

4.  对性能有要求的软件或系统一定要进行长期负荷测试(Loading Testing ),以发现内存泄露等需要长期运行才能出现的问题。根据微软的测试经验,如果软件能通过72小时的强力测试,则该软件72小时后出现问题的可能几率微乎其微。因此只需对软件进行72小时的强力测试即可。

5.  集成测试时一定要注意函数接口类型是否匹配。

6.  测试人员要与开发人员、DBA等保持良好的关系。遇到问题要及时、主动与他们沟通,听取他们的意见。在他们的帮助下,你可以更容易地找到问题的关键所在之处。

根据上面的这些建议,我相信大多数不能重现的Bug都可以重现了。当然由于测试的系统的开发语言、开发平台等因素的不同,恕笔者不能一一列举出无法重现的Bug发生所有原因。如果还是遇到某些严重的、却又无法重现的Bug,那么也不必惊慌,你可以按照下面的操作去查找产生Bug的原因:

1.  积极回忆Bug的症状和所有的环境因素,一丝一毫的细节都不要错过。

2.  与开发人员、DBA、系统设计人员、项目经理等一起分析那些环境因素,根据以往的经验分析影响此Bug重现的重要因素,并在相同的环境上安装同样的系统进行测试,以验证所做的猜测。

另外,对于某些无法重现、但严重程度不是很高的Bug,可以暂时只作记录、而不必花费大量的人力和物力去分析。如果下次又出现了,那么根据发生的频率再去分析是否需要跟踪此Bug。如果需要跟踪它,那么在它又出现后一定要立刻对当时的环境进行截图,如错误信息、界面、日志等。这样也利于开发人员定位、分析它,从而准确、快速地修复它。如果条件允许,测试人员应立即保护现有环境,并邀请相关的开发人员和系统分析人员一起研讨产生此问题的原因和解决方法。

转载:http://www.51testing.com/html/11/n-16611.html

Bug不能重现的原因分析及其对策的更多相关文章

  1. z-index失效原因分析——由一个bug引发的对层叠上下文和z-index属性的深度思考

    新年刚开工就被一个bug虐得整个人都不好了,特地记录下. (一)bug描述 在一个fixed-data-table(一个React组件)制作的表格中,需要给表头的字段提示的特效,所以做了一个提示层,但 ...

  2. SELECT TOP 1 比不加TOP 1 慢的原因分析以及SELECT TOP 1语句执行计划预估原理

    本文出处:http://www.cnblogs.com/wy123/p/6082338.html 现实中遇到过到这么一种情况: 在某些特殊场景下:进行查询的时候,加了TOP 1比不加TOP 1要慢(而 ...

  3. Beforeunload打点丢失原因分析及解决方案

    淘宝的鱼相在 2012 年 8 月份发表了一篇文章,里面讲述了他们通过一个月的数据采集试验,得到的结果是:如果在浏览器的本页面刷新之前发送打点请求,各浏览器都有不同程度的点击丢失情况,具体点击丢失率统 ...

  4. HBase丢失数据的故障和原因分析

    hbase的稳定性是近期社区的重要关注点,毕竟稳定的系统才能被推广开来,这里有几次稳定性故障和大家分享.     第一次生产故障的现象及原因     现象: 1 hbase发现无法写入 2 通过hbc ...

  5. 偶发异常BUG,如何高效精准分析排查定位?

    偶发异常BUG,如何高效精准分析排查定位? 作为测试,经常会收到领导.同事.用户反馈过来各种各样BUG,令人措手不及 首选需要判断确认是不是BUG,不要急于给予回复,需有充分的条件给予说明回复 很多测 ...

  6. ShellExecuteEX打开iqy文件导致excel hang的原因分析

    1. 问题 当在console中调用API ShellExecuteEx打开"test.iqy"文件时,发现excel会hang住,console退出后excel才会响应,但直接双 ...

  7. Android ListView异步载入图片乱序问题,原因分析及解决方式

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/45586553 在Android全部系统自带的控件其中,ListView这个控件算是 ...

  8. BUG漏测的原因总结,以及如何处理

    一.漏测的概率 漏测,是指软件产品的缺陷没有在测试过程中被发现,而是在版本发布之后,用户在使用过程中发现存在的缺陷. 二.预防漏测的意义 我们都知道,缺陷越早被发现,发现和解决缺陷所花的成本就越小,如 ...

  9. MYSQL数据表损坏的原因分析和修复方法小结

    MYSQL数据表损坏的原因分析和修复方法小结 1.表损坏的原因分析 以下原因是导致mysql 表毁坏的常见原因: 1. 服务器突然断电导致数据文件损坏. 2. 强制关机,没有先关闭mysql 服务. ...

随机推荐

  1. 洛谷 [P3265] 装备购买

    线性基 通过题目描述可以感觉到就是要求线性基, 线性基的求法是高斯消元,消完以后剩下的x的系数非 0 的就是线性基 本题有一个贪心策略,每次挑选价格最小的来消掉其他的元 //可以快排预处理 #incl ...

  2. P3102 [USACO14FEB]秘密代码Secret Code

    题目描述 Farmer John has secret message that he wants to hide from his cows; the message is a string of ...

  3. curl抓取数据

    抓取数据的代码: $url='抓取数据的网站路径'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); //参数为1表示传输数据,为0表示 ...

  4. JFinal2.0极速开发视频教程发布【转】

    原文:http://blog.dreamlu.net/blog/79 目前JFinal越来越火爆,而且使用的公司越来越多.鉴于市面上JFinal的学习资源不多,我们开始基于JFinal2.0录制学习视 ...

  5. Bruce Eckel:编程生涯

    大家总是问一个错误的问题:“我应该学习C++还是Java?”在本文中,我将告诉大伙儿:对于选择编程生涯真正需要关注的是哪些问题. 请注意,这篇文章的目标读者并不是那些已经做出自己选择的人.(对于这些人 ...

  6. java 常用的解析工具

    这里介绍两种 java 解析工具. 第一种:java 解析 html 工具 jsoup 第二种: java 解析 XML 工具 Dom4j jsoup jsoup是一个用于处理真实HTML的Java库 ...

  7. STM32F10x_StdPeriph_Driver_3.5.0(中文版).chm的使用

    以熟悉的固件库函数说明中函数GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_IintTypeDef *GPIO_InitStructure)为例 GPIOA...G       ...

  8. SSH login without password

    SSH login without password Your aim You want to use Linux and OpenSSH to automize your tasks. Theref ...

  9. python 字符串前缀

    普通字符串 一般字符串都是已unicode编码,且和C类似,可以使用\来转义,比如 a = "test\ntest" print(a) 输出 test test 前面加r 在字符串 ...

  10. 使用Poi对EXCLE的导入导出

    import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import ...