一种基于深度学习的开源软件代码实参错误检测方法技术

技术编号:37145157 阅读:19 留言:0更新日期:2023-04-06 21:56
本发明专利技术公开了一种基于深度学习的开源软件代码实参错误检测方法,属于计算机软件缺陷定位和缺陷预测技术领域。对于开源软件,本发明专利技术基于程序静态解析技术,自动提取代码中函数调用语句语义相关实体的特征信息,利用自然语言理解和词向量技术挖掘标识符文本语义信息,基于参数时序信息训练深度神经网络模型,并进行异常实参错误检测。本发明专利技术充分挖掘了函数调用语句的自然语言语义信息和时序信息,利用神经网络将实参错误检测问题形式化为简单的二分类问题,能够简单高效地检测程序中的函数实参错误,可自动生成正样本训练数据,同时利用变换算法自动生成负样本训练数据。变换算法自动生成负样本训练数据。变换算法自动生成负样本训练数据。

【技术实现步骤摘要】
一种基于深度学习的开源软件代码实参错误检测方法


[0001]本专利技术涉及一种开源软件代码函数实参错误检测方法,具体涉及一种基于深度学习的开源软件代码实参错误检测方法,属于计算机软件缺陷定位和缺陷预测


技术介绍

[0002]软件缺陷是指软件系统所需功能的失效或违背(从产品外部看),是软件开发或维护过程中所犯的错误(从产品内部看)。目前,尚未有技术可以保证复杂软件的开发不会引入缺陷。因此,如何有效发现和修复软件缺陷,成为软件开发中必不可少的一个关键技术环节。
[0003]在函数调用过程中,传递错误实参是一种特殊的软件缺陷。研究结果表明,函数实参错误问题是开源软件代码中真实存在并且会带来严重问题的软件缺陷。因此,如何有效检测开源软件代码中包含的实参错误缺陷,是一项非常重要的软件缺陷检测任务。
[0004]目前,现有的软件缺陷检测方法包括基于启发式搜索、基于模式挖掘模板、基于语义约束、基于统计分析技术等。这些方法通常需要进行复杂的程序语法和语义分析,且依赖于挖掘的模式进行手动算法调整,检测缺陷的通用性差,性能有待进一步提高。

技术实现思路

[0005]本专利技术的目的是为了克服现有的软件缺陷检测技术存在的不足,解决现有软件缺陷定位方法无法有效检测函数实参错误的技术问题,创造性地提出一种基于深度学习的开源软件代码实参错误检测方法。
[0006]本专利技术的创新点在于:对于给定开源软件,本专利技术基于程序静态解析技术,自动提取代码中函数调用语句语义相关实体的特征信息,利用自然语言理解和词向量技术挖掘标识符文本语义信息,基于参数时序信息训练深度神经网络模型,并进行异常实参错误检测。
[0007]有益效果
[0008]本专利技术,对比现有技术,具有以下优点。
[0009]1.本专利技术充分挖掘了函数调用语句的自然语言语义信息和时序信息,能够简单高效地检测程序中的函数实参错误。
[0010]2.本专利技术可自动生成正样本训练数据,同时利用变换算法自动生成负样本训练数据。
[0011]3.本专利技术利用神经网络将实参错误检测问题形式化为简单的二分类问题。
附图说明
[0012]图1为本专利技术方法的流程图。
具体实施方式
[0013]下面结合附图对本专利技术所述方法做进一步详细说明。
[0014]如图1所示,一种基于深度学习的开源软件代码实参错误检测方法,包括以下步骤:
[0015]步骤1:提取特征信息。对于被测软件,利用抽象语法树解析,提取出函数调用语句的相关特征信息。
[0016]具体地,步骤1包括以下步骤:
[0017]步骤1.1:对于每条实参列表不为空的函数调用语句,利用JDT解析器提取其特征信息,包括函数名称mthN
p
、实参名称argN
p
和实参数据类型argT
p

[0018]其中,由于函数参数列表中可能包含多个参数,因此,实参名称argN
p
是所有实参名称的序列,即:argN
p
=<argN
p
(0),argN
p
(1),
……
,argN
p
(k)>,argN
p
(k)表示第k个实参名称;实参类型argT
p
是所有实参数据类型的序列,即:argT
p
=<argT
p
(0),argT
p
(1),
……
,argT
p
(k)>,argT
p
(k)第k个实参类型。
[0019]步骤1.2:对于步骤1.1中的每条函数调用语句,利用JDT解析器提取相应的函数声明语句信息,包括形参名称parN
p
和形参数据类型parT
p

