CN109710299A - 一种开源类库监控方法、装置、设备及计算机存储介质 - Google Patents

一种开源类库监控方法、装置、设备及计算机存储介质 Download PDF

Info

Publication number
CN109710299A
CN109710299A CN201811539995.3A CN201811539995A CN109710299A CN 109710299 A CN109710299 A CN 109710299A CN 201811539995 A CN201811539995 A CN 201811539995A CN 109710299 A CN109710299 A CN 109710299A
Authority
CN
China
Prior art keywords
code
class
open source
target
library
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201811539995.3A
Other languages
English (en)
Inventor
林泽全
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Ping An Puhui Enterprise Management Co Ltd
Original Assignee
Ping An Puhui Enterprise Management Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Ping An Puhui Enterprise Management Co Ltd filed Critical Ping An Puhui Enterprise Management Co Ltd
Priority to CN201811539995.3A priority Critical patent/CN109710299A/zh
Publication of CN109710299A publication Critical patent/CN109710299A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

本发明公开了一种开源类库监控方法、装置、设备及计算机存储介质。所述开源类库监控方法首先对当前软件项目的目标源代码进行分块处理,得到包含多个项目代码片段的当前数据集;然后分别从各个项目代码片段中提取不同种类的类关键字,根据提取到的类关键字对开源代码仓库进行检索,得到n个后选代码段;分别计算各个后选代码段与所述当前数据集之间的相似度;最后选取相似度大于预设相似阈值的后选代码段作为目标后选代码,从所述开源代码仓库中确定与所述目标后选代码对应的目标开源类代码库,进而能够有效监控大型项目中所使用的开源类库,实时获知开源类库的信息。

Description

