【技术实现步骤摘要】
一种基于深度学习的开源软件代码实参错误检测方法
[0001]本专利技术涉及一种开源软件代码函数实参错误检测方法,具体涉及一种基于深度学习的开源软件代码实参错误检测方法,属于计算机软件缺陷定位和缺陷预测
技术介绍
[0002]软件缺陷是指软件系统所需功能的失效或违背(从产品外部看),是软件开发或维护过程中所犯的错误(从产品内部看)。目前,尚未有技术可以保证复杂软件的开发不会引入缺陷。因此,如何有效发现和修复软件缺陷,成为软件开发中必不可少的一个关键技术环节。
[0003]在函数调用过程中,传递错误实参是一种特殊的软件缺陷。研究结果表明,函数实参错误问题是开源软件代码中真实存在并且会带来严重问题的软件缺陷。因此,如何有效检测开源软件代码中包含的实参错误缺陷,是一项非常重要的软件缺陷检测任务。
[0004]目前,现有的软件缺陷检测方法包括基于启发式搜索、基于模式挖掘模板、基于语义约束、基于统计分析技术等。这些方法通常需要进行复杂的程序语法和语义分析,且依赖于挖掘的模式进行手动算法调整,检测缺陷的通用性差,性能有待进一步提高。
技术实现思路
[0005]本专利技术的目的是为了克服现有的软件缺陷检测技术存在的不足,解决现有软件缺陷定位方法无法有效检测函数实参错误的技术问题,创造性地提出一种基于深度学习的开源软件代码实参错误检测方法。
[0006]本专利技术的创新点在于:对于给定开源软件,本专利技术基于程序静态解析技术,自动提取代码中函数调用语句语义相关实体的特征信息,利用自然语 ...
【技术保护点】
【技术特征摘要】
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...
【专利技术属性】
技术研发人员:李光杰,唐艺,李维昊,张翔,何焱,
申请(专利权)人:中国人民解放军军事科学院国防科技创新研究院,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。