本发明属于计算机应用技术领域,尤其涉及一种项目第三方库升级异常检测方法及系统、设备及存储介质。
背景技术:
随着网络的蓬勃发展,应用程序的数量也相应的处于井喷式的发展阶段。当前应用程序中会引入大量的第三方库文件,第三方库文件中包含了大量的开源代码以及更多的第三方库文件。而大量使用开源代码给软件开发带来极大的便利同时,也有着复杂的不确定性。在应用程序开发生命周期中,开发人员想要升级一个第三方库版本时,往往会出现项目中依赖的第三方库某字段或方法在升级时被删除,而导致项目整体部署失败的问题。现阶段,开发人员主要通过两种方式对第三方库进行升级检查:
1、人工审查对开发人员的技术要求较高,耗费时间长,开发人员需要特别清楚项目中哪里用到了升级的第三方库的相关代码,而且也容易出现检查覆盖度不够的情况。
2、软件审查的方式需要明确知道项目的所有接口,才能进行相应的升级检查,但是如果应用程序没有完整的自动化测试脚本,那么测试审查也会出现检查遗漏的情况。
技术实现要素:
本发明所要解决的技术问题是:针对现有技术存在的问题,本发明提供了一种具有时效性、准确性以及可扩展性的项目第三方库升级检测方法及系统、设备及存储介质。
第一方面,本申请实施例提供了一种项目第三方库升级检测方法,所述方法包括:
获取第三方库列表,并获取各个第三方库的信息;
通过用户上传的项目信息在第三方库中生成项目的最新版本和之前版本的项目依赖快照信息、项目详情,并将两个版本的信息对比生成差异对比数据;
利用词法分析技术分析所述差异对比数据获取具体的类更改信息,以及根据具体的类更改信息确定各个第三方库的升级影响数据;
根据各个第三方库的升级影响数据与关联的第三方库数量,对引用升级第三方库的项目进行影响评分并选取预设评分阈值内的第三方库;以及
对处于预设评分阈值内的第三方库的具体的类更改信息进行影响评分,并检测出升级的第三方库。
第二方面,本申请实施例还提供一种项目第三方库升级检测系统,所述系统包括:
获取模块:获取第三方库列表,并获取各个第三方库的信息;
对比模块:通过用户上传的项目信息在第三方库中生成项目的最新版本和之前版本的项目依赖快照信息、项目详情,并将两个版本的信息对比生成差异对比数据;
分析模块:利用词法分析技术分析所述差异对比数据获取具体的类更改信息,以及根据具体的类更改信息确定各个第三方库的升级影响数据;
第一影响评分模块:根据各个第三方库的升级影响数据与关联的第三方库数量,对引用升级第三方库的项目进行影响评分并选取预设评分阈值内的第三方库;以及
第二影响评分模块:对处于预设评分阈值内的第三方库的具体的类更改信息进行影响评分,并检测出升级的第三方库。
第三方面,本申请实施例还提供一种项目第三方库升级检测设备,包括存储器、处理器、以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时,实现如第一方面所述的项目第三方库升级检测方法中的各个步骤。
第四方面,本申请实施例还提供一种存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时,实现如第一方面所述的项目第三方库升级检测方法的各个步骤。
本申请实施例提供的项目第三方库升级检测方法,该方法包括:获取第三方库列表,并获取各个第三方库的信息;通过用户上传的项目信息在第三方库中生成项目的最新版本和之前版本的项目依赖快照信息、项目详情,并将两个版本的信息对比生成差异对比数据;利用词法分析技术分析所述差异对比数据获取具体的类更改信息,以及根据具体的类更改信息确定各个第三方库的升级影响数据;根据各个第三方库的升级影响数据与关联的第三方库数量,对引用升级第三方库的项目进行影响评分并选取预设评分阈值内的第三方库;以及对处于预设评分阈值内的第三方库的具体的类更改信息进行影响评分,并检测出升级的第三方库。如此,通过上述步骤检测出的第三方库,可直接对接权威仓库,保证通用的第三方库代码升级版本可以准确有效的获取,具有时效性和准确性,用户还可自由添加第三方库的信息,使得第三方库的信息更加全面,还具有可扩展性。
附图说明
下面结合附图详述本发明的具体结构
图1为本发明的项目第三方库升级异常检测方法的流程示意图;
图2为本发明的项目第三方库升级异常检测方法的子流程示意图;
图3为本发明的项目第三方库升级异常检测方法的另一子流程示意图;
图4为本发明的项目第三方库升级异常检测方法的另一子流程示意图;
图5为本发明的项目第三方库升级异常检测方法的另一子流程示意图;
图6为本发明的项目第三方库升级异常检测方法的程序模块示意图。
具体实施方式
为使得本发明的发明目的、特征、优点能够更加的明显和易懂,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而非全部实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本申请实施例中项目第三方库升级检测方法的流程示意图,本实施例中,上述项目第三方库升级检测方法包括:
步骤101、获取第三方库列表,并获取各个第三方库的信息。
其中,通过权威第三方库代码仓库以及自定义的代码仓库获取第三方库信息,可对接maven中心仓库等权威第三方库代码的仓库,集中化管理第三方库资源(构件)的一个服务,保证通用的第三方库代码升级可以准确有效的获取,而且用户可以自由的添加第三方库的信息,使得第三方库的信息更加全面。其中,权威第三方库代码仓库指的是如maven仓库等基于文件系统存储的,自定义代码仓库指的是超大型公司或者大型国有企业,对某些不开源的第三方库进行存储与拉取,第三方库指的是除了本地库、系统类库以外的类库,需要显示的申明才可以使用,第三方库信息中除了代码信息外,还有文件名、版本名、发布时间及厂商。
步骤102、通过用户上传的项目信息在第三方库中生成项目的最新版本和之前版本的项目依赖快照信息、项目详情,并将两个版本的信息对比生成差异对比数据。
其中,项目依赖快照指的是是获取项目或第三方库下的所有文件,通过文件的名称和大小以及最后时间生成一个指纹信息(可以通过hash函数完成),项目详情,指的是通过词法分析技术获取项目中的每一个类,包括这个类中的字段信息,方法信息等,以及这个类需要依赖的其他第三方库的代码信息,所述差异对比数据,指的是某第三方库升级版本时项目代码中修改的字段信息和方法信息等,包括删除,修改,新增等。
步骤103、利用词法分析技术分析所述差异对比数据获取具体的类更改信息,以及根据具体的类更改信息确定各个第三方库的升级影响数据。
其中,该步骤通过计算项目中原来依赖的第三方库信息中使用差异对比信息中的数据(比如类中的方法信息或字段信息)是哪一种信息,来判断此次项目升级存在的问题。另外,上述的升级影响数据为各个第三方库的所有具体的类更改信息的影响因子的之和。例如,删除字段的影响因子为0.2,修改私有方法的影响因子为0.1,删除私有方法的影响因子为0.2,修改公共方法的影响因子为0.3,删除公共方法的影响因子为0.5,删除类的影响因子为1,以修改前的第三方库中的类数量为基数。具体的,当一个第三方库中原有100个类,修改版本后,有3个类被删除,10个类中的5个公共方法被修改,3个公共方法被删除,可以得出,此第三方库升级影响为(3*1 5*0.3 3*0.5)%,也即6%。如此,在升级第三方库版本时,通过对比前后版本之间的升级影响数据,可以选出合理的第三方库。
步骤104、根据各个第三方库的升级影响数据与关联的第三方库数量,对引用升级第三方库的项目进行影响评分并选取预设评分阈值内的第三方库。
具体的,考虑到第三方库中的相互关联关系,可以结合第三方库的升级影响数据与关联的第三方库数量来限定第三方库数量。比如在某项目projectdeom中有10个第三方库a,b,c,d,e,f,g,h,i,j。其中第三方库a不仅被项目本身依赖,还被第三方库b,c,d依赖;另外第三方库g仅仅被项目本身依赖。在面临选择升级第三方库a,还是升级第三方库f时,可以通过下述的计算方式来帮助用户选择。如果情况1中第三方库a在第一阶段中得出升级影响为0.3,第三方库f在第一阶段得出影响为0.2,那么很容易得出结论,该项目中升级第三方库a的影响为1.2,升级第三方库f的影响为0.2,此时选择升级第三方库f影响最小;又或者情况2中如果第三方库a在第一阶段中得出升级影响为0.05,第三方库f在第一阶段得出影响为0.3,那么很容易得出结论,该项目中升级第三方库a的影响为0.2,升级第三方库f的影响为0.3,此时选择升级第三方库a影响最小。进一步的,可以通过设定预设评分阈值,并选择设定阈值范围内的第三方库作为待选择的第三方库。如此,根据上述的步骤可以得出具体第三方库升级版本的影响力,并确定出待选择的第三方库。
步骤105、对处于预设评分阈值内的第三方库的具体的类更改信息进行影响评分,并检测出升级的第三方库。
具体的,对待选择的各个第三方库的所有类更改信息进行细致分析,确定影响评分数据。例如,如果存在被删除的类,则影响评分为严重,如果存在被删除的方法,影响评分为高危,如果存在被修改的方法,影响评分为中危等,如此,可以得出具体第三方库在项目中的实际影响情况,并可检测出准确的升级的第三方库,如此,能够最大限度地保证第三方库对升级项目的准确判断。
在一具体的应用中,某项目在实际使用中发现存在cve漏洞,该漏洞由两个第三方库组合使用时被触发,升级任何一个第三方库即可解决问题,但是因为项目多次迭代,现有的开发对项目中使用这两个第三方库的代码位置不清楚,此时,即可通过步骤103初步分析两个第三方库升级的影响力,同时运用步骤104得出两个第三方库升级的影响面,此时可以相应的得出结论升级影响面小的第三方库,耗时较短,但结果较多。进一步的,利用步骤105的第三方库的具体的类更改信息进行影响评分,如此,可以检出升级影响面最小的第三方库,该第三方库为最准确的结论。
本申请实施例提供的项目第三方库升级检测方法,该方法包括:获取第三方库列表,并获取各个第三方库的信息;通过用户上传的项目信息在第三方库中生成项目的最新版本和之前版本的项目依赖快照信息、项目详情,并将两个版本的信息对比生成差异对比数据;利用词法分析技术分析所述差异对比数据获取具体的类更改信息,以及根据具体的类更改信息确定各个第三方库的升级影响数据;根据各个第三方库的升级影响数据与关联的第三方库数量,对引用升级第三方库的项目进行影响评分并选取预设评分阈值内的第三方库;以及对处于预设评分阈值内的第三方库的具体的类更改信息进行影响评分,并检测出升级的第三方库。如此,通过上述步骤检测出的第三方库,可直接对接权威仓库,保证通用的第三方库代码升级版本可以准确有效的获取,具有时效性和准确性,用户还可自由添加第三方库的信息,使得第三方库的信息更加全面,还具有可扩展性。
进一步的,基于上述实施例,参照图2,图2为本申请实施中项目第三方库升级检测方法的子流程示意图,本实施例中,上述步骤101获取第三方库列表,并获取各个第三方库的信息,包括从两个方面获取第三方库的列表,一个是从权威第三方库平台获取,一个便是用户自定义添加的,获取第三方库的列表后,再获取第三方库的信息,通过词法分析获取各个第三方库下面的类信息、方法信息、字段信息。
进一步的,基于上述实施例,参照图3,图3为本申请实施例中项目第三方库升级检测方法的子流程示意图,本实施例中,上述步骤101获取各个第三方库的信息,包括:
步骤201、遍历获取所述第三方库的类信息;
步骤202、基于所述类信息,获取所述第三方库的指纹信息、方法信息以及字段信息。
具体的,先遍历获取第三方库下面的类名称,以第三方库的完整名称(包含版本号)为key和其关联存储,再基于类信息,获取其指纹信息,以及类中的方法信息、字段信息。其中,指纹信息指的是获取项目或第三方库下的所有文件,通过文件的名称和大小以及最后时间生成一个指纹信息(可以通过hash函数完成),获取第三方库信息指的是通过文件系统扫描,pom文件扫描等方式获取当前应用程序下的所有第三方库依赖,文件系统扫描指的是通过扫描某一目录下的所有第三方库文件,进而获取相应的第三方库信息,pom文件扫描指的是基于maven框架搭建的项目,通过pom文件定义项目的基本信息,用于描述项目如何搭建,申明项目的第三方库依赖等。扫描pom文件我们可以获取相应的第三方库信息。
进一步的,在本实施例中,通过用户上传的项目信息在第三方库中生成项目的最新版本和之前版本的项目依赖快照信息、项目详情,若用户上传项目信息的指纹信息,则生成最新版本的项目依赖快照信息和项目详情,若两个版本的第三方库的信息发生变更,则遍历第三方库的指纹信息,生成差异对比数据。
其中,基于实施例,图4为本申请实施例项目第三方库升级检测方法的子流程图,包括了通过用户上传的项目信息在第三方库中生成项目的最新版本和之前版本的项目依赖快照信息、项目详情,并将两个版本的信息对比生成差异对比数据的具体步骤:
用户上传项目信息,首先获取项目的完整名称,通过项目的完整名称判断该项目是否存在。
若该项目不存在的话,获取项目的指纹信息,并且以项目的完整名称为key保存至数据库中,同时提取项目依赖快照和项目详情以项目的完整名称为key存储至数据库中,然后返回检测正常标志,结束后续流程。
若该项目存在的话,获取项目的指纹信息,通过判断和之前存储的项目指纹信息是否一致,判断此次上传的项目是否被修改。如果指纹信息一致则返回之前的记录信息,指纹不一致的话则生成此次的新上传的项目信息的项目依赖快照信息和项目详情。
将获取的新上传的项目信息的项目依赖快照和项目详情与之前项目版本的项目依赖快照信息对比,判断两个版本的第三方库的信息是否发生变更,如果没有发生变更,则认为是项目本身代码信息改动并返回检测正常的信息,如果两个版本的第三方库的信息发生变更,则遍历第三方库的指纹信息,判断是否存在差异,生成差异对比数据。
进一步的,利用词法分析技术分析所述差异对比数据获取具体的类更改信息还包括利用词法分析技术获取所述第三方库的修改信息。
其中,将两个版本的第三方库的差异对比数据与对应的第三方库的详情对比,然后利用词法分析技术获取第三方库的修改信息。
具体的,利用词法分析技术获取所述第三方库的修改信息包括利用词法分析技术循环遍历用户项目中差异对比数据的类名称,查找用户项目中的修改操作和删除操作。
具体的,利用词法分析技术获取所述第三方库的修改信息还包括若修改信息不兼容,则将词法分析技术获取的修改信息和代码位置给用户展示。
其中,基于实施例,图5为本申请实施例项目第三方库升级检测方法的子流程图,包括了利用词法分析技术分析所述差异对比数据获取具体的类更改信息的具体步骤:
首先获取了两个版本的第三方库的差异对比数据,利用第三方库的基础数据获取对应的第三方库详情,然后利用词法分析技术获取第三方库的修改详情,即获取具体的类更改信息,判断有无第三方库新增、编辑、删除的操作。其中删除指的是第三方库升级版本时,删除了原有的部分字段信息或方法信息等,这种情况对版本升级危害最大,新增指的是第三方库在升级时,会新增类信息或在原有类中添加字段信息或方法信息等,这种情况对项目升级影响最小。
获取了第三方库的具体类更改信息之后,利用词法分析技术循环遍历用户项目是否包含了差异数据的类名称,如果不在差异数据的类名称,则返回检修正常的信息,若包含差异数据的类名称,则进一步的查找用户项目代码是否包含修改操作和删除操作。
若存在修改操作和删除操作,则认识当前上传的项目信息存在问题,进一步的判断修改操作的信息中是否兼容当前项目,如果不兼容当前项目则通过词法分析技术获取的修改信息和代码位置展示给用户看。其中,修改指的是第三方库升级版本时,修改了原有的部分字段信息或方法信息等,这种情况对版本升级同样危害严重,需要进一步判断修改信息中是否存在兼容信息。兼容信息指的是第三方库在升级时,会添加一个可变长参数,这样原有方法可以保持不变也能工作。
若不存在修改操作和删除操作,则返回检测正常的信息。
其中,当用户上传完项目代码后,无需修改项目中的第三方库信息后再次上传,只需要将需要修改的第三方库信息和原始的第三方库信息发送至直接科力远词法分析技术获取第三方库修改信息处,因为在这之前就可以获取所有第三方库的所有版本的信息,包括指纹信息,即可得到此次第三方库升级对用户代码是否产生影响。通过对项目和第三方库的指纹信息可以快速判断项目是否发生依赖变更,可以更精准的得到第三方库版本升级对项目产生的影响。
进一步的,本申请实施例还提供一种项目第三方库升级检测设备200,参照图6,图6为本申请实施例中项目第三方库升级检测异常设备模块示意图,本实施例中,上述项目第三方库升级检测设备200包括:
获取模块201:获取第三方库列表,并获取各个第三方库的信息;
对比模块202:通过用户上传的项目信息在第三方库中生成项目的最新版本和之前版本的项目依赖快照信息、项目详情,并将两个版本的信息对比生成差异对比数据;
分析模块203:利用词法分析技术分析所述差异对比数据获取具体的类更改信息,以及根据具体的类更改信息确定各个第三方库的升级影响数据;
第一影响评分模块204:根据各个第三方库的升级影响数据与关联的第三方库数量,对引用升级第三方库的项目进行影响评分并选取预设评分阈值内的第三方库;以及
第二影响评分模块205,对处于预设评分阈值内的第三方库的具体的类更改信息进行影响评分,并检测出升级的第三方库。
本申请实施例提供的项目第三方库升级检测设备200,可以实现:获取第三方库列表,并获取各个第三方库的信息;通过用户上传的项目信息在第三方库中生成项目的最新版本和之前版本的项目依赖快照信息、项目详情,并将两个版本的信息对比生成差异对比数据;利用词法分析技术分析所述差异对比数据获取具体的类更改信息,以及根据具体的类更改信息确定各个第三方库的升级影响数据;根据各个第三方库的升级影响数据与关联的第三方库数量,对引用升级第三方库的项目进行影响评分并选取预设评分阈值内的第三方库;以及对处于预设评分阈值内的第三方库的具体的类更改信息进行影响评分,并检测出升级的第三方库。提供获取第三方库,可直接对接权威仓库,保证通用的第三方库代码升级版本可以准确有效的获取,具有时效性和准确性,用户还可自由添加第三方库的信息,使得第三方库的信息更加全面,还具有可扩展性。
进一步的,本申请还提供一种项目第三方库升级检测设备,包括存储器、处理器、以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时,实现上述的项目第三方库升级检测方法中的各个步骤。
进一步的,本申请还提供一种存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时,实现如上述的项目第三方库升级检测方法的各个步骤。
在本发明各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。
需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本发明所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
以上为对本发明所提供的一种项目第三方库升级检测方法及系统、设备及存储介质的描述,对于本领域的技术人员,依据本申请实施例的思想,在具体实施方式及应用范围上均会有改变之处,综上,本说明书内容不应理解为对本发明的限制。
1.一种项目第三方库升级异常检测方法,其特征在于,所述方法包括:
获取第三方库列表,并获取各个第三方库的信息;
通过用户上传的项目信息在第三方库中生成项目的最新版本和之前版本的项目依赖快照信息、项目详情,并将两个版本的信息对比生成差异对比数据;
利用词法分析技术分析所述差异对比数据获取具体的类更改信息,以及根据具体的类更改信息确定各个第三方库的升级影响数据;
根据各个第三方库的升级影响数据与关联的第三方库数量,对引用升级第三方库的项目进行影响评分并选取预设评分阈值内的第三方库;以及
对处于预设评分阈值内的第三方库的具体的类更改信息进行影响评分,并检测出升级的第三方库。
2.如权利要求1所述的方法,其特征在于,所述获取各个第三方库的信息包括:
遍历获取所述第三方库的类信息;
基于所述类信息,获取所述第三方库的指纹信息、方法信息以及字段信息。
3.如权利要求1所述的方法,其特征在于,所述通过用户上传的项目信息在第三方库中生成项目的最新版本和之前版本的项目依赖快照信息、项目详情包括:
若用户上传项目信息的指纹信息与之前存储的项目指纹信息不一致,则生成所述最新版本的项目依赖快照信息和项目详情。
4.如权利要求1所述的方法,其特征在于,所述将两个版本第三方库的信息对比生成差异数据包括:
若所述两个版本的第三方库的信息发生变更,则遍历第三方库的指纹信息,生成所述差异对比数据。
5.如权利要求1所述的方法,其特征在于,所述利用词法分析技术分析所述差异对比数据获取具体的类更改信息还包括:
利用词法分析技术获取所述第三方库的修改信息。
6.如权利要求5所述的方法,其特征在于,所述利用词法分析技术获取第三方库的修改信息包括:
利用词法分析技术循环遍历用户项目中差异对比数据的类名称,查找用户项目中的修改操作和删除操作。
7.如权利要求5所述的方法,其特征在于,所述利用词法分析技术获取第三方库的修改信息还包括:
若修改信息不兼容,则将词法分析技术获取的修改信息和代码位置给用户展示。
8.一种项目第三方库升级异常检测系统,其特征在于,所述系统包括:
获取模块:获取第三方库列表,并获取各个第三方库的信息;
对比模块:通过用户上传的项目信息在第三方库中生成项目的最新版本和之前版本的项目依赖快照信息、项目详情,并将两个版本的信息对比生成差异对比数据;
分析模块:利用词法分析技术分析所述差异对比数据获取具体的类更改信息,以及根据具体的类更改信息确定各个第三方库的升级影响数据;
第一影响评分模块:根据各个第三方库的升级影响数据与关联的第三方库数量,对引用升级第三方库的项目进行影响评分并选取预设评分阈值内的第三方库;以及
第二影响评分模块:对处于预设评分阈值内的第三方库的具体的类更改信息进行影响评分,并检测出升级的第三方库。
9.一种项目第三方库升级异常检测设备,包括存储器、处理器、以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时,实现如权利要求1至7任一项所述的项目第三方库升级异常检测方法中的各个步骤。
10.一种存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时,实现如权利要求1至7任一项所述的项目第三方库升级异常检测方法的各个步骤。
技术总结