一种开源类库监控方法、装置、设备及计算机存储介质
技术领域
本发明涉及计算机信息技术领域,尤其涉及一种开源类库监控方法、装置、设备及计算机存储介质。
背景技术
程序员开发项目软件的过程中,在正在编写中的项目软件达到一定规模的时候,项目中难免被引入数十个甚至成百上千个开源库,如何跟踪定位这些开源类库,定期进行追踪,避免开源类库被污染(如植入恶意挖矿代码、开源协议变更等)或者类库缺陷暴露,最终对项目造成不同程度的损害,是我们急需考虑的一个问题。
发明内容
本发明的主要目的在于提供了一种开源类库监控装置方法、装置、设备以及计算机存储介质,旨在解决无法有效监控大型项目软件中源代码所引用的开源类库的问题。
为实现上述目的,本发明提供了一种开源类库监控方法,所述方法包括以下步骤:
对当前软件项目的目标源代码进行分块处理,得到包含多个项目代码片段的当前数据集;
分别从各个项目代码片段中提取不同种类的类关键字,根据提取到的类关键字对开源代码仓库进行检索,得到n个后选代码段;
分别计算各个后选代码段与所述当前数据集之间的相似度;
选取相似度大于预设相似阈值的后选代码段作为目标后选代码,从所述开源代码仓库中确定与所述目标后选代码对应的目标开源类代码库,以实现对所述目标开源类代码库监控。
优选地,所述分别从各个项目代码片段中提取不同种类的类关键字,根据提取到的类关键字对开源代码仓库进行检索,得到n个后选代码的步骤,包括:
对所述当前数据集中的项目代码片段进行遍历,分别从遍历到的项目代码片段中提取类关键字;
统计每个项目代码片段中出现过的类关键字的种类,去掉重复出现过的类关键字,得到一个包括不同种类的类关键字的类集合;
根据所述类集合对开源代码仓库进行检索,得到多个与所述类集合中的类关键字有交集的开源代码段;
根据交集的数量对多个开源代码段进行排序,并按照交集数量由大到小的顺序从所述多个开源代码段选取前n个开源代码段作为后选代码段。
优选地,所述分别计算各个后选代码段与所述当前数据集之间的相似度的步骤,包括:
分别为所述当前数据集中的每个项目代码片段的类关键字分配一个项目校验码组合;
将每个项目代码片段的类关键字对应的项目校验码组合送入哈希列表,以形成校验码集合;
对所述n个后选代码段进行遍历,计算遍历到的当前后选代码段中不同源类的哈希值,得到多个源类的哈希校验码,其中,所述源类属于所述开源代码段与所述类集合中之间的交集;
根据所述当前后选代码片段中不同的哈希值校验码分别对所述校验码集合进行遍历,在哈希值校验码与遍历到的项目校验码组合匹配成功时,则将所述当前后选代码与所述当前数据集之间的相似度进行加一,直至遍历完毕,得到所述当前后选代码与所述当前数据集之间的最终相似度值。
优选地,所述项目校验码组合包括弱滚动校验码和MD4强校验码;
所述将每个项目代码片段的类关键字对应的项目校验码组合送入哈希列表,以形成校验码集合的步骤,包括:
将每个项目代码片段的类关键字对应的弱滚动校验码和MD4强校验码送入哈希列表,以形成校验码集合。
优选地,所述选取相似度大于预设相似阈值的后选代码段作为目标后选代码,从所述开源代码仓库中确定与所述目标后选代码对应的目标开源类代码库的步骤之后,所述方法还包括:
从所述当前软件项目中读取所述目标开源类代码库的许可协议和版本数据;
将所述协议许可协议及版本数据保存并展示。
优选地,所述从所述当前软件项目中读取所述目标开源类代码库的许可协议和版本数据的步骤之后,还包括:
将所述许可协议及版本数据保存到预设数据库并展示;
在检测到所述当前软件项目的源代码交付时,对所述预设数据库中的版本数据进行遍历;
从所述开源代码仓库中确定与遍历到的版本数据对应的当前开源类代码库,获取所述当前开源类代码库的当前版本,将所述当前开源类代码库的当前版本与所述遍历到的版本数据进行比较;
在所述当前开源类代码库的当前版本与所述遍历到的版本数据不一致时,进行升级提示。
优选地,所述对当前软件项目的目标源代码进行分块处理,得到包含多个项目代码片段的当前数据集的步骤,包括:
获取当前软件项目的目标源代码中各段代码之间的耦合度;
按照预设耦合度标准对所述当前软件项目的目标源代码进行分块处理,得到包含多个项目代码片段的当前数据集,所述预设耦合度标准表征代码之间的耦合度大于设定耦合度。
此外,为实现上述目的,本发明还提出一种开源类库监控装置,所述装置包括:
分块模块,用于对当前软件项目的目标源代码进行分块处理,得到包含多个项目代码片段的当前数据集;
检索模块,用于分别从各个项目代码片段中提取不同种类的类关键字,根据提取到的类关键字对开源代码仓库进行检索,得到n个后选代码段;
计算模块,用于分别计算各个后选代码段与所述当前数据集之间的相似度;
监控模块,用于选取相似度大于预设相似阈值的后选代码段作为目标后选代码,从所述开源代码仓库中确定与所述目标后选代码对应的目标开源类代码库,以实现对所述目标开源类代码库监控。
此外,为实现上述目的,本发明还提出一种用于开源类库监控的设备,所述设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的开源类库监控程序,所述开源类库监控程序配置为实现如上所述的开源类库监控方法的步骤。
此外,为实现上述目的,本发明还提出一种计算机存储介质,所述计算机存储介质存储有开源类库监控程序,所述开源类库监控程序配置为实现如上所述的开源类库监控方法的步骤。
本发明首先对当前软件项目的目标源代码进行分块处理,得到包含多个项目代码片段的当前数据集;然后分别从各个项目代码片段中提取不同种类的类关键字,根据提取到的类关键字对开源代码仓库进行检索,得到n个后选代码段;分别计算各个后选代码段与所述当前数据集之间的相似度;最后选取相似度大于预设相似阈值的后选代码段作为目标后选代码,从所述开源代码仓库中确定与所述目标后选代码对应的目标开源类代码库,进而能够有效监控大型项目中所使用的开源类库,实时获知开源类库的信息。
附图说明
图1为本发明实施例方案涉及的硬件运行环境的开源类库监控设备的结构示意图;
图2为本发明一种开源类库监控方法第一实施例的流程示意图;
图3为本发明一种开源类库监控方法第二实施例的流程示意图;
图4为本发明一实施例中目标源代码被分块的过程示意图;
图5为本发明一种开源类库监控方法第三实施例流程示意图;
图6为本发明一种开源类库监控开源类库监控装置的结构框图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
参照图1,图1为本发明实施例方案涉及的硬件运行环境的用于开源类库监控设备的结构示意图。
如图1所示,该设备可以包括:处理器1001,例如CPU,通信总线1002、用户接口1003,网络接口1004,存储器1005。其中,通信总线1002用于实现这些组件之间的连接通信。用户接口1003可以包括显示屏(Display)、输入单元比如键盘(Keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如WI-FI接口)。存储器1005可以是高速RAM存储器,也可以是稳定的存储器(non-volatile memory),例如磁盘存储器。存储器1005可选的还可以是独立于前述处理器1001的存储装置。
本领域技术人员可以理解,图1中示出的结构并不构成对所述设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
如图1所示,作为一种计算机存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接收模块以及开源类库监控程序。
在图1所示的设备中,本发明的开源类库监控装置通过处理器1001调用存储器1005中存储的开源类库监控程序,并执行开源类库监控方法的步骤。
参照图2,图2为本发明一种开源类库监控方法第一实施例的流程示意图。
本实施例中,所述开源类库监控方法包括以下步骤:
步骤S10:对当前软件项目的目标源代码进行分块处理,得到一个包含多个项目代码片段的当前数据集。
需要说明的是,本实施例的执行主体为上述用于开源类库监控的设备的计算机系统的处理器。
程序员开发项目软件的过程中,在正在编写中的项目软件达到一定规模的时候,整个项目软件中难免被引入数十个甚至成百上千个开源类库,一般一分项目软件的源代码按照功能进行划分的话可能会分为多个模块,一个模块中可能会引用十几个或数十个开源类库,本实施例提供的开源类库监控方法主要描述的是对当前软件项目中的一个模块中的开源类库进行监控;以举一反三的方式进行说明,即对于当前软件项目中其他模块的开源类库,仍使用提供的开源类库监控方法进行监控。为方便描述,本实施例将上述当前软件项目中的一个模块称之为“目标源代码”。
可理解的是,一个软件项目的源代码内部不同结构模块之间互连程度的度量一般都是相互关联的,如果代码之间的耦合性就越强,则对当前软件项目所使用的类库的监控难度越大,因此为了降低当前软件项目中源代码的耦合强度,达到方便使用管理的效果,本实施例首先需要对要监控的当前软件项目中的源代码进行分块处理。
具体地,对当前软件项目的源代码进行分块处理,得到一个包含多个项目代码片段的当前数据集;目代码片段中会涉及所述当前软件项目的源代码引用的某开源类库中的接口、抽象类或具体类。
具体地,本实施例可使用固定分块算法(Fixed-Sized Partition,FSP),也可以使用CDC(content-defined chunking)变长分块算法,以使用固定分块算法为例,固定分块将数据流按固定的长度分块,定长分块算法采用预先义好的块大小对文件进行切分,并进行md5强校验值,计算md5强校验值并进行hash查找,如果能够匹配出重复数据块,会存储对应的数据块索引号,并创建相关元信息,形成一个经分块处理后的项目代码片段。
步骤S20:分别从各个项目代码片段中提取不同种类的类关键字,根据提取到的类关键字对开源代码仓库进行检索,得到n个后选代码段。
需要说明的是,本实施例中所称的类关键字可以是某开源类库中的API(Application Programming Interface,应用程序编程接口)、可以是某开源类库中的抽象类(abstract class),也可以是某开源类库中的具体类(class)。
本实施例中的开源代码仓库以开源项目托管平台github为例进行说明。
本实施例可以逐个或者随即对当前数据集中的项目代码片段进行遍历,分别从遍历到的项目代码片段中提取类关键字,项目代码片段中所引用接口、抽象类或具体类对应的开源类库就是本实施例正在监控的目标开源类库。
可理解的是,一目标源代码中会有近万行代码,涉及的类关键字可能会有近百种,在目标源代码中很多API和class会重复出现即重复使用,本实施例首先统计每个项目代码片段中出现的出现过的API和class,然后对统计的每个项目代码片段的数据进行汇总,去掉重复出现的统计记录,即从各个项目代码片段中提取不同种类的类关键字,得到一个包括不同种类的类关键字的类集合;
项目代码片段由于是经过分块处理的,不能直接从项目代码片段中确定每个API或者class对应的开源类库,因此需要根据提取到的类关键字(即所述类集合)对开源代码仓库github进行检索,例如统计到的不同种类的类关键字共有50个,这50个中的API或class各自可能属于不同的开源类库,因此需要将这50个类关键字作为一个整体类集合,根据所述类集合对开源代码仓库github进行检索,得到m个与所述类集合中的类关键字有交集的开源代码段,并按照交集的数量对所述m个开源代码段进行排序,按照交集数量由大到小的顺序从所述m个开源代码段选取前n个开源代码段作为后选代码段(n小于m)。
本实施例以n=10为例进行说明,并从选取的10个后选代码段按照交集数量从大到小的顺序进行编号,即从开源代码仓库github中取出检索到的前10个(n=1、2、3、4、5…..10)代码段作为后选代码段,例如检索到的包含类关键字最多的编号为n=1的后选代码片段为具有与这50个类关键字中的39个类关键字相同的源类,第二多的编号为n=2的后选代码片段具有与这33个类关键字相同的源类,第三多的编号为n=3的后选代码片段具有30个类关键字相同的源类….第十多的编号为n=10的后选代码片段具有6个类关键字相同的源类。
步骤S30:分别计算各后选代码段与所述当前数据集之间的相似度。
具体地,本实施例可以基于rsync算法(unix/linux下同步文件的一个高效算法)原理来计算检索到的这10个后选代码段与所述当前数据集之间的相似度。
首先,本实施例针对每个项目代码片段X中的API或者Class分配一个项目校验码组合,所述项目校验码组合包括一个32位的弱滚动校验码(rolling checksum)和一个128位的MD4强校验码;对每个类关键字计算出两个校验码:32位的弱滚动校验码和128位的MD4强校验码。即在每个项目代码片段X中计算出的所有弱滚动校验码和MD4强校验码,并将它们送入一个哈希列表,以形成一个校验码集合;
同时,分别对检索到的这10个后选代码段进行处理,即对所述n个后选代码段进行遍历,计算遍历到的当前后选代码段中不同源类的哈希值,得到多个源类哈希校验码,其中,所述源类属于所述开源代码段与所述类集合中之间的交集;
然后根据所述当前后选代码片段中不同的哈希值校验码分别对所述校验码集合进行遍历,在哈希值校验码与遍历到的项目校验码组合匹配成功时,则将所述当前后选代码与所述当前数据集之间的相似度进行加一,直至遍历完毕,最终得到所述当前后选代码与所述当前数据集之间的最终相似度值。
例如首先计算编号为n=1的当前后选代码片段中不同源类的哈希值校验码(校验码的长度为16),根据当前后选代码片段中不同的哈希值校验码分别对所述校验码集合进行遍历,在哈希值校验码与遍历到的弱滚动校验码以及MD4强校验码(即一个项目校验码)匹配成功时,则将编号为n=1的当前后选代码与所述当前数据集之间的相似度进行加一,直至遍历完毕,最终得到编号为n=1的当前后选代码与所述当前数据集之间的最终相似度值。同理,按照上述相同的方法,能够计算得到编号为n=(2、3、4、5….10)的后选代码分别与所述当前数据集之间的最终相似度值。
步骤S40:选取相似度大于预设相似阈值的后选代码段作为目标后选代码,从所述开源代码仓库中确定与所述目标后选代码对应的目标开源类代码库,以实现对所述目标开源类代码库监控。
具体地,本实施例可以将相似阈值设置为4,如果某个后选代码与所述当前数据集之间的最终相似度值,则将其视为目标后选代码,从所述开源代码仓库中确定与所述目标后选代码对应的目标开源类代码库,目标开源类代码库表征当前软件项目的目标源代码正在使用的开源类代码库。
进一步地,在确定了当前软件项目的目标源代码正在使用的目标开源类代码库后,可从所述当前软件项目的程序文件中读取所述目标开源类代码库的许可协议LICENSE.txt和版本数据(即版本号),将所述协议许可协议及版本数据保存并展示,以方便使用者可以知道当前项目软件引用了哪些开源类代码库,便于使用和监控。
本实施例首先对当前软件项目的目标源代码进行分块处理,得到包含多个项目代码片段的当前数据集;然后分别从各个项目代码片段中提取不同种类的类关键字,根据提取到的类关键字对开源代码仓库进行检索,得到n个后选代码段;分别计算各个后选代码段与所述当前数据集之间的相似度;最后选取相似度大于预设相似阈值的后选代码段作为目标后选代码,从所述开源代码仓库中确定与所述目标后选代码对应的目标开源类代码库,进而能够有效监控大型项目中所使用的开源类库,实时获知开源类库的信息。
参考图3,基于上述开源类库监控方法第一实施例,提出本发明一种开源类库监控方法第二实施例。
本实施例中,所述步骤S10具体包括:
步骤S101:获取当前软件项目的目标源代码中各段代码之间的耦合度;
可理解的是,各行代码之间往往存在互动关系,例如上一段代码建立了一个类,下一段代码就会调用上一行建好的类提供的方法,这样两行代码耦合度就比较高,本实施例会当前软件项目的目标源代码进行逐段分析,以获取当前软件项目的目标源代码中各段代码之间的耦合度
步骤S102:按照预设耦合度标准对所述当前软件项目的目标源代码进行分块处理,得到包含多个项目代码片段的当前数据集,所述预设耦合度标准表征代码之间的耦合度大于设定耦合度。
在具体实现中,例如两端代码之间的耦合度达到50%,则将这两端代码作为一个模块代码区域,对划分出的模块代码区域进行哈希计算,得到一个数据指纹。
具体地,可以使用CDC(content-defined chunking)变长分块算法,它基于数据指纹(如Rabin指纹)将文件分割成长度大小不等的分块策略。与定长分块算法不同,它是基于目标源代码的文件内容进行数据块切分的,因此数据块大小是可变化的。
目标源代码被分为长度可变的数据块,数据块的长度在一个规定的最小值和最大值之间。可变长度的数据块用一个滑动窗口来划分,当滑动窗口的哈希值与一个基准值相匹配时就创建一个分块,这样数据块的尺寸就可达到一个期望的分布。数据指纹预先定义两个整数D和r(r<D)一个大小为w的固定窗口在文件上滑动,参考图4,如在位置k,固定窗口内数据的hash值为f。如果f mod D=r,则该位置为数据块的一个边界。重复这个过程,直至整个目标源代码都被分块。
需要说明的是,需要对每一次滑动都计算依次窗口内的hash值,计算量增加。另外,如果选择的D和r不合适,会导致窗口过小(很容易匹配上)或过大(不难匹配上)。
本实施例能够能更加灵活的找出重复数据,能够更加准确有效地对当前软件项目的目标源代码进行分块处理,减少分块后的形成的项目代码片段出现冗余的现象。
参考图5,基于上述开源类库监控方法第一实施例,提出本发明一种开源类库监控方法第三实施例。
本实施例中,所述步骤S40之后,所述方法还包括:
步骤S501:将所述许可协议及版本数据保存到预设数据库并展示。
可理解的是,将当前软件项目所引用到的每个开源类库的许可协议数据(GPL、BSD、MIT等)及版本号保存到一个预先建立的数据库中,更加有助于查询以及监控。
步骤S502:在检测到所述当前软件项目的源代码交付时,对所述预设数据库中的版本数据进行遍历。
具体地,在检测到存在本地提交代付的执行命令时,会暂停该执行命令,并对步骤S501中的预设数据库进行检索。
步骤S503:从所述开源代码仓库中确定与遍历到的版本数据对应的当前开源类代码库,获取所述当前开源类代码库的当前版本,将所述当前开源类代码库的当前版本与所述遍历到的版本数据进行比较;
步骤S504:在所述当前开源类代码库的当前版本与所述遍历到的版本数据不一致时,进行升级提示。
具体地,在检测到本地提交当前项目软件的源代码时,会检索所述预设数据库以判断预设数据库中的开源类库是否有需要升级:在所述当前开源类代码库的当前版本与所述遍历到的版本数据不一致时,抓取所述开源代码仓库提供的所述当前开源类代码库的漏洞列表,对所述漏洞列表进行展示提示开发者或使用者注意升级及漏洞修复。进而能够有效监控大型项目中所使用的开源类库,实时获知开源类库的变动信息,避免开源类库对项目稳定性造成损害。
此外,参照图6,本发明还提出一种开源类库监控装置,所述装置包括:
分块模块10,用于对当前软件项目的目标源代码进行分块处理,得到包含多个项目代码片段的当前数据集;
检索模块20,用于分别从各个项目代码片段中提取不同种类的类关键字,根据提取到的类关键字对开源代码仓库进行检索,得到n个后选代码段;
计算模块30,用于分别计算各个后选代码段与所述当前数据集之间的相似度;
监控模块40,用于选取相似度大于预设相似阈值的后选代码段作为目标后选代码,从所述开源代码仓库中确定与所述目标后选代码对应的目标开源类代码库,以实现对所述目标开源类代码库监控。
可理解的是,本实施的开源类库监控装置可以是一种APP应用程序,该APP应用程序装载在上述实施例的开源类库监控设备中,本发明的开源类库监控装置的具体实现方式可参照上述开源类库监控方法实施例,此处不再赘述。
此外,本发明还提供一种计算机存储介质,其特征在于,所述计算机存储介质上存储有开源类库监控程序,所述开源类库监控程序被处理器执行时实现如上所述的开源类库监控方法步骤。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者系统中还存在另外的相同要素。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

