平码五不中公式规律
  • / 15
  • 下载费用:30 金币  

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

关 键 词:
基于 程序 切片 频繁 模式 提取 代码 缺陷 检测 方法 装置
  专利查询网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
摘要
申请专利号:

CN201210594149.8

申请日:

2012.12.31

公开号:

CN103914374A

公开日:

2014.07.09

当前法律状态:

授权

有效性:

有权

法?#19978;?#24773;: 授权|||实质审查的生效IPC(主分类):G06F 11/36申请日:20121231|||公开
IPC分类号: G06F11/36 主分类号: G06F11/36
申请人: 梁彬
发明人: 梁彬; 边攀
地址: 100193 北京市海淀区东北旺西路8号中关村软件园21号楼启明星辰大厦
优先权:
专利代理机构: 北京安信方达知识产权代理有限公司 11262 代理人: 白莹;栗若木
PDF完整版下载: PDF下载
法律状态
申请(专利)号:

CN201210594149.8

授权公告号:

||||||

法律状态公告日:

2017.09.22|||2014.08.06|||2014.07.09

法律状态类型:

授权|||实质审查的生效|||公开

摘要

本发明公开了一种基于程序切片和频繁模式提取的代码缺陷检测方法及装置,此方法包括:自定义或者从目标源程序获取一个或多个敏感线索,所述敏感线索包含敏感操作和与所述敏感操作相应的参数;针对每个敏感线索?#36816;?#36848;目标源程序应用程序切片技术消除所述目标源程序中与所述敏感线索无关的代码,生?#19978;?#24212;的切片结果集;根据所述切片结果集提取频繁模式;在所述频繁模式的基础上生成关联规则,检测违?#27492;?#36848;关联规则的代码并生成缺陷报告。本发明在代码挖掘的过程中引入敏感线索,利用程序切片消除?#20999;?#19982;敏感线索无关的代码,减少软件代码中的噪声,在此基础上提取频繁模式,可以有效消除噪声代码缺陷挖掘过程的干扰,达到有效地?#26723;?#35823;报和漏报的目的。

权利要求书

权利要求书
1.  一种基于程序切片和频繁模式提取的代码缺陷检测方法,其特征在于,所述方法包括:
自定义或者从目标源程序获取一个或多个敏感线索,所述敏感线索包含敏感操作和与所述敏感操作相应的参数;
针对每个敏感线索?#36816;?#36848;目标源程序应用程序切片技术消除所述目标源程序中与所述敏感线索无关的代码,生?#19978;?#24212;的切片结果集;
根据所述切片结果集提取频繁模式;
在所述频繁模式的基础上生成关联规则,检测违?#27492;?#36848;关联规则的代码并生成缺陷报告。

2.  如权利要求1所述的方法,其特征在于,
所述从目标源程序获取敏感线索的方法包括?#21495;?#26029;所述目标源程序中一操作的参数的有效性被验证的概率大于预设概率时,将此操作及相应的参数作为敏感线索。

3.  如权利要求1所述的方法,其特征在于,
所述生成切片结果的方法包括:根据所述敏感线索确定切片准则;针对每个切片准则,遍历所述目标源程序的程序依?#20302;跡?#21457;现并标记与其相关的程序代码,将被标记的节点确定为相应的切片结果。

4.  如权利要求3所述的方法,其特征在于,
所述根据敏感线索确定切片准则的方法包括:一节点对应的程序语句调用所述敏感线索的敏感操作时,将?#31169;?#28857;和与所述敏感操作的形参对应的实参组成切片准则。

5.  如权利要求1、2、3或4所述的方法,其特征在于,
所述根据所述切片结果集提取频繁模式包括:?#36816;?#36848;切片结果集应用数据挖掘技术提取所述频繁模式。

6.  如权利要求5所述的方法,其特征在于,
所述?#36816;?#36848;切片结果集应用数据挖掘技术提取所述频繁模式的方法包括:规范化变量名及程序语句;将每个切片结果集转换成数据库;在每个数据库上挖掘频繁模式。