[0020]其中,由于函数形参列表中可能包含多个参数,因此,形参名称parN是所有形参名称的序列,即parN
p
=<parN
p
(0),parN
p
(1),
……
,parN
p
(k)>,parN
p
(k)表示第k个形参名称;形参类型parT
p
是所有形参数据类型的序列,即parT
p
=<parT
p
(0),parT
p
(1),
……
,parT
p
(k)>,parT
p
(k)表示第k个形参类型。
[0021]步骤2:文本信息处理。将数据库中每条样本数据中的标识符名称信息进行自然语言处理。
[0022]具体地,步骤2包括以下步骤:
[0023]步骤2.1:分词处理。
[0024]基于贪婪算法,按照“驼峰规范”将每个标识符分割为token序列。
[0025]例如,实参argN(i)表示为:
[0026]token(argN
p
(i))=<token(argN
p
(i),0),token(argN
p
(i),1),
……
,token(argN
p
(i),k)>其中,token(argN
p
(i),k)表示第k个token实参argN
p
(i)。
[0027]步骤2.2:文本相似度计算。
[0028]对于每个实参argN(i)及其相应的形参parN(i),利用Jaccard计算公式计算二者的文本相似度jacSim(i):
[0029][0030]则文本相似度jacSim
p
=<jacSim(0),jacSim(1),
……
,jacSim(k)>,其中,jacSim(k)表示第k个实参与其相应形参的文本相似度。
[0031]步骤3:生成正样本。
[0032]具体地,步骤3包括以下步骤:
[0033]步骤3.1:将步骤1中提取的每个函数调用语句的特征信息组合形成一条数据data
p
,data
p
=<mthN
p
,argN
p
,argT
p
,parN
p
,parT
p
>,并存储在数据库Res中,其中,mthN
p
表示方法名称,argN
p
表示实参名称,argT
p
表示实参数据类型,parN
p
表示形参数据名称,par本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于深度学习的开源软件代码实参错误检测方法,其特征在于,包括以下步骤:步骤1:利用抽象语法树解析,提取出对被测软件函数调用语句的相关特征信息,包括以下步骤:步骤1.1:对于每条实参列表不为空的函数调用语句,利用JDT解析器提取其特征信息,包括函数名称mthN
p
、实参名称argN
p
和实参数据类型argT
p
;实参名称argN
p
是所有实参名称的序列,即:argN
p
=<argN
p
(0),argN
p
(1),
……
,argN
p
(k)>,argN
p
(k)表示第k个实参名称;实参类型argT
p
是所有实参数据类型的序列,即:argT
p
=<argT
p
(0),argT
p
(1),
……
,argT
p
(k)>,argT
p
(k)第k个实参类型;步骤1.2:对于步骤1.1中的每条函数调用语句,利用JDT解析器提取相应的函数声明语句信息,包括形参名称parN
p
和形参数据类型parT
p
;形参名称parN是所有形参名称的序列,即:parN
p
=<parN
p
(0),parN
p
(1),
……
,parN
p
(k)>,parN
p
(k)表示第k个形参名称;形参类型parT
p
是所有形参数据类型的序列,即:parT
p
=<parT
p
(0),parT
p
(1),
……
,parT
p
(k)>,parT
p
(k)表示第k个形参类型;步骤2:将数据库中每条样本数据中的标识符名称信息进行自然语言处理,包括以下步骤:步骤2.1:分词处理;基于贪婪算法,按照“驼峰规范”将每个标识符分割为token序列;其中,实参argN(i)表示为:token(argN
p
(i))=<token(argN
p
(i),0),token(argN
p
(i),1),
……
,token(argN
p
(i),k)>其中,token(argN
p
(i),k)表示第k个token实参argN
p
(i);步骤2.2:文本相似度计算;对于每个实参argN(i)及其相应的形参parN(i),利用Jaccard计算公式计算二者的文本相似度jacSim(i):则文本相似度jacSim
p
=<jacSim(0),jacSim(1),
……
,jacSim(k)>,其中,jacSim(k)表示第k个实参与其相应形参的文本相似度;步骤3:生成正样本,包括以下步骤:步骤3.1:将步骤1中提取的每个函数调用语句的特征信息组合形成一条数据data
p
,data
p
=<mthN
p
,argN
p
,argT
p
,parN
p
,parT
p
>,并存储在数据库Res中,其中,mthN
p
表示方法名称,argN
p
表示实参名称,argT
p
表示实参数据类型,parN
p
表示形参数据名称,parT
p
表示形参数据类型;步骤3.2:将步骤2计算得到的文本相似度信息jacSim
p
与步骤3.1得到的数据d...

【专利技术属性】
技术研发人员:李光杰唐艺李维昊张翔何焱
申请(专利权)人:中国人民解放军军事科学院国防科技创新研究院
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1