Claims (10)

1.一种开源类库监控方法,其特征在于,所述方法包括:
对当前软件项目的目标源代码进行分块处理,得到包含多个项目代码片段的当前数据集;
分别从各个项目代码片段中提取不同种类的类关键字,根据提取到的类关键字对开源代码仓库进行检索,得到n个后选代码段;
分别计算各个后选代码段与所述当前数据集之间的相似度;
选取相似度大于预设相似阈值的后选代码段作为目标后选代码,从所述开源代码仓库中确定与所述目标后选代码对应的目标开源类代码库,以实现对所述目标开源类代码库监控。
2.如权利要求1所述的方法,其特征在于,所述分别从各个项目代码片段中提取不同种类的类关键字,根据提取到的类关键字对开源代码仓库进行检索,得到n个后选代码的步骤,包括:
对所述当前数据集中的项目代码片段进行遍历,分别从遍历到的项目代码片段中提取类关键字;
统计每个项目代码片段中出现过的类关键字的种类,去掉重复出现过的类关键字,得到一个包括不同种类的类关键字的类集合;
根据所述类集合对开源代码仓库进行检索,得到多个与所述类集合中的类关键字有交集的开源代码段;
根据交集的数量对多个开源代码段进行排序,并按照交集数量由大到小的顺序从所述多个开源代码段选取前n个开源代码段作为后选代码段。
3.如权利要求2所述的方法,其特征在于,所述分别计算各个后选代码段与所述当前数据集之间的相似度的步骤,包括:
分别为所述当前数据集中的每个项目代码片段的类关键字分配一个项目校验码组合;
将每个项目代码片段的类关键字对应的项目校验码组合送入哈希列表,以形成校验码集合;
对所述n个后选代码段进行遍历,计算遍历到的当前后选代码段中不同源类的哈希值,得到多个源类的哈希校验码,其中,所述源类属于所述开源代码段与所述类集合中之间的交集;
根据所述当前后选代码片段中不同的哈希值校验码分别对所述校验码集合进行遍历,在哈希值校验码与遍历到的项目校验码组合匹配成功时,则将所述当前后选代码与所述当前数据集之间的相似度进行加一,直至遍历完毕,得到所述当前后选代码与所述当前数据集之间的最终相似度值。
4.如权利要求3所述的方法,其特征在于,所述项目校验码组合包括弱滚动校验码和MD4强校验码;
所述将每个项目代码片段的类关键字对应的项目校验码组合送入哈希列表,以形成校验码集合的步骤,包括:
将每个项目代码片段的类关键字对应的弱滚动校验码和MD4强校验码送入哈希列表,以形成校验码集合。
5.如权利要求1-4任一项所述的方法,其特征在于,所述选取相似度大于预设相似阈值的后选代码段作为目标后选代码,从所述开源代码仓库中确定与所述目标后选代码对应的目标开源类代码库的步骤之后,所述方法还包括:
从所述当前软件项目中读取所述目标开源类代码库的许可协议和版本数据;
将所述协议许可协议及版本数据保存并展示。
6.如权利要求5所述的方法,其特征在于,所述从所述当前软件项目中读取所述目标开源类代码库的许可协议和版本数据的步骤之后,还包括:
将所述许可协议及版本数据保存到预设数据库并展示;
在检测到所述当前软件项目的源代码交付时,对所述预设数据库中的版本数据进行遍历;
从所述开源代码仓库中确定与遍历到的版本数据对应的当前开源类代码库,获取所述当前开源类代码库的当前版本,将所述当前开源类代码库的当前版本与所述遍历到的版本数据进行比较;
在所述当前开源类代码库的当前版本与所述遍历到的版本数据不一致时,进行升级提示。
7.如权利要求1-4任一项所述的方法,其特征在于,所述对当前软件项目的目标源代码进行分块处理,得到包含多个项目代码片段的当前数据集的步骤,包括:
获取当前软件项目的目标源代码中各段代码之间的耦合度;
按照预设耦合度标准对所述当前软件项目的目标源代码进行分块处理,得到包含多个项目代码片段的当前数据集,所述预设耦合度标准表征代码之间的耦合度大于设定耦合度。
8.一种开源类库监控装置,其特征在于,所述装置包括:
分块模块,用于对当前软件项目的目标源代码进行分块处理,得到包含多个项目代码片段的当前数据集;
检索模块,用于分别从各个项目代码片段中提取不同种类的类关键字,根据提取到的类关键字对开源代码仓库进行检索,得到n个后选代码段;
计算模块,用于分别计算各个后选代码段与所述当前数据集之间的相似度;
监控模块,用于选取相似度大于预设相似阈值的后选代码段作为目标后选代码,从所述开源代码仓库中确定与所述目标后选代码对应的目标开源类代码库,以实现对所述目标开源类代码库监控。
9.一种用于开源类库监控的设备,其特征在于,所述设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的开源类库监控程序,所述开源类库监控程序配置为实现如权利要求1至7中任一项所述的开源类库监控方法的步骤。
10.一种计算机存储介质,其特征在于,所述计算机存储介质存储有开源类库监控程序,所述开源类库监控程序配置为实现如权利要求1至7中任一项所述的开源类库监控方法的步骤。
CN201811539995.3A 2018-12-14 2018-12-14 一种开源类库监控方法、装置、设备及计算机存储介质 Pending CN109710299A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811539995.3A CN109710299A (zh) 2018-12-14 2018-12-14 一种开源类库监控方法、装置、设备及计算机存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811539995.3A CN109710299A (zh) 2018-12-14 2018-12-14 一种开源类库监控方法、装置、设备及计算机存储介质

