在我们日常测试活动中,经常会发现一些bug,但是这些bug可能就是昙花一现,再也无法(或者很难)重现出来,内心灰常崩溃。那到底有哪些方面可能会导致这类的缺陷发生呢?

我以自己工作中所遇到的给出一些自己的总结,当然如有补充请自行添加。

一.环境问题

这个问题导致的缺陷无法重现的情况还是比较多的,测试和开发环境的不一致可能导致开发那边缺陷无法重现,还有实际运行环境和我们测试的环境不一致。如(硬件的配置,软件的配置,网络因素),当然极少数是系统内部问题或者时间触发的(这类bug重现非常困难)

二.操作问题

很多时候我们在执行测试用例的时候会不经意间做了一些其他操作,这种不经意间完成,而又忽略了这一操作,以至于很难重现。

还有一种是没有找到正确的引发bug的操作顺序,因为很多bug需要满足多个条件。在满足这些条件下再去做某些操作,才能够被触发。

三.特殊数据

有些bug需要使用特殊数据才会出现,并且往往我们测试人员没有意识到自己用的数据的特殊性,导致后面很难去重现。

四.内存泄露或锁

有一些系统只有经过长时间运行才会暴露出bug,这个问题也很难重现。需要经过长时间的测试才能确认以及特殊情况下数据锁的问题,导致的一些bug都很难重现

遇到这种问题,我们应该如何做呢?

(1)提交(不要因为没重现出来,可能是自己眼花而不提)

把不可重现的BUG记录下来,以后再遇到的时候可能就会了解发生的原因。同时尽力去查找出错的原因,比如有什么特别的操作,或者一些操作环境等。而且程序员对程序比测试人员熟悉的多,因为测试人员看到的只是程序的外部,无法深入程序内部,也许你提交了,即使无法重新,程序员也会了解问题所在。无法重现的问题再次出现后,也可以直接叫程序员来看看问题。

但是针对一些比较严重的、随机发生无法重现的bug,测试人员提交上去后,有可能会出现以下三个情形:a.开发人员试图重现,重现不出,Reject回来;b.开发人员找不到规律,所以不去解决,问题一直处于Open状态;c.开发人员因为问题难以解决,所以直接Resolved回来,觉得反正是偶发的,先改成解决状态再说。

(2)尽量详细的描述缺陷

尽可能的详细记录BUG产生的相关信息;如重现频率,发生情况并有截图,操作步骤,软件的版本,发生错误时的各种变量、内存、存储器等存储的数据内容,软件出错时的软硬件环境等。

(3)由开发人员进行人工代码走查和工具静态检查

无法重现的代码找对系统最熟悉的开发人员重新Review代码,最好是多人一起查。查代码还找不出来,就要检查操作系统、应用服务器及其环境是否有问题,是否有兼容性问题。或者采用静态检查工具(如pclint,splint等工具)检查代码,消除所有的error与warning。

(4)受限于浏览器的需要检查浏览器版本和浏览器配置

对于浏览器设置不正确引起的BUG,设置好浏览器选项,就能使BUG重现。

  总之,在遇到某些严重的、却又无法重现的Bug,应积极回忆BUG的症状和所有的环境因素,一丝一毫的细节都不要错过。并与开发人员、DBA、系统设计人员、项目经理等一起分析那些环境因素,根据以往的经验分析影响此Bug重现的重要因素,并在相同的环境上安装同样的系统进行测试,以验证所做的猜测。而对于某些无法重现、但严重程度不是很高的Bug,可以暂时只作记录、而不必花费大量的人力和物力去分析。如果下次又出现了,那么根据发生的频率再去分析是否需要跟踪此Bug。如果需要跟踪它,那么在它又出现后一定要立刻对当时的环境进行截图,如错误信息、界面、日志等。这样也利于开发人员定位、分析它,从而准确、快速地修复它。如果条件允许,测试人员应立即保护现有环境,并邀请相关的开发人员和系统分析人员一起研讨产生此问题的原因和解决方法。