7.  如权利要求6所述的方法,其特征在于,
所述规范化变量名包括:对于能够确定变量函数来源的变量使用所述变量的函数来源重命名所述变量,对于不能够确定变量函数来源的变量使用所述变量的变量类型重命名所述变量;
所述规范化程序语句包括:枚举程序语句的等价语句集合,用此集合代替所述程序语句。

8.  一种基于程序切片和频繁模式提取的代码缺陷检测装置,其特征在于,所述装置包括敏感线索获取模块、切片处理模块、频繁模式提取模块、检测模块;
所述敏感线索获取模块,用于自定义或者从目标源程序获取一个或多个敏感线索,所述敏感线索包含敏感操作和与所述敏感操作相应的参数;
所述切片处理模块,用于针对每个敏感线索?#36816;?#36848;目标源程序应用程序切片技术消除所述目标源程序中与所述敏感线索无关的代码,生?#19978;?#24212;的切片结果集;
所述频繁模式提取模块,用于根据所述切片结果集提取频繁模式;
所述检测模块,用于在所述频繁模式的基础上生成关联规则,检测违?#27492;?#36848;关联规则的代码并生成缺陷报告。

9.  如权利要求8所述的装置,其特征在于,
所述敏感线索获取模块,具体用于判断所述目标源程序中一操作的参数的有效性被验证的概率大于预设概率时,将此操作及相应的参数作为敏感线索。

10.  如权利要求8所述的装置,其特征在于,
所述切片处理模块还包括切片准则确定单元和切片结果确定单元;
所述切片准则确定单元,用于根据所述敏感线索确定切片准则;
所述切片结果确定单元,用于针对每个切片准则,遍历所述目标源程序的程序依?#20302;跡?#21457;现并标记与其相关的程序代码,将被标记的节点确定为相应的切片结果。

11.  如权利要求10所述的装置,其特征在于,
所述切片准则确定单元,还用于判定一节点对应的程序语句调用所述敏感线索的敏感操作时,将?#31169;?#28857;和与所述敏感操作的形参对应的实参组成切片准则。

12.  如权利要求8、9、10、11所述的装置,其特征在于,
所述频繁模式提取模块,还用于?#36816;?#36848;切片结果集应用数据挖掘技术提取所述频繁模式,具体包括:规范化变量名及程序语句;将每个切片结果集转换成数据库;在每个数据库上挖掘频繁模式;
所述规范化变量名包括:对于能够确定变量函数来源的变量使用所述变量的函数来源重命名所述变量,对于不能够确定变量函数来源的变量使用所述变量的变量类型重命名所述变量;
所述规范化程序语句包括:枚举程序语句的等价语句集合,用此集合代替所述程序语句。

说明书

