The invention provides a duplicate code fragment query method and device, then determine the suffix by code sequence composed of a plurality of code fragments, the ranking position of each suffix contains the code fragment in the code sequence as the elements, structure of the code sequence number suffix group, according to the common part between the suffix by each element in the suffix array to calculate the query, the plurality of code fragments in duplicate code fragment. Because the storage structure of the suffix array is only in numerical order where the code fragment indicating a suffix, rather than suffix code fragments of the contents stored in the suffix array, therefore, is not bound to all of the code fragment content stored in memory, and run from the smaller overhead, solve in the prior art query whether there are duplicate code fragments, the problem of larger operation cost.
【技术实现步骤摘要】
重复代码片段查询方法和装置
本专利技术涉及信息技术,尤其涉及一种重复代码片段查询方法和装置。
技术介绍
在软件开发过程中,经常会将工作量较大的软件开发项目分割为工作量较小的子项目,并由不同的程序员分别对子项目编写程序代码。当两个不同的子项目均需要用到同一个程序段时,往往会出现两个不同的子项目中出现完全相同的程序代码,在这种情况下,若需要对该程序段进行修改,则需要对各子项目中重复出现的全部该程序段均进行修改,工作量较大且容易出现错误。因此,在对子项目进行整合之后,需要对整合所获得的项目进行优化,具体来说,需要针对项目的程序代码进行重复代码片段的查询,将查询出的重复代码片段进行复用或者说合并,从而提高可维护性。现有技术中在查询重复代码片段时,需要针对每一个代码片段依次与其余代码片段进行比较,从而判断出是否存在重复代码片段,由于这种方式需要将全部的代码片段数据存储在内存中,因此运行开销较大。
技术实现思路
本专利技术提供一种重复代码片段查询方法和装置,用于解决现有技术中查询是否存在重复代码片段时,运行开销较大的技术问题。为达到上述目的,本专利技术的实施例采用如下技术方案:第一方面,提供了一种重复代码片段查询方法,包括:获取包含多个代码片段的代码序列的各后缀;将各后缀所包含的代码片段在所述代码序列中的排序位置作为元素,构造所述代码序列的第一后缀数组;根据由所述第一后缀数组中的各元素所得到的后缀,计算各后缀之间的公共部分;利用所述公共部分,查询所述多个代码片段中的重复代码片段。第二方面,提供了一种重复代码片段查询装置,包括:后缀模块,用于获取包含多个代码片段的代码序列的 ...
【技术保护点】
一种重复代码片段查询方法,其特征在于,包括:获取包含多个代码片段的代码序列的各后缀;将各后缀所包含的代码片段在所述代码序列中的排序位置作为元素,构造所述代码序列的第一后缀数组;根据由所述第一后缀数组中的各元素所得到的后缀,计算各后缀之间的公共部分;利用所述公共部分,查询所述多个代码片段中的重复代码片段。
【技术特征摘要】
1.一种重复代码片段查询方法,其特征在于,包括:获取包含多个代码片段的代码序列的各后缀;将各后缀所包含的代码片段在所述代码序列中的排序位置作为元素,构造所述代码序列的第一后缀数组;根据由所述第一后缀数组中的各元素所得到的后缀,计算各后缀之间的公共部分;利用所述公共部分,查询所述多个代码片段中的重复代码片段。2.根据权利要求1所述的重复代码片段查询方法,其特征在于,所述根据由所述第一后缀数组中的元素所得到的后缀,计算后缀的公共部分包括:从所述代码序列中,读取第一后缀数组中元素所指示的排序位置得到后缀;根据得到的后缀对应代入第一后缀数组所得到的第二后缀数组,计算得到各后缀之间的最长公共前缀。3.根据权利要求1所述的重复代码片段查询方法,其特征在于,所述利用公共部分,查询所述多个代码片段中的重复代码片段包括:当至少两个后缀之间存在公共部分时,确定所述多个代码片段中存在重复代码片段。4.根据权利要求3所述的重复代码片段查询方法,其特征在于,所述确定所述多个代码片段中存在重复代码片段之后,还包括:确定所述公共部分对应的重复代码片段在所述代码序列中的排序位置。5.根据权利要求4所述的重复代码片段查询方法,其特征在于,所述代码序列是根据各代码片段在源文件中的位置,对各代码片段进行排序得到的;所述确定所述公共部分对应的重复代码片段在所述代码序列中的排序位置之后,还包括:根据所述重复代码片段在所述代码序列中的排序位置,确定所述重复代码片段在所述源文件中的位置。6.根据权利要求1所述的重复代码片段查询方法,其特征在于,所述构造代码序列的第一后缀数组,包括:对所述代码序列的各后缀按照字典序进行排序;将排序后的各后缀所包含的第一个代码片段在所述代码序列中的排序位置作为所述第一后缀数组中对应元素的取值。7.根据权利要求1-6任一项所述的重复代码片段查询方法,其特征在于,所述获取包含多个代码片段的代码序列的各后缀之前,还包括:根据预设规则对代码片段中的各行代码进行预处理。8.根据权利要求7所述的重复代码片段查询方法,其特征在于,所述预设规则,包括:针对每一行代码,删除以停用词为开头的代码所在行;和/或,针对每一行代码,删除预设字符;和/或,若所述代码片段分别属于至少两个源文件,在每一个源文件的结尾增加所述源文件对应的分隔行。9.根据权利要求8所述的重复代码片段查询方法,其特征在于,所述分隔行包括所述源文件的唯一标识和/或所述源文件的存储路径;所述预设字符包括...
【专利技术属性】
技术研发人员:屠寅海,
申请(专利权)人:阿里巴巴集团控股有限公司,
类型:发明
国别省市:开曼群岛,KY
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。