如何看待那些不能重现的bug?的更多相关文章

  1. 如何重现难以重现的bug

    生活中有这么一种现象:如果你关注某些东西,它就会经常出现在你眼前,例如一个不出名的歌手的名字,一种动物的卡通形象,某个非常专业的术语,等等等等.这种现象也叫做“孕妇效应”.还有类似的一种效应叫做“视网 ...

  2. [ZZ]最小化不可重现的bug

    http://testerhome.com/topics/577 原文请见 Minimizing Unreproducible Bugs 不能重现的 bug 是我的灾难.我常常找到一个bug 后来又听 ...

  3. 如何减少不能重现的Bug

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:如何减少不能重现的Bug.

  4. C#的HttpModule中及Java的Servlet中成员变量乱用导致的不易重现的BUG

    3年前写的在HttpModule中记录访问日志的代码,在最近使用日志数据分析登录账号的IP情况时,才发现了一个不易重现的BUG——日志中记录的登录账号出现串掉的情况.之所以这个时候才发现该问题,是因为 ...

  5. 找不好重现的bug的一个小技巧————守株待兔

    最近碰到一个问题就是数据库中偶尔出现一条没有id的数据,可恨的是怎么也找不到重现这个问题的原因,只好换种方式来找了,那么就是我标题所说的守株待兔方法. 因为我发现出现bug的数据库里面的数据有个字段为 ...

  6. Mozilla的 Firefox Graphics 团队向社区寻求重现WebRender bug的方法

    导读 Mozilla 的 Firefox Graphics 团队正在向社区寻求帮助,由于他们收到了一些随机发生的 UI 错误报告,却一直无法找出错误的重现步骤(STR),因此现在向外寻求社区用户的帮助 ...

  7. 改进意见的答复及bug重现

    各组对本组的互评链接如下 Thunder:http://www.cnblogs.com/vector121/p/7905300.html 王者荣耀交流协会:http://www.cnblogs.com ...

  8. Bug不能重现的原因分析及其对策

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

  9. 软件测试人员遇到发现的bug不能重现怎么办?

    软件测试人员遇到发现的bug不能重现怎么办?   刚刚进入测试的童鞋们,想必都遇到过提出的bug,开发要求重现之后,但是在系统上已经重现不了的情况吧. 那么碰到这样的情况,不管开发还是测试都很纠结,开 ...

随机推荐

  1. 为加载......符号 vs2012调试缓慢解决方案

    调试C#网站时vs2012一直 为xxx加载符号 本机上的2010 2017 没有此毛病 没一步都要等待好几秒,百度狗狗(大概花了半天时间)后的方法无果 最后在vs官方论坛 好多老外说删除全部断点就行 ...

  2. AES前后加密算法代码

    首先下载aes.js加密工具类: 本文采用的是 AES/ECB/PKCS5Padding的加密方式进行加密的: js加密写法如下: <!DOCTYPE html> <html lan ...

  3. Dell 12G服务器 手动安装RedHat 6.X

    12代服务器,是DELL目前最新产品,有R720,R520,R620,R420,M420 等产品 以下是光盘直接安装Red Hat 6.X 的方法步骤: 1,选择安装盘对应的启动设备 开机按F11,选 ...

  4. FTP上传失败报错227 Entering Passive Model (222,111,8,111,10,40)

    昨天为了一个ftp问题折腾了一天.问题背景:原来有个接口涉及到上传文件,服务端更换了ftp服务器,我们这边需要刷新连接服务端的ip和端口配置,代码没动.联调环境和验收环境都测试通过,一到生产环境就歇菜 ...

  5. js练习题笔记

    javascrip测试题: 一.选择题(每题2分,多选题错选.少选不得分) 1.分析下段代码输出结果是( )    var arr = [2,3,4,5,6];    var sum =0;    f ...

  6. Indy10收发Hotmail邮件

    hotmail开放了pop3,可以使用客户端工具收取邮件了. POP 服务器: pop3.live.com (端口 995)需要 POP SSL?: 是的用户名: Windows Live ID, 比 ...

  7. SVN1.6服务端和客户端安装配置指导

    本节向大家描述SVN1.6服务端和客户端安装配置步骤,随着SVN的快速发展,版本也进行了升级更新,本节就和大家一起学习一下SVN1.6服务端和客户端安装配置步骤,欢迎大家一起来学习.下面是具体介绍.1 ...

  8. laravel中有条件使用where

    在项目开发的过程中;有时候会有多个参数 去用在where查询中;那么这里的where语句是可能有也可能没有的 1.用原生的mysql语句来实现 private function getData($ty ...

  9. Stratix IV内嵌DPA电路的基本结构

    StratixIV内嵌DPA电路的基本结构 Altera DPA电路特点如下. 可以放松高速接口对时钟到数据通道和数据通道之间对Skew的严格要求. 最高支持1.6Gbit/s应用. 专用硬件DPA ...

  10. module_param 用于动态开启/关闭 驱动打印信息

    1.定义模块参数的方法: module_param(name, type, perm); 其中,name:表示参数的名字;      type:表示参数的类型;      perm:表示参数的访问权限 ...