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

摘要:

权利要求书:

1.基于字节码序列匹配的Java语句块克隆检测方法,其特征在于该方法的具体步骤是:

步骤1.将两个不同的Java源代码文件分别编译成字节码,并进一步转换为字节码文本格式文件,并在字节码文本文件基础上,提取字节码的语句块p、q;

步骤2.分别从语句块p、q中提取指令序列,将每条指令根据其功能不同采用唯一的字符来表示,从而形成两个长度分别为|p|和|q|的单一指令字符序列SCSp和SCSq;

步骤3.为两个单一字符指令序列SCSp和SCSq构建|p|+1行、|q|+1列的字节码匹配矩阵p,q p,qBAM ,并初始化BAM 中的每个单元格的匹配分值为0;

p,q

步骤4.从第一行第一列开始按行再按列依次计算字节码匹配矩阵BAM 中的每个单元p,q p,q p,q格(i,j)的匹配分值BAM [i][j]为BAM [i‑1][j‑1]+σ(SCSp[i],SCSq[j])、BAM [i‑1][j]p,q+σDelete、BAM [i][j‑1]+σInsert和0这四个值中的最大值;其中如果SCSp中的第i个字符和SCSq中第j个字符相同,则σ(SCSp[i],SCSq[j])为Match,同时将单元格(i,j)加入到闭合回溯路径起点集合里,并将其设置为未被访问,再按以下规则设置单元格(i,j)的前驱单元p,q p,q格:如果匹配分值BAM [i][j]的取值为BAM [i‑1][j‑1]+σ(SCSp[i],SCSq[j]),则前驱单p,q元格为(i‑1,j‑1),如果取值为BAM [i‑1][j]+σDelete,则前驱单元格为(i‑1,j),如果取值p,q为BAM [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互为克隆字节码片段,并将它们映射回源代码。