本发明专利技术属于软件工程技术领域,具体为基于API分析的Java第三方库版本统一推荐方法。本发明专利技术方法包括,分析Java软件项目各个模块的第三方库依赖继承关系,获得软件项目各个模块所依赖的Java第三方库版本;检测软件项目中的Java第三方库版本不一致问题,识别同一个Java第三方库的不同版本在软件项目不同模块中被使用的问题;通过基于API调用图差异分析的Java第三方库版本统一代价分析,推荐Java第三方库的统一版本并量化统一到该Java第三方库版本的维护代价。本发明专利技术方法可以帮助开发人员及时统一第三方库版本,减少开发人员的第三方库版本统一工作量和软件项目中第三方库的长期维护代价。
Unified recommendation method of Java third party library version based on API analysis
【技术实现步骤摘要】
基于API分析的Java第三方库版本统一推荐方法
本专利技术属于软件工程
,具体涉及一种基于API分析的Java第三方库版本统一推荐方法。
技术介绍
随着软件项目多样性和复杂性的不断增长,模块化软件开发已经成为了一种鼓励复用、提高可维护性、以及支持高效协作开发的常用实践。因此,Java自动化构建工具(例如Maven)提供了许多机制来支持Java多模块软件项目的开发和构建管理。其中一种机制就是允许Java软件项目的各个模块单独声明第三方库依赖。在便于多模块软件开发的同时,这种机制给软件开发过程中的第三方库依赖管理带来了极大的挑战。其中一个问题是,Java软件项目的不同模块声明了对同一个第三方库的依赖,但是使用了该第三方库的不同版本。一方面,这种第三方库版本不一致问题极大地增加了开发人员维护第三方库的代价,甚至会引起第三方库冲突并导致运行时错误。另一方面,Java自动化构建工具提供了灵活的机制来声明第三方库依赖,例如允许一个模块声明自己的第三方库依赖、允许一个模块继承另一个模块的第三方库依赖、允许通过硬编码来声明第三方库版本号、允许通过变量引用来声明第三方库版本号等。这些灵活的第三方库依赖声明机制使得第三方库版本不一致问题的检测变得困难。
技术实现思路
本专利技术的目的在于提供一种基于API分析的Java第三方库版本统一推荐方法,以帮助开发人员及时检测到Java软件项目中的第三方库版本不一致问题,同时推荐并量化统一到第三方库一致版本的维护代价,从而帮助开发人员及时统一第三方库版本并减少维护工作量。本专利技术提供的基于API分析的Java第三方库版本统一推荐方法,具体步骤如下:(1)第三方库依赖继承分析Java软件项目的各个模块通过自动化构建工具(例如Maven)中的依赖配置文件(例如pom.xml)声明第三方库依赖,而一个模块的依赖配置文件可以继承另一个模块的依赖配置文件;这一步通过分析Java软件项目各个模块的依赖配置文件的依赖继承关系,确定软件项目各个模块所依赖的Java第三方库版本;具体包括以下步骤:1)递归遍历软件项目的代码库目录,获得软件项目各个模块的依赖配置文件;2)解析每一个依赖配置文件的继承声明部分,获得各个依赖配置文件之间的继承关系,并建立依赖配置文件继承关系图;3)从软件项目的根依赖配置文件进行依赖配置文件继承关系图的广度优先遍历,确定各个模块所依赖的第三方库版本。(2)第三方库版本不一致检测软件项目的不同模块可能使用了同一第三方库的不同版本;这一步通过分析各个模块的第三方库版本检测软件项目中的第三方库版本不一致问题,即遍历所有模块所依赖的第三方库版本,识别依赖同一第三方库的所有模块以及它们所依赖的第三方库版本,并分析这些第三方库版本是否是同一个版本,如果不是,那么检测到了一个第三方库版本不一致问题以及所影响的模块。(3)第三方库版本统一代价分析第三方库不同版本之间往往包含不兼容的第三方库API,影响到第三方库的统一代价;这一步通过API调用图的差异分析推荐第三方库的统一版本并量化统一到该第三方库版本的维护代价;具体包括以下步骤:1)针对每一个第三方库版本不一致问题,在第三方库版本知识库中找到软件项目目前所依赖的第三方库版本二进制包、以及所有第三方库新版本的二进制包,作为第三方库版本统一的候选第三方库一致版本;2)针对每一个候选第三方库一致版本,通过静态分析软件项目目前所依赖的第三方库版本二进制包、以及该候选版本的二进制包,分别建立软件项目所调用第三方库API的调用图,即该版本不一致问题所影响的模块所调用的第三方库API在目前所依赖的第三方库版本以及候选第三方库一致版本中的调用图;3)通过调用图的差异对比分析确定各个模块所调用的第三方库API在候选第三方库一致版本中被删除和修改的API个数和调用次数,作为统一维护代价的度量,即如果各个模块所调用的第三方库API在候选第三方库一致版本中不存在,那么该第三方库API被删除了;如果各个模块所调用的第三方库API的调用图不相同、或者调用图相同但是调用图上的第三方库API方法体不相同,那么该第三方库API被修改了。本专利技术的基本过程示意图如图1所示。本专利技术能够帮助开发人员识别软件项目不同模块调用的、在第三方库统一版本中没有发生变化的第三方库API(即开发人员不需要在版本统一时考虑这些API的兼容性问题)以及被删除和修改的第三方库API(即开发人员在版本统一时需要考虑这些API潜在的兼容性问题)。本专利技术方法通过细粒度的、基于第三方库API的版本统一维护代价驱使并帮助开发人员及时统一第三方库版本,减少开发人员的第三方库版本统一维护代价以及第三方库的长期维护代价。附图说明图1为本专利技术的基本过程示意图。具体实施方式以下针对Java、Maven软件项目说明本专利技术的具体实施方式,其主要过程为:(1)第三方库依赖继承分析。通过遍历Java、Maven软件项目的代码库目录找到各个模块的依赖配置文件pom.xml,并通过解析各个pom.xml的parent和dependencyManagement部分获得依赖配置文件之间的继承关系并建立依赖配置文件继承关系图;通过广度优先遍历算法遍历该继承关系图,确定各个模块所依赖的第三方库版本;(2)第三方库版本不一致检测。遍历所有模块所依赖的第三方库版本,识别依赖同一第三方库的所有模块以及它们所依赖的第三方库版本,并分析这些第三方库版本是否是同一个版本,如果不是,那么检测到了一个第三方库版本不一致问题以及所影响的模块;(3)第三方库版本统一代价分析。通过静态分析工具Soot获得版本不一致问题所影响的模块所调用的第三方库API在目前所依赖的第三方库版本以及候选第三方库一致版本中的调用图;通过调用图的差异对比分析确定各个模块所调用的第三方库API在候选第三方库一致版本中被删除和修改的API个数和调用次数。通过该过程所生成的第三方库版本统一推荐方案列举了各个候选统一版本的统一维护代价信息,帮助开发人员选择一个合适的第三方库版本进行版本统一。本文档来自技高网...
【技术保护点】
1.基于API分析的Java第三方库版本统一推荐方法,其特征在于,具体步骤如下:/n(1)第三方库依赖继承分析/nJava软件项目的各个模块通过自动化构建工具中的依赖配置文件声明第三方库依赖,而一个模块的依赖配置文件可以继承另一个模块的依赖配置文件;通过分析Java软件项目各个模块的依赖配置文件的依赖继承关系,确定软件项目各个模块所依赖的Java第三方库版本;/n(2)第三方库版本不一致检测/n软件项目的不同模块可能使用同一第三方库的不同版本;通过分析各个模块的第三方库版本检测软件项目中的第三方库版本不一致问题,即遍历所有模块所依赖的第三方库版本,识别依赖同一第三方库的所有模块以及它们所依赖的第三方库版本,并分析这些第三方库版本是否是同一个版本,如果不是,那么检测到了一个第三方库版本不一致问题以及所影响的模块;/n(3)第三方库版本统一代价分析/n第三方库不同版本之间往往包含不兼容的第三方库API,影响到第三方库的统一代价;通过API调用图的差异分析推荐第三方库的统一版本并量化统一到该第三方库版本的维护代价。/n
【技术特征摘要】
1.基于API分析的Java第三方库版本统一推荐方法,其特征在于,具体步骤如下:
(1)第三方库依赖继承分析
Java软件项目的各个模块通过自动化构建工具中的依赖配置文件声明第三方库依赖,而一个模块的依赖配置文件可以继承另一个模块的依赖配置文件;通过分析Java软件项目各个模块的依赖配置文件的依赖继承关系,确定软件项目各个模块所依赖的Java第三方库版本;
(2)第三方库版本不一致检测
软件项目的不同模块可能使用同一第三方库的不同版本;通过分析各个模块的第三方库版本检测软件项目中的第三方库版本不一致问题,即遍历所有模块所依赖的第三方库版本,识别依赖同一第三方库的所有模块以及它们所依赖的第三方库版本,并分析这些第三方库版本是否是同一个版本,如果不是,那么检测到了一个第三方库版本不一致问题以及所影响的模块;
(3)第三方库版本统一代价分析
第三方库不同版本之间往往包含不兼容的第三方库API,影响到第三方库的统一代价;通过API调用图的差异分析推荐第三方库的统一版本并量化统一到该第三方库版本的维护代价。
2.根据权利要求1所述的基于API分析的Java第三方库版本统一推荐方法,其特征在于,步骤(1)中所述的第三方库依赖继承分析,具体包括以下子步骤:
1)递归遍历软件项目的代码库目录,获得软件项目各个模块的依赖配置文件;
2)解析每一个依赖配置文件的...
【专利技术属性】
技术研发人员:陈碧欢,彭鑫,赵文耘,
申请(专利权)人:复旦大学,
类型:发明
国别省市:上海;31
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。