[发明专利]基于字节码序列匹配的Java语句块克隆检测方法有效
申请号: | 201910003382.6 | 申请日: | 2019-01-03 |
公开(公告)号: | CN109976806B | 公开(公告)日: | 2022-06-14 |
发明(设计)人: | 俞东进;杨加柞;孙笑笑;陈信;王琳 | 申请(专利权)人: | 杭州电子科技大学 |
主分类号: | G06F8/75 | 分类号: | G06F8/75;G06F16/903 |
代理公司: | 杭州君度专利代理事务所(特殊普通合伙) 33240 | 代理人: | 朱月芬 |
地址: | 310018 浙*** | 国省代码: | 浙江;33 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 字节 序列 匹配 java 语句 克隆 检测 方法 | ||
1.基于字节码序列匹配的Java语句块克隆检测方法,其特征在于该方法的具体步骤是:
步骤1.将两个不同的Java源代码文件分别编译成字节码,并进一步转换为字节码文本格式文件,并在字节码文本文件基础上,提取字节码的语句块p、q;
步骤2.分别从语句块p、q中提取指令序列,将每条指令根据其功能不同采用唯一的字符来表示,从而形成两个长度分别为|p|和|q|的单一指令字符序列SCSp和SCSq;
步骤3.为两个单一字符指令序列SCSp和SCSq构建|p|+1行、|q|+1列的字节码匹配矩阵BAMp,q,并初始化BAMp,q中的每个单元格的匹配分值为0;
步骤4.从第一行第一列开始按行再按列依次计算字节码匹配矩阵BAMp,q中的每个单元格(i,j)的匹配分值BAMp,q[i][j]为BAMp,q[i-1][j-1]+σ(SCSp[i],SCSq[j])、BAMp,q[i-1][j]+σDelete、BAMp,q[i][j-1]+σInsert和0这四个值中的最大值;其中如果SCSp中的第i个字符和SCSq中第j个字符相同,则σ(SCSp[i],SCSq[j])为Match,同时将单元格(i,j)加入到闭合回溯路径起点集合里,并将其设置为未被访问,再按以下规则设置单元格(i,j)的前驱单元格:如果匹配分值BAMp,q[i][j]的取值为BAMp,q[i-1][j-1]+σ(SCSp[i],SCSq[j]),则前驱单元格为(i-1,j-1),如果取值为BAMp,q[i-1][j]+σDelete,则前驱单元格为(i-1,j),如果取值为BAMp,q[i][j-1]+σInsert,则前驱单元格为(i,j-1),如果取值为0,则设置为null;当SCSp中的第i个字符和SCSq中第j个字符不相同,则σ(SCSp[i],SCSq[j])为MisMatch,以上Match、MisMatch、σDelete和σInsert的值分别取值为2、-2、-2、-2;
步骤5.选择闭合回溯路径起点集合里所有未被访问的单元格中匹配分值最高的单元格,从该单元格开始,依次选择它的前驱单元格直至到达前驱单元格为null的单元格,从而获得一条闭合回溯路径,将闭合回溯路径中的每个单元格设为已访问,分别依次选取闭合回溯路径中的每个单元格的行坐标和列坐标,组成两条疑似克隆的单一字符指令序列;
步骤6.重复步骤5,得到SCSp和SCSq中所有疑似克隆的单一字符指令子序列对,然后组建两个三维向量其中p1为SCSp中、与SCSq子序列互为疑似克隆对的所有单一字符指令子序列长度之和,Lp是SCSp对应的单一字符指令序列长度,q1为SCSq中、与SCSp子序列互为疑似克隆对的所有单一字符指令子序列长度之和,Lq是SCSq对应的单一字符指令序列长度;计算两个三维向量的余弦相似度,即p和q的余弦相似度,如果余弦相似度大于某个阈值,则认为语句块p和q互为克隆字节码片段,并将它们映射回源代码。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于杭州电子科技大学,未经杭州电子科技大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201910003382.6/1.html,转载请声明来源钻瓜专利网。