[发明专利]一种自动构造并利用伪克隆语料的克隆代码检测方法有效
申请号: | 201911006918.6 | 申请日: | 2019-10-22 |
公开(公告)号: | CN110851176B | 公开(公告)日: | 2023-07-04 |
发明(设计)人: | 桑炜;王赞 | 申请(专利权)人: | 天津大学 |
主分类号: | G06F8/75 | 分类号: | G06F8/75 |
代理公司: | 天津市北洋有限责任专利代理事务所 12201 | 代理人: | 李素兰 |
地址: | 300072*** | 国省代码: | 天津;12 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 自动 构造 利用 克隆 语料 代码 检测 方法 | ||
1.一种自动构造并利用伪克隆语料的克隆代码检测方法,其特征在于,该方法包括以下步骤
步骤一、自动构造伪训练语料库,即:将一个小规模代码块自动插入一个源代码片段,首先对源代码进行token化,源代码经过token化处理后,得到完全的复制粘贴对作为一型克隆和二型克隆;通过判断两个函数的方法名的相似度,提取出来大量的非克隆代码;
步骤二、确定克隆代码检测任务中最有效的代码基本单元,即利用BPE方法切分克隆检测需要的代码基本单元;通过多次迭代找到高频相邻token字符对,直到找到一个合适的切分位置,语句被分割成比token字符更大的代码块;然后将这些token字符组合作为代码基本单元;具体操作为:首先构造一个包含所有不同token字符和它们对应的频率的词表;然后通过函数get_stat统计token字符出现的频率并当发生合并状态改变时更新状态;通过函数merge_vocab对token字符进行归并,并将应用于词汇表,所有归并的克隆对都集成在一起,最后得出代码基本单元的词汇表,作为转化的token字符向量;
步骤三、预处理,由步骤二确定的最有效的代码基本单元,将token字符进行拼接,进行词嵌入,将语料库中所有方法,以token字符展示的语句序列来训练一个词嵌入模型,产生一个{代码单元-向量}对应字典;
步骤四、建立用于代码克隆检测的简单有效的BiLSTM分类模型,并进行训练,即获取代码的上下文和序列信息,并利用自注意力机制进行加权求和,至此java项目中的每个方法都转化成了一个向量表示;再利用L2-Norm算法对两个方法进行分类,判断是否为克隆对,具体处理包括:将经预处理的代码基本单元向量表示输入到第一层LSTM单元,获得此代码基本单元中前一个单元对它的影响的特征,并将步骤二转化的token字符向量输入到第二层LSTM单元,获得字符的后一个字符对它的影响;再将第一层LSTM的输出和第二层LSTM的输出进行拼接组合;通过训练,输出的特征向量即包含了这个代码单元上下文信息及其序列信息;接下来用自注意力机制进行加权求和,将每个java方法转换为可相互比较的向量。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于天津大学,未经天津大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201911006918.6/1.html,转载请声明来源钻瓜专利网。