当前位置: 首页 > 专利查询>福斯德公司专利>正文

将源代码转换成数字标识符并与数据集进行比较的方法技术

技术编号:23624812 阅读:31 留言:0更新日期:2020-03-31 22:38
本公开涉及将源代码转换成数字标识符并与数据集进行比较的方法,具体地,涉及如下系统和方法,其通过将输入代码转换成简化代码并且使用该简化代码生成可以与数据库中的代码进行比较的代码片段,来标识该输入代码的特征。优选地,通过以下项中的至少一个来简化代码:使大小写统一,去除字符,以及利用标识符替换字符和关键字中的至少一者。

A method of converting source code into digital identifiers and comparing them with datasets

【技术实现步骤摘要】
将源代码转换成数字标识符并与数据集进行比较的方法
本公开总体上涉及代码处理和数据技术。免费和开源代码的日益普及以及对许可证合规性的日益关注导致需要利用公共免费和开源代码来构建数据库,目的是在给定的源代码文件中标识包含免费和开源代码。
技术介绍
在现有技术解决方案中,因为有大量可用的免费和开源代码,因此索引和存储因数据库占用(databasefootprint)和搜索性能而成为一项巨大的挑战。此外,分析源代码的任务是一个敏感问题,同时存储到数据库中的大量重复的免费和开源代码可能会与其各自的许可条件而发生冲突。
技术实现思路
提供以下简化概要以便基本理解本公开中所描述的各种专利技术实施方式的一些方面。所述概要不是本公开的详尽概述。既不旨在标识要求保护的专利技术的关键/紧要要素,也不旨在叙述本专利技术的范围。以下概要仅以简化的形式来呈现在本公开所描述的实施方式中使用的一些概念,作为对那些概念的更详细描述的序言。本公开描述的一些实施方式的目的是,提供这样的系统和方法,即,该系统和方法将源代码文本从任何编程语言转换成各个源代码行的一系列数字标识符,并且比较这些标识符与其它源代码文件以找到行子集的匹配。这是通过将源代码转换成符号标识符并与数据集进行比较的方法来实现的,在该方法中,将源代码用作输入代码。在该方法中,通过使用以下方法步骤中的至少一个来生成简化源代码作为输出:使大小写统一;去除字符;以及利用标识符来替换字符和关键字中的至少一者,并且在该方法中,生成连续行标识符的最小集合,连续行的标识符的最小集合是代码片段(snippet),并且在数据集中找到如下事件(occurrences),该事件与特定数据集中的特定范围的行标识符匹配。本公开描述的一些实施方式还专注于一种将源代码转换成符号标识符并与数据集进行比较的数据系统,在该数据系统中,源代码是输入代码。该数据系统包括编码器单元,该编码器单元生成简化源代码作为输出,该编码器单元被配置成执行以下项中的至少一个:使大小写统一;去除字符;以及利用标识符来替换字符和关键字中的至少一者,并且该数据系统包括比较单元,该比较单元被配置成:生成连续行标识符的最小集合,连续行的标识符的所述最小集合是代码片段,并且在数据集中找到事如下件,该事件与特定数据集中的特定范围的行标识符匹配。本文所述的实施方式可以基于通过使用以下方法步骤中的至少一个来生成简化源代码作为输出:使大小写统一;去除字符;以及利用标识符来替换字符和关键字中的至少一个。本文所述的实施方式还可以基于:通过生成产生匹配的连续行标识符的最小集合,来比较标识符与数据集。本文所述的实施方式的益处可以是,它们可以允许通过比较其数字标识符来对软件进行比较,而不需要有原始的源代码。而且,因仅需要存储数字标识符而减少了数据占用空间。而且,通过将搜索简化成针对具有几乎完美平衡的索引的数据集的固定长度数值比较,从而简化了数据库搜索。通过考虑下面结合附图的本专利技术的详细描述,将更容易明白本专利技术的前述和其它目的、特征以及优点。附图说明下面参照附图,对本公开的示例性和非限制性实施方式及其优点进行更详细说明,其中:图1呈现了根据本公开的示例性和非限制性实施方式的源代码文本的简化处理。图2呈现了根据本公开的示例性和非限制性实施方式的图1中的简化代码文本的行标识符的生成处理。图3呈现了根据本公开的示例性和非限制性实施方式的图2所示源代码的代码片段ID。图4呈现了根据本公开的示例性和非限制性实施方式的系统流程图。具体实施方式本文所述的实施方式允许将源代码与数据集进行比较,而不需要有这些数据集的原始源代码的副本。这些实施方式还允许将行ID生成和数据库搜索在不同位置分开。因此,执行数据库搜索的个体不需要访问所比较的代码,而仅访问生成的行ID。这种逻辑隔离,允许在不访问原始代码或进行比较的原始源代码的情况下完成数据库搜索。另外,因搜索是针对固定长度平衡索引来执行的事实,本文所述的实施方式允许通过仅保存来自大型数据集的代码片段ID(不是源代码)来减少存储占用空间,并且减少处理时间和加快搜索响应,这是由加密散列算法提供的统一数据分布性质的结果。术语“大型数据集”意味着包括具有超过十亿条记录的数据集,甚至高达数万亿条结果。本文所述的实施方式也可以用于较小的数据集,因而数据集的大小不是限制因素。可以将源代码文本可以转换成数字标识符,从而在针对源代码文本中的编码约定、制表以及其它语法差异中的变化的容差的情况下,允许在不同的源代码文件之间进行快速比较。所得到的数字标识符无法转换回原始源代码。该方法允许通过比较标识符来寻找源代码匹配,而无需保留原始源代码文本。本文所述的实施方式实现了源代码与例如以前存储的源代码行标识符的大型数据库的快速且有效的比较。本文所述的一些实施方式可以执行三个步骤:简化、标识符生成以及比较。数字标识符的生成可能包括两个步骤:简化和标识。简化步骤优选地将文本转换成中性状态,该中性状态允许在不管源代码缩进的变化、编码约定的变化、空行或空格、包含或排除不相关的文本或者源代码指令的大小写更改的情况下,找到源代码匹配。该简化将原始源代码作为输入,并通过应用一系列规则来生成简化源代码作为输出。这些规则被分成:a)使大小写统一,b)替换某些字符或关键字,和c)利用与移行(linefeed)或换行(newline)相对应的chr(10)替换某些字符或关键字(行分隔符),d)消除空行或者具有比预定义阈值更少的字符的行。所得到的简化代码在每行中包含最少量的代码。例如,假设C编程语言的简单配置,仅使用括号和分号({};)作为分隔符,而不利用1字节的空行阈值进行任何文本替换,如图1所示转换源代码。通过在已经简化的源代码行上生成固定长度标识符来执行标识。为了确保标识符数据的均匀分布,选择加密散列(cryptographichash)算法,并且将所得到的散列(或散列的一部分)用作行标识符。例如,假设使用了MD5散列算法,并且将行ID长度选择成36个比特,图2中呈现了前一示例的行标识符。因此,所得到的原始源代码的行ID列表为:28dcdbf4140356bd08e6a0916af6eb265da18ecc79b23c9a6d998a9308eae7ae3855004e。在该示例性情况下,所选择的36个比特作为行ID标识符提供大约680亿个可能的ID,这肯定会导致大量数据的冲突。然而,通过数据比较方法来解决冲突。在源代码数字标识符的比较步骤中,应当设定连续行的最小集合来生成匹配。这种行集合被称为代码片段。将最小数量的连续代码片段定义为生成匹配的阈值,以便从最终的行ID冲突中丢弃错误的匹配。在本文所述的实施方式中可以避免错误标识。如果调用针对固定长度行标识符选择的比特量(W),并且调用所需行匹配的最小数量(N),则较小者为W,N必须是较大者,以防止误报标识。具体来说,W变得越小,冲突的可能性就变得越大(即,具有相本文档来自技高网...

【技术保护点】
1.一种方法,该方法包括以下步骤:/n通过执行以下项中的至少一个来对输入源代码进行简化以生成简化源代码:(i)使大小写统一;(ii)去除字符;以及(iii)利用标识符来替换字符和关键字中的至少一者;/n使用所述简化源代码来生成多个行ID,各个行ID表示一行代码的内容;/n使用所述多个行ID来生成表示所述多个行ID的子集的代码片段;以及/n通过比较所述代码片段与数据集中的代码,来标识所述输入源代码的特征。/n

【技术特征摘要】
20180925 US 16/141,6131.一种方法,该方法包括以下步骤:
通过执行以下项中的至少一个来对输入源代码进行简化以生成简化源代码:(i)使大小写统一;(ii)去除字符;以及(iii)利用标识符来替换字符和关键字中的至少一者;
使用所述简化源代码来生成多个行ID,各个行ID表示一行代码的内容;
使用所述多个行ID来生成表示所述多个行ID的子集的代码片段;以及
通过比较所述代码片段与数据集中的代码,来标识所述输入源代码的特征。


2.根据权利要求1所述的方法,其中,所述行ID是数字标识符。


3.根据权利要求1所述的方法,其中,所述标识符与移行码和换行码中的至少一者相对应。


4.根据权利要求1所述的方法,其中,所述简化源代码是通过以下项中的至少一个来生成的:(i)定义字符阈值量;(ii)消除空行;以及(iii)消除具有比预定义字符阈值量少的字符的行。


5.根据权利要求4所述的方法,其中,将字符和关键字中的至少一者替换成与移行码和换行码中的至少一者相对应的标识符。


6.根据权利要求1所述的方法,所述方法包括以下步骤:搜索定义的最小数量的连续代码片段事件。


7.根据权利要求1所述的方法,其中,生成所述代码片段和生成与给定行列表有关的行ID都是使用相同算法来执行的。


8.一种数据系统,所述数据系统包括:
编码器单元,所述编码器单元通过以下项中的至少一个将输入代码变换成简化代码:(i)使大小写统一;(ii)去除字符;以及(iii)利用标识符来替换字符和关键字中的至少一者;
比较单元,所述比较单元进行如下操作:(i)使用简化源代码来生成多个行ID,各个行ID表示一行代码的内容;(ii)生成至少一个代码片段,各个代码片段表示行ID的集合;以及(iii)通过比较所生成的至少一个代码片段与数据...

【专利技术属性】
技术研发人员:J·克希亚
申请(专利权)人:福斯德公司
类型:发明
国别省市:瑞典;SE

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

1