如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
第""卷第三届全国软件测试会议与移动计算P栅格P智能化高级论坛论文集1&,1过程间的空指针引用故障静态检测方法567689:;6;968<=>;6?<@<AB=6C7DEC<9;@FC7GHFGGI<8=6;C:;C;A;C;=9;J7FG6K张冠楠宫云战金大海-北京邮电大学网络技术研究院北京’##+3)1L摘要M空指针引用的错误在NOO程序中普遍存在(面向故障的静态测试方法应该很好地针对这种故障模式4然而已有的一些静态测试方法大多着重于过程内(许多通过函数参数或者返回值进行传递的指针由于函数间分析的复杂性导致其检测相对困难4提出了一种以函数摘要做基础进行函数间分析P同时利用状态机对函数间的空指针引用错误进行检测的方法4同时(过程内利用了路径敏感的特性减少了误报4L关键词M静态分析(空指针引用(函数摘要中图分类号*QR,’’S&)文献标识码*.TU5VWTXVYZ[[\]^_‘abcabadaba_eadfZ[‘gfba\]\Z[fb^_NOO\b]hbfi(dfZ[‘%]b^a_‘acg‘f‘^e‘ag‘^_hia‘j]cgj]Z[cca‘ae‘‘jagadfZ[‘gka[[Slf_m]d‘ja\ban^]Zgg‘f‘^e‘ag‘^_hia‘j]cgi]g‘[md]eZgac]_^_‘bf%\b]eacZbf[f_f[mg^g(oaefZga]d‘jae]i\[ap^‘m]d^_‘ab%\b]eacZbf[f_f[mg^g(\]^_‘abg‘jf‘fba\fggacdb]i]_a\b]eacZbf[‘]f_]‘jabfg\fbfia‘abg]bba‘Zb_nf[Zagfbajfbc‘]f_f[mqaSQj^g\f\ab\baga_‘gfg^i\[ai]ca[‘]ca‘ae‘^_‘ab%\b]eacZbf[_Z[[\]^_‘abcabadaba_eadfZ[‘gSrZbia‘j]cd]eZgag]_^_‘ab%\b]eacZbf[f_cZgagdfZ[‘g‘f‘aifej^_a‘]f_f[mqa]_ofga]d\b]eacZbf[gZiifbmSlaf_[m(]Zbia‘j]c^g\f‘j%ga_g^‘^na^_]_a\b]eacZbakj^ejef_bacZea‘jadf[ga\]g^‘^nagSstuvwW:5g‘f‘^ef_f[mg^g(_Z[[\]^_‘abcabadaba_ea(\b]eacZbf[gZiifbm对于软件故障的测试方法大体可分为两类*动态方法和静态方法x’y4动态方法需要对程序进行实际的运行以发现错误(但是由于程序中大量存在的分支结构所导致的复杂性(程序的一次或几次运行不能覆盖所有的分支(有些隐秘的错误不能立即暴露出来(从而留下软件实施的隐患4静态测试方法由于其不用运行源程序便能找到各种潜在的错误而有其优势性(其主要是根据具体程序结构对源程序中一些符合具体特征的错误模式进行检测(针对性比较强x"y4近年来关于静态测试的工具逐渐出现(其中检测效果较好应用较为广泛的多是针对zfnf语言(如开源工具{^_coZhg(Rl|等x,y4针对NOO语言的开源工具有N\\ejae}和g\[^_‘等x0y(但是多数静态测试工具主要着重于函数内的错误模式(而对于经由函数调用传递参数以及返回值所带来的错误的检测效果比较差(而将指针作为参数或者返回值的程序普遍存在(因此解决函数间的空指针引用错误是必要的4本文主要介绍一种在函数内利用故障状态机检测空指针引用错误的理论的基础上x&y(利用函数间的分析(函数调用图以及函数摘要进行函数间的空指针引用故障的检测方法(该方法同时保证了函数内路径敏感的特性4~基本概念~S~空指针引用故障的介绍NOO语言中的指针变量可以指向堆地址P静态变量和空地址单元4当引用指向空地址单元的指针变量的时候(就会产生空指针引用故障-YZ[[R]^_‘ab|abadaba_ea(简称YR|1(造成对内存的保护错误(大多数情况下导致程序异常终止4空指针引用故障在程序中普遍存在(过程内的错误主要源于分支结构导致的对不同路径上指针赋值的不同4过程间的错误则主要源于函数调用带来的指针传递4下面简单介绍几种常见的函数间空指针引用故障*!被引用的指针变量是由函数的返回值所赋值(而该函数可能返回空4如图’-f1中由于"由函数ha‘R]^_‘ab-^_‘d[fh1返回为空(则#$%&’()!"处引用产生了空指针引用异常4*作为实参传递给函数的参数可能为空(函数内没有判断就直接对该参数进行引用4如图’-o1中传递给函数+,-./#$%-(-#$%!"1的实参为空(则在#$%&’()!"处的直接引用会导致空指针引用异常40全局指针变量或者类