[发明专利]基于后缀树的代码文件克隆检测方法有效
申请号: | 201710140414.8 | 申请日: | 2017-03-10 |
公开(公告)号: | CN106990956B | 公开(公告)日: | 2020-11-24 |
发明(设计)人: | 罗峋;饶飞 | 申请(专利权)人: | 苏州棱镜七彩信息科技有限公司 |
主分类号: | G06F8/75 | 分类号: | G06F8/75 |
代理公司: | 北京同辉知识产权代理事务所(普通合伙) 11357 | 代理人: | 刘洪勋 |
地址: | 215000 江苏省苏州市工业*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 后缀 代码 文件 克隆 检测 方法 | ||
1.基于后缀树的代码文件克隆检测方法,其特征在于:对工程项目文件构造后缀树,在线性时间内实现代码文件克隆检测,其包括以下步骤:
步骤一,构造开源项目指纹库,采用的后缀树为Ukkonen算法,
所述步骤一中,
代码文件为粒度构造代码指纹,所述代码指纹直接保存在主服务器上,建立指纹库和代码克隆检测;
用户输入相关信息并上传开源工程项目,或是选择直接从网络上进行自动抓取,对开源工程项目解压并存放到指定目录,遍历开源项目,对符合用户输入语言的代码文件进行处理;
根据用户输入的最小文件行数对代码文件进行过滤,通过MD5哈希得到指纹值,并将指纹保存到MySQL数据库中;
所述步骤一中,以代码文件自定义对象的序列作为节点内容,采用自定义FileNode表示一个代码文件的指纹对象,
文件粒度指纹库保存在MySQL数据库的t_file_hash表中,所述t_file_hash表包含内容为,字段:id、类型:bigint(20)、含义:指纹id、主键;还包含字段:hash、类型:varchar(128)、含义:代码文件指纹值;还包含字段:location、类型:varchar(255)、含义:代码文件路径信息;还包含字段:projecid、类型:varchar(255)、含义:开源项目id;
所述步骤一中,将开源工程项目添加到指纹库中,遍历该工程项目,对符合条件的代码文件采用JFLex进行词法分析过滤,并MD5哈希;
所述步骤一中,对Ukkonen算法进行适应性优化,将后缀树构造应用到代码文件克隆检测中,包括,
a)序列节点,每次插入新对象时,构造的新节点内容为对象序列,而不是单个对象;
b)节点标记,在构造后缀树过程中及时标记公共子串所在的节点;
c)减少比较,扫描一个新文件对象时,查找是否存在以该文件相同指纹值的对象为开头的后缀节点时,对标记为不可能是克隆文件的节点不进行比较;
检测两个FileNode序列的克隆代码文件,在两个项目序列中间添加标识符标识一个项目的结束,而在构造过程中,若一个非叶节点的子节点中含有这个标识符,则说明这个非叶节点的FileNode对象既在检测任务中出现也在开源项目中出现,为两个项目的克隆代码文件;
步骤二,对代码文件克隆进行检测,
所述步骤二中,进行克隆度和相似度计算,
根据后缀树构造过程中保存的克隆结果进行统计计算,检测项目的克隆度指该项目有克隆开源项目的代码文件行数占所有代码文件行数和的比值,定义如公式1所示,fi是检测项目克隆文件,fj是检测项目代码文件,line表示该文件的行数,
相似度,指检测项目与一个开源项目的相似度,检测项目与开源项目克隆的文件行数占两个项目所有代码文件行数和的比值,定义如公式2所示,fi是检测项目克隆文件,pi是开源项目克隆文件,fj是检测项目代码文件,pj是开源项目代码文件,line表示该文件的行数,
若从指纹库中直接检索相同的文件指纹,整个检测实现的算法复杂度为0(mn),m为待检测项目的文件指纹数,n是指纹库的指纹数;
以后缀树方法为基础,完成在线性时间内检测相同代码文件;
采用的算法包括构建后缀树和递归处理剩余后缀节点两部分,构造后缀树的伪代码表,
对两个工程项目构成的FileNode序列构造后缀树,遍历序列每个对象,如果后缀树中存在当前对象指纹值为前缀的后缀,则改变三元组和剩余后缀数的值,否则直接添加到当前节点的子节点;
对于已经保存的待插入剩余后缀,直到遍历到不存在以当前对象为前缀的后缀节点,则需要对后缀树进行分裂;
分裂活动中,将活动节点的FileNode序列以活动长度作为分裂点,前半部分作为活动节点的序列,后半部分添加到其子节点,并且将当前剩余序列添加到活动节点的子节点;
分裂完成后按照Ukkonen后缀树算法的三个处理规则处理三元组,最后按照剩余插入后缀数递归处理待插入的FileNode序列。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于苏州棱镜七彩信息科技有限公司,未经苏州棱镜七彩信息科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710140414.8/1.html,转载请声明来源钻瓜专利网。
- 上一篇:一种对应用程序进行打点的方法和系统
- 下一篇:一种窗口切换方法及装置