基于同构网络的代码克隆检测方法及系统技术方案

技术编号:26596671 阅读:23 留言:0更新日期:2020-12-04 21:18
本发明专利技术属于代码检测技术领域,特别涉及一种基于同构网络的代码克隆检测方法及系统,对提取待比较程序源码函数级别的抽象语法树,其所有叶子节点对应程序源码的句子文本信息,非叶子节点对应程序源码的结构信息;将抽象语法树重新排列,得到与递归自编码器形成同构网络模型的重构抽象语法树,递归自编码器隐藏层每一个节点与重构抽象语法树非叶子节点关联;训练学习递归自编码器模型收敛参数,通过损失函数来训练用于获取中间向量的模型参数;提取语法树的文本语义向量作为输入,通过收敛后模型参数获取待比较程序源码的中间向量;根据中间向量近似程度判定待比较程序源码相似性。本发明专利技术通过自动学习代码隐藏特征,提升代码克隆检测效率和准确性。

【技术实现步骤摘要】
基于同构网络的代码克隆检测方法及系统
本专利技术属于代码检测
,特别涉及一种基于同构网络的代码克隆检测方法及系统。
技术介绍
复制一段代码,经过修改或者不修改,使得两个或多个代码片段彼此相似,称之为代码克隆。代码克隆能够加速软件开发,正式目前工业界的普遍需求。但是代码克隆也会导致缺陷重复现象广泛存在。当原始代码存在缺陷时,克隆的代码通常也存在相同缺陷,会使得缺陷在软件系统中散播开来,使得自身系统中引入漏洞,带来安全隐患。因此,代码克隆检测技术被广泛用于在未知代码中检索已知漏洞。代码克隆检测作为一项基础分析技术,对于维护软件质量具有重要意义。代码克隆检测问题被分为Type1-Type4一共4个级别。Type1为代码片段是完全相同的,除了空格,代码的布局格式或者是注释不同;Type2为代码的结构或者是代码的语法构成都是相同的,除了用户定义的变量,常量值,类型,布局或者是注释有不同;Type3为复制粘贴的代码片段被做了一些改动。除了在类型二上的变动之外,程序本身可能增加,删除修改了部分语句;Type4为代码功能相似,但是代码句法特征不同。传统检测方法利用不同层次的源代码表征,主要分为基于文本、单词、抽象语法树、程序依赖图、度量元以及回合多种表示等。这些代码表征利用了程序在编译过程中的能表征程序句法特点结构特点的中间产物来做源代码表征,再利用源代码的表征内容通过欧几里得距离等方式计算相似程度。目前已有的基于传统的代码表征的方法能够很好的提取代码结构特征和句法特征,对Type1-3级别的代码克隆有这很高的识别率。这是因为Type1-3级别的代码克隆没有对大量代码块内部进行更改,大量保留了代码句法特征,可以被使用句法表征的代码克隆检测技术有效的识别。而基于句法表征的代码克隆检测技术对于Type4级别的代码克隆识别率很低。这是因为Type4级别的代码克隆在构造的时候破坏了大量的代码句法信息,仅保留了功能相似,也就是代码语义相似。所以不具备语义表征信息的传统代码克隆检测技术很难对Type4级别的代码克隆进行有效识别。
技术实现思路
为此,本专利技术提供一种基于同构网络的代码克隆检测方法及系统,能够通过自动学习直观有效地学习代码隐藏特征,提升代码克隆检测效率和准确性。按照本专利技术所提供的设计方案,一种基于同构网络的代码克隆检测方法,包含如下内容:提取待比较程序源码函数级别的抽象语法树,其所有叶子节点对应程序源码的句子文本信息,非叶子节点对应程序源码的结构信息;将抽象语法树重新排列,得到与递归自编码器形成同构网络模型的重构抽象语法树,递归自编码器隐藏层每一个节点与重构抽象语法树非叶子节点关联;提取待比较程序源码重构抽象语法树的文本语义向量;训练学习递归自编码器模型收敛参数,通过损失函数来训练用于获取中间向量的模型参数;将提取到的文本语义向量作为训练后的递归自编码器输入,通过收敛后的模型参数来获取待比较程序源码的中间向量;根据中间向量的近似程度判定待比较程序源码相似性。作为本专利技术基于同构网络的代码克隆检测方法,进一步地,将抽象语法树重新排列过程中,按照从右至左、从下至上的方向填入句子文本内容,生成由低到高节点是函数句子顺序、非叶子节点是程序结构顺序的重构抽象语法树。作为本专利技术基于同构网络的代码克隆检测方法,进一步地,抽象语法树重新排列中,首先摘除所有的叶子节点,然后用后序遍历对剩余的二叉树进行遍历,由低到高连接所有剩余的节点,第一个节点是第二个节点的右子树,类推后,保留每个节点的左子树分支。作为本专利技术基于同构网络的代码克隆检测方法,进一步地,提取文本语义向量中,利用词向量模型对程序中单词进行训练,将单词转换成包含语义信息的向量,获取向量集。作为本专利技术基于同构网络的代码克隆检测方法,进一步地,采用Skip-Gram方法进行单词训练,以获取向量长度为n的向量集,每个向量包含与之对应单词的语义信息。作为本专利技术基于同构网络的代码克隆检测方法,进一步地,递归自编码器中模型损失函数表示为:其中,n为向量长度,xn表示节点输入,x′n表示节点输出。作为本专利技术基于同构网络的代码克隆检测方法,进一步地,利用梯度下降算法迭代更新递归自编码器中模型参数,以得到收敛后的递归自编码器模型参数。作为本专利技术基于同构网络的代码克隆检测方法,进一步地,依据损失函数收敛值设置用于判定相似性的近似程度阈值。作为本专利技术基于同构网络的代码克隆检测方法,进一步地,通过求取待比较程序源码文本语义向量的欧几里得距离,若欧几里得距离小于近似程度阈值,则判定待比较程序源码相似。进一步地,本专利技术还提供一种基于同构网络的代码克隆检测系统,包含:提取模块、词向量生成模块、训练模块和判定模块,其中,提取模块,用于提取待比较程序源码函数级别的抽象语法树,其所有叶子节点对应程序源码的句子文本信息,非叶子节点对应程序源码的结构信息;词向量生成模块,用于将抽象语法树重新排列,得到与递归自编码器形成同构网络模型的重构抽象语法树,递归自编码器隐藏层每一个节点与重构抽象语法树非叶子节点关联;提取待比较程序源码重构抽象语法树的文本语义向量;训练模块,用于训练学习递归自编码器模型收敛参数,通过损失函数来训练用于获取中间向量的模型参数;判定模块,用于将提取到的文本语义向量作为训练后的递归自编码器输入,通过收敛后的模型参数来获取待比较程序源码的中间向量;根据中间向量的近似程度判定待比较程序源码相似性。本专利技术的有益效果:本专利技术,通过抽象语法树和递归自编码器组成用于程序语义提取和识别的同构网络,能够实现对Type4类型克隆的代码检测,提升代码克隆检测效率和准确度,对软件漏洞识别有一定的指导意义,具有较好地应用前景。附图说明:图1为实施例中代码克隆检测方法流程示意图;图2为实施例中递归自编码器结构示意;图3为实施例中程序源码示例;图4为实施例中原始抽象语法树示意;图5为实施例中非叶子节点重构抽象语法树示意;图6为实施例中重构抽象语法树示意;图7为实施例中递归自编码器隐藏层部分示意。具体实施方式:为使本专利技术的目的、技术方案和优点更加清楚、明白,下面结合附图和技术方案对本专利技术作进一步详细的说明。随着深度学习方法在自然语言处理、图像处理等领域取得成功,其也可被应用到程序分析领域。深度学习的最大优势是摆脱“特征工程”难题,能够自动学习出数据特征。通过借鉴很多深度学习在自然语言处理方向上的成果,把程序代码当成自然语言看待来提取语义特征,而语义特征是识别Type4级别代码克隆的重要表征。利用深度学习在自然语言处理领域的相关技术能够很好的推进Type4级别代码克隆相关技术的发展。本专利技术实施例,参见图1所示,提供一种基于同构网络的代码克隆检测方法,包含如下内容:S101、提取待比较程序源码函数级别的抽象语法树,其所有叶子节点对应程序源码的句子文本信息,非叶子节点对应程序源码的结构信本文档来自技高网
...

【技术保护点】
1.一种基于同构网络的代码克隆检测方法,其特征在于,包含如下内容:/n提取待比较程序源码函数级别的抽象语法树,其所有叶子节点对应程序源码的句子文本信息,非叶子节点对应程序源码的结构信息;/n将抽象语法树重新排列,得到与递归自编码器形成同构网络模型的重构抽象语法树,递归自编码器隐藏层每一个节点与重构抽象语法树非叶子节点关联;提取待比较程序源码重构抽象语法树的文本语义向量;/n训练学习递归自编码器模型收敛参数,通过损失函数来训练用于获取中间向量的模型参数;/n将提取到的文本语义向量作为训练后的递归自编码器输入,通过收敛后的模型参数来获取待比较程序源码的中间向量;根据中间向量的近似程度判定待比较程序源码相似性。/n

【技术特征摘要】
1.一种基于同构网络的代码克隆检测方法,其特征在于,包含如下内容:
提取待比较程序源码函数级别的抽象语法树,其所有叶子节点对应程序源码的句子文本信息,非叶子节点对应程序源码的结构信息;
将抽象语法树重新排列,得到与递归自编码器形成同构网络模型的重构抽象语法树,递归自编码器隐藏层每一个节点与重构抽象语法树非叶子节点关联;提取待比较程序源码重构抽象语法树的文本语义向量;
训练学习递归自编码器模型收敛参数,通过损失函数来训练用于获取中间向量的模型参数;
将提取到的文本语义向量作为训练后的递归自编码器输入,通过收敛后的模型参数来获取待比较程序源码的中间向量;根据中间向量的近似程度判定待比较程序源码相似性。


2.根据权利要求1所述的基于同构网络的代码克隆检测方法,其特征在于,将抽象语法树重新排列过程中,按照从右至左、从下至上的方向填入句子文本内容,生成由低到高节点是函数句子顺序、非叶子节点是程序结构顺序的重构抽象语法树。


3.根据权利要求1所述的基于同构网络的代码克隆检测方法,其特征在于,抽象语法树重新排列中,首先摘除所有的叶子节点,然后用后序遍历对剩余的二叉树进行遍历,由低到高连接所有剩余的节点,第一个节点是第二个节点的右子树,类推后,保留每个节点的左子树分支。


4.根据权利要求1所述的基于同构网络的代码克隆检测方法,其特征在于,提取文本语义向量中,利用词向量模型对程序中单词进行训练,将单词转换成包含语义信息的向量,获取向量集。


5.根据权利要求4所述的基于同构网络的代码克隆检测方法,其特征在于,采用Skip-Gram方法进行单词训练,以获取向量长度为n的向量集,每个向量...

【专利技术属性】
技术研发人员:姚金龙谷晶中左洪强程杰张阳光郑宏亮高军涛
申请(专利权)人:山谷网安科技股份有限公司
类型:发明
国别省市:河南;41

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

1