基于程序切片和频繁模式提取的代码缺陷检测方法及装置制造方法

文档序号:6494422阅读:113来源:国知局
基于程序切片和频繁模式提取的代码缺陷检测方法及装置制造方法
【专利摘要】本发明公开了一种基于程序切片和频繁模式提取的代码缺陷检测方法及装置,此方法包括:自定义或者从目标源程序获取一个或多个敏感线索,所述敏感线索包含敏感操作和与所述敏感操作相应的参数;针对每个敏感线索对所述目标源程序应用程序切片技术消除所述目标源程序中与所述敏感线索无关的代码,生成相应的切片结果集;根据所述切片结果集提取频繁模式;在所述频繁模式的基础上生成关联规则,检测违反所述关联规则的代码并生成缺陷报告。本发明在代码挖掘的过程中引入敏感线索,利用程序切片消除那些与敏感线索无关的代码,减少软件代码中的噪声,在此基础上提取频繁模式,可以有效消除噪声代码缺陷挖掘过程的干扰,达到有效地降低误报和漏报的目的。
【专利说明】基于程序切片和频繁模式提取的代码缺陷检测方法及装置
【技术领域】
[0001]本发明涉及一种代码缺陷静态检测技术,尤其涉及一种基于程序切片和频繁模式提取的代码缺陷检测方法及装置。
【背景技术】
[0002]代码缺陷在软件尤其是大型软件中是不可避免的。软件在发布之前需要进行充分的测试,以排除潜在的缺陷。由于动态测试方法难以覆盖所有代码,因此利用静态分析技术检测并修补软件中的代码缺陷已经成为一种重要的测试手段。
[0003]传统静态检测方法通过遍历程序代码匹配检测规则发现代码缺陷,当规则匹配失败时说明相应代码可 能存在潜在的缺陷。传统静态检测方法的缺陷检测能力受限于检测规贝U,当缺少检测规则时,无法发现软件中相应的代码缺陷。然而配置完整的规则库是异常困难的,最主要的原因在于许多特定于应用的隐式编码规则并未记录在文档中,配置此类规则需要对测试目标具有非常深入的了解,这在实际应用中具有一定的局限性。
[0004]在静态检测中引入数据挖掘的思想能够在一定程度上弥补传统静态分析方法的不足。该方法基于如下合理的假设:在相对成熟的软件中,大多数代码是正确的,而异常代码可能存在潜在的缺陷。在实施时,该方法首先应用数据挖掘技术从软件代码中提取频繁出现的编码模式,并生成关联规则,然后检查软件中违反关联规则的代码,这些违反有可能是潜在的程序缺陷。
[0005]与传统静态分析相似,上述利用数据挖掘的思想进行缺陷检测同样存在严重的误报和漏报问题。其中一个重要的原因是软件代码中存在大量的噪声。而缺陷检测是一件比较精细的工作,任何噪声都有可能造成误报和漏报。一方面,噪声的存在可能导致发现一些不正确的编码规则,从而造成误报?’另一方面,在检测规则的违反时,检测算法可能会受到与规则无关的代码的干扰,将噪声代码误认为规则中的某些项,从而造成漏报。现有的一些方法主要从精简检测结果集或将问题空间局限于特定的缺陷类型入手,提高检测的精确度。然而这些方法并不能从根本上消除由于噪声而引起的漏报和误报。

【发明内容】

