CN111190641A - 基于API分析的Java第三方库版本统一推荐方法 - Google Patents
基于API分析的Java第三方库版本统一推荐方法 Download PDFInfo
- Publication number
- CN111190641A CN111190641A CN202010077124.5A CN202010077124A CN111190641A CN 111190641 A CN111190641 A CN 111190641A CN 202010077124 A CN202010077124 A CN 202010077124A CN 111190641 A CN111190641 A CN 111190641A
- Authority
- CN
- China
- Prior art keywords
- party library
- version
- party
- versions
- java
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/315—Object-oriented languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
- G06F8/433—Dependency analysis; Data or control flow analysis
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
Abstract
本发明属于软件工程技术领域,具体为基于API分析的Java第三方库版本统一推荐方法。本发明方法包括,分析Java软件项目各个模块的第三方库依赖继承关系,获得软件项目各个模块所依赖的Java第三方库版本;检测软件项目中的Java第三方库版本不一致问题,识别同一个Java第三方库的不同版本在软件项目不同模块中被使用的问题;通过基于API调用图差异分析的Java第三方库版本统一代价分析,推荐Java第三方库的统一版本并量化统一到该Java第三方库版本的维护代价。本发明方法可以帮助开发人员及时统一第三方库版本,减少开发人员的第三方库版本统一工作量和软件项目中第三方库的长期维护代价。
Description
技术领域
本发明属于软件工程技术领域,具体涉及一种基于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个数和调用次数。
通过该过程所生成的第三方库版本统一推荐方案列举了各个候选统一版本的统一维护代价信息,帮助开发人员选择一个合适的第三方库版本进行版本统一。
Claims (3)
1.基于API分析的Java第三方库版本统一推荐方法,其特征在于,具体步骤如下:
(1)第三方库依赖继承分析
Java软件项目的各个模块通过自动化构建工具中的依赖配置文件声明第三方库依赖,而一个模块的依赖配置文件可以继承另一个模块的依赖配置文件;通过分析Java软件项目各个模块的依赖配置文件的依赖继承关系,确定软件项目各个模块所依赖的Java第三方库版本;
(2)第三方库版本不一致检测
软件项目的不同模块可能使用同一第三方库的不同版本;通过分析各个模块的第三方库版本检测软件项目中的第三方库版本不一致问题,即遍历所有模块所依赖的第三方库版本,识别依赖同一第三方库的所有模块以及它们所依赖的第三方库版本,并分析这些第三方库版本是否是同一个版本,如果不是,那么检测到了一个第三方库版本不一致问题以及所影响的模块;
(3)第三方库版本统一代价分析
第三方库不同版本之间往往包含不兼容的第三方库API,影响到第三方库的统一代价;通过API调用图的差异分析推荐第三方库的统一版本并量化统一到该第三方库版本的维护代价。
2.根据权利要求1所述的基于API分析的Java第三方库版本统一推荐方法,其特征在于,步骤(1)中所述的第三方库依赖继承分析,具体包括以下子步骤:
1)递归遍历软件项目的代码库目录,获得软件项目各个模块的依赖配置文件;
2)解析每一个依赖配置文件的继承声明部分,获得各个依赖配置文件之间的继承关系,并建立依赖配置文件继承关系图;
3)从软件项目的根依赖配置文件进行依赖配置文件继承关系图的广度优先遍历,确定各个模块所依赖的第三方库版本。
3.根据权利要求1所述的基于API分析的Java第三方库版本统一推荐方法,其特征在于,步骤(3)中所述的第三方库版本统一代价分析,具体包括以下子步骤:
1)针对每一个第三方库版本不一致问题,在第三方库版本知识库中找到软件项目目前所依赖的第三方库版本二进制包、以及所有第三方库新版本的二进制包,作为第三方库版本统一的候选第三方库一致版本;
2)针对每一个候选第三方库一致版本,通过静态分析软件项目目前所依赖的第三方库版本二进制包、以及该候选版本的二进制包,分别建立软件项目所调用第三方库API的调用图,即该版本不一致问题所影响的模块所调用的第三方库API在目前所依赖的第三方库版本以及候选第三方库一致版本中的调用图;
3)通过调用图的差异对比分析确定各个模块所调用的第三方库API在候选第三方库一致版本中被删除和修改的API个数和调用次数,作为统一维护代价的度量,即如果各个模块所调用的第三方库API在候选第三方库一致版本中不存在,那么该第三方库API被删除了;如果各个模块所调用的第三方库API的调用图不相同,或者调用图相同但是调用图上的第三方库API方法体不相同,那么该第三方库API被修改了。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010077124.5A CN111190641B (zh) | 2020-01-23 | 2020-01-23 | 基于API分析的Java第三方库版本统一推荐方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010077124.5A CN111190641B (zh) | 2020-01-23 | 2020-01-23 | 基于API分析的Java第三方库版本统一推荐方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111190641A true CN111190641A (zh) | 2020-05-22 |
CN111190641B CN111190641B (zh) | 2021-08-17 |
Family
ID=70710347
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010077124.5A Active CN111190641B (zh) | 2020-01-23 | 2020-01-23 | 基于API分析的Java第三方库版本统一推荐方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111190641B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112182199A (zh) * | 2020-09-10 | 2021-01-05 | 中信银行股份有限公司 | 一种依赖包推荐方法、装置、电子设备和可读存储介质 |
CN113010207A (zh) * | 2021-03-18 | 2021-06-22 | 挂号网(杭州)科技有限公司 | 资源配置方法、装置、电子设备及存储介质 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1845076A (zh) * | 2006-05-11 | 2006-10-11 | 复旦大学 | 面向xml的标记回溯的一致性维护方法 |
CN106897153A (zh) * | 2015-12-18 | 2017-06-27 | 阿里巴巴集团控股有限公司 | 调用应用编程接口的方法和系统 |
CN107707625A (zh) * | 2017-09-05 | 2018-02-16 | 江苏电力信息技术有限公司 | 基于Maven的前台资源打包并进行版本管理与使用的方法 |
US20180060065A1 (en) * | 2016-09-01 | 2018-03-01 | Dropbox, Inc. | Advanced packaging techniques for improving work flows |
WO2018058071A1 (en) * | 2016-09-25 | 2018-03-29 | Salesforce.Com, Inc. | Staging and deployment to service clouds |
CN109240837A (zh) * | 2018-09-11 | 2019-01-18 | 四川长虹电器股份有限公司 | 一种通用云存储服务api的构建方法 |
CN110297657A (zh) * | 2019-06-11 | 2019-10-01 | 东南大学 | 一种基于层次上下文的api推荐方法 |
CN110378118A (zh) * | 2019-06-26 | 2019-10-25 | 南京理工大学 | 高效准确的安卓应用第三方库检测方法 |
-
2020
- 2020-01-23 CN CN202010077124.5A patent/CN111190641B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1845076A (zh) * | 2006-05-11 | 2006-10-11 | 复旦大学 | 面向xml的标记回溯的一致性维护方法 |
CN106897153A (zh) * | 2015-12-18 | 2017-06-27 | 阿里巴巴集团控股有限公司 | 调用应用编程接口的方法和系统 |
US20180060065A1 (en) * | 2016-09-01 | 2018-03-01 | Dropbox, Inc. | Advanced packaging techniques for improving work flows |
WO2018058071A1 (en) * | 2016-09-25 | 2018-03-29 | Salesforce.Com, Inc. | Staging and deployment to service clouds |
CN107707625A (zh) * | 2017-09-05 | 2018-02-16 | 江苏电力信息技术有限公司 | 基于Maven的前台资源打包并进行版本管理与使用的方法 |
CN109240837A (zh) * | 2018-09-11 | 2019-01-18 | 四川长虹电器股份有限公司 | 一种通用云存储服务api的构建方法 |
CN110297657A (zh) * | 2019-06-11 | 2019-10-01 | 东南大学 | 一种基于层次上下文的api推荐方法 |
CN110378118A (zh) * | 2019-06-26 | 2019-10-25 | 南京理工大学 | 高效准确的安卓应用第三方库检测方法 |
Non-Patent Citations (4)
Title |
---|
ERIK DERR等: "Keep Me Updated: An Empirical Study of Third-Party Library Updatability on Android", 《CCS》 * |
TOUCH929: "pod删除已导入的第三方库和移除项目中的cocoapods", 《HTTPS://BLOG.CSDN.NET/TOUCH929/ARTICLE/DETAILS/78654656 》 * |
VOJTECH RUZICKA"S PROGRAMMING BLOG: "Analyzing dependencies in IntelliJ IDEA", 《HTTPS://WWW.VOJTECHRUZICKA.COM/IDEA-ANALYZING-DEPENDENCIES/》 * |
崔艳鹏等: "基于抽象API调用序列的Android恶意软件检测方法", 《计算机应用与软件》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112182199A (zh) * | 2020-09-10 | 2021-01-05 | 中信银行股份有限公司 | 一种依赖包推荐方法、装置、电子设备和可读存储介质 |
CN113010207A (zh) * | 2021-03-18 | 2021-06-22 | 挂号网(杭州)科技有限公司 | 资源配置方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN111190641B (zh) | 2021-08-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Petrović et al. | State of mutation testing at google | |
Xu et al. | Go with the flow: Profiling copies to find runtime bloat | |
Petrović et al. | Practical mutation testing at scale: A view from google | |
Prähofer et al. | Static code analysis of IEC 61131-3 programs: Comprehensive tool support and experiences from large-scale industrial application | |
Zhang et al. | Pensieve: Non-intrusive failure reproduction for distributed systems using the event chaining approach | |
US20050262482A1 (en) | System and method for efficiently analyzing and building interdependent resources in a software project | |
US8856752B2 (en) | Monitoring asset state to enable partial build | |
JP2009540464A (ja) | 反復的な静的および動的ソフトウェア分析 | |
CN111190641B (zh) | 基于API分析的Java第三方库版本统一推荐方法 | |
Kirbas et al. | The relationship between evolutionary coupling and defects in large industrial software | |
US20110126179A1 (en) | Method and System for Dynamic Patching Software Using Source Code | |
WO2009055914A1 (en) | Static analysis defect detection in the presence of virtual function calls | |
CN109271322B (zh) | 一种软件测试范围确定方法、软件测试方法和装置 | |
CN112181858B (zh) | Java软件项目依赖冲突语义一致性的自动化检测方法 | |
CN112965913A (zh) | 一种Java软件依赖冲突问题自动化修复的方法 | |
CN112860312A (zh) | 项目依赖关系变化的检测方法及装置 | |
CN111240719B (zh) | 缺陷驱动的第三方库版本升级推荐方法 | |
Sattler et al. | Seal: integrating program analysis and repository mining | |
GB2504122A (en) | Locating software units of a software module to facilitate software refactoring | |
Spasojević et al. | Mining the ecosystem to improve type inference for dynamically typed languages | |
Molitorisz | Pattern-based refactoring process of sequential source code | |
Liu et al. | Towards understanding bugs in python interpreters | |
Sun et al. | Automatically assessing and extending code coverage for NPM packages | |
CN115705250A (zh) | 监测堆栈使用量以优化程序 | |
Mukelabai et al. | Semi-automated test-case propagation in fork ecosystems |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |