欢迎来到知嘟嘟! 联系电话:13336804447 卖家免费入驻,海量在线求购! 卖家免费入驻,海量在线求购!
知嘟嘟
我要发布
联系电话:13336804447
知嘟嘟经纪人
收藏
专利号: 2023100127800
申请人: 广东工业大学
专利类型:发明专利
专利状态:已下证
专利领域: 计算;推算;计数
更新日期:2024-11-28
缴费截止日期: 暂无
价格&联系人
年费信息
委托购买

摘要:

权利要求书:

1.一种代码克隆检测方法,其特征在于,包括:

S1、构建代码数据集,所述代码数据集由源代码对及克隆标签组成;

S2、从代码数据集中获取数据,对数据中的源代码对进行解析并且生成每个源代码的抽象语法树AST和控制流程图CFG,访问AST和CFG中的所有节点,若当前访问的节点中,其节点属性中的源代码信息和行号信息在序列中,则标记该节点为Method_call节点,将Method_call节点的父母节点指向被调用函数的AST的根节点,生成M‑AST,将Method_call节点的上一个节点指向被调用函数的CFG的入口节点,然后将被调用函数的CFG的出口节点指向Method_call节点所指向的下一个节点,生成M‑CFG;

S3、从M‑AST和 M‑CFG的节点信息中生成语法特征向量和语义特征向量,然后将语法特征向量和语义特征向量融合生成特征向量 ;

S4、源代码对融合生成两个特征向量分别为 和 ,然后通过二分类神经网络完成分类预测;

S5、通过步骤S2‑S4构建代码克隆检测模型,将步骤S1中的代码克隆数据集分为训练集和测试集,通过训练集和测试集不断更新代码克隆检测模型的参数权重,直到迭代结束,得到训练好的代码克隆检测模型;

S6、将待检测的代码输入训练好的代码克隆检测模型,获得检测结果;

在步骤S2中,生成M‑AST和M‑CFG的过程如下:

S2‑1、对源代码进行解析,生成每个函数的AST和CFG;

S2‑2、解析源代码,得到每个函数的调用图,根据调用图,构造函数的调用关系序列 ;

S2‑3、访问AST和CFG中的所有节点,若当前访问的节点中,其节点属性中的源代码信息和行号信息在序列 中,则标记该节点为Method_call节点;

S2‑4、将Method_call节点的父母节点指向被调用函数的AST的根节点生成M‑AST,所述M‑AST为模块级抽象语法树,将Method_call节点的上一个节点指向被调用函数的CFG的入口节点,然后将被调用函数的CFG的出口节点指向Method_call节点所指向的下一个节点生成M‑CFG,所述M‑CFG为模块级控制流程图;

在步骤S3中获得特征向量 的过程如下:

S3‑1、对获取到的M‑AST进行先序遍历,得到M‑AST的节点信息序列 ,然后将所有的节点信息序列 输入到词向量方法中进行训练,得到词向量模型;

S3‑2、将M‑AST和M‑CFG的每个节点信息通过词向量模型转化为16维的向量,然后将转化为16维向量后的M‑AST和M‑CFG转化为图数据结构;

S3‑3、使用由多个图注意力层堆叠组成的GAT来提取转化为图数据结构后的M‑AST的语法特征,更新M‑AST的节点信息;然后通过一个由平均池化和最大值池化组成的混合池化层来聚合M‑AST的所有节点信息,以获得M‑AST的语法特征向量 ;

S3‑4、使用由多个图卷积层堆叠组成的GCN来提取转化为图数据结构后的M‑CFG的语义特征,更新M‑CFG的节点信息,然后通过平均池化层来聚合M‑CFG的所有节点信息,以获得M‑CFG的语义特征向量 ;

S3‑5、采用自适应特征融合策略,调节语法特征向量 和语义特征向量 的权重,进行融合从而得到特征向量 。

2.根据权利要求1所述的一种代码克隆检测方法,其特征在于,在步骤S3‑1中所述的词向量方法为gensim.models.Word2Vec。

3.根据权利要求1所述的一种代码克隆检测方法,其特征在于,在步骤S3‑3中,所述语法特征向量 计算公式如下:参数 表示为M‑AST上所有节点特征向量的特征矩阵, 表示最大池化函数, 表示平均池化函数。

4.根据权利要求2所述的一种代码克隆检测方法,其特征在于,在步骤S3‑4中,所述语义特征向量 计算公式如下:参数 为表示M‑CFG上所有节点特征向量的特征矩阵, 表示平均池化函数。

5.根据权利要求4所述的一种代码克隆检测方法,其特征在于,在步骤S3‑5中,所述特征向量 计算公式如下:其中 是可学习的权重参数。

6.一种计算机存储介质,其特征在于,存储有计算机程序,所述计算机程序被处理器执行时,使得所述处理器执行权利要求1~5任意一项所述的一种代码克隆检测方法。

7.一种计算机设备,其特征在于,包括存储器和处理器,所述存储器存储有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行权利要求1~5任意一项所述的一种代码克隆检测方法。