[0006]本发明要解决的技术问题是提供一种基于程序切片和频繁模式提取的代码缺陷检测方法及装置,解决现有技术中因无法消除软件代码中噪声引起的检测漏报和误报的问题。
[0007]为了解决上述技术问题,本发明提供了一种基于程序切片和频繁模式提取的代码缺陷检测方法,所述方法包括:
[0008]自定义或者从目标源程序获取一个或多个敏感线索,所述敏感线索包含敏感操作和与所述敏感操作相应的参数;
[0009]针对每个敏感线索对所述目标源程序应用程序切片技术消除所述目标源程序中与所述敏感线索无关的代码,生成相应的切片结果集;[0010]根据所述切片结果集提取频繁模式;
[0011]在所述频繁模式的基础上生成关联规则,检测违反所述关联规则的代码并生成缺陷报告。
[0012]进一步地,上述方法还可以具有以下特点:
[0013]所述从目标源程序获取敏感线索的方法包括:判断所述目标源程序中一操作的参数的有效性被验证的概率大于预设概率时,将此操作及相应的参数作为敏感线索。
[0014]进一步地,上述方法还可以具有以下特点:
[0015]所述生成切片结果的方法包括:根据所述敏感线索确定切片准则;针对每个切片准则,遍历所述目标源程序的程序依赖图,发现并标记与其相关的程序代码,将被标记的节点确定为相应的切片结果。
[0016]进一步地,上述方法还可以具有以下特点:
[0017]所述根据敏感线索确定切片准则的方法包括:一节点对应的程序语句调用所述敏感线索的敏感操作时,将此节点和与所述敏感操作的形参对应的实参组成切片准则。
[0018]进一步地,上述方法还可以具有以下特点:
[0019]所述根据所述切片结果集提取频繁模式包括:对所述切片结果集应用数据挖掘技术提取所述频繁模式。
[0020]进一步地,上述方法还可以具有以下特点:
[0021]所述对所述切片结果集应用数据挖掘技术提取所述频繁模式的方法包括:规范化变量名及程序语句;将每个切片结果集转换成数据库;在每个数据库上挖掘频繁模式。
[0022]进一步地,上述方法还可以具有以下特点:
[0023]所述规范化变量名包括:对于能够确定变量函数来源的变量使用所述变量的函数来源重命名所述变量,对于不能够确定变量函数来源的变量使用所述变量的变量类型重命名所述变量;
[0024]所述规范化程序语句包括:枚举程序语句的等价语句集合,用此集合代替所述程序语句。
[0025]为了解决上述技术问题,本发明还提供了一种基于程序切片和频繁模式提取的代码缺陷检测装置,所述装置包括敏感线索获取模块、切片处理模块、频繁模式提取模块、检测模块;
[0026]所述敏感线索获取模块,用于自定义或者从目标源程序获取一个或多个敏感线索,所述敏感线索包含敏感操作和与所述敏感操作相应的参数;
[0027]所述切片处理模块,用于针对每个敏感线索对所述目标源程序应用程序切片技术消除所述目标源程序中与所述敏感线索无关的代码,生成相应的切片结果集;
[0028]所述频繁模式提取模块,用于根据所述切片结果集提取频繁模式;
[0029]所述检测模块,用于在所述频繁模式的基础上生成关联规则,检测违反所述关联规则的代码并生成缺陷报告。
[0030]进一步地,上述装置还可以具有以下特点:
[0031]所述敏感线索获取模块,具体用于判断所述目标源程序中一操作的参数的有效性被验证的概率大于预设概率时,将此操作及相应的参数作为敏感线索。
[0032]进一步地,上述装置还可以具有以下特点:[0033]所述切片处理模块还包括切片准则确定单元和切片结果确定单元;
[0034]所述切片准则确定单元,用于根据所述敏感线索确定切片准则;
[0035]所述切片结果确定单元,用于针对每个切片准则,遍历所述目标源程序的程序依赖图,发现并标记与其相关的程序代码,将被标记的节点确定为相应的切片结果。
[0036]进一步地,上述装置还可以具有以下特点:
[0037]所述切片准则确定单元,还用于判定一节点对应的程序语句调用所述敏感线索的敏感操作时,将此节点和与所述敏感操作的形参对应的实参组成切片准则。
[0038]进一步地,上述装置还可以具有以下特点:
[0039]所述频繁模式提取模块,还用于对所述切片结果集应用数据挖掘技术提取所述频繁模式,具体包括:规范化变量名及程序语句;将每个切片结果集转换成数据库;在每个数据库上挖掘频繁模式;
[0040]所述规范化变量名包括:对于能够确定变量函数来源的变量使用所述变量的函数来源重命名所述变量,对于不能够确定变量函数来源的变量使用所述变量的变量类型重命名所述变量;
[0041]所述规范化程序语句包括:枚举程序语句的等价语句集合,用此集合代替所述程序语句。
[0042]本发明在代码挖掘的过程中引入敏感线索,利用程序切片消除那些与敏感线索无关的代码,减少软件代码中的噪声,在此基础上提取频繁模式,可以有效消除噪声对频繁模式提取过程的干扰,达到有效地降低上述误报和漏报的目的。特别地,本发明支持由用户自定义敏感线索、从已有漏洞库中提取敏感线索;另外,为提高实用性,本发明还提出一种启发式的方法,从软件代码中自动提取敏感线索。另外,本发明使用数据挖掘操作技术提取频繁模式,并规范变量名和程序语句,进一步降低误报和漏报。
【专利附图】

