[发明专利]一种检查源代码中空指针的方法和计算机系统有效
申请号: | 200910203702.9 | 申请日: | 2009-05-20 |
公开(公告)号: | CN101566968A | 公开(公告)日: | 2009-10-28 |
发明(设计)人: | 何崚 | 申请(专利权)人: | 阿里巴巴集团控股有限公司 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 北京集佳知识产权代理有限公司 | 代理人: | 马 敬;逯长明 |
地址: | 英属开曼群岛大开曼*** | 国省代码: | 开曼群岛;KY |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 检查 源代码 中空 指针 方法 计算机系统 | ||
技术领域
本申请涉及空指针检测技术领域,特别涉及一种检查源代码中空指针的 方法和计算机系统。
背景技术
在计算机程序中,具有不定值的指针会随机产生数值,不知道指向什么 地方的指针,或指针指向超出范围的指针是很危险的,因为这种不确定因素 可以使程序陷入瘫痪,因此要定义一个空值针将这些不定因素装进去。这种 空值针也就是通常所说的空指针。
下面以JAVA语言为例,提供一个简单的空指针的例子:
//Hello.java的源代码
import com.xx.Bye;
public class Hello{
private Integer num1; //声明一个整型的指针num1
private Bye bye;
public int getNum(){
return num1.intValue();//调用指针num1
}
}
从上面的例子可以看出,在第4行声明了一个类型为整型(Integer)的 指针,该指针名称为num1,在第7行调用了该指针num1,而在对该指针声 明之后,调用之前,并没有对该num1指针进行初始化,因而在运行中会造 成一个典型的空指针异常。
目前,由于空指针异常而使一个程序项目如JAVA项目存在程序缺陷 (bug)的情况非常常见,现有技术主要通过白盒测试和黑盒测试来检测一个 JAVA项目中是否存在异常的空指针。
白盒测试是指已知产品的内部工作过程,通过测试来证明内部每种操作 是否符合设计规格要求,所有内部成分是否以经过检查。白盒测试要写大量 的测试用例,如果测试用例覆盖度不足,白盒测试的效果也不好。
黑盒测试是指已知产品的功能设计规格,可以进行测试证明每个实现了 的功能是否符合要求。黑盒测试是通过功能测试来查找问题,并且要界定bug 的责任人,只能通过人工判断。Bug描述和邮件通知也要消耗人力沟通成本。
此外一些开源的静态源码分析工具,如findbugs,也可以扫描程序代码 中的空指针异常情况,但是会存在很多的问题:
1.许多情况下的空指针问题扫描不出。
现有开源的静态源码分析工具,如findbugs,只检查程序代码中的全局 变量、局部变量等空指针情况,而对于程序代码中涉及方法(“方法”是包含 一系列语句的代码块。程序通过“调用”方法并指定所需的任何方法参数来执 行语句。)参数的空指针不做检测,因而,许多情况下的空指针问题扫描不出。
此外,由于程序不稳定,代码解析过程复杂易出错等问题,也经常导致 空指针问题扫描不出。
2.扫描工具比较庞大,扫描速度慢。
由于findbugs不是专门的空指针扫描器,其还扫描很多其他的东西,虽 然可配置,但是毕竟代码设计冗余,扫描速度比较慢。
3.编译后才能扫描。
现有的findbugs往往需要代码编译完以后,才能进行扫描,因为它是以 字节码为主进行扫描,不能扫描源码,因而需要编译,而编译比较麻烦,准 备时间多,程序开发的精神相悖。
4.现有用于空指针扫描工具所采用的算法比较落后,其构造了大量的复 杂的正则表达式列表,循环递归调用正则表达式,对CPU等资源占用非常大。
发明内容
本申请实施例提供一种检查源代码中空指针的方法和计算机系统,不但 能全面、准确、快速地扫描出异常空指针,且在扫描前不需要对程序代码进 行编译,算法先进,避免占用大量资源。
为实现上述目的,本申请提供了一种检查源代码中空指针的方法,计算 机系统构造可引用变量类型字典,所述可引用变量类型字典中包括各种类型 的变量声明,该方法还包括:
计算机系统接收扫描空指针的指令,格式化待检查的源代码;
扫描所述待检查源代码的全局代码区域,获得与所述可引用变量类型字 典中变量声明类型对应的未初始化全局变量列表;
扫描所述待检查源代码的方法区域,获得与所述可引用变量类型字典中 变量声明类型对应的未初始化局部变量列表;
根据未初始化全局变量列表,获取方法下未初始化全局变量列表;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于阿里巴巴集团控股有限公司,未经阿里巴巴集团控股有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/200910203702.9/2.html,转载请声明来源钻瓜专利网。
- 上一篇:起到保密作用的USB插头
- 下一篇:多线程化图标编程系统