Publications (1)

Publication Number Publication Date
CN109710299A true CN109710299A (zh) 2019-05-03

Family

ID=66256679

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811539995.3A Pending CN109710299A (zh) 2018-12-14 2018-12-14 一种开源类库监控方法、装置、设备及计算机存储介质

Country Status (1)

Country Link
CN (1) CN109710299A (zh)

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110598411A (zh) * 2019-09-23 2019-12-20 腾讯科技(深圳)有限公司 敏感信息检测方法、装置、存储介质和计算机设备
CN110647468A (zh) * 2019-09-23 2020-01-03 凡普数字技术有限公司 对代码进行监控的方法、装置以及存储介质
CN111666101A (zh) * 2020-04-24 2020-09-15 北京大学 软件同源分析方法及装置
CN111813378A (zh) * 2020-07-08 2020-10-23 北京迪力科技有限责任公司 一种代码库构建系统、方法和相关装置
CN111930610A (zh) * 2020-07-07 2020-11-13 北京白泽洞冥科技有限公司 软件同源性检测方法、装置、设备及存储介质
CN112148305A (zh) * 2020-10-28 2020-12-29 腾讯科技(深圳)有限公司 一种应用检测方法、装置、计算机设备和可读存储介质
CN112182338A (zh) * 2020-11-02 2021-01-05 国网北京市电力公司 托管平台的监控方法和装置
CN112487366A (zh) * 2020-12-21 2021-03-12 中国信息通信研究院 一种软件开源风险确定方法和装置
CN112527388A (zh) * 2019-09-17 2021-03-19 中国科学院软件研究所 一种面向GitHub大规模开源代码的快速代码文件溯源方法和装置
CN113127003A (zh) * 2021-04-26 2021-07-16 平安普惠企业管理有限公司 代码异常告警方法、装置、设备及存储介质
US11256602B2 (en) 2020-01-30 2022-02-22 Red Hat, Inc. Source code file retrieval

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160202972A1 (en) * 2015-01-12 2016-07-14 WhiteSource Ltd. System and method for checking open source usage
CN107066262A (zh) * 2017-03-10 2017-08-18 苏州棱镜七彩信息科技有限公司 源代码文件克隆邻接表合并检测方法
CN107844705A (zh) * 2017-11-14 2018-03-27 苏州棱镜七彩信息科技有限公司 基于二进制代码特征的第三方组件漏洞检测方法
CN108763928A (zh) * 2018-05-03 2018-11-06 北京邮电大学 一种开源软件漏洞分析方法、装置和存储介质

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160202972A1 (en) * 2015-01-12 2016-07-14 WhiteSource Ltd. System and method for checking open source usage
CN107066262A (zh) * 2017-03-10 2017-08-18 苏州棱镜七彩信息科技有限公司 源代码文件克隆邻接表合并检测方法
CN107844705A (zh) * 2017-11-14 2018-03-27 苏州棱镜七彩信息科技有限公司 基于二进制代码特征的第三方组件漏洞检测方法
CN108763928A (zh) * 2018-05-03 2018-11-06 北京邮电大学 一种开源软件漏洞分析方法、装置和存储介质

