CN114327473B - 一种软件包依赖关系检测方法 - Google Patents
一种软件包依赖关系检测方法 Download PDFInfo
- Publication number
- CN114327473B CN114327473B CN202111533240.4A CN202111533240A CN114327473B CN 114327473 B CN114327473 B CN 114327473B CN 202111533240 A CN202111533240 A CN 202111533240A CN 114327473 B CN114327473 B CN 114327473B
- Authority
- CN
- China
- Prior art keywords
- dependency
- software package
- software
- directed graph
- nodes
- 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.)
- Active
Links
Images
Abstract
本发明涉及一种软件包依赖关系检测方法,包括步骤:针对指定操作系统,基于软件依赖关系生成全量依赖关系有向图;接收用户输入的一组软件包;采用基于有向图的裁剪方法对软件包组中的各软件包进行依赖检测,获取依赖路径;根据获取的依赖路径的倒序依次安装各软件包。相比于现有技术,本发明方法在检测依赖关系的基础上对依赖冲突进行处理,充分考虑多版本依赖的情形并基于有向图处理多版本依赖,且支持一组软件包的同时分析,避免引进新的依赖冲突。
Description
技术领域
本发明属于计算机技术领域,具体涉及一种软件包依赖关系检测方法。
背景技术
在软件安装过程中,常常会面临软件依赖的问题。通常情况下,安装时检测某版本软件依赖,会单独去检索这个版本的软件依赖包,如果还有依赖,就继续往下检索。当检索到没有依赖后,倒着把软件包进行安装,即可顺利完成所有软件和依赖的安装。这种做法存在一个无法解决的问题,即当往下检索时,可能会出现后面的软件包依赖前面的软件包的情况,从而形成死锁。
软件包依赖分析的现有方法包括基于集合分析的方法、基于分层图分析的方法等,其中效果较好的分层图分析方法的大致思路为:针对指定操作系统构建分层图,针对用户给定的某个软件,在图中查找依赖关系,最后将依赖关系进行导出。
然而,分层图分析方法在软件依赖包问题的处理上仍存在较多缺陷。其一,该方法仅做了依赖检查,并没有任何处理依赖问题的措施,即该方法默认依赖是一定存在的且不会产生死锁。因此一旦出现依赖问题,该方法不提供任何处理措施或处理建议。其二,分层图分析方法没有充分考虑多依赖的情况。在实际应用中,经常存在指定软件包所依赖的某个特定软件包有多个版本进行选择,而现有方法只会选择满足依赖的最新版本,这种策略忽略了高版本可能会造成依赖死锁而低版本恰好能够规避依赖死锁的情况。其三,分层图分析方法的输入只是一个软件包,而在安装实际的应用软件时,需要安装的通常是一组软件包,这组软件包里的每一个软件包都需要检测依赖。由于很多软件包的依赖关系在底层会有重合之处,单独检测无法从根本上解决依赖冲突的问题,反而还有可能引进新的依赖冲突。
发明内容
本发明针对现有技术中的不足,提供一种软件包依赖关系检测方法以解决软件包依赖死锁的问题,采用的技术方案如下:
一种软件包依赖关系检测方法,包括以下步骤:
步骤1:针对指定操作系统,基于软件依赖关系生成全量依赖关系有向图;
步骤2:接收用户输入的一组软件包;
步骤3:根据全量依赖关系有向图,采用基于有向图的裁剪方法对软件包组中的各软件包进行依赖检测,获取依赖路径;
步骤4:完成依赖检测,根据获取的依赖路径的倒序依次安装各软件包。
进一步地,所述全量依赖关系有向图具有以下属性:
全量依赖关系有向图中,每个软件包均被映射为一组节点且该组节点中的每个节点代表该软件包的一个版本,全量依赖关系有向图涵盖了指定操作系统下所有可用的软件包及其所有可用的版本;
每个节点都有一个标记位,表明该节点是否可用;
软件包与软件包之间的依赖关系通过对应节点间的指向关系表示,由代表某软件包的节点指向该软件包所依赖的软件包的映射节点;
每条指向都包含一个权重,同一节点指向其所依赖的软件包的不同版本节点中,指向的软件包版本越新其对应的权重越大;
连续的指向构成依赖路径,依赖路径的权重等于该路径中所有指向权重的和。
进一步地,步骤1中,所述全量依赖关系有向图的生成步骤为:
S1.1、获取指定操作系统下所有可用的软件包,以及软件包之间的依赖关系;
S1.2、将所有可用的软件包映射成节点;
S1.3、根据软件包之间的依赖关系,在节点间创建指向并赋予其相应的权重。
进一步地,所述步骤3具体包括以下步骤:
S3.1、从软件包组中随机选择一个软件包,记为package1,对package1进行依赖检测:
S3.1.1、将package1映射为节点添加到全量依赖关系有向图中,并标明与其他节点的依赖指向及指向权重;
若package1依赖的软件包未包含在全量依赖关系有向图中,则将该未包含的软件包映射为节点添加到全量依赖关系有向图中,并标明与其他节点的依赖指向及指向权重;
同理,若该未包含的软件包依赖的软件包也未包含在全量依赖关系有向图中,也将其映射为节点添加到全量依赖关系有向图中并标明与其他节点的依赖指向及指向权重;
逐层检测依赖直至package1的所有直接和间接依赖的软件包均包含在全量依赖关系有向图中;
S3.1.2、在全量依赖关系有向图中,从package1的所有依赖路径中选择路径权重最大的依赖路径记为path1,将path1中包含的节点标记为已使用并将包含节点的其他版本的节点标记为不可用。
S3.2、从软件包组中随机选择一个未被检测的软件包,记为package2,对package2进行依赖检测:
S3.2.1、将package2映射为节点添加到全量依赖关系有向图中,并标明与其他节点的依赖指向及指向权重;与S3.1.1同理,逐层检测依赖直至package2的所有直接和间接依赖的软件包均包含在全量依赖关系有向图中;
S3.2.2、在全量依赖关系有向图中,从package2的所有依赖路径中选择一条路径权重最大且满足不冲突条件的依赖路径记为path2,将path2中包含的节点标记为已使用并将包含节点的其他版本的节点标记为不可用。
若path2不存在,则进行回滚,对与package2相冲突的软件包重新进行依赖检测,选择其剩余依赖路径中路径权重最大的依赖路径后继续对package2进行依赖检测,直至不再产生依赖冲突。
S3.3、继续从软件包组中随机选择一个未被检测的软件包,与S3.2同理,对其进行依赖检测,直至软件包组中所有软件包均被检测完毕,输出选择的所有软件包的依赖路径。
进一步地,S3.2.2中所述不冲突条件为:path2不包含不可用节点,且包含的节点不能是已使用节点的不同版本。
进一步地,步骤4中的倒序使用栈的数据结构实现。
本发明的有益效果是:本发明方法在检测依赖关系的基础上对依赖冲突进行处理;充分考虑多版本依赖的情形,并基于有向图处理多版本依赖;且支持一组软件包的同时分析,避免引进新的依赖冲突。
附图说明
图1为本发明方法的流程示意图;
图2为本发明实施例中全量依赖关系有向图的示意图;
图3为本发明实施例中软件包A的第一次依赖检测示意图;
图4为本发明实施例中软件包A的第二次依赖检测示意图;
图5为本发明实施例中软件包组的依赖检测结果图。
具体实施方式
现在结合附图对本发明作进一步详细的说明。
总体而言,现有的软件依赖处理方法存在以下缺点:(1)只检测不处理;(2)无法处理多版本依赖;(3)无法同时处理一组软件包。为此,本发明提出一种软件包依赖关系检测方法,如图1所示,其主要包括以下步骤:
步骤1:针对某版本的指定操作系统,基于软件依赖关系生成全量依赖关系有向图。
在全量依赖关系有向图中,每个软件包均被映射为一组节点且该组节点中的每个节点代表该软件包的一个版本,全量依赖关系有向图涵盖了指定操作系统下所有可用的软件包及其所有可用的版本。每个节点都有一个标记位,表明该节点是否可用。软件包与软件包之间的依赖关系通过对应节点间的指向关系表示,由代表某软件包的节点指向该软件包所依赖的软件包的映射节点。每条指向都包含一个权重,同一节点指向其所依赖的软件包的不同版本节点中,指向的软件包版本越新其对应的权重越大。连续的指向构成依赖路径,依赖路径的权重等于该路径中所有指向权重的和。全量依赖关系有向图的生成步骤为:
S1.1、获取指定操作系统下所有可用的软件包,以及软件包之间的依赖关系;
S1.2、将所有可用的软件包映射成节点;
S1.3、根据软件包之间的依赖关系,在节点间创建指向并赋予其相应的权重。
步骤2:接收用户输入的一组软件包。
步骤3:采用基于有向图的裁剪方法对软件包组进行依赖检测,具体为:
S3.1、从软件包组中随机选择一个软件包,记为package1,对package1进行依赖检测:
S3.1.1、将package1映射为节点添加到全量依赖关系有向图中,并标明与其他节点的依赖指向及指向权重;
若package1依赖的软件包未包含在全量依赖关系有向图中,则将该未包含的软件包映射为节点添加到全量依赖关系有向图中,并标明与其他节点的依赖指向及指向权重;
同理,若该未包含的软件包依赖的软件包也未包含在全量依赖关系有向图中,也将其映射为节点添加到全量依赖关系有向图中并标明与其他节点的依赖指向及指向权重;
逐层检测依赖直至package1的所有直接和间接依赖的软件包均包含在全量依赖关系有向图中;
S3.1.2、在全量依赖关系有向图中,从package1的所有依赖路径中选择路径权重最大的依赖路径记为path1,将path1中包含的节点标记为已使用并将包含节点的其他版本的节点标记为不可用。
S3.2、从软件包组中随机选择一个未被检测的软件包,记为package2,对package2进行依赖检测:
S3.2.1、将package2映射为节点添加到全量依赖关系有向图中,并标明与其他节点的依赖指向及指向权重;与S3.1.1同理,逐层检测依赖直至package2的所有直接和间接依赖的软件包均包含在全量依赖关系有向图中;
S3.2.2、在全量依赖关系有向图中,从package2的所有依赖路径中选择一条路径权重最大且满足下列条件的依赖路径记为path2,条件为:该依赖路径不包含不可用节点,且包含的节点不能是已使用节点的不同版本,将path2中包含的节点标记为已使用并将包含节点的其他版本的节点标记为不可用。
若path2不存在,则进行回滚,对与package2相冲突的软件包重新进行依赖检测,选择剩余依赖路径中路径权重最大的依赖路径后继续对package2进行依赖检测,直至不再产生依赖冲突。
S3.3、继续从软件包组中随机选择一个未被检测的软件包,与S3.2同理,对其进行依赖检测,直至软件包组中所有软件包均被检测完毕,输出选择的所有软件包的依赖路径。
步骤4:完成依赖检测,根据选择的依赖路径的倒序依次安装各软件包。
假设现在需要对软件包组{A,E}在某个版本的操作系统中进行依赖分析,首先构建全量依赖关系有向图并输入该软件包组,分析过程参见图2-5,其中,C1、C2、C3代表软件包C的不同版本且标号越小其版本越新,其余以此类推。每个软件包只能安装一个版本,若被选中不同版本,视为冲突。
首先对软件包A进行依赖检测,由图2可知软件包A有多条依赖路径,首先选择软件包版本最新的依赖路径A→B1→C1→D1,此时将节点B2、C2、C3、D2标记为不可用,将依赖关系A→B1、B1→C1、C1→D1标记为已使用,如图3所示。然后对软件包E进行依赖分析,由于E只依赖于C2,而C2已不可用,此时便发生了依赖冲突,为此需要回滚分析。
如图4所示,对软件包A重新进行依赖检测,选择A→B1→C2→D1的路径,同时将节点B2、C1、C3、D2标记为不可用,将依赖关系A→B1、B1→C2、C2→D1标记为已使用。然后继续对软件包E进行依赖分析,此时可以顺利选择E→C2→D1路径,如图5所示。
检测结束,返回依赖检测结果A→B1→C2→D1和E→C2→D1,软件包组安装时根据检测结果中依赖路径的倒序依次安装各软件包,即依次安装D1、C2、E、B1、A,倒序使用栈的数据结构可以轻松实现。
上述虽仅是一个简单的示例,但无论何种复杂情况,其处理的思路是相同的,即,选择首选(选择新版本的软件包)—发生冲突—回滚—选择次选(选择次新版本的软件包)。
以上仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,应视为本发明的保护范围。
Claims (5)
1.一种软件包依赖关系检测方法,其特征在于,包括以下步骤:
步骤1:针对指定操作系统,基于软件依赖关系生成全量依赖关系有向图;
步骤2:接收用户输入的一组软件包;
步骤3:根据全量依赖关系有向图,采用基于有向图的裁剪方法对软件包组中的各软件包进行依赖检测,获取依赖路径,包括:
S3.1、从软件包组中随机选择一个软件包,记为package1,对package1进行依赖检测:
S3.1.1、将package1映射为节点添加到全量依赖关系有向图中,并标明与其他节点的依赖指向及指向权重;
若package1依赖的软件包未包含在全量依赖关系有向图中,则将该未包含的软件包映射为节点添加到全量依赖关系有向图中,并标明与其他节点的依赖指向及指向权重;
同理,若该未包含的软件包依赖的软件包也未包含在全量依赖关系有向图中,也将其映射为节点添加到全量依赖关系有向图中并标明与其他节点的依赖指向及指向权重;
逐层检测依赖直至package1的所有直接和间接依赖的软件包均包含在全量依赖关系有向图中;
S3.1.2、在全量依赖关系有向图中,从package1的所有依赖路径中选择路径权重最大的依赖路径记为path1,将path1中包含的节点标记为已使用并将包含节点的其他版本的节点标记为不可用;
S3.2、从软件包组中随机选择一个未被检测的软件包,记为package2,对package2进行依赖检测:
S3.2.1、将package2映射为节点添加到全量依赖关系有向图中,并标明与其他节点的依赖指向及指向权重;与S3.1.1同理,逐层检测依赖直至package2的所有直接和间接依赖的软件包均包含在全量依赖关系有向图中;
S3.2.2、在全量依赖关系有向图中,从package2的所有依赖路径中选择一条路径权重最大且满足不冲突条件的依赖路径记为path2,将path2中包含的节点标记为已使用并将包含节点的其他版本的节点标记为不可用;
若path2不存在,则进行回滚,对与package2相冲突的软件包重新进行依赖检测,选择其剩余依赖路径中路径权重最大的依赖路径后继续对package2进行依赖检测,直至不再产生依赖冲突;
S3.3、继续从软件包组中随机选择一个未被检测的软件包,与S3.2同理,对其进行依赖检测,直至软件包组中所有软件包均被检测完毕,输出选择的所有软件包的依赖路径;
步骤4:完成依赖检测,根据获取的依赖路径的倒序依次安装各软件包。
2.如权利要求1所述的一种软件包依赖关系检测方法,其特征在于,所述全量依赖关系有向图具有以下属性:
全量依赖关系有向图中,每个软件包均被映射为一组节点且该组节点中的每个节点代表该软件包的一个版本,全量依赖关系有向图涵盖了指定操作系统下所有可用的软件包及其所有可用的版本;
每个节点都有一个标记位,表明该节点是否可用;
软件包与软件包之间的依赖关系通过对应节点间的指向关系表示,由代表某软件包的节点指向该软件包所依赖的软件包的映射节点;
每条指向都包含一个权重,同一节点指向其所依赖的软件包的不同版本节点中,指向的软件包版本越新其对应的权重越大;
连续的指向构成依赖路径,依赖路径的权重等于该路径中所有指向权重的和。
3.如权利要求2所述的一种软件包依赖关系检测方法,其特征在于,步骤1中,所述全量依赖关系有向图的生成步骤为:
S1.1、获取指定操作系统下所有可用的软件包,以及软件包之间的依赖关系;
S1.2、将所有可用的软件包映射成节点;
S1.3、根据软件包之间的依赖关系,在节点间创建指向并赋予其相应的权重。
4.如权利要求1所述的一种软件包依赖关系检测方法,其特征在于,S3.2.2中所述不冲突条件为:path2不包含不可用节点,且包含的节点不能是已使用节点的不同版本。
5.如权利要求1所述的一种软件包依赖关系检测方法,其特征在于,步骤4中的倒序使用栈的数据结构实现。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111533240.4A CN114327473B (zh) | 2021-12-15 | 2021-12-15 | 一种软件包依赖关系检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111533240.4A CN114327473B (zh) | 2021-12-15 | 2021-12-15 | 一种软件包依赖关系检测方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114327473A CN114327473A (zh) | 2022-04-12 |
CN114327473B true CN114327473B (zh) | 2022-09-06 |
Family
ID=81053269
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111533240.4A Active CN114327473B (zh) | 2021-12-15 | 2021-12-15 | 一种软件包依赖关系检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114327473B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115167913A (zh) * | 2022-08-02 | 2022-10-11 | 统信软件技术有限公司 | 一种操作系统的分层方法、计算设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102880466A (zh) * | 2012-09-04 | 2013-01-16 | 中标软件有限公司 | 一种Linux操作系统软件包依赖关系检测方法 |
CN112181858A (zh) * | 2020-11-09 | 2021-01-05 | 东北大学 | Java软件项目依赖冲突语义一致性的自动化检测方法 |
CN112818678A (zh) * | 2021-02-24 | 2021-05-18 | 上海交通大学 | 基于依赖关系图的关系推理方法及系统 |
CN112947896A (zh) * | 2021-03-26 | 2021-06-11 | 中国航空无线电电子研究所 | 一种基于有向图的组件依赖分析方法 |
-
2021
- 2021-12-15 CN CN202111533240.4A patent/CN114327473B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102880466A (zh) * | 2012-09-04 | 2013-01-16 | 中标软件有限公司 | 一种Linux操作系统软件包依赖关系检测方法 |
CN112181858A (zh) * | 2020-11-09 | 2021-01-05 | 东北大学 | Java软件项目依赖冲突语义一致性的自动化检测方法 |
CN112818678A (zh) * | 2021-02-24 | 2021-05-18 | 上海交通大学 | 基于依赖关系图的关系推理方法及系统 |
CN112947896A (zh) * | 2021-03-26 | 2021-06-11 | 中国航空无线电电子研究所 | 一种基于有向图的组件依赖分析方法 |
Non-Patent Citations (2)
Title |
---|
Managing the Complexity of Large Free and Open Source Package-Based Software Distributions;Fabio Mancinelli等;《Conference: Automated Software Engineering - ASE》;20061231;第1页第2段至第9页第6段 * |
Visualization Methods on Linux Software Packages Dependency Relations;Yuqing Lan 等;《roceedings of the International Symposium on Intelligent Information Systems and Applications》;20091030;第359-363页 * |
Also Published As
Publication number | Publication date |
---|---|
CN114327473A (zh) | 2022-04-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8239404B2 (en) | Identifying entries and exits of strongly connected components | |
US8104026B2 (en) | Compiler register allocation and compilation | |
US8250539B2 (en) | Method of detecting memory leak causing portion and execution program thereof | |
US7634496B1 (en) | Techniques for managing state changes of a data storage system utilizing the object oriented paradigm | |
US20030236775A1 (en) | Topological best match naming convention apparatus and method for use in testing graphical user interfaces | |
US20070005556A1 (en) | Probabilistic techniques for detecting duplicate tuples | |
US8051058B2 (en) | System for estimating cardinality in a database system | |
US8032568B2 (en) | Method for performing memory leak analysis inside a virtual machine | |
US20080072007A1 (en) | Method and computer programming product for detecting memory leaks | |
CN114327473B (zh) | 一种软件包依赖关系检测方法 | |
CN111767547B (zh) | 一种基于复杂网络社团的软件漏洞检测方法 | |
EP3779806A1 (en) | Automated machine learning pipeline identification system and method | |
US20180300146A1 (en) | Database operating method and apparatus | |
US7472133B2 (en) | System and method for improved prefetching | |
US7788242B2 (en) | Method and system for implementing a concurrent set of objects | |
US20150058272A1 (en) | Event correlation detection system | |
JP5187635B2 (ja) | 能動学習システム、能動学習方法、及び能動学習用プログラム | |
CN112966054A (zh) | 基于企业图谱节点间关系的族群划分方法和计算机设备 | |
CN111190768B (zh) | 数据库执行错误恢复方法、数据库访问方法及装置 | |
Khare et al. | Distributed algorithm for high-utility subgraph pattern mining over big data platforms | |
CN114791865A (zh) | 一种基于关系图的配置项自洽性检测方法、系统和介质 | |
CN110032366B (zh) | 一种代码定位方法及装置 | |
CN114330278A (zh) | 一种判断返回数据一致性的方法及设备 | |
US7552137B2 (en) | Method for generating a choose tree for a range partitioned database table | |
CN117194275B (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 |