The invention relates to a code file cloning and detecting method based on suffix tree, which constructs a suffix tree for the engineering project file, and realizes the cloning and testing of the code file in the linear time. The LP detection scheme and algorithm are based on the content of the computer software source code file. By analyzing and filtering the code file, the MD5 hash is used to obtain the fingerprint value, the fingerprint is constructed, and the fingerprint database is built. The presence of MySQL in the database with the fingerprint fingerprint bank, open source project ID as index. Nodes in the suffix tree can be directly labeled as clones, and these nodes are stored directly in the clone result data table. As a result, it is more efficient to detect the cloned code files in linear time than to detect them directly.
【技术实现步骤摘要】
基于后缀树的代码文件克隆检测方法
本专利技术涉及一种检测方法,尤其涉及一种基于后缀树的代码文件克隆检测方法。
技术介绍
从软件产业的诞生到现在,随着计算机用户数量快速增加,软件产业发展迅猛,已渗透到人们工作与生活的方方面面。许多软件源代码开放在互联网上,开发人员在互联网查询所需要的相关代码已成为一种快速有效的生产方式。由于共同的软件功能,经过简单修改或者直接的复制粘贴,代码重用已经是软件开发中一个通用行为。开源代码的快速发展,上百万的软件工程源代码在相关网络上可以查找,如GoogleCodeSearch,GitHub,Snippir,SourceForge,GitHub等,今天开源代码已经在软件发展中处于重要地位。随之而来的现象就是,无论有意或无意的复制开源代码,软件系统存在代码段与其他代码非常相似,也称之为代码克隆。在一般的软件系统中都存在明显代码克隆部分,代码相似比例在7%-23%。代码克隆通常是有目的性的,可以减轻开发人员重复性工作,专注核心功能研发等,从这些方面来说是有用的。但是也存在许多问题不利于软件的维护和扩展。例如,在一个代码段中存在漏洞,所有相似的代码段都应该被检测出相同漏洞。特别是直接使用开源代码,没有任何风险意识的人员也将开源代码的问题带入开发的软件系统。这些产品应用在国防、医疗、金融等重要领域,给工作带来巨大的潜在风险。在大型软件系统中,代码的雷同、抄袭现象频发,人们维权意识增强,一些代码克隆侵犯了其他软件公司的知识产权。为保护软件产权,软件公司提前做好软件技术秘密的认定、保密措施,申请专利权、软件著作权登记。但是在发生侵权行为后,需 ...
【技术保护点】
基于后缀树的代码文件克隆检测方法,其特征在于:对工程项目文件构造后缀树,在线性时间内实现代码文件克隆检测,其包括以下步骤:步骤一,构造开源项目指纹库,采用的后缀树为Ukkonen算法,步骤二,对代码文件克隆进行检测,若从指纹库中直接检索相同的文件指纹,整个检测实现的算法复杂度为O(mn),m为待检测项目的文件指纹数,n是指纹库的指纹数;以后缀树方法为基础,完成在线性时间内检测相同代码文件。
【技术特征摘要】
1.基于后缀树的代码文件克隆检测方法,其特征在于:对工程项目文件构造后缀树,在线性时间内实现代码文件克隆检测,其包括以下步骤:步骤一,构造开源项目指纹库,采用的后缀树为Ukkonen算法,步骤二,对代码文件克隆进行检测,若从指纹库中直接检索相同的文件指纹,整个检测实现的算法复杂度为O(mn),m为待检测项目的文件指纹数,n是指纹库的指纹数;以后缀树方法为基础,完成在线性时间内检测相同代码文件。2.根据权利要求1所述的基于后缀树的代码文件克隆检测方法,其特征在于:所述步骤一中,代码文件为粒度构造代码指纹,所述代码指纹直接保存在主服务器上,建立指纹库和代码克隆检测;用户输入相关信息并上传开源工程项目,或是选择直接从网络上进行自动抓取,对开源工程项目解压并存放到指定目录,遍历开源项目,对符合用户输入语言的代码文件进行处理;根据用户输入的最小文件行数对较少行数的代码文件进行过滤,通过MD5哈希得到指纹值,并将指纹保存到MySQL数据库中。3.根据权利要求2所述的基于后缀树的代码文件克隆检测方法,其特征在于:所述步骤一中,以代码文件自定义对象的序列作为节点内容,自定义对象FileNode结构如表所示,文件粒度指纹库保存在MySQL数据库的t_file_hash表中,4.根据权利要求1所述的基于后缀树的代码文件克隆检测方法,其特征在于:所述步骤一中,将开源工程项目添加到指纹库中,遍历该工程项目,对符合条件的代码文件采用JFLex进行词法分析过滤,并MD5哈希。5.根据权利要求1所述的基于后缀树的代码文件克隆检测方法,其特征在于:采用的算法括构建后缀树和递归处理剩余后缀节点两部分,构造后缀树的伪代码表,对两个工程项目构成的FileNode序列构造后缀树,遍历序列每个对象,如果后缀树中存在当前对象指纹值为前缀的后缀,则改变三元组和剩余后缀数的值,否则直接添加到当前节点的子节点;对于已经保存的待插入剩余后缀,直到遍历到不存在以当前对象为前缀的后缀节点,则需...
【专利技术属性】
技术研发人员:罗峋,饶飞,
申请(专利权)人:苏州棱镜七彩信息科技有限公司,
类型:发明
国别省市:江苏,32
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。