Cited By (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112527388B (zh) * 2019-09-17 2022-10-11 中国科学院软件研究所 一种面向GitHub大规模开源代码的快速代码文件溯源方法和装置
CN112527388A (zh) * 2019-09-17 2021-03-19 中国科学院软件研究所 一种面向GitHub大规模开源代码的快速代码文件溯源方法和装置
CN110647468A (zh) * 2019-09-23 2020-01-03 凡普数字技术有限公司 对代码进行监控的方法、装置以及存储介质
CN110598411A (zh) * 2019-09-23 2019-12-20 腾讯科技(深圳)有限公司 敏感信息检测方法、装置、存储介质和计算机设备
US11256602B2 (en) 2020-01-30 2022-02-22 Red Hat, Inc. Source code file retrieval
CN111666101A (zh) * 2020-04-24 2020-09-15 北京大学 软件同源分析方法及装置
CN111930610A (zh) * 2020-07-07 2020-11-13 北京白泽洞冥科技有限公司 软件同源性检测方法、装置、设备及存储介质
CN111930610B (zh) * 2020-07-07 2024-05-17 北京鸿渐科技有限公司 软件同源性检测方法、装置、设备及存储介质
CN111813378A (zh) * 2020-07-08 2020-10-23 北京迪力科技有限责任公司 一种代码库构建系统、方法和相关装置
CN111813378B (zh) * 2020-07-08 2023-03-21 北京迪力科技有限责任公司 一种代码库构建系统、方法和相关装置
CN112148305A (zh) * 2020-10-28 2020-12-29 腾讯科技(深圳)有限公司 一种应用检测方法、装置、计算机设备和可读存储介质
CN112182338A (zh) * 2020-11-02 2021-01-05 国网北京市电力公司 托管平台的监控方法和装置
CN112487366B (zh) * 2020-12-21 2024-03-12 中国信息通信研究院 一种软件开源风险确定方法和装置
CN112487366A (zh) * 2020-12-21 2021-03-12 中国信息通信研究院 一种软件开源风险确定方法和装置
CN113127003A (zh) * 2021-04-26 2021-07-16 平安普惠企业管理有限公司 代码异常告警方法、装置、设备及存储介质

Similar Documents

Publication Publication Date Title
CN109710299A (zh) 一种开源类库监控方法、装置、设备及计算机存储介质
US7117294B1 (en) Method and system for archiving and compacting data in a data storage array
US9582271B2 (en) Systems and methods for identifying software performance influencers
CN108833458B (zh) 一种应用推荐方法、装置、介质及设备
CN101379465B (zh) 利用多种选择标准进行数据管理的方法和系统
US8566303B2 (en) Determining word information entropies
Lazar et al. Generating duplicate bug datasets
US20160299835A1 (en) Method and system for providing delta code coverage information
EP3136284A1 (en) Personal information anonymization method, personal information anonymization program, and information processing apparatus
CN108897842A (zh) 计算机可读存储介质及计算机系统
EP3356951B1 (en) Managing a database of patterns used to identify subsequences in logs
CN114416667B (zh) 快速分享网盘文件的方法、装置、网盘及存储介质
CN110474900B (zh) 一种游戏协议测试方法及装置
CN106919576A (zh) 利用二级类目下的关键词库搜索应用程序的方法及装置
US20130151519A1 (en) Ranking Programs in a Marketplace System
CN110968802B (zh) 一种用户特征的分析方法、分析装置及可读存储介质
CN112329954A (zh) 物品召回方法、装置、终端设备及存储介质
CN111367529A (zh) 代码贡献统计方法及装置
CN108334935B (zh) 精简输入的深度学习神经网络方法、装置和机器人系统
Huisman et al. StOCNET: Software for the statistical analysis of social networks
US20130204839A1 (en) Validating Files Using a Sliding Window to Access and Correlate Records in an Arbitrarily Large Dataset
CN107402886B (zh) 堆栈分析方法及相关装置
CN105512230A (zh) 数据存储方法及装置
Mondal et al. An empirical study on change recommendation
US8265428B2 (en) Method and apparatus for detection of data in a data store

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination