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

摘要:

权利要求书:

1.一种基于索引的Java软件代码克隆检测方法,其特征在于该方法的具体步骤是:

步骤(1).在通用计算机上设置单独的键值数据库,用于存放全局代码段物理索引GI1和全局相似代码段物理索引GI2,以及全局辅助物理索引SI,以上三个索引均为键值对结构;

步骤(2).以可用内存为限,依次读入Java软件中的每个源文件f的源代码至通用计算机内存,通过词法分析将源代码中的每行语句解析为词项序列,再通过归一化操作将词项序列转换为字符序列表示,得到每个文件f对应的“语句行号→字符序列”键值对集合Mapf,读入文件f的源代码的同时将“文件路径FNf→文件最新时间戳”键值对加入SI,其中文件路径FNf为文件f的全路径,包括文件名和扩展名;

步骤(3).遍历Mapf,将其中每隔L行的字符序列作为一个代码段并计算该字符序列的代码段信息摘要sh,建立“文件路径FNf→代码段起始行,代码段终止行,代码段信息摘要sh”键值对并加入GI1,建立“代码段信息摘要sh→文件路径FNf,代码段起始行,代码段终止行”键值对并加入GI2,重复步骤(2)和(3)至软件中的所有源文件都已处理完毕;

步骤(4).在需要检测克隆代码的时候,从待检测的源文件集合中读入每个源文件f的源代码至通用计算机内存,通过词法分析将源代码中的每行语句解析为词项序列,再通过归一化操作将词项序列转换为字符序列表示,得到每个文件f对应的“语句行号→字符序列”键值对集合Mapf,读入f的同时建立“文件路径FNf→文件最新时间戳TS1”键值对;

步骤(5).从SI中取出与源文件f对应的文件时间戳TS2,若TS1=TS2,即源文件f未被修改,则从GI1中取得源文件f的文件路径FNf对应的值集合记为S,转入步骤(8);否则,在SI中更新源文件f对应的文件时间戳为TS1,并遍历Mapf,将其中每隔L行的字符序列作为一个代码段并计算该字符序列的代码段信息摘要sh,建立“文件路径FNf→代码段起始行,代码段终止行,代码段信息摘要sh”键值对集合Setf,并将键值对集合Setf中该文件路径FNf对应的值部分加入临时值集合value1;

步骤(6).取出GI1中与FNf对应的值集合并记为value2,将value1和value2做差集运算得到新增的值集合valuea;遍历valuea,取出其中每个元素的代码段信息摘要sh,建立“代码段信息摘要sh→文件路径FNf,代码段起始行,代码段终止行”键值对并将其加入GI2;

步骤(7).将value2和value1做差集运算得到过期的值集合valued,遍历valued,取出其中每个元素的代码段信息摘要sh,并在GI2中找到对应的“代码段信息摘要→文件路径FNf,代码段起始行,代码段终止行”键值对将其删除,在GI1中删除与文件路径FNf对应的键值对,并将键值对集合Setf合并至GI1,记value1为S;

步骤(8).遍历集合S中的每个元素获取该元素的代码段信息摘要sh,在GI2中查找和代码段信息摘要sh匹配的键,并获得该键对应的值集合C,从C中的每一个元素中可以获得源文件f克隆代码段所在文件名、代码段起始行号和终止行号;

步骤(9).重复步骤(4)、(5)、(6)、(7)、(8),至待检测的源文件集合中的所有源文件都已处理完毕。