说明书基于程序切片和频繁模式提取的代码缺陷检测方法及装置
技术领域
本发明涉及一种代码缺陷静态检测技术,尤其涉及一种基于程序切片和频繁模式提取的代码缺陷检测方法及装置。 
背景技术
代码缺陷在软件尤其是大型软件中是不可避免的。软件在发布之前需要进行充分的测试,以排除潜在的缺陷。由于动态测试方法难以覆盖所有代码,因此利用静态分析技术检测并修补软件中的代码缺陷已经成为一种重要的测试手段。 
传统静态检测方法通过遍历程序代码匹配检测规则发现代码缺陷,当规则匹配失败时说明相应代码可能存在潜在的缺陷。传统静态检测方法的缺陷检测能力受限于检测规则,当缺少检测规则时,无法发现软件中相应的代码缺陷。然而配置完整的规则库是异常困难?#27169;?#26368;主要的原因在于许多特定于应用的隐式编码规则并未记录在文档中,配置此类规则需要对测试目标具有非常深入的?#31169;猓?#36825;在实际应用中具有一定的局限性。 
在静态检测中引入数据挖掘的思想能够在一定程度?#21414;?#34917;传统静态分析方法的不足。该方法基于如下合理的假设:在相对成熟的软件中,大多数代码是正确?#27169;?#32780;异常代码可能存在潜在的缺陷。在实施时,该方法首先应用数据挖掘技术从软件代码中提取频繁出现的编码模式,并生成关联规则,然后检查软件中违反关联规则的代码,这些违反有可能是潜在的程序缺陷。 
与传统静态分析相似,上述利用数据挖掘的思想进行缺陷检测同样存在?#29616;?#30340;误报和漏报问题。其中一个重要的原因是软件代码中存在大量的噪声。而缺陷检测是一件比较精细的工作,任何噪声都有可能造成误报和漏报。一方面,噪声的存在可能导?#36335;?#29616;一些不正确的编码规则,从而造成误报;另 一方面,在检测规则的违反时,检测算法可能会受到与规则无关的代码的干扰,将噪声代码误认为规则中的某些项,从而造成漏报。现有的一些方法主要从精简检测结果集或将问题空间局限于特定的缺陷类型入手,提高检测的精确?#21462;?#28982;而这些方法并不能从根本上消除由于噪声而引起的漏报和误报。 
发明内容
本发明要解决的技术问题是提供一种基于程序切片和频繁模式提取的代码缺陷检测方法及装置,解决现有技术中因无法消除软件代码中噪声引起的检测漏报和误报的问题。 
为?#31169;?#20915;上述技术问题,本发明提供了一种基于程序切片和频繁模式提取的代码缺陷检测方法,所述方法包括: 
自定义或者从目标源程序获取一个或多个敏感线索,所述敏感线索包含敏感操作和与所述敏感操作相应的参数; 
针对每个敏感线索?#36816;?#36848;目标源程序应用程序切片技术消除所述目标源程序中与所述敏感线索无关的代码,生?#19978;?#24212;的切片结果集; 
根据所述切片结果集提取频繁模式; 
在所述频繁模式的基础上生成关联规则,检测违?#27492;?#36848;关联规则的代码并生成缺陷报告。 
进一步地,上述方法还可以具有以下特点: 
所述从目标源程序获取敏感线索的方法包括?#21495;?#26029;所述目标源程序中一操作的参数的有效性被验证的概率大于预设概率时,将此操作及相应的参数作为敏感线索。 
进一步地,上述方法还可以具有以下特点: 
所述生成切片结果的方法包括:根据所述敏感线索确定切片准则;针对每个切片准则,遍历所述目标源程序的程序依?#20302;跡?#21457;现并标记与其相关的程序代码,将被标记的节点确定为相应的切片结果。 
进一步地,上述方法还可以具有以下特点: 
所述根据敏感线索确定切片准则的方法包括:一节点对应的程序语句调用所述敏感线索的敏感操作时,将?#31169;?#28857;和与所述敏感操作的形参对应的实参组成切片准则。 
进一步地,上述方法还可以具有以下特点: 
所述根据所述切片结果集提取频繁模式包括:?#36816;?#36848;切片结果集应用数据挖掘技术提取所述频繁模式。 
进一步地,上述方法还可以具有以下特点: 
所述?#36816;?#36848;切片结果集应用数据挖掘技术提取所述频繁模式的方法包括:规范化变量名及程序语句;将每个切片结果集转换成数据库;在每个数据库上挖掘频繁模式。 
进一步地,上述方法还可以具有以下特点: 
所述规范化变量名包括:对于能够确定变量函数来源的变量使用所述变量的函数来源重命名所述变量,对于不能够确定变量函数来源的变量使用所述变量的变量类型重命名所述变量; 
所述规范化程序语句包括:枚举程序语句的等价语句集合,用此集合代替所述程序语句。 
为?#31169;?#20915;上述技术问题,本发明还提供了一种基于程序切片和频繁模式提取的代码缺陷检测装置,所述装置包括敏感线索获取模块、切片处理模块、频繁模式提取模块、检测模块; 
所述敏感线索获取模块,用于自定义或者从目标源程序获取一个或多个敏感线索,所述敏感线索包含敏感操作和与所述敏感操作相应的参数; 
所述切片处理模块,用于针对每个敏感线索?#36816;?#36848;目标源程序应用程序切片技术消除所述目标源程序中与所述敏感线索无关的代码,生?#19978;?#24212;的切片结果集; 
所述频繁模式提取模块,用于根据所述切片结果集提取频繁模式; 
所述检测模块,用于在所述频繁模式的基础上生成关联规则,检测违?#27492;?#36848;关联规则的代码并生成缺陷报告。 
进一步地,上述装置还可以具有以下特点: 
所述敏感线索获取模块,具体用于判断所述目标源程序中一操作的参数的有效性被验证的概率大于预设概率时,将此操作及相应的参数作为敏感线索。 
进一步地,上述装置还可以具有以下特点: 
所述切片处理模块还包括切片准则确定单元和切片结果确定单元; 
所述切片准则确定单元,用于根据所述敏感线索确定切片准则; 
所述切片结果确定单元,用于针对每个切片准则,遍历所述目标源程序的程序依?#20302;跡?#21457;现并标记与其相关的程序代码,将被标记的节点确定为相应的切片结果。 
进一步地,上述装置还可以具有以下特点: 
所述切片准则确定单元,还用于判定一节点对应的程序语句调用所述敏感线索的敏感操作时,将?#31169;?#28857;和与所述敏感操作的形参对应的实参组成切片准则。 
进一步地,上述装置还可以具有以下特点: 
所述频繁模式提取模块,还用于?#36816;?#36848;切片结果集应用数据挖掘技术提取所述频繁模式,具体包括:规范化变量名及程序语句;将每个切片结果集转换成数据库;在每个数据库上挖掘频繁模式; 
所述规范化变量名包括:对于能够确定变量函数来源的变量使用所述变量的函数来源重命名所述变量,对于不能够确定变量函数来源的变量使用所述变量的变量类型重命名所述变量; 
所述规范化程序语句包括:枚举程序语句的等价语句集合,用此集合代替所述程序语句。 
本发明在代码挖掘的过程中引入敏感线索,利用程序切片消除?#20999;?#19982;敏 感线索无关的代码,减少软件代码中的噪声,在此基础上提取频繁模式,可以有效消除噪声对频繁模式提取过程的干扰,达到有效地?#26723;?#19978;述误报和漏报的目的。特别地,本发明支持由用户自定义敏感线索、从已有漏洞库中提取敏感线索;另外,为提高实用性,本发明还提出一种启发式的方法,从软件代码中自动提取敏感线索。另外,本发明使用数据挖掘操作技术提取频繁模式,并规范变量名和程序语句,进一步?#26723;?#35823;报和漏报。 
附图说明
图1是本发明中代码缺陷检测方法的流程示意图; 
图2是与示例程序对应的控制流程图; 
图3是与示例程序对应的程序依?#20302;跡?nbsp;
图4是本发明中代码缺陷检测装置的结构图。 
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,下文中将结合附图对本发明的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互?#25105;?#32452;合。 
本发明中代码缺陷检测方法的基本思想:利用程序切片技术消除与敏感线索无关的代码,并在切片结果上提取频繁模式,进而检测程序中违反规范的程序代码,这些违反有可能是潜在缺陷。 
图1是本发明代码缺陷检测方法的实现流程示意图,此代码缺陷检测方法包括步骤1至步骤4: 
步骤1,自定义或者从目标源程序获取一个或多个敏感线索,敏感线索包含敏感操作和与敏感操作相应的参数; 
步骤2,针对每个敏感线索?#36816;?#36848;目标源程序应用程序切片技术消除所述目标源程序中与所述敏感线索无关的代码,生?#19978;?#24212;的切片结果集; 
步骤3,根据所述切片结果集提取频繁模式; 
步骤4,在所述频繁模式的基础上生成关联规则,检测违?#27492;?#36848;关联规则的代码并生成缺陷报告。 
执行本方法过程中包括对目标源程序的代码进行常规的解析,进行词法分析、语法分析及语义分析,生成目标源程序代码的中间形式(具体包括抽象语法树、控制流程图、程序依?#20302;跡?nbsp;
抽象语法树描述了源程序代码的语法结构;控制流程图描述了程序的潜在执行路径,在控制流程图,每个节点代表一条程序语句,即抽象语法树的一个子树,而边表?#23616;?#34892;流的可能跳转路径。 
以程序段(a)为例: 

图2为此程序段(a)的代码对应的控制流程图。 
程序依?#20302;?#25551;述了程序语句之间的控制依赖及数据依赖关系,由控制依赖子图和数据依赖子图组成。下面简单介绍从控制流程图计算控制依赖子图及数据依赖子图的方法。控制依赖子图描述了程序语句间的控制依赖关系。在控制流程图中,如果节点n2是否执行取决于节点n1的执行结果,则称节点n2控制依赖于节点n1(每个节点代表一条程序语句)。节点n2控制依赖于节 点n1当且仅当满足?#28023;?)存在从n1到n2的路径P,对于P上的任何节点n3(除n1和n2之外),n2为n3的后支配节点;(2)n2不是n1的后支配节点。如果n2控制依赖于n1,则在控制依赖子图中,从n1到n2存在一条控制依赖边,当n1为条件语句时,边的标签为T或F,当n2在n1的True分支执行时为T,当n2在n1的False分支执行时为F。在控制流程图中,节点n1为n2的支配节点,当且仅当从控制流程图的入口到n2的所有路径都经过n1;节点n1为n2的后支配节点,当且仅当从n2到控制流程图的出口节点都经过n1。 
数据依赖子图描述了程序语句间的数据依赖关系。在控制流图中,如果存在某一变量v在节点n1处被定义,在节点n2处被使用,且存在从n1到n2的一条可执行路径,在该路径上,除n1、n2之外,不存在对变量v的定义节点,则称n2数据依赖于n1;此时在数据依赖子图上存在一条从n1到n2的数据依赖边,边的标签为v,表示n2通过变量v数据依赖于n1。变量v在语句n被定义指语句n写变量v的值,而变量v在语句n被引用指语句n读变量v的值。 
合并控制依赖子图和数据依赖子图,形成程序依?#20302;肌?#22914;图3为上述程序段(a)所示代码对应的程序依?#20302;跡?#20854;中实现表示控制依赖关系,虚线表示数据依赖关系。 
本方法步骤1中,敏感线索是指有可能使用不当的敏感操作(例如函数调用等)以及其参数。可以由用户自定义;特别地,为提高可用性和易用性,本方法还支持一种从源代码中自动提取敏感线索的方法。该方法基于这样一个朴素的假设:为保证敏感操作正?#20998;?#34892;,正常情况下,在执行敏感操作之前,会对敏感操作的参数的有效性进行验证,因此可以将在执行之前其参数经常需要经过验证的操作当作敏感操作。自动提取敏感线索的具体方法是?#21495;?#26029;目标源程序中一操作的参数的有效性被验证的概率大于预设概率时,将此操作及相应的参数作为敏感线索。因为敏感操作执行时如果其参数不符?#21414;?#24863;操作的?#38469;?#23558;会导致程序缺陷,因此,在相对比较成熟的大型软件中,为保证软件的正确,在大多数情况下,对敏感操作调用之前都会对其参数的有效性进行验证(通过条件语句或其他形式进行验证);基于上述现象,如 果某个操作op在调用之前,其参数p的有效性经常被条件语句所验证,则称该操作op及相应的参数p为敏感线索,记为SC(op,p)。对参数的验证包括直接验证和间接验证方式,如果变量直接出现在验证语句中,称为直接验证(如程序段(a)第3行语句对变量len进行了直接验证);如果对与变量相关的其他变量进行?#25628;?#35777;,则对该变量的验证为间接验证(如程序段(a)第3行语句通过验证变量len对变量y进行间接验证),条件语句间接验证的变量可以通过分析数据流信息来识别。以以下程序段(b)为例: 

其中,语句4中函数sensitive_op的实参z(第一个参数)被语句2验证,此时sensitive_op被作为候选敏感操作;如果这种情况经常出现,则认为操作sensitive_op关于其第一个形参为敏感线索,记为SC(sensitive_op,1)。 
本方法步骤2中,针对每个敏感线索对目标源程序应用程序切片技术消除目标源程序中与所述敏感线索无关的代码,生?#19978;?#24212;的切片结果集,具体包括步骤2.1和2.2。 
步骤2.1,根据敏感线索SC(op,p)确定程序切片准则; 
在程序依?#20302;?#20013;,如果节点n对应的程序语句调用操作op,且对应于形参p的实参为v,则节点n集变量v被称为一个切片准则,记作T(n,v)。 
步骤2.2、针对每个切片准则,遍历所述目标源程序的程序依?#20302;跡?#21457;现并标记与其相关的程序代码,将被标记的节点确定为相应的切片结果。 
对于每个切片标准T(n0,v0),遍历程序依?#20302;跡?#26631;记与之相关的节点。 遍历结束?#21271;?#26631;记的节点即形成关于切片标准T(n0,v0)的一个切片,而与切片标注无关的代码则被从切片中消除。在切片时,根据要求可以进?#26143;?#21521;切片和后向切片,前向切片用于确定受切片准则影响的程序代码集合,而后向切片用于确定影响切片准则的程序代码集合。在本实施方式中,后向切片?#28304;?#32479;切片算法略作修?#27169;?#20855;体切片算法为: 
(1)以T(n0,v0)为输入,执行步骤(2)。执行结束时,标记节点n0,所有被标记的节点即形成一个关于本切片标准的切片; 
(2)本步骤的输入为T(n,v)。如果n已被标记,则不做任何操作。在程序依?#20302;?#19978;,遍历节点n的入边,对于数据依赖边<n1,n,v1>,如果v1与v为同一变量,则以n1为输入执行步骤(4);对于控制依赖边<n1,n0,L>(其中L为T或F),则以n1为输入执行步骤(3); 
(3)本步骤的输入为节点n,节点n代表程序中的某一条件语句。如果节点n已经被标记,则不做任何操作。否则,对于节点n处引用的?#25105;?#21464;量v,如果v与v0同源,则标记节点n,并以T(n,v)为输入执行步骤(2)。判断v与v0是否同源的方法如下:如果决定变量v取值的变量集v_SET与决定变量v0取值的变量集v0_SET的交集不为空,则v与v0是同源变量; 
(4)本步骤的输入为节点n,节点n表示程序中的某一非条件语句。如果节点n已经标记,则不做任何操作。否则,标记节点n,并在程序依?#20302;?#19978;,遍历节点n的入边,对于数据依赖边<n1,n,v>,则以n1为输入执行步骤(4);对于控制依赖边<n1,n,L>(其中L为T或F),则以n1为输入执行步骤(3)。 
例如,以切片标准T(5,x)对图3所示程序依?#20302;?#36827;行切片,切片结果为{1,5};以切片标准T(6,y)对图3所示程序依?#20302;?#36827;行切片,切片结果为{2,3,6}。 
在源程序中,由于可能有多条语句调用操作op,因此,对于一个敏感线索将获得多个切片准则。对于每个切片标准执行一次步骤2.2的切片操作,最终对于敏感线索SC(op,p)将形成一切片结果集。例如,对于敏感线索SC(sensitive_op,1),在图3所示程序依?#20302;?#19978;,对应两个切片准则,分别为 T(5,x)和T(6,y)。 
本方法的步骤3中,根据切片结果集提取频繁模式。提取频繁模式的方式可以有多种,可以是传统的统计方式。本发明中应用数据挖掘技术。?#36816;?#36848;切片结果集应用数据挖掘技术提取所述频繁模式的方法包括步骤3.1至3.3: 
步骤3.1,规范化变量名及程序语句。 
由于涉及同一个规则的代码可能采用不同的变量名,因此需要对变量名进行规范化。对变量名的规范化可以用变量类型来重命名变量,为了更精确的表示变量,还可以结合变量的来源重命名变量。规范方法可以是:对于能够确定变量函数来源的变量使用此变量的函数来源重命名此变量,对于不能够确定变量函数来源的变量使用此变量的变量类型重命名此变量。如程序段(a)语句3中变量len的类型为int,其来源为函数get_length的返回值,因此,可以用get_length-ret-int来代替len。 
某些代码表?#20013;?#24335;虽然不同,但它们在语义上却是等价?#27169;?#22914;附图2的第2行代码if(len>max_len)与if(max_len<len)在语义上是等价?#27169;?#22914;果不能识别这些等价语句,在挖掘阶段可能无法发现相应的规则,而在检测阶段则有可能造成误报,因此在应用数据挖掘之前,需要对程序语句进行规范化。其中一个可行的方法是枚举程序语句的等价语句集合,并用此集合代替程序语句本身,例如当程序语句为if(len>max_len)或if(max_len<len)时,将它们规范化成{if(len>max_len),if(max_len<len)}。 
步骤3.2,将每个切片结果集转换成数据库。 
本步骤将对应于一个敏感线索的切片结果集转换成一个数据库,转换过程需要结合具体的挖掘算法及挖掘工具的需求,将程序片转换成数据库中的一个记录,而整个切片结果集形成了相应的数据库。最终,每个敏感线索对应的切片结果集将被转换?#19978;?#24212;的数据库。例如对于频繁项集挖掘,需要一个程序片将转换成一个项集,而程序片中的每条语句将被转换成集合中的项,相应地,切片结果集被转换成一个项集数据库;对于频繁序列挖掘,一个程序片被转换成一个序列,而程序片中的语句将被转换成序列中的事件,相应 地,切片结果集被转换成一个序列数据库;对于频繁子图挖掘,一个程序片将转换成一个图,而程序片中的语句被转换成图中的节点,相应?#27169;?#20999;片结果集被转换成图数据库。同样地,对于其他形式的数据挖掘方法,切片结果根据要求转换?#19978;?#24212;的数据库。 
步骤3.3,在每个数据库上挖掘频繁模式。 
在上述由切片结果集转换形成的数据库上,应用数据挖掘算法,提取频繁模式,作为编码规范。在不同的挖掘方法中,频繁模式具有不同的表?#20013;?#24335;,例如对于频繁项集挖掘,频繁模式为项集的子集;对于序列挖掘,频繁模式为子序列;对于频繁子图挖掘,频繁模式为子图。 
模式P的支持度为数据库中包含P的记录的个数,记为support(P)。如果该支持度大于给定的最小支持度阈值,则称P为频繁模式。一个记录R包含P,在不同的挖掘方法中,具有不同的含义,如在频繁项集挖掘中,表示P是R的子集;在频繁序列挖掘中,表示P是R的子序列;而在频繁子图挖掘中,P是R的子图。 
本方法的步骤4中,关联规则的形式为A->B,其中A和B均为频繁模式,且满足?#28023;?)B包含A;(2)B的支持度与A的支持?#32570;?#20540;大于给定的最小支持度阈值。B的支持度与A的支持?#32570;?#20540;称为关联规则A->B的置信度,即confidence(A->B)=support(B)/support(A)。 
关联规则表示软件编码需要遵循的规则。例如关联规则A->B表示,?#21271;?#30721;包含模式A时,也应当包含模式B。例如对于频繁模式<a,c>:3,<a,b,c>:2可以生成关联规则{a,c}=>{a,b,c};该关联规则表?#38236;?#31243;序代码包含<a,c>时,同时应当包含<a,b,c>。 
对于关联规则A->B,如果数据库中的某个记录R包含模式A,但不包含模式B,则称R是关联规则A->B的一个违反,而记录R对应的源程序代码违反了编码规则,可能是潜在的缺陷。 
根据检测到的违反,生成缺陷报告。缺陷报告中包括违反的是哪个关联规则,以及违反规则的代码位置信息,包括违反规则的代码所在文件路径、函数名等重要信息。 
如图4所示,本发明的代码缺陷检测装置包括敏感线索获取模块、切片处理模块、频繁模式提取模块、检测模块。 
敏感线索获取模块,用于自定义或者从目标源程序获取一个或多个敏感线索,所述敏感线索包含敏感操作和与所述敏感操作相应的参数; 
切片处理模块,用于针对每个敏感线索?#36816;?#36848;目标源程序应用程序切片技术消除所述目标源程序中与所述敏感线索无关的代码,生?#19978;?#24212;的切片结果集; 
频繁模式提取模块,用于根据所述切片结果集提取频繁模式; 
检测模块,用于在所述频繁模式的基础上生成关联规则,检测违?#27492;?#36848;关联规则的代码并生成缺陷报告。 
其中,敏感线索获取模块,具体用于判断所述目标源程序中一操作的参数的有效性被验证的概率大于预设概率时,将此操作及相应的参数作为敏感线索。 
切片处理模块还包括切片准则确定单元和切片结果确定单元。 
切片准则确定单元,用于根据所述敏感线索确定切片准则; 
切片结果确定单元,用于针对每个切片准则,遍历所述目标源程序的程序依?#20302;跡?#21457;现并标记与其相关的程序代码,将被标记的节点确定为相应的切片结果。具体的用于判定一节点对应的程序语句调用所述敏感线索的敏感操作时,将?#31169;?#28857;和与所述敏感操作的形参对应的实参组成切片准则。 
频繁模式提取模块,还用于?#36816;?#36848;切片结果集应用数据挖掘技术提取所述频繁模式,具体包括:规范化变量名及程序语句;将每个切片结果集转换成数据库;在每个数据库上挖掘频繁模式。 
规范化变量名包括:对于能够确定变量函数来源的变量使用所述变量的函数来源重命名所述变量,对于不能够确定变量函数来源的变量使用所述变量的变量类型重命名所述变量; 
规范化程序语句包括:枚举程序语句的等价语句集合,用此集合代替所述程序语句。 
本发明在代码挖掘的过程中引入敏感线索,利用程序切片消除?#20999;?#19982;敏感线索无关的代码,减少软件代码中的噪声,在此基础上提取频繁模式,可以有效消除噪声对频繁模式提取过程的干扰,达到有效地?#26723;?#19978;述误报和漏报的目的。特别地,本发明支持由用户自定义敏感线索、从已有漏洞库中提取敏感线索;另外,为提高实用性,本发明还提出一种启发式的方法,从软件代码中自动提取敏感线索。另外,本发明使用数据挖掘操作技术提取频繁模式,并规范变量名和程序语句,进一步?#26723;?#35823;报和漏报。 
当然,本发明还可有其他多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形?#21152;?#23646;于本发明所附的权利要求的保护范围。 
本领域普通技术人员可以理解上述方法中的全部或部分步骤可通过程序来指令相关?#24067;?#23436;成,所述程序可?#28304;?#20648;于计算机可读存储介质中,如只读存储器、?#25490;?#25110;光盘?#21462;?#21487;选地,上述实施例的全部或部分步骤也可以使用一个或多个集成电路来实现。相应地,上述实施例中的各模块/单元可以采用?#24067;?#30340;形式实现,也可以采用软件功能模块的形式实现。本发明不限制于任何特定形式的?#24067;?#21644;软件的结合。 

关于本文
本文标题:基于程序切片和频繁模式提取的代码缺陷检测方法及装置.pdf
链接地址:http://www.pqiex.tw/p-6115620.html
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

[email protected] 2017-2018 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备17046363号-1 
 


收起
展开
平码五不中公式规律 足球单双玩法 红黑梅方图 分时选股公式 全民捕鱼官方下载 pk10网上投注平台 GTA5地堡买来怎么赚钱 北京pk10预测软件免费 私服传奇怎么赚钱 老彩站快3 幸运28大神论坛