[发明专利]基于加权递归自编码器的快速代码克隆检测方法及装置有效
申请号: | 202011329523.2 | 申请日: | 2020-11-24 |
公开(公告)号: | CN112433756B | 公开(公告)日: | 2021-09-07 |
发明(设计)人: | 刘伟;王嬴超;李晓伟;曾杰;杨洋;李春静;刘金松;吕方雷 | 申请(专利权)人: | 北京京航计算通讯研究所 |
主分类号: | G06F8/75 | 分类号: | G06F8/75;G06F16/901;G06F40/284;G06F40/30;G06K9/62 |
代理公司: | 北京天达知识产权代理事务所(普通合伙) 11386 | 代理人: | 胡时冶 |
地址: | 100074 北*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 加权 递归 编码器 快速 代码 克隆 检测 方法 装置 | ||
本发明涉及一种基于加权递归自编码器的快速代码克隆检测方法及装置,属于代码克隆技术领域,解决了现有的代码克隆技术检测精度较差且效率较低的问题。方法包括:获取待检测代码数据集,对待检测代码数据集进行预处理,得到待检测代码数据集中每一代码对应的二叉树;基于二叉树和加权递归自编码器获得待检测代码数据集中每一代码对应的最终向量,并基于每一代码对应的最终向量得到最终向量集合;基于最终向量集合构建导航展开图,并根据导航展开图对最终向量集合中的任意两个最终向量进行检测,得到代码克隆对。实现了代码克隆对的快速检测,提高了检测效率和精度。
技术领域
本发明涉及代码克隆技术领域,尤其涉及一种基于加权递归自编码器的快速代码克隆检测方法及装置。
背景技术
代码克隆是指相似或相同的代码(可以是代码片段、方法、文件、模块等不同粒度),即重复代码。代码克隆可以极大促进软件开发,但其缺陷也会得到快速传播。因此代码克隆检测技术应运而生。
根据代码克隆的相似性,将代码克隆分为4种类型,类型1:两段代码之间除却空白、布局和注释等不同以外,其余完全一致;类型2:两段代码除却空白、布局、注释、变量命名、类型、标识符等不同以外,其余完全一致;类型3:两段代码除却空白、布局、注释、变量命名、类型、标识符等不同以外,部分语句增删或顺序发生变化;类型4:两段代码功能相似,但是语法上差异巨大。
传统代码克隆检测方法对于检测前三种类型的代码克隆都是有效的,但是对于语法相似度很低的第四类代码克隆的检测精度较差,且检测过程时长较长造成的检测效率较低。
发明内容
鉴于上述的分析,本发明实施例旨在提供一种基于加权递归自编码器的快速代码克隆检测方法及装置,用以解决现有的代码克隆技术检测精度较差且效率较低的问题。
一方面,本发明实施例提供了一种基于加权递归自编码器的快速代码克隆检测方法,包括下述步骤:
获取待检测代码数据集,对所述待检测代码数据集进行预处理,得到待检测代码数据集中每一代码对应的二叉树;
基于所述二叉树和加权递归自编码器获得待检测代码数据集中每一代码对应的最终向量,并基于所述每一代码对应的最终向量得到最终向量集合;
基于所述最终向量集合构建导航展开图,并根据所述导航展开图对最终向量集合中的任意两个最终向量进行检测,得到代码克隆对。
进一步,对所述待检测代码数据集进行预处理,得到待检测代码数据集中每一代码对应的二叉树,包括下述步骤:
基于所述待检测代码数据集获得待检测代码数据集中每一代码对应的抽象语法树;
对所述每一代码对应的抽象语法树进行优化,得到待检测代码数据集中每一代码对应的二叉树,其中,所述二叉树包括叶子节点和非叶子节点。
进一步,基于所述二叉树和加权递归自编码器获得待检测代码数据集中每一代码对应的最终向量,包括下述步骤:
遍历所述二叉树中的所有叶子节点,得到待检测代码数据集中每一代码对应的函数语句;
获取所述函数语句中每个单词的词向量;
基于加权递归自编码器对每个单词的词向量进行编码,得到多级语义向量,并计算每一级语义向量对应的权值;
将每一级语义向量与其对应的权值相乘的结果进行叠加,得到待检测代码数据集中每一代码对应的最终向量。
进一步,基于所述导航展开图对最终向量集合中的任意两个最终向量进行检测,得到代码克隆对,包括下述步骤:
基于所述导航展开图计算最终向量集合中任意两个最终向量的欧氏距离;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京京航计算通讯研究所,未经北京京航计算通讯研究所许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202011329523.2/2.html,转载请声明来源钻瓜专利网。