1.一种Java软件依赖库版本升级自动化风险评估的方法,包括如下步骤:
步骤1:从Java依赖仓库中获取依赖库当前版本以及待升级版本Java源代码步骤2:对依赖库新旧版本源代码解析,获取依赖库中所包含的类方法列表,具体方法如下:步骤2.1:获取依赖库信息,具体信息包括依赖库标识,以及依赖库版本;
步骤2.2:基于依赖库信息查询是否存在所指定的依赖库解析数据,如存在则进入步骤
3,否则进入下一步骤;
步骤2.3:对依赖库源代码进行解析,得到依赖库所有的包,类,方法以及方法签名信息;
步骤2.4:将依赖库解析结果保存数据库;
步骤3:基于步骤2得到的依赖库类方法列表,对比新旧两个版本,识别旧版本中类方法变更信息,具体方法如下:步骤3.1:获取待对比依赖库新旧版本信息;
步骤3.2:查询是否存在该依赖库新旧两个版本的变更信息,如存在则进入步骤4,否则进入下一步骤;具体包括:使用旧依赖库信息:oldgroupid,oldartifactid和oldversion以及新依赖库信息:newgroupid,newartifactid和newversion作为组合条件查询数据,判断是否存在两个版本依赖库的变更分析结果;如果存在变更结果,则无需再次进行分析,可直接进入步骤4,否则需要分析新旧两个版本的依赖库变更信息,进入下一步骤;
步骤3.3:获取依赖库旧版本所有方法,依次遍历所有方法与依赖库新版本解析结果进行对比,判断该方法是否在变更,并将变更信息保存数据库;具体包括:利用oldgroupid,oldartifactid和oldversion查询到旧版本依赖库中所有的方法信息,建立待分析方法列表;利用newgroupid,newartifactid和newversion查询到新版本依赖库中所有的方法信息,建立对比方法列表;进一步依次的遍历待分析方法列表,并与新版本对比方法列表做对比分析,判断该方法是否存在于有变更;具体判断标准如下:在分析方法列表中是否存在与待分析方法所属的包名,类名,返回信息以及参数信息完全相同的方法,如果不存在则记录一条变更方法变更信息表示该方法已经在新版本中不存在,并且将该信息保存到数据库中;如果存在则继续分析下一个待分析方法直到所有待分析方法分析完成;步骤4:对使用依赖库的应用源代码解析,获取应用源代码中实际使用的依赖库类方法,具体方法如下:步骤4.1:获取使用依赖库的应用源代码;
步骤4.2:查询是否存在依赖库类方法调用链路的解析,如存在则进入步骤5,否则进入下一步;
步骤4.3:对该应用源代码进行源代码解析,获取该应用所有使用到的包,类,方法以及方法签名信息,并保存数据库;
步骤5:对比步骤3和步骤4中旧版本依赖库中变更的类方法和应用中实际使用的依赖库类方法,如发现应用中实际使用的依赖库方法发生了变化,则记录一条风险,具体方法如下:步骤5.1:获取应用信息,依赖库新旧版本信息;
步骤5.2:查询是否存在依赖库版本升级风险信息,如存在则进入步骤6,否则进入下一步骤;
步骤5.3:获取应用使用的依赖库所有方法信息,依次遍历所有依赖方法,并与依赖库变更信息作对比,如果应用使用了变更的方法,则记录一条风险信息;
步骤6:分析完成后将风险评估结果推送给对应的研发人员。
2.如权利要求1所述的一种Java软件依赖库版本升级自动化风险评估的方法,其特征在于:步骤1具体包括:所有依赖库存放在Maven仓库中,系统基于依赖库的标识信息,从Maven仓库中拉取依赖库新旧两个版本的源代码,将源代码保存到本地。
3.如权利要求1所述的一种Java软件依赖库版本升级自动化风险评估的方法,其特征在于:步骤2.1所述的依赖库的标识信息包括groupid,artifactid和version信息;步骤2.2具体包括:使用groupid,artifactid以及version作为查询条件,查询依赖库解析数据库,判断该依赖库版本是否已经在其他过程中被解析过。
4.如权利要求1所述的一种Java软件依赖库版本升级自动化风险评估的方法,其特征在于:
步骤4.1拉取应用在Git仓库中的Master分支信息作为应用源代码分析的基础;
步骤4.2具体包括:利用应用名称,应用Git仓库地址以及旧版本依赖库信息查询应用方法调用链路解析数据库,判断是否存在该应用与该依赖库的调用链路解析,如果存在则直接进入步骤5;否则进入下一步骤进行应用调用链路解析;
步骤4.3具体包括:使用JavaParser对应用源代码进行解析,得到该应用的抽象语法树;基于得到的抽象语法树进一步分析,获取应用方法调用链路分析信息,包括应用名,包名,类名,方法名,依赖的依赖库信息,包括依赖库信息groupid,artifactid,version和依赖方法信息包括了该方法所属的包名,类名,返回结果类型,输入的参数信息,并将该信息保存到数据库中。
5.如权利要求1所述的一种Java软件依赖库版本升级自动化风险评估的方法,其特征在于:步骤5.2具体包括:基于应用名,应用地址仓库,旧依赖库信息,新依赖库信息查询依赖库版本升级风险数据库,判断是否存在版本升级风险信息,如存在则直接进入步骤6,否则进入下一步进行升级风险分析;
步骤5.3具体包括:首先基于应用名称,git仓库地址信息以及旧版本依赖库信息,查询应用所使用的旧版本依赖库中方法信息,建立应用依赖方法列表;遍历所有的依赖方法,对所有的依赖方法执行风险判断,具体判断方式如下:从应用依赖方法列表中选择一个待分析的方法,使用该方法信息,包括groupid,artifactid,version和依赖方法信息包括了该方法所属的包名,类名,返回结果类型,输入的参数信息,并结合新版本依赖库信息包括groupid,artifactid,version,查询依赖库变更数据库,如果找到对应的变更信息则记录一条风险信息,包括应用名称,Git仓库地址,老版本依赖库,新版本数据库,升级存在的风险方法;如果没有找到对应的变更信息则继续选择应用依赖方法列表中的下一条进行分析,直到所有的方法分析完成。
6.如权利要求1所述的一种Java软件依赖库版本升级自动化风险评估的方法,其特征在于:步骤6具体包括:从版本升级风险数据库中获取该应用从旧版本升级到新版本所有的风险信息,并通过企业内部消息系统将风险评估结果推送到负责该应用的研发人员,信息包括应用名称,Git仓库地址,老版本依赖库,新版本数据库,升级存在的风险方法,供研发人员判断是否升级到新版本依赖库以及如何升级到新版本依赖库。