再论:如何解Bug

发表于:2012-3-01 10:53

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:hitlion2008    来源:51Testing软件测试网采编

分享:

  Bug的复现机率

  这个是特别是值得注意的,首先Bug描述上面写的复现机率只是测试人员在当时的现场Bug出现的机率,另外这个也是比较主观的,比如试了三次出一次,有的人认为是必现的,也有的人认为是有一半机率(Above 50%)。

  但是经过这几年解Bug总结的经验发现,真正的随机出现的Bug只有与线程时序有关的逻辑才会有。其他的随机Bug并不是随机,只可能是测试不太清楚操作步骤和所有的数据或当时的环境现场。

  如何解决Bug

  1、弄清楚Bug究竟是什么样的问题

  拿到Bug后,不要着急去复现,首先要弄明白Bug究竟涉及到哪些行为,哪些操作,当时的现场和环境是什么样的,用了什么样的数据,操作到哪一步出现了问题等等。因为测试人员对Bug的描述是很主观的,可能不太清楚,所以就要与测试人员进行沟通,弄明白这些问题:

  当时的配置,环境,现场是什么样子的?

  涉及到哪些行为?

  进行了什么样的操作?

  操作到哪一步出现了问题?

  出现了什么问题?

  如果说是功能失常,或差劲的用户体验或未实现的行为,那么测试所期待的行为又是什么样子的?

  测试人员有没有附上日志,截屏或其他调试信息。

  2、如果Bug是崩溃或异常

  先不要忙着去复现,因为对于崩溃和异常,日志当中肯定会有崩溃和异常的直接相关信息,通常这就能定位出问题,比如对于Java语言来说如果出现未Handle的异常,那么日志中肯定会有异常相关的信息调用栈等。所以通过日志文件就可以定位出问题出现的源代码。这样就多了一个线索,因为你可以通过源代码来推测是什么导致了这个异常,可能做了什么操作,环境现场发生了什么变化等,通常来讲这比测试人员提供的信息更有参考性。

  3、如果是差劲的用户体验或是未实现的功能

  这个要与测试人员进行沟通,甚至是与管理层和设计者进行沟通,如何修改行为或如何实现行为,并且什么时候进行修改等,通常这个开发人员是没有决定权的。

  4、尝试复现Bug

  这个步骤也是很有必要的,因为即使你修复了Bug,也是需要复现Bug来进行验证以保证你真正的修复了。所以,如果无法复现Bug那么就说不清是因为一直都没有复现还是被你修复了。

  如前所述,如果你完全掌握了Bug所发生的条件,相关的操作步骤,那么复现Bug应该很容易,相关的操作步骤应该Bug描述都会有,但是Bug的相关条件(环境,配置,上下文和数据)这些东西可能要去挖掘才能知道,因为测试可能没有注意,也可能忘记添加到Bug描述中去,所以为什么第一步是弄清楚问题。

  如果是真正的随机问题,那肯定是与线程时序相关的,对于这类问题,发生的原因通常是线程应用不当,产生的Bug也相当的隐蔽。对于这类问题的复现方法是,找到相关的代码逻辑和线程,进行人为的干预,以加大问题出现的机率,比如可以用Thread.sleep()来阻塞线程,以让其以某种特定的时序来运行,以加大Bug复现的机率。

  另外,如果难以完全复制Bug出现的条件,比如特定数据或特定的条件等,也可以通过修改代码来实现,比如某一逻辑只有当对象为空的时候才会进,但是99%的情况下它都不为空,且没有合数据让它为空,那么就在代码中直接用空的对象,以复现Bug。

32/3<123>
春暖花开更文季,点击参与还有惊喜礼品~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计

法律顾问:上海漕溪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2023
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号