[发明专利]基于代码属性图的代码相似性检测方法在审
申请号: | 202210813094.9 | 申请日: | 2022-07-11 |
公开(公告)号: | CN115438709A | 公开(公告)日: | 2022-12-06 |
发明(设计)人: | 蔡波;于耀翔;范伦君 | 申请(专利权)人: | 云南恒于科技有限公司;武汉大学 |
主分类号: | G06K9/62 | 分类号: | G06K9/62;G06F11/36;G06N3/04;G06N3/08 |
代理公司: | 成都东恒知盛知识产权代理事务所(特殊普通合伙) 51304 | 代理人: | 何健雄 |
地址: | 650000 云南省昆明市昆明片区*** | 国省代码: | 云南;53 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 代码 属性 相似性 检测 方法 | ||
本发明涉及代码检测技术领域涉及一种基于代码属性图的代码相似性检测方法,包括:一、生成代码属性图;二、生成图嵌入;先使用经过预训练的的节点嵌入模型生成代码树形图中每个节点的初始向量表示;使用GraphSAGE图神经网络通过聚合邻域特征的方式更新节点信息,在每个节点上生成包含整个图的信息的节点嵌入;最后通过带有注意力机制的图神经网络,生成一个具有代码属性图整体信息的向量表示;三、程序相似性分析;用张量神经网络预测两个图嵌入向量之间的相关程度,并用预测得到的结果作为相似性检测的最终得分。本发明能较佳地进行代码相似性检测。
技术领域
本发明涉及代码检测技术领域,具体地说,涉及一种基于代码属性图的代 码相似性检测方法。
背景技术
程序相似性是一个基础的概念,也是软件工程任务的核心问题之一,在软 件剽窃、克隆识别、代码重构和代码搜索中都有广泛应用。现在的程序相似性 研究分析可以分为句法相似性和语义相似性,句法相似性是指代码段在文本或 结构上的相似性,语义相似性则关注代码段之间在功能上的相似性。其中语义 相似性是目前研究的热点和难点,现有的方法很少能有效地检测语义相似性并 达到工业界的使用标准。
近年来,为了检测程序相似性,研究人员尝试采用深度学习的方法进行代 码相似性检测,从数据中自动学习潜在的语义特征,并在各种编程语言中的代 码相似度测试方面取得了重大进展。为了利用语法信息,通常将代码转化为抽 象语法树(AST)作为输入,但是这些基于AST的方法仍然不能充分利用代码片 段的特征信息,特别是控制流和数据流等语义信息。
发明内容
本发明的内容是提供一种基于代码属性图的代码相似性检测方法,其能够 克服现有技术的某种或某些缺陷。
根据本发明的一种基于代码属性图的代码相似性检测方法,其包括以下步 骤:
一、生成代码属性图;
将源代码转化为具有丰富语义信息的代码属性图,然后基于得到的代码属 性图提取其中的语法、语义信息,将代码属性图中的信息以矩阵的形式保存;
二、生成图嵌入;
先使用经过预训练的的节点嵌入模型生成代码树形图中每个节点的初始向 量表示;然后使用GraphSAGE图神经网络通过聚合邻域特征的方式更新节点信 息,在每个节点上生成包含整个图的信息的节点嵌入;最后通过带有注意力机 制的图神经网络,生成一个具有代码属性图整体信息的向量表示;
三、程序相似性分析;
用张量神经网络预测两个图嵌入向量之间的相关程度,并用预测得到的结 果作为相似性检测的最终得分。
作为优选,代码属性图使用joern生成,具体如下:
(1)由于joern是基于数据库开发的工具,需要将源代码的C++文件变为 文件夹的形式;即源代码的.cpp后缀的文件单独放在以其为命名的文件夹中, 并将这些文件夹全部放在一个大的文件夹下;
(2)把每个.cpp后缀的文件所在的文件夹输入joern中,得到.dot后缀的代 码属性图表示;
(3)为了方便后续对代码属性图的处理,将其以图结构读取在内存中;然 后遍历这个代码属性图的所有信息,包括节点和边的属性和值;
(4)提取遍历到的所有信息,并重新编码为代码属性图的最终表示。
作为优选,使用预训练模型word2vec生成代码树形图中每个节点的初始向 量表示,通过将所有节点的特征信息code的token输入预训练模型,可得到每 个token经过加权平均后的向量表示。
作为优选,GraphSAGE通过聚合其整个邻域的采样子集的特征来定义节点 的邻域;这表示为:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于云南恒于科技有限公司;武汉大学,未经云南恒于科技有限公司;武汉大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202210813094.9/2.html,转载请声明来源钻瓜专利网。