源代码文件克隆邻接表合并检测方法技术

技术编号:16037928 阅读:38 留言:0更新日期:2017-08-19 19:44
本发明专利技术涉及一种源代码文件克隆邻接表合并检测方法,对工程项目文件以文件为单位,对代码每行以固定行数进行扫描为粒度,用MD5构造指纹Chunk并建立指纹库。指纹库保存在MySQL数据库中,以指纹所在的开源项目id和Chunk的Hash值作为索引进行检测算法,能实现克隆0到3类检测。即:提出基于分布式索引的源代码文件克隆邻接表合并检测方案及算法。该检测算法的检测实现能在时间复杂度为O(nm),空间复杂度为O(nm)内检测出克隆的代码文件,实现海量检测。

【技术实现步骤摘要】
源代码文件克隆邻接表合并检测方法
本专利技术涉及一种源代码处理方法,尤其涉及一种源代码文件克隆邻接表合并检测方法。
技术介绍
从软件产业的诞生到现在,随着计算机用户数量快速增加,软件产业发展迅猛,已渗透到人们工作与生活的方方面面。许多软件源代码开放在互联网上,开发人员在互联网查询所需要的相关代码已成为一种快速有效的生产方式。由于共同的软件功能,经过简单修改或者直接的复制粘贴,代码重用已经是软件开发中一个通用行为。开源代码的快速发展,上百万的软件工程源代码在相关网络上可以查找,如GoogleCodeSearch,GitHub,Snippir,SourceForge,GitHub等,今天开源代码已经在软件发展中处于重要地位。随之而来的现象就是,无论有意或无意的复制开源代码,软件系统存在代码段与其他代码非常相似,也称之为代码克隆。在一般的软件系统中都存在明显代码克隆部分,代码相似比例在7%-23%。代码克隆通常是有目的性的,可以减轻开发人员重复性工作,专注核心功能研发等,从这些方面来说是有用的。但是也存在许多问题不利于软件的维护和扩展。例如,在一个代码段中存在漏洞,所有相似的代码段都应该被本文档来自技高网...
源代码文件克隆邻接表合并检测方法

【技术保护点】
源代码文件克隆邻接表合并检测方法,其特征在于包括以下步骤:步骤一,构造开源项目指纹库,并进行指纹库索引建立和存储;步骤二,针对邻接表合并检测;步骤三,相似度计算;单个源文件中所有规范化后的Token,从第一个开始,每固定个数被转换为一个Chunk,这样,每个代码文件转换后会生成很多Chunk,然后将每个Chunk都存储到HBase中。

【技术特征摘要】
1.源代码文件克隆邻接表合并检测方法,其特征在于包括以下步骤:步骤一,构造开源项目指纹库,并进行指纹库索引建立和存储;步骤二,针对邻接表合并检测;步骤三,相似度计算;单个源文件中所有规范化后的Token,从第一个开始,每固定个数被转换为一个Chunk,这样,每个代码文件转换后会生成很多Chunk,然后将每个Chunk都存储到HBase中。2.根据权利要求1所述的源代码文件克隆邻接表合并检测方法,其特征在于:所述步骤一中,对源代码文件所在目录进行遍历,根据用户定义的开发语言,从目录中过滤出对应的源文件,通过词法分析器对源代码文件进行分析,从中提取出Token并记录每个Token的类型,所述词法分析器,根据源代码的语言类型,从源文件中提取标识符、常量、关键字、运算符等Token单元,存放到符号表中,所述词法分析器,每次分析到一个新的Token,就交给规范化程序,对提取到的Token进行规范化。3.根据权利要求2所述的源代码文件克隆邻接表合并检测方法,其特征在于:所述规范化的规则为,(1)直接忽略注释、括号等分隔符、预处理指令、this调用、命名空间限定符、可见度修饰符等内容;(2)标识符用id加上编号进行替换,编号从0开始,出现过的使用已有编号,没有出现过的编号递增;(3)字符串用空串替换;(4)字符用固定字符串替换;(5)整型数值用0替换;(6)浮点类型用0.0替换;(7)布尔值用true替换。4.根据权利要求1所述的源代码文件克隆邻接表合并检测方法,其特征在于:所述步骤一中,当有项目需要进行检测的时候,首先对项目的源代码也进行转化,以单个文件为粒度,转换为Chunk序列,然后根据每个Chunk单元的hash值,到HBase中进行检索,检索出所有具有同样hash值的索引单元;检索出来的结果,需要根据待检测文件中索引单元的排列顺序进行排列,最终形成一个二维邻接表类型的数据结构;采用行头元素构成待检测文件中的Chunk单元,每一行中存放与...

【专利技术属性】
技术研发人员:罗峋饶飞
申请(专利权)人:苏州棱镜七彩信息科技有限公司
类型:发明
国别省市:江苏,32

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1