CN111240719A - 缺陷驱动的第三方库版本升级推荐方法 - Google Patents
缺陷驱动的第三方库版本升级推荐方法 Download PDFInfo
- Publication number
- CN111240719A CN111240719A CN202010077123.0A CN202010077123A CN111240719A CN 111240719 A CN111240719 A CN 111240719A CN 202010077123 A CN202010077123 A CN 202010077123A CN 111240719 A CN111240719 A CN 111240719A
- Authority
- CN
- China
- Prior art keywords
- party library
- version
- party
- api
- software project
- 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/60—Software deployment
- G06F8/65—Updates
-
- 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
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
Abstract
本发明属于软件工程技术领域,具体为缺陷驱动的第三方库版本升级推荐方法。本发明方法包括:分析软件项目的第三方库依赖,获得软件项目所依赖的所有第三方库版本;通过基于程序调用图的第三方库风险分析,检测并量化旧第三方库版本中的缺陷对软件项目带来的风险,包括影响软件项目的第三方库缺陷个数、软件项目所调用的带缺陷第三方库API的个数和调用次数;通过基于API差异分析的第三方库升级代价分析,推荐并量化升级到新第三方库版本的更新代价,包括软件项目调用的、在新第三方库版本中被删除和修改的第三方库API个数和调用次数。本发明方法驱使并辅助开发人员及时升级第三方库,减少开发人员的升级工作量,并提高软件项目的质量。
Description
技术领域
本发明属于软件工程技术领域,具体涉及一种缺陷驱动的第三方库版本升级推荐方法。
背景技术
在软件开发过程中,第三方库扮演着重要角色。一方面,第三方库可以被开发人员复用来构建软件系统,使得开发人员可以更多地关注于软件系统的业务逻辑。因此,第三方库可以提高开发效率、缩短开发时间和交付时间。另一方面,第三方库往往经过了第三方库开发/测试人员以及其他使用第三方库的开发/测试人员的广泛使用和测试,使得第三方库的质量有一定保证。因此,第三方库可以提高软件系统的整体质量。由此可见,随着开源软件社区以及互联网软件资源的飞速发展,第三方库已经成为了软件项目中不可或缺的重要组成部分。
为了增加新功能或者修复缺陷(功能、性能、安全等缺陷),第三方库在不断地演化,而且不定期地发布新版本。这就给使用第三方库的软件系统的维护带来了严峻挑战。一方面,开发人员通常较少关注所使用的第三方库是否是最新版本、或者是否发布了新版本,导致软件系统使用了可能包含各类已知缺陷的第三方库旧版本,严重影响了软件系统的功能和质量。另一方面,即使开发人员知道了第三方库有新版本,他们往往难以确定新版本中修复的各类已知缺陷是否会真正影响到他们的软件系统,导致开发人员花费大量的时间去决定是否需要更新版本,从而使得第三方库不能及时升级。
发明内容
本发明的目的在于提供一种缺陷驱动的第三方库版本升级推荐方法,以帮助开发人员确定带缺陷的第三方库版本是否影响到软件项目并量化对软件项目带来的风险,同时推荐并量化升级到新第三方库版本的更新代价,从而帮助开发人员及时升级第三方库。
本发明提供的缺陷驱动的第三方库版本升级推荐方法,包括:分析软件项目的第三方库依赖,获得软件项目所依赖的所有第三方库版本;通过基于程序调用图的第三方库风险分析,检测并量化旧第三方库版本中的缺陷对软件项目带来的风险;通过基于API差异分析的第三方库升级代价分析,推荐并量化升级到新第三方库版本的更新代价。本发明所检测到的第三方库风险包括影响软件项目的第三方库缺陷个数、软件项目所调用的带缺陷第三方库API的个数和调用次数;本发明所推荐的第三方库升级代价包括软件项目调用的、在新第三方库版本中被删除和修改的第三方库API个数和调用次数。具体步骤如下。
(1)第三方库依赖分析
软件项目通常通过自动化构建工具(例如Maven和Gradle)来声明和管理软件项目所依赖的第三方库版本。这一步通过解析软件项目的依赖配置文件(例如pom.xml和build.gradle)来抽取软件项目所依赖的第三方库版本。
(2)第三方库风险分析
软件项目的代码调用了第三方库API,而有些第三方库API包含各类已知缺陷,影响到软件项目的功能和质量。这一步通过API调用分析识别软件项目所调用的第三方库API并分析这些第三方库API是否含有各类缺陷。具体包括以下步骤:
1)从第三方库版本知识库(保存了所有开源第三方库版本的二进制包)加载软件项目所依赖的第三方库版本二进制包,通过静态分析二进制包获得第三方库API列表;
2)通过软件项目源代码和第三方库版本二进制包建立软件项目源代码的抽象语法树并做类型绑定,遍历抽象语法树中的方法调用并确定所调用方法是否是第三方库API(即判断所调用方法是否在第三方库API列表中);
3)通过静态分析二进制包建立所调用第三方库API的调用图,通过第三方库缺陷知识库(保存了第三方库版本中的缺陷、以及受缺陷影响的第三方库API)分析所调用第三方库API是否受缺陷影响(即判断调用图上是否包含受缺陷影响的第三方库API);
4)总结以上分析结果获得第三方库的风险度量,包括影响软件项目的第三方库缺陷个数、软件项目所调用的带缺陷第三方库API的个数和调用次数。
(3)第三方库升级代价分析
第三方库不同版本之间往往包含不兼容的第三方库API,影响到第三方库的升级代价。这一步通过API调用和差异分析推荐不含有缺陷的第三方库升级版本并分析升级版本中被删除和修改的第三方库API。具体包括以下步骤:
1)在第三方库版本知识库中找到所有第三方库新版本的二进制包,并通过静态分析二进制包建立所调用第三方库API的调用图,同时通过第三方库缺陷知识库分析所调用第三方库API是否不受缺陷影响,如果不受影响,那么就可以作为第三方库升级版本;
2)通过差异对比分析确定软件项目所调用的第三方库API在第三方库升级版本中被删除和修改的API个数和调用次数,作为升级代价的度量。
本发明的基本过程示意图如图1所示。本发明能够确保推荐的第三方库升级版本中没有影响软件项目的缺陷,并且帮助开发人员识别软件项目调用的、在第三方库升级版本中没有发生变化的第三方库API(即开发人员不需要在升级时考虑这些API的兼容性问题)以及被删除和修改的第三方库API(即开发人员在升级时需要考虑这些API潜在的兼容性问题)。本发明通过风险度量和升级代价度量驱使并辅助开发人员及时升级第三方库,减少开发人员的升级工作量,并提高软件项目的质量。
附图说明
图1为本发明的基本过程示意图。
具体实施方式
以下针对Java、Maven软件项目说明本发明的具体实施方式,其主要使用过程为:
(1)第三方库依赖分析。通过解析Java、Maven软件项目的依赖配置文件pom..xml来获得软件项目所依赖的第三方库版本;
(2)第三方库风险分析。通过静态分析工具Soot获得第三方库API列表;通过JavaParser遍历软件项目源代码的抽象语法树并获得软件项目所调用的第三方库API;通过静态分析工具Soot获得所调用第三方库API的调用图并判断调用图上是否包含受缺陷影响的第三方库API;分析总结影响软件项目的第三方库缺陷个数、软件项目所调用的带缺陷第三方库API的个数和调用次数;
(3)第三方库升级代价分析。通过静态分析工具Soot获得第三方库新版本中软件项目所调用的第三方库API的调用图,并分析所调用第三方库API是否不受缺陷影响,从而确定第三方库升级版本;通过基于哈希值的差异对比分析确定软件项目所调用的第三方库API在第三方库升级版本中被删除和修改的API个数和调用次数。
通过该过程所生成的第三方库升级版本推荐方案列举了各个候选升级版本的升级代价信息,辅助开发人员选择一个合适的版本进行版本升级。
Claims (3)
1. 一种缺陷驱动的第三方库版本升级推荐方法,其特征在于,具体步骤如下:
(1)第三方库依赖分析
软件项目通常通过自动化构建工具来声明和管理软件项目所依赖的第三方库版本;通过解析软件项目的依赖配置文件来抽取软件项目所依赖的第三方库版本;
(2)第三方库风险分析
软件项目的代码调用第三方库API,有些第三方库API包含各类已知缺陷,影响到软件项目的功能和质量;通过API调用分析识别软件项目所调用的第三方库API并分析这些第三方库API是否含有各类缺陷,从而度量第三方库风险;
(3)第三方库升级代价分析
第三方库不同版本之间往往包含不兼容的第三方库API,影响到第三方库的升级代价;通过API调用和差异分析推荐不含有缺陷的第三方库升级版本,并分析升级版本中被删除和修改的第三方库API,从而度量第三方库升级代价。
2.根据权利要求1所述的缺陷驱动的第三方库版本升级推荐方法,其特征在于,步骤(2)中所述的第三方库风险分析,具体包括以下子步骤:
1)从第三方库版本知识库加载软件项目所依赖的第三方库版本二进制包,通过静态分析二进制包获得第三方库API列表;
2)通过软件项目源代码和第三方库版本二进制包建立软件项目源代码的抽象语法树并做类型绑定,遍历抽象语法树中的方法调用并确定所调用方法是否是第三方库API,即判断所调用方法是否在第三方库API列表中;
3)通过静态分析二进制包建立所调用第三方库API的调用图,第三方库缺陷知识库保存了第三方库版本中的缺陷、以及受缺陷影响的第三方库API,通过第三方库缺陷知识库分析所调用第三方库API是否受缺陷影响,即判断调用图上是否包含受缺陷影响的第三方库API;
4)总结以上分析结果获得第三方库的风险度量,包括影响软件项目的第三方库缺陷个数、软件项目所调用的带缺陷第三方库API的个数和调用次数。
3.根据权利要求1所述的缺陷驱动的第三方库版本升级推荐方法,其特征在于,步骤(3)中所述的第三方库升级代价分析,具体包括以下子步骤:
1)在第三方库版本知识库中找到所有第三方库新版本的二进制包,并通过静态分析二进制包建立所调用第三方库API的调用图,同时通过第三方库缺陷知识库分析所调用第三方库API是否不受缺陷影响,如果不受影响,则作为第三方库升级版本;
2)通过差异对比分析确定软件项目所调用的第三方库API在第三方库升级版本中被删除和修改的API个数和调用次数,作为升级代价的度量。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010077123.0A CN111240719B (zh) | 2020-01-23 | 2020-01-23 | 缺陷驱动的第三方库版本升级推荐方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010077123.0A CN111240719B (zh) | 2020-01-23 | 2020-01-23 | 缺陷驱动的第三方库版本升级推荐方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111240719A true CN111240719A (zh) | 2020-06-05 |
CN111240719B CN111240719B (zh) | 2021-08-20 |
Family
ID=70874915
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010077123.0A Active CN111240719B (zh) | 2020-01-23 | 2020-01-23 | 缺陷驱动的第三方库版本升级推荐方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111240719B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112434305A (zh) * | 2020-12-07 | 2021-03-02 | 北京中科微澜科技有限公司 | 基于补丁的漏洞检测方法、装置、存储介质和电子设备 |
US11550553B2 (en) | 2020-11-23 | 2023-01-10 | Red Hat, Inc. | Usage-based software library decomposition |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101482847A (zh) * | 2009-01-19 | 2009-07-15 | 北京邮电大学 | 一种基于安全漏洞缺陷模式的检测方法 |
CN106295353A (zh) * | 2016-08-08 | 2017-01-04 | 腾讯科技(深圳)有限公司 | 一种引擎漏洞检测的方法以及检测装置 |
CN106708557A (zh) * | 2016-07-29 | 2017-05-24 | 腾讯科技(深圳)有限公司 | 一种针对终端应用的更新处理方法及装置 |
CN107577491A (zh) * | 2017-08-09 | 2018-01-12 | 时趣互动(北京)科技有限公司 | 一种基于Weex的移动应用内版本更新的方法、系统 |
US20190205542A1 (en) * | 2017-12-28 | 2019-07-04 | Fmr Llc | Automated secure software development management, risk assessment, and risk remediation |
CN110109835A (zh) * | 2019-05-05 | 2019-08-09 | 重庆大学 | 一种基于深度神经网络的软件缺陷定位方法 |
CN110622141A (zh) * | 2017-12-15 | 2019-12-27 | 谷歌有限责任公司 | 开源软件测试 |
CN110704082A (zh) * | 2019-09-25 | 2020-01-17 | 许昌许继软件技术有限公司 | 一种监控平台的持续化集成方法及系统 |
-
2020
- 2020-01-23 CN CN202010077123.0A patent/CN111240719B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101482847A (zh) * | 2009-01-19 | 2009-07-15 | 北京邮电大学 | 一种基于安全漏洞缺陷模式的检测方法 |
CN106708557A (zh) * | 2016-07-29 | 2017-05-24 | 腾讯科技(深圳)有限公司 | 一种针对终端应用的更新处理方法及装置 |
CN106295353A (zh) * | 2016-08-08 | 2017-01-04 | 腾讯科技(深圳)有限公司 | 一种引擎漏洞检测的方法以及检测装置 |
CN107577491A (zh) * | 2017-08-09 | 2018-01-12 | 时趣互动(北京)科技有限公司 | 一种基于Weex的移动应用内版本更新的方法、系统 |
CN110622141A (zh) * | 2017-12-15 | 2019-12-27 | 谷歌有限责任公司 | 开源软件测试 |
US20190205542A1 (en) * | 2017-12-28 | 2019-07-04 | Fmr Llc | Automated secure software development management, risk assessment, and risk remediation |
CN110109835A (zh) * | 2019-05-05 | 2019-08-09 | 重庆大学 | 一种基于深度神经网络的软件缺陷定位方法 |
CN110704082A (zh) * | 2019-09-25 | 2020-01-17 | 许昌许继软件技术有限公司 | 一种监控平台的持续化集成方法及系统 |
Non-Patent Citations (4)
Title |
---|
RAULA GAIKOVINA KULA DANIEL M: "Do Developers Update Their Library Dependencies?", 《HTTP://SEARCH.MAVEN.ORG/\#STATS》 * |
SEBASTIANO PANICHELLA: "How the Apache community upgrades dependencies: an evolutionary study", 《EMPIRICAL SOFTWARE ENGINEERING》 * |
小安: "开源软件源代码安全缺陷分析报告 —— 框架类软件专题", 《HTTPS://ZHUANLAN.ZHIHU.COM/P/38619820》 * |
朱志东等: "基于Jenkins的软件缺陷持续测试平台设计与实现", 《信息化研究》 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11550553B2 (en) | 2020-11-23 | 2023-01-10 | Red Hat, Inc. | Usage-based software library decomposition |
CN112434305A (zh) * | 2020-12-07 | 2021-03-02 | 北京中科微澜科技有限公司 | 基于补丁的漏洞检测方法、装置、存储介质和电子设备 |
CN112434305B (zh) * | 2020-12-07 | 2024-03-08 | 北京中科微澜科技有限公司 | 基于补丁的漏洞检测方法、装置、存储介质和电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN111240719B (zh) | 2021-08-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Ponta et al. | Beyond metadata: Code-centric and usage-based analysis of known vulnerabilities in open-source software | |
US8954930B2 (en) | System and method for reducing test effort by object risk analysis | |
US20210240602A1 (en) | Unified test automation system | |
US20130246837A1 (en) | System and method for mitigating repeated crashes of an application resulting from supplemental code | |
US20090187823A1 (en) | Automated solution that detects configuration problems in an eclipse-based software application | |
US7069474B2 (en) | System and method for assessing compatibility risk | |
US20090055804A1 (en) | Method and device for automatically evaluating the quality of a software source code | |
CN111240719B (zh) | 缺陷驱动的第三方库版本升级推荐方法 | |
CN112965913B (zh) | 一种Java软件依赖冲突问题自动化修复的方法 | |
CN112434305B (zh) | 基于补丁的漏洞检测方法、装置、存储介质和电子设备 | |
CN112181858B (zh) | Java软件项目依赖冲突语义一致性的自动化检测方法 | |
CN109271322B (zh) | 一种软件测试范围确定方法、软件测试方法和装置 | |
Mujahid et al. | Using others' tests to identify breaking updates | |
CN112799937B (zh) | 基于GitHub自动化检测Maven项目中依赖冲突问题的方法 | |
CN116627848B (zh) | 应用程序的自动化测试方法和系统 | |
Venturini et al. | I depended on you and you broke me: An empirical study of manifesting breaking changes in client packages | |
CN111190641B (zh) | 基于API分析的Java第三方库版本统一推荐方法 | |
CN112612692A (zh) | 一种linux系统性能调优的方法 | |
CN113127367B (zh) | Android动态权限申请的缺陷检测方法 | |
Mukelabai et al. | Semi-automated test-case propagation in fork ecosystems | |
Jayasuriya | Towards automated updates of software dependencies | |
CN113641573A (zh) | 基于修订日志的程序分析软件自动化测试方法及系统 | |
CN112835788A (zh) | 一种评估Linux应用程序与操作系统兼容性的方法 | |
Atzenhofer et al. | Automatically adding missing libraries to java projects to foster better results from static analysis | |
CN115934157B (zh) | 软件依赖范围自动推断方法、装置、计算机设备和存储器 |
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 |