如何使用自动“Bug邻域”分析来识别未修复Bug

发表于:2011-1-18 11:22

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

 作者:淘宝宛蝴    来源:51Testing软件测试网原创

  尽管现在已经有了很多自动识别Bug的静态分析技术,这些技术可以帮助识别空指针引用类型的Bug。但是极少有技术可以做到分析这类型Bug是否应该修复,及该如何修复。修复这些Bug有时不彻底,因为有其他相关的Bug没有得到修复。在这篇论文中,我们定义了“Bug的完全修复”,它是指要修复由一个程序传递到另一个程序的无效值,包含空指针引用。在Java程序中,这种分析建立在“Bug邻域(Bug neighborhood)”的定义上,“bug邻域”包含一定范围内的一组无效值,文章展示了一种自动分析技术。假设程序开发中有两个版本P和P',我们将采用的动态分析,在第二个版本P'中,识别出应当被修复的Bug,并判断出这些Bug是否彻底被修复了。最后以空指针引用为例,源代码采用开源的工程,应用这项技术进行分析。分析结果表明,在这个工程中,许多的错误并没有完全被修复,因此程序在以后的执行中可能出现失败。

  一 、总体介绍

  Java程序经常包含许多Bug,例如对空值的引用,数组下标不正确,导致Java虚拟机抛出运行时异常。这些Bug包含一组无效值,由一个程序传递到另一程序,从而导致运行时异常。尽管许多自动化监测技术可以静态地发现这些Bug,但是极少有技术可以做到分析这类型Bug是否应该修复,及该如何修复。一种修复该错误的尝试可能只修复了表面的错误,而未能彻底的完成修复,从而可能导致另外一次运行中出错。

  以空指针引用异常为例来说明,这个异常是由于将空指针分配(null-pointerassignment, NPA)导致一个空指针引用(null-pointer dereference,NPR)。NPA一般是由于一个空值的声明造成的,常包括下面三种情况:X=null; return null; foo(null);。而NPR是在一个声明中,引用的变量为空。在图1中,左边灰色的方框描述在程序P中出现的空指针异常,NPA1导致了NPR1。NPR2代表由NPA1所导致的,可能在p'中出现的错误,NPR2是否出现,取决于NPA1如何被修复。而NPR3代表NPA1所导致的其他空指针引用,它在P和P'的另外一次运行中出现。

  ……………………

  查看全文请点击下载:http://www.51testing.com/html/02/n-227802.html

  这种技术的最大优势在于它可以自动发现未完成的bug修复,高亮标志出应当引起注意的代码,这项技术可以应用于交互式调错工具(debugging tool),对于一个bug,当开发在修复时,可以给出建议如何才能彻底修复,因此,使用这种工具可以让bug修复变得更为有效。

  这篇文章的主要贡献包括:

  1、提供一种方法来帮助开发定位bug是否得到了完全修复,提供相关信息帮助其完全修复bug。

  2、技术上实现了空引用bug的定位

  3、实验证明,“bug 领域”的范围是非常大的,(NPA, NPR)组也存在多种变化,所以很多bug修复都是不彻底的。

21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号