【附图说明】
[0043]图1是本发明中代码缺陷检测方法的流程示意图;
[0044]图2是与示例程序对应的控制流程图;
[0045]图3是与示例程序对应的程序依赖图;
[0046]图4是本发明中代码缺陷检测装置的结构图。
【具体实施方式】
[0047]为使本发明的目的、技术方案和优点更加清楚明白,下文中将结合附图对本发明的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。
[0048]本发明中代码缺陷检测方法的基本思想:利用程序切片技术消除与敏感线索无关的代码,并在切片结果上提取频繁模式,进而检测程序中违反规范的程序代码,这些违反有可能是潜在缺陷。
[0049]图1是本发明代码缺陷检测方法的实现流程示意图,此代码缺陷检测方法包括步骤I至步骤4:
[0050]步骤1,自定义或者从目标源程序获取一个或多个敏感线索,敏感线索包含敏感操作和与敏感操作相应的参数;
[0051]步骤2,针对每个敏感线索对所述目标源程序应用程序切片技术消除所述目标源程序中与所述敏感线索无关的代码,生成相应的切片结果集;
[0052]步骤3,根据所述切片结果集提取频繁模式;
[0053]步骤4,在所述频繁模式的基础上生成关联规则,检测违反所述关联规则的代码并生成缺陷报告。
[0054]执行本方法过程中包括对目标源程序的代码进行常规的解析,进行词法分析、语法分析及语义分析,生成目标源程序代码的中间形式(具体包括抽象语法树、控制流程图、程序依赖图)。
[0055]抽象语法树描述了源程序代码的语法结构;控制流程图描述了程序的潜在执行路径,在控制流程图,每个节点代表一条程序语句,即抽象语法树的一个子树,而边表示执行流的可能跳转路径。
[0056]以程序段(a)为例:
[0057]
【权利要求】
1.一种基于程序切片和频繁模式提取的代码缺陷检测方法,其特征在于,所述方法包括: 自定义或者从目标源程序获取一个或多个敏感线索,所述敏感线索包含敏感操作和与所述敏感操作相应的参数; 针对每个敏感线索对所述目标源程序应用程序切片技术消除所述目标源程序中与所述敏感线索无关的代码,生成相应的切片结果集; 根据所述切片结果集提取频繁模式; 在所述频繁模式的基础上生成关联规则,检测违反所述关联规则的代码并生成缺陷报生口 O
2. 如权利要求1所述的方法,其特征在于, 所述从目标源程序获取敏感线索的方法包括:判断所述目标源程序中一操作的参数的有效性被验证的概率大于预设概率时,将此操作及相应的参数作为敏感线索。
3.如权利要求1所述的方法,其特征在于, 所述生成切片结果的方法包括:根据所述敏感线索确定切片准则;针对每个切片准贝U,遍历所述目标源程序的程序依赖图,发现并标记与其相关的程序代码,将被标记的节点确定为相应的切片结果。
4.如权利要求3所述的方法,其特征在于, 所述根据敏感线索确定切片准则的方法包括:一节点对应的程序语句调用所述敏感线索的敏感操作时,将此节点和与所述敏感操作的形参对应的实参组成切片准则。
5.如权利要求1、2、3或4所述的方法,其特征在于, 所述根据所述切片结果集提取频繁模式包括:对所述切片结果集应用数据挖掘技术提取所述频繁模式。
6.如权利要求5所述的方法,其特征在于, 所述对所述切片结果集应用数据挖掘技术提取所述频繁模式的方法包括:规范化变量名及程序语句;将每个切片结果集转换成数据库;在每个数据库上挖掘频繁模式。
7.如权利要求6所述的方法,其特征在于, 所述规范化变量名包括:对于能够确定变量函数来源的变量使用所述变量的函数来源重命名所述变量,对于不能够确定变量函数来源的变量使用所述变量的变量类型重命名所述变量; 所述规范化程序语句包括:枚举程序语句的等价语句集合,用此集合代替所述程序语句。
8.一种基于程序切片和频繁模式提取的代码缺陷检测装置,其特征在于,所述装置包括敏感线索获取模块、切片处理模块、频繁模式提取模块、检测模块; 所述敏感线索获取模块,用于自定义或者从目标源程序获取一个或多个敏感线索,所述敏感线索包含敏感操作和与所述敏感操作相应的参数; 所述切片处理模块,用于针对每个敏感线索对所述目标源程序应用程序切片技术消除所述目标源程序中与所述敏感线索无关的代码,生成相应的切片结果集; 所述频繁模式提取模块,用于根据所述切片结果集提取频繁模式; 所述检测模块,用于在所述频繁模式的基础上生成关联规则,检测违反所述关联规则的代码并生成缺陷报告。
9.如权利要求8所述的装置,其特征在于, 所述敏感线索获取模块,具体用于判断所述目标源程序中一操作的参数的有效性被验证的概率大于预设概率时,将此操作及相应的参数作为敏感线索。
10.如权利要求8所述的装置,其特征在于, 所述切片处理模块还包括切片准则确定单元和切片结果确定单元; 所述切片准则确定单元,用于根据所述敏感线索确定切片准则; 所述切片结果确定单元,用于针对每个切片准则,遍历所述目标源程序的程序依赖图,发现并标记与其相关的程序代码,将被标记的节点确定为相应的切片结果。
11.如权利要求10所述的装置,其特征在于, 所述切片准则确定 单元,还用于判定一节点对应的程序语句调用所述敏感线索的敏感操作时,将此节点和与所述敏感操作的形参对应的实参组成切片准则。
12.如权利要求8、9、10、11所述的装置,其特征在于, 所述频繁模式提取模块,还用于对所述切片结果集应用数据挖掘技术提取所述频繁模式,具体包括:规范化变量名及程序语句;将每个切片结果集转换成数据库;在每个数据库上挖掘频繁模式; 所述规范化变量名包括:对于能够确定变量函数来源的变量使用所述变量的函数来源重命名所述变量,对于不能够确定变量函数来源的变量使用所述变量的变量类型重命名所述变量; 所述规范化程序语句包括:枚举程序语句的等价语句集合,用此集合代替所述程序语句。
【文档编号】G06F11/36GK103914374SQ201210594149
【公开日】2014年7月9日 申请日期:2012年12月31日 优先权日:2012年12月31日
【发明者】梁彬, 边攀 申请人:梁彬
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1