CN117667080B - 一种sca组件依赖信息的确定方法、装置、设备及介质 - Google Patents
一种sca组件依赖信息的确定方法、装置、设备及介质 Download PDFInfo
- Publication number
- CN117667080B CN117667080B CN202311735364.XA CN202311735364A CN117667080B CN 117667080 B CN117667080 B CN 117667080B CN 202311735364 A CN202311735364 A CN 202311735364A CN 117667080 B CN117667080 B CN 117667080B
- Authority
- CN
- China
- Prior art keywords
- component
- dependency
- file
- information
- version
- 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
- 238000000034 method Methods 0.000 title claims abstract description 86
- 238000004458 analytical method Methods 0.000 claims description 57
- 230000001419 dependent effect Effects 0.000 claims description 56
- 238000004590 computer program Methods 0.000 claims description 8
- 238000001514 detection method Methods 0.000 claims description 4
- 239000000306 component Substances 0.000 description 878
- 238000010586 diagram Methods 0.000 description 22
- 230000008569 process Effects 0.000 description 21
- 230000000694 effects Effects 0.000 description 8
- 238000011161 development Methods 0.000 description 7
- 230000006870 function Effects 0.000 description 6
- 238000012545 processing Methods 0.000 description 6
- 230000003068 static effect Effects 0.000 description 6
- 238000004891 communication Methods 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 4
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 238000003340 combinatorial analysis Methods 0.000 description 1
- 239000008358 core component Substances 0.000 description 1
- 238000013135 deep learning Methods 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 230000014509 gene expression Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 230000001502 supplementing effect Effects 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Classifications
-
- 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/36—Software reuse
-
- 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)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
Abstract
本公开提供了一种SCA组件依赖信息的确定方法、装置、设备及介质,获取目标软件的文件包,该文件包包括目标软件的软件依赖管理文件,软件依赖管理文件用于记录目标软件直接调用的组件信息;对软件依赖管理文件进行解析,得到第一依赖信息,所述第一依赖信息包括目标软件直接调用至少一个第一组件的第一依赖关系以及每个第一组件携带的第一版本信息;在文件包中存在目标文件的情况下,对目标文件进行解析,得到第二依赖信息,所述目标文件用于记录目标软件调用的组件信息,所述第二依赖信息包括每个第一组件调用至少一个第二组件的第二依赖关系以及每个第二组件携带的第二版本信息;基于第一依赖信息和第二依赖信息,确定目标软件的组件依赖信息。
Description
技术领域
本公开涉及计算机技术领域,具体而言,涉及一种SCA组件依赖信息的确定方法、装置、设备及介质。
背景技术
在软件的开发过程中,使用第三方组件的比例逐渐增高,引用已有的组件来进行开发成为了当下主流的软件开发模式。虽然引入第三方组件加快了软件的研发效率,但是由第三方于组件在安全性上往往缺少有效地审查和管理,使得软件自身存在安全风险。为了降低软件中的组件安全隐患,可以识别出软件中的组件依赖关系,通过识别出的组件依赖关系来实现从源头治理软件可能出现的安全问题。
在获取软件中的组件依赖关系时,大多是通过调用包管理器来对软件对应的文件进行解析的方式,然而包管理器极度依赖运行环境,若缺少运行环境,则包管理器无法输出结果或者解析效果较差,并且若包管理器在解析过程中出现错误时,会造成解析中断,从而无法得到解析结果。
发明内容
本公开实施例至少提供一种SCA组件依赖信息的确定方法、装置、设备及介质。
本公开实施例提供了一种SCA组件依赖信息的确定方法,所述方法包括:
获取目标软件的文件包;所述文件包包括所述目标软件的软件依赖管理文件,所述软件依赖管理文件用于记录所述目标软件直接调用的组件信息;
对所述软件依赖管理文件进行解析,得到第一依赖信息,所述第一依赖信息包括所述目标软件直接调用至少一个第一组件的第一依赖关系以及每个所述第一组件携带的第一版本信息;
确定所述文件包中是否存在目标文件,所述目标文件用于记录所述目标软件调用的组件信息;
在所述文件包中存在所述目标文件的情况下,对所述目标文件进行解析,得到第二依赖信息,所述第二依赖信息包括每个所述第一组件调用至少一个第二组件的第二依赖关系以及每个所述第二组件携带的第二版本信息;
基于所述第一依赖信息和所述第二依赖信息,确定所述目标软件的组件依赖信息。
一种可选的实施方式中,所述第二依赖信息还包括每个所述第一组件携带的第三版本信息,所述第一版本信息指示的版本范围大于所述第三版本信息指示的版本范围;所述基于所述第一依赖信息和所述第二依赖信息,确定所述目标软件的组件依赖信息,包括:
将所述第一依赖关系和所述第二依赖关系进行组合,得到所述目标软件的组件依赖关系;
将所述第二依赖信息中所述第一组件携带的第三版本信息确定为所述第一组件的依赖版本信息;
基于所述组件依赖关系、所述第一组件的依赖版本信息以及所述第二组件携带的第二版本信息,生成所述组件依赖信息。
一种可选的实施方式中,所述目标文件包括软件目录文件,所述软件目录文件包括所述目标软件调用的每个第一组件的组件目录文件;所述对所述目标文件进行解析,得到第二依赖信息,包括:
对所述软件目录文件进行解析,得到所述第二依赖关系;
对所述软件目录文件和所述组件目录文件进行解析,得到每个所述第二组件携带的第二版本信息;
基于所述第二依赖关系以及每个所述第二组件携带的第二版本信息,确定所述第二依赖信息。
一种可选的实施方式中,所述软件目录文件包括所述目标软件直接调用的每个第一组件的第一组件依赖管理文件,所述第一组件依赖管理文件用于记录该第一组件调用的组件信息;所述对所述软件目录文件进行解析,得到所述第二依赖关系,包括:
针对每个所述第一组件,从所述软件目录文件中提取所述第一组件依赖管理文件;
基于所述第一组件依赖管理文件,确定所述第二依赖关系。
一种可选的实施方式中,所述组件目录文件包括该第一组件调用的每个所述第二组件的第二组件依赖管理文件;所述软件目录文件包括所述目标软件直接和间接调用的每个组件的组件依赖管理文件,所述组件依赖管理文件用于记录该组件调用的组件信息;
所述对所述软件目录文件和所述组件目录文件进行解析,得到每个所述第二组件携带的第二版本信息,包括:
针对每个所述第一组件,基于所述软件目录文件和所述组件目录文件,得到所述第二组件的第二组件依赖管理文件;
基于所述第二组件依赖管理文件,确定所述第二组件携带的第二版本信息。
一种可选的实施方式中,所述基于所述软件目录文件和所述组件目录文件,得到所述第二组件的第二组件依赖管理文件,包括:
确定所述组件目录文件中是否存在所述第二组件;
在所述组件目录文件中存在所述第二组件的情况下,从所述组件目录文件中提取所述第二组件依赖管理文件;
在所述组件目录文件中不存在所述第二组件的情况下,从所述软件目录文件中提取所述第二组件依赖管理文件。
一种可选的实施方式中,所述目标文件包括依赖信息文件;所述对所述目标文件进行解析,得到第二依赖信息,包括:
确定所述依赖信息文件的文件结构,不同的文件结构对应不同的解析方式;
按照所述文件结构对应的解析方式,对所述依赖信息文件进行解析,得到所述第二依赖信息。
一种可选的实施方式中,所述文件结构包括第一文件结构,所述第一文件结构表征为按照所述目标软件和组件之间的直接依赖关系以及各个组件之间的直接依赖关系进行层级划分的结构;所述按照所述文件结构对应的解析方式,对所述依赖信息文件进行解析,得到所述第二依赖信息,包括:
在所述文件结构为所述第一文件结构的情况下,从所述依赖信息文件中提取得到至少一个第二依赖关系,以及每个所述第二依赖关系中的所述第二组件携带的第二版本信息;
基于所述第二依赖关系以及每个所述第二组件携带的第二版本信息,确定所述第二依赖信息。
一种可选的实施方式中,所述文件结构包括第二文件结构,所述第二文件结构表征为将与所述目标软件存在直接和间接依赖关系的各个组件设置在同一层级下,并且所述第二文件结构的依赖信息文件包括与所述目标软件存在直接和间接依赖关系的各个组件的目录信息;所述按照所述文件结构对应的解析方式,对所述依赖信息文件进行解析,得到所述第二依赖信息,包括:
在所述文件结构为所述第二文件结构的情况下,从所述依赖信息文件中提取得到各个所述目录信息,所述目录信息包括该组件的版本信息和/或该组件调用其他组件的依赖关系;
从各个所述目录信息中提取得到至少一个第二依赖关系,以及每个所述第二依赖关系中的所述第二组件携带的第二版本信息;
基于所述第二依赖关系以及每个所述第二组件携带的第二版本信息,确定所述第二依赖信息。
一种可选的实施方式中,所述方法还包括:
在所述文件包中不存在所述目标文件的情况下,从与所述目标软件对应的组件库中获取所述第一组件的组件信息;
基于从所述组件库中获取到的所述第一组件的组件信息,得到第三依赖信息,所述第三依赖信息包括每个所述第一组件调用至少一个第三组件的第三依赖关系以及每个所述第三组件携带的第四版本信息;
基于所述第一依赖信息和所述第三依赖信息,确定所述目标软件的组件依赖信息。
一种可选的实施方式中,所述第三依赖信息还包括每个所述第一组件携带的第五版本信息;所述基于从所述组件库中获取到的所述第一组件的组件信息,得到第三依赖信息,包括:
基于从所述组件库中获取到的所述第一组件的组件信息,确定所述第一组件的至少一个历史版本、以及每个历史版本的第一组件调用至少一个第三组件的依赖关系,以及所述第三组件对应的版本信息;
基于所述第一版本信息指示的版本范围,从至少一个历史版本中确定目标历史版本,所述目标历史版本为位于所述版本范围内的各个历史版本中的最新版本;
将所述目标历史版本确定为所述第五版本信息,将所述目标历史版本的第一组件调用至少一个第三组件的依赖关系确定为所述第三依赖关系,并将与所述目标历史版本的第一组件存在所述第三依赖关系的第三组件对应的版本信息确定为所述第四版本信息。
本公开实施例还提供一种SCA组件依赖信息的确定装置,所述装置包括:
文件确定模块,用于获取目标软件的文件包;所述文件包包括所述目标软件的软件依赖管理文件,所述软件依赖管理文件用于记录所述目标软件直接调用的组件信息;
第一文件解析模块,用于对所述软件依赖管理文件进行解析,得到第一依赖信息,所述第一依赖信息包括所述目标软件直接调用至少一个第一组件的第一依赖关系以及每个所述第一组件携带的第一版本信息;
文件检测模块,用于确定所述文件包中是否存在目标文件,所述目标文件用于记录所述目标软件调用的组件信息;
第二文件解析模块,用于在所述文件包中存在所述目标文件的情况下,对所述目标文件进行解析,得到第二依赖信息,所述第二依赖信息包括每个所述第一组件调用至少一个第二组件的第二依赖关系以及每个所述第二组件携带的第二版本信息;
第一信息确定模块,用于基于所述第一依赖信息和所述第二依赖信息,确定所述目标软件的组件依赖关系。
一种可选的实施方式中,所述第二依赖信息还包括每个所述第一组件携带的第三版本信息,所述第一版本信息指示的版本范围大于所述第三版本信息指示的版本范围;所述第一信息确定模块具体用于:
将所述第一依赖关系和所述第二依赖关系进行组合,得到所述目标软件的组件依赖关系;
将所述第二依赖信息中所述第一组件携带的第三版本信息确定为所述第一组件的依赖版本信息;
基于所述组件依赖关系、所述第一组件的依赖版本信息以及所述第二组件携带的第二版本信息,生成所述组件依赖信息。
一种可选的实施方式中,所述目标文件包括软件目录文件,所述软件目录文件包括所述目标软件调用的每个第一组件的组件目录文件;所述第二文件解析模块在用于所述对所述目标文件进行解析,得到第二依赖信息时,具体用于:
对所述软件目录文件进行解析,得到所述第二依赖关系;
对所述软件目录文件和所述组件目录文件进行解析,得到每个所述第二组件携带的第二版本信息;
基于所述第二依赖关系以及每个所述第二组件携带的第二版本信息,确定所述第二依赖信息。
一种可选的实施方式中,所述软件目录文件包括所述目标软件直接调用的每个第一组件的第一组件依赖管理文件,所述第一组件依赖管理文件用于记录该第一组件调用的组件信息;所述第二文件解析模块在用于所述对所述软件目录文件进行解析,得到所述第二依赖关系时,具体用于:
针对每个所述第一组件,从所述软件目录文件中提取所述第一组件依赖管理文件;
基于所述第一组件依赖管理文件,确定所述第二依赖关系。
一种可选的实施方式中,所述组件目录文件包括该第一组件调用的每个所述第二组件的第二组件依赖管理文件;所述软件目录文件包括所述目标软件直接和间接调用的每个组件的组件依赖管理文件,所述组件依赖管理文件用于记录该组件调用的组件信息;所述第二文件解析模块在用于所述对所述软件目录文件和所述组件目录文件进行解析,得到每个所述第二组件携带的第二版本信息时,具体用于:
针对每个所述第一组件,基于所述软件目录文件和所述组件目录文件,得到所述第二组件的第二组件依赖管理文件;
基于所述第二组件依赖管理文件,确定所述第二组件携带的第二版本信息。
一种可选的实施方式中,所述第二文件解析模块在用于所述基于所述软件目录文件和所述组件目录文件,得到所述第二组件的第二组件依赖管理文件时,具体用于:
确定所述组件目录文件中是否存在所述第二组件;
在所述组件目录文件中存在所述第二组件的情况下,从所述组件目录文件中提取所述第二组件依赖管理文件;
在所述组件目录文件中不存在所述第二组件的情况下,从所述软件目录文件中提取所述第二组件依赖管理文件。
一种可选的实施方式中,所述目标文件包括依赖信息文件;所述第二文件解析模块在用于所述对所述目标文件进行解析,得到第二依赖信息时,具体用于:
确定所述依赖信息文件的文件结构,不同的文件结构对应不同的解析方式;
按照所述文件结构对应的解析方式,对所述依赖信息文件进行解析,得到所述第二依赖信息。
一种可选的实施方式中,所述文件结构包括第一文件结构,所述第一文件结构表征为按照所述目标软件和组件之间的直接依赖关系以及各个组件之间的直接依赖关系进行层级划分的结构;所述第二文件解析模块在用于所述按照所述文件结构对应的解析方式,对所述依赖信息文件进行解析,得到所述第二依赖信息时,具体用于:
在所述文件结构为所述第一文件结构的情况下,从所述依赖信息文件中提取得到至少一个第二依赖关系,以及每个所述第二依赖关系中的所述第二组件携带的第二版本信息;
基于所述第二依赖关系以及每个所述第二组件携带的第二版本信息,确定所述第二依赖信息。
一种可选的实施方式中,所述文件结构包括第二文件结构,所述第二文件结构表征为将与所述目标软件存在直接和间接依赖关系的各个组件设置在同一层级下,并且所述第二文件结构的依赖信息文件包括与所述目标软件存在直接和间接依赖关系的各个组件的目录信息;所述第二文件解析模块在用于所述按照所述文件结构对应的解析方式,对所述依赖信息文件进行解析,得到所述第二依赖信息时,具体用于:
在所述文件结构为所述第二文件结构的情况下,从所述依赖信息文件中提取得到各个所述目录信息,所述目录信息包括该组件的版本信息和/或该组件调用其他组件的依赖关系;
从各个所述目录信息中提取得到至少一个第二依赖关系,以及每个所述第二依赖关系中的所述第二组件携带的第二版本信息;
基于所述第二依赖关系以及每个所述第二组件携带的第二版本信息,确定所述第二依赖信息。
一种可选的实施方式中,所述装置还包括第二信息确定模块,所述第二信息确定模块用于:
在所述文件包中不存在所述目标文件的情况下,从与所述目标软件对应的组件库中获取所述第一组件的组件信息;
基于从所述组件库中获取到的所述第一组件的组件信息,得到第三依赖信息,所述第三依赖信息包括每个所述第一组件调用至少一个第三组件的第三依赖关系以及每个所述第三组件携带的第四版本信息;
基于所述第一依赖信息和所述第三依赖信息,确定所述目标软件的组件依赖信息。
一种可选的实施方式中,所述第三依赖信息还包括每个所述第一组件携带的第五版本信息;所述第二信息确定模块在用于所述基于从所述组件库中获取到的所述第一组件的组件信息,得到第三依赖信息时,具体用于:
基于从所述组件库中获取到的所述第一组件的组件信息,确定所述第一组件的至少一个历史版本、以及每个历史版本的第一组件调用至少一个第三组件的依赖关系,以及所述第三组件对应的版本信息;
基于所述第一版本信息指示的版本范围,从至少一个历史版本中确定目标历史版本,所述目标历史版本为位于所述版本范围内的各个历史版本中的最新版本;
将所述目标历史版本确定为所述第五版本信息,将所述目标历史版本的第一组件调用至少一个第三组件的依赖关系确定为所述第三依赖关系,并将与所述目标历史版本的第一组件存在所述第三依赖关系的第三组件对应的版本信息确定为所述第四版本信息。
本公开实施例还提供一种电子设备,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当电子设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行上述任一种可能的SCA组件依赖信息的确定方法的步骤。
本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述任一种可能的SCA组件依赖信息的确定方法的步骤。
本公开实施例提供的SCA组件依赖信息的确定方法、装置、设备及介质,无需调用包管理器来解析文件,直接对目标软件的软件依赖管理文件和目标文件进行解析,这样,文件解析无需依赖与包管理器的运行环境一致和版本一致,针对任何运行环境和任何版本的目标软件都可以进行组件依赖信息的确定,通过兼容性的组件依赖信息确定方法,有助于保障确定组件依赖信息的效果,减少调用包管理器的资源耗费,降低信息确定过程中出现错误的可能性。
进一步的,在对软件依赖管理文件进行解析得到第一依赖信息的基础上,还可以对目标文件进行解析得到第二依赖信息,通过第二依赖信息对第一依赖信息进行补充,得到目标软件的组件依赖信息,这样,即便在软件依赖管理文件残缺或者不符合规范的情况下,仍然可以最大化地得到组件依赖信息,有助于提升组件依赖信息的全面性和完整性,提升信息确定的精确性。
更进一步的,本方法无需获取目标软件的完整代码,只需获取目标软件的软件依赖管理文件和目标文件即可,有效降低组件依赖信息确定的复杂度。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,而非限制本公开的技术方案。
为使本公开的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,此处的附图被并入说明书中并构成本说明书中的一部分,这些附图示出了符合本公开的实施例,并与说明书一起用于说明本公开的技术方案。应当理解,以下附图仅示出了本公开的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1示出了本公开实施例所提供的一种SCA组件依赖信息的确定方法的流程图;
图2示出了本公开实施例所提供的一种第一依赖信息的结构示意图;
图3示出了本公开实施例所提供的一种对软件目录文件进行解析的过程示意图;
图4示出了本公开实施例所提供的另一种对软件目录文件进行解析的过程示意图;
图5示出了本公开实施例所提供的又一种对软件目录文件进行解析的过程示意图;
图6示出了本公开实施例所提供的一种第二依赖信息的结构示意图;
图7示出了本公开实施例所提供的一种组件依赖信息的结构示意图;
图8示出了本公开实施例所提供的另一种组件依赖信息的确定方法的流程图;
图9示出了本公开实施例所提供的一种第三依赖信息的结构示意图;
图10示出了本公开实施例所提供的另一种组件依赖信息的结构示意图;
图11示出了本公开实施例所提供的一种SCA组件依赖信息的确定装置的示意图之一;
图12示出了本公开实施例所提供的一种SCA组件依赖信息的确定装置的示意图之二;
图13示出了本公开实施例所提供的一种电子设备的结构示意图。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本公开实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本公开的实施例的详细描述并非旨在限制要求保护的本公开的范围,而是仅仅表示本公开的选定实施例。基于本公开的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
本文中术语“和/或”,仅仅是描述一种关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中术语“至少一种”表示多种中的任意一种或多种中的至少两种的任意组合,例如,包括A、B、C中的至少一种,可以表示包括从A、B和C构成的集合中选择的任意一个或多个元素。
经研究发现,在获取软件中的组件依赖关系时,大多是通过调用包管理器来对软件对应的文件进行解析的方式,然而包管理器极度依赖运行环境,若缺少运行环境,则包管理器无法输出结果或者解析效果较差。并且包管理器的使用要求检测的对象必须是可直接解析的软件,容错度极低。在文件残缺的情况下,可能无法检出任何组件。
另外,若文件中使用了不存在于官方仓库的组件名称或版本号,例如组件名称或版本拼写错误、官方仓库中不存在处于指定版本号范围约束中的版本,包管理器就会出现解析错误。若包管理器的版本与软件的版本不同或者环境不兼容,也会出现写细错误。一旦包管理器在解析过程中出现解析错误的情况,会造成解析中断,从而导致解析失败,不但无法得到解析结果,而且造成时间和资源的浪费。
基于上述研究,本公开提供了一种SCA组件依赖信息的确定方法,可以获取目标软件的文件包;所述文件包包括所述目标软件的软件依赖管理文件,所述软件依赖管理文件用于记录所述目标软件直接调用的组件信息;对所述软件依赖管理文件进行解析,得到第一依赖信息,所述第一依赖信息包括所述目标软件直接调用至少一个第一组件的第一依赖关系以及每个所述第一组件携带的第一版本信息;确定所述文件包中是否存在目标文件,所述目标文件用于记录所述目标软件调用的组件信息;在所述文件包中存在所述目标文件的情况下,对所述目标文件进行解析,得到第二依赖信息,所述第二依赖信息包括每个所述第一组件调用至少一个第二组件的第二依赖关系以及每个所述第二组件携带的第二版本信息;基于所述第一依赖信息和所述第二依赖信息,确定所述目标软件的组件依赖信息。
这样,无需调用包管理器来解析文件,直接对目标软件的软件依赖管理文件和目标文件进行解析,这样,文件解析无需依赖与包管理器的运行环境一致和版本一致,针对任何运行环境和任何版本的目标软件都可以进行组件依赖信息的确定,通过兼容性的组件依赖信息确定方法,有助于保障确定组件依赖信息的效果,减少调用包管理器的资源耗费,降低信息确定过程中出现错误的可能性。
进一步的,在对软件依赖管理文件进行解析得到第一依赖信息的基础上,还可以对目标文件进行解析得到第二依赖信息,通过第二依赖信息对第一依赖信息进行补充,得到目标软件的组件依赖信息,这样,即便在软件依赖管理文件残缺或者不符合规范的情况下,仍然可以最大化地得到组件依赖信息,有助于提升组件依赖信息的全面性和完整性,提升信息确定的精确性。
针对以上方案所存在的缺陷,均是发明人在经过实践并仔细研究后得出的结果,因此,上述问题的发现过程以及下文中本公开针对上述问题所提出的解决方案,都应该是发明人在本公开过程中对本公开做出的贡献。
为便于对本实施例进行理解,首先对本公开实施例所公开的一种SCA组件依赖信息的确定方法进行详细介绍,本公开实施例所提供的SCA组件依赖信息的确定方法的执行主体可以是具有一定计算能力的电子设备。本实施方式中,该电子设备可以为服务器。其中,服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云存储、大数据和人工智能平台等基础云计算服务的云服务器。
其他实施方式中,该电子设备还可以为终端设备或者其他处理设备,该终端设备可以为移动设备、终端及计算设备等。其它处理设备可以是包括处理器和存储器的设备,在此不做限定。在一些可能的实现方式中,该SCA组件依赖信息的确定方法可以通过处理器调用存储器中存储的计算机可读指令的方式来实现。
本公开实施例提供的技术方案,涉及软件成分分析(Software CompositionAnalysis,SCA)的技术,在对本公开实施例提供的技术方案进行介绍说明之前,先对本申请涉及的一些名词及术语进行解释说明。
SCA技术是一种用来识别分析某一个软件中所使用的第三方组件与第三方库的来源、版本等信息的技术,这些第三方组件和第三方库可能来源于开源社区、商业供应商或者自行开发等,存在很多潜在的安全问题。
SCA技术一般包括静态分析、动态分析、组合分析、基于机器学习的分析、基于深度学习的分析。其中,静态分析主要是通过检测源代码或者二进制文件,来识别出软件中使用的各种第三方的组件和库,以及其版本信息。动态分析主要通过软件运行过程中产生的数据来进行识别,这种方法比静态分析更快,但可能会错过一些不常用的代码路径和组件。组合分析结合了静态分析和动态分析,可以更全面地识别软件中的组件和库,但这种方法需要的计算资源极大。
本公开实施例主要为了解决在静态分析下,借助包管理器对文件进行解析过程中存在的上述问题,减少在调用包管理器解析出错的情况下对静态分析造成的干扰,最大化地检测出组件依赖信息。
下面结合附图,对本公开实施例提供的一种SCA组件依赖信息的确定方法加以说明。
参见图1所示,为本公开实施例提供的一种SCA组件依赖信息的确定方法的流程图,如图1中所示,本公开实施例提供的SCA组件依赖信息的确定方法包括步骤S101~S105,其中:
S101:获取目标软件的文件包;所述文件包包括所述目标软件的软件依赖管理文件,所述软件依赖管理文件用于记录所述目标软件直接调用的组件信息。
这里,本方案不受限于所述目标软件所能实现的功能,对于所述目标软件所能实现的功能并不做任何限定。并且,本方案不受限于所述目标软件的开发状态,因为不需要使用到目标软件的完整代码,只要获取到文件包即可,不论所述目标软件处于哪种开发状态,所述目标软件都会具备文件包,有效降低组件依赖信息确定的复杂度。
需要说明的是,本公开实施例是为了解决对采用JavaScript(JS)语言编写的软件进行组件信息确定时存在的问题,因此所述目标软件的文件包中的文件采用JS语言编写。
可选地,所述目标软件的软件依赖管理文件具体可以为所述目标软件的package.json文件,该文件是所述文件包中的一个描述文件,该文件用于记录所述目标软件直接调用的组件信息,同时该文件还用于记录所述目标软件的配置信息。
具体的,所述软件依赖管理文件中和组件依赖相关的字段包括所述目标软件的名称、所述目标软件的版本以及组件的依赖属性。
这里,所述依赖属性包括第一依赖属性dependencies、第二依赖属性devDependencies、第三依赖属性peerDependencies等。其中,dependencies和peerDependencies是所述目标软件实际使用过程中的依赖,devDependencies是所述目标软件开发过程中的依赖,dependencies和peerDependencies的区别在于编程时能够世界使用组件的间接依赖,对实际引入的组件无影响。
在本公开实施方式中,不会具体对所述依赖属性进行区分,有助于保障信息确定的全面性。
S102:对所述软件依赖管理文件进行解析,得到第一依赖信息,所述第一依赖信息包括所述目标软件直接调用至少一个第一组件的第一依赖关系以及每个所述第一组件携带的第一版本信息。
本步骤中,在对所述软件依赖管理文件进行解析时,具体可以基于预设解析算法,对所述软件依赖管理文件进行解析。区别于相关技术中的调用包管理器对软件依赖管理文件进行解析的方式,本公开实施例中根据包管理的解析过程,通过模拟包管理器的解析,生成所述预设解析算法,使得所述预设解析算法仅实现核心的组件识别的功能,所述预设解析算法用于对所述目标软件进行依赖组件的识别。
根据前述内容可知,在所述软件依赖管理文件中记录有所述目标软件直接调用的组件信息,这里的组件信息包括组件的名称和组件的版本范围,从而可以基于所述软件依赖管理文件,得到所述目标软件直接调用至少一个第一组件的第一依赖关系以及每个所述第一组件携带的第一版本信息。
示例性的,请同时参阅图2,图2为本公开实施例所提供的一种第一依赖信息的结构示意图。如图2中所示,所述目标软件的名称为foo,所述目标软件的版本号为1.0.0;所述目标软件存在所述目标软件直接调用第一组件a的第一依赖关系,第一组件a携带的第一版本信息为^2.0.0,这里^2.0.0表示为第一组件a的版本号大于等于2.0.0、并且小于3.0.0;所述目标软件还存在所述目标软件直接调用第一组件c的第一依赖关系,第一组件c携带的第一版本信息为^1.1.0,这里^1.1.0表示为第一组件c的版本号大于等于1.1.0、并且小于2.1.0。这里版本号为1.0.0的目标软件foo,分别与第一版本信息为^2.0.0的第一组件a以及第一版本信息为^1.1.0的第一组件c之间通过实线连接,表示版本号为1.0.0的目标软件foo,分别与第一版本信息为^2.0.0的第一组件a以及第一版本信息为^1.1.0的第一组件c之间均为直接依赖关系。
可以理解,通过对所述软件依赖管理文件的解析,仅能得到所述目标软件调用所述第一组件的直接依赖关系以及所述第一组件的版本范围,无法确定所述目标软件的间接依赖关系以及所述第一组件的具体版本号。相应地,本方案在后续通过对其他文件(目标文件)进行解析,使用对其他文件的解析结果来对所述第一依赖信息进行补充,从而提升信息确定的全面性和完整性。
S103:确定所述文件包中是否存在目标文件,所述目标文件用于记录所述目标软件调用的组件信息。
这里,所述目标文件记录的信息比所述软件依赖管理文件记录的信息更加全面和详细,所述软件依赖管理文件用于记录所述目标软件直接调用的组件信息,而所述目标文件用于记录所述目标软件直接调用以及间接调用的组件信息。
S104:在所述文件包中存在所述目标文件的情况下,对所述目标文件进行解析,得到第二依赖信息,所述第二依赖信息包括每个所述第一组件调用至少一个第二组件的第二依赖关系以及每个所述第二组件携带的第二版本信息。
其中,所述第二组件既包括所述第一组件直接调用的组件,也包括所述第一组件间接调用的组件。可以理解,在所述第二组件包括所述第一组件直接调用的组件的情况下,所述目标软件存在两层依赖关系,在所述第二组件包括所述第一组件间接调用的组件的情况下,所述目标软件存在至少三层依赖关系。
在一些可能的实施方式中,所述第二依赖信息还包括每个所述第一组件携带的第三版本信息,所述第三版本信息指示的版本范围大于所述第一版本信息指示的版本范围。
这里,同样区别于相关技术中的调用包管理器对软件依赖管理文件进行解析的方式,由于包管理器只能对软件依赖管理文件进行解析,无法对所述目标文件进行解析,因此本公开实施例与相关技术相比,通过对目标文件进行解析,有助于提升解析文件的丰富性,有助于保障信息确定的全面性和完整性。在对所述目标文件进行解析时,具体可以基于对应的解析算法,对所述目标文件进行解析。
其中,所述目标文件具体可以包括软件目录文件和依赖信息文件。
可选地,所述软件目录文件具体可以为所述目标软件的node_modules目录文件,该文件包括所述目标软件直接调用和间接调用的所有组件、以及每个组件的组件依赖管理文件。这里,每个组件的组件依赖管理文件具体可以为组件的package.json文件,该文件用于记录该组件直接调用的组件信息,同时该文件还用于记录该组件的配置信息。这里的组件信息包括组件的名称、组件的版本号、该组件调用其他组件的依赖关系以及被该组件调用的其他组件的版本号,从而可以基于所述目标文件,得到每个所述第一组件调用至少一个第二组件的第二依赖关系以及每个所述第二组件携带的第二版本信息。
可选地,所述依赖信息文件具体可以为所述目标软件的package-lock.json文件,该文件记录有所述目标软件直接调用和间接调用的所有组件、以及每个组件的组件信息。这里的组件信息包括组件的名称、组件的版本号、该组件调用其他组件的依赖关系以及被该组件调用的其他组件的版本号,从而可以基于所述目标文件,得到每个所述第一组件调用至少一个第二组件的第二依赖关系以及每个所述第二组件携带的第二版本信息。
相应地,在一些可能的实施方式中,在所述目标文件包括所述软件目录文件的情况下,所述软件目录文件包括所述目标软件调用的每个第一组件的组件目录文件,从而可以对所述软件目录文件进行解析,得到所述第二依赖关系;对所述软件目录文件和所述组件目录文件进行解析,得到每个所述第二组件携带的第二版本信息;基于所述第二依赖关系以及每个所述第二组件携带的第二版本信息,确定所述第二依赖信息。
上述步骤中,可以基于所述目标软件的软件目录文件(所述目标软件的node_modules目录文件),得到所述第二依赖关系以及每个所述第一组件携带的第三版本信息,并基于所述软件目录文件(所述目标软件的node_modules目录文件)和所述组件目录文件(所述第一组件的node_modules目录文件),得到每个所述第二组件携带的第二版本信息,从而基于所述第二依赖关系、每个所述第一组件携带的第三版本信息以及每个所述第二组件携带的第二版本信息,确定所述第二依赖信息。
这样,在目标文件包括软件目录文件的情况下,可以通过对软件目录文件的解析得到第二依赖关系,并且软件目录文件包括组件目录文件,因此可以通过对软件目录文件和组件目录文件的解析得到第二版本信息,进而生成第二依赖信息,有助于保障第二依赖信息的全面性和完整性。
在实际应用中,所述软件目录文件往往存在不同文件版本,不同的文件版本对应不同的文件结构。下面对所述软件目录文件的两种文件结构进行举例说明。
在示例一中,当所述软件目录文件为v2版本的情况下,所述v2版本的所述软件目录文件的文件结构表征为按照目标软件和组件之间的直接依赖关系以及各个组件之间的直接依赖关系进行层级划分的结构。
在示例二中,当所述软件目录文件为v3版本的情况下,所述v3版本的所述软件目录文件的文件结构表征为按照与目标软件存在依赖关系的各个组件的名称和版本进行层级划分的结构,在同一层级内的各个组件之间名称不同,在不同层级内的同一名称组件之间版本不同。也就是说,所述v3版本与所述v2版本的区别在于,尽可能将所有依赖组件扁平化地设置在同一层,当存在不同版本的同一组件的情况下,再将不同版本的组件设置在下一层。
示例性的,所述目标软件的名称为foo,所述目标软件的版本号为1.0.0;所述版本号为1.0.0的目标软件foo直接调用版本号为2.1.5的组件a,并且版本号为2.1.5的组件a直接调用版本号为1.1.9的组件b,所述版本号为1.0.0的目标软件foo还直接调用版本号为1.3.1的组件c,版本号为1.3.1的组件c直接调用版本号为1.2.1的组件b。
那么针对示例一中的所述v2版本的所述软件目录文件,其文件结构为所述版本号为1.0.0的目标软件foo的软件目录文件中包括版本号为2.1.5的组件a的组件目录文件和组件依赖管理文件、以及版本号为1.3.1的组件c的组件目录文件和组件依赖管理文件,版本号为2.1.5的组件a的组件目录文件中包括版本号为1.1.9的组件b的组件目录文件和组件依赖管理文件,版本号为1.3.1的组件c的组件目录文件中包括版本号为1.2.1的组件b的组件目录文件和组件依赖管理文件。
而针对示例二中的所述v3版本的所述软件目录文件,其文件结构为所述版本号为1.0.0的目标软件foo的软件目录文件中包括版本号为2.1.5的组件a的组件目录文件和组件依赖管理文件、版本号为1.3.1的组件c的组件目录文件和组件依赖管理文件、以及版本号为1.1.9的组件b的组件目录文件和组件依赖管理文件,版本号为1.3.1的组件c的组件目录文件中包括版本号为1.2.1的组件b的组件目录文件和组件依赖管理文件。
在一些可能的实施方式中,所述软件目录文件包括所述目标软件直接调用的每个第一组件的第一组件依赖管理文件,所述第一组件依赖管理文件用于记录该第一组件调用的组件信息。为了得到所述第二依赖关系,针对每个所述第一组件,从所述软件目录文件中提取所述第一组件依赖管理文件;基于所述第一组件依赖管理文件,确定所述第二依赖关系。
上述步骤中,无论所述软件目录文件属于哪个文件版本,所述软件目录文件都会包括所述目标软件直接调用的每个第一组件的第一组件依赖管理文件,因此可以从所述软件目录文件中将所述第一组件依赖管理文件提取出,并对提取得到的所述第一组件依赖管理文件进行解析,得到所述第二依赖关系以及每个所述第一组件携带的第三版本信息。
这样,软件目录文件包括第一组件依赖管理文件,从而可以通过对第一组件依赖管理文件的解析,得到第二依赖关系,有助于保障第二依赖关系的准确性。
在一些可能的实施方式中,所述组件目录文件包括该第一组件调用的每个所述第二组件的第二组件依赖管理文件;所述软件目录文件包括所述目标软件直接和间接调用的每个组件的组件依赖管理文件,所述组件依赖管理文件用于记录该组件调用的组件信息。为了得到每个所述第二组件携带的第二版本信息,针对每个所述第一组件,基于所述软件目录文件和所述组件目录文件,得到所述第二组件的第二组件依赖管理文件;基于所述第二组件依赖管理文件,确定所述第二组件携带的第二版本信息。
这里,由于软件目录文件存在多种版本,不同版本的软件目录文件结构不同,为了实现对于不同版本的软件目录文件的兼容性,基于软件目录文件和组件目录文件得到第二组件依赖管理文件,可以针对不同版本的软件目录文件按照统一的方式进行解析,有助于提升本方案的通用性,降低信息确定的复杂度。
具体的,可以确定所述组件目录文件中是否存在所述第二组件;在所述组件目录文件中存在所述第二组件的情况下,从所述组件目录文件中提取所述第二组件依赖管理文件;在所述组件目录文件中不存在所述第二组件的情况下,从所述软件目录文件中提取所述第二组件依赖管理文件。
承接上述示例一,针对示例一中的所述v2版本的所述软件目录文件,版本号为2.1.5的组件a的组件目录文件中存在组件b,因此可以从版本号为2.1.5的组件a的组件目录文件中提取版本号为1.1.9的组件b的第二组件依赖管理文件;版本号为1.3.1的组件c的组件目录文件中存在组件b,因此可以从版本号为1.3.1的组件c的组件目录文件中提取版本号为1.2.1的组件b的第二组件依赖管理文件。
这样,对组件目录文件进行检测,若组件目录文件中存在第二组件,就可以从组建目录文件中提取第二组件依赖管理文件,若组件目录文件中不存在第二组件,则可以返回至第一组件的上一层级,也即返回至目标软件,从软件目录文件中提取第二组件依赖管理文件,这样,无论软件目录文件属于哪个版本,都可以按照本方案得到第二组件依赖管理文件,从而有助于保障信息确定过程的准确性。
为了清晰地展示出对软件目录文件进行解析的过程,可以参阅图3,图3为本公开实施例提供的一种对软件目录文件进行解析的过程示意图。如图3中所示,先从所述软件目录文件中提取所述目标软件调用的每个第一组件的第一组件依赖管理文件和组件目录文件,然后对提取得到的所述第一组件依赖管理文件进行解析,得到所述第二依赖关系以及每个所述第一组件携带的第三版本信息,进而确定所述组件目录文件中是否存在所述第二组件。若存在,从所述第一组件的组件目录文件中提取所述第二组件的第二组件依赖管理文件,并对所述第二组件依赖管理文件进行解析,得到所述第二组件的第二版本信息,以及所述第二组件调用其他组件的依赖关系,进而再确定所述其他组件的版本信息。若不存在,返回至所述第一组件的上一层级,即返回至所述目标软件,从所述软件目录文件中提取所述第二组件依赖管理文件,并对所述第二组件依赖管理文件进行解析,得到所述第二组件的第二版本信息,以及所述第二组件调用其他组件的依赖关系,进而再确定所述其他组件的版本信息。
承接上述示例一,请同时参阅图4,图4为本公开实施例所提供的另一种对软件目录文件进行解析的过程示意图。如图4中所示,对版本号为1.0.0的软件foo的软件依赖管理文件进行解析,可以得到软件foo直接调用组件a和组件c,进而从软件foo的软件目录文件中提取组件a的组件依赖管理文件和组件c的组件依赖管理文件,对组件a的组件依赖管理文件进行解析,可以得到版本号为2.1.5的组件a直接调用组件b,对组件c的组件依赖管理文件进行解析,可以得到版本号为1.3.1的组件c直接调用组件b。然后从软件foo的软件目录文件中提取组件a的组件目录文件和组件c的组件目录文件,这里组件a的组件目录文件中存在组件b,从而可以从组件a的组件目录文件中提取组件b的组件依赖管理文件,对组件b的组件依赖管理文件进行解析,可以得到组件b的版本号为1.1.9;并且组件c的组件目录文件中存在组件b,从而可以从组件c的组件目录文件中提取组件b的组件依赖管理文件,对组件b的组件依赖管理文件进行解析,可以得到组件b的版本号为1.2.1。
承接上述示例二,请同时参阅图5,图5为本公开实施例所提供的又一种对软件目录文件进行解析的过程示意图。如图5中所示,对版本号为1.0.0的软件foo的软件依赖管理文件进行解析,可以得到软件foo直接调用组件a和组件c,进而从软件foo的软件目录文件中提取组件a的组件依赖管理文件和组件c的组件依赖管理文件,对组件a的组件依赖管理文件进行解析,可以得到版本号为2.1.5的组件a直接调用组件b,对组件c的组件依赖管理文件进行解析,可以得到版本号为1.3.1的组件c直接调用组件b。然后从软件foo的软件目录文件中提取组件a的组件目录文件和组件c的组件目录文件,这里组件c的组件目录文件中存在组件b,从而可以从组件c的组件目录文件中提取组件b的组件依赖管理文件,对组件b的组件依赖管理文件进行解析,可以得到组件b的版本号为1.2.1。与示例一不同的是,这里组件a的组件目录文件中不存在组件b,则可以返回至组件a的上一层级,也即返回至目标软件foo,从软件目录文件中提取组件b的组件依赖管理文件,对组件b的组件依赖管理文件进行解析,可以得到组件b的版本号为1.1.9。
在本公开实施例中,是对所述目标文件包括所述软件目录文件的情况进行说明,在其他实施方式中,在所述目标文件包括依赖信息文件的情况下,可以确定所述依赖信息文件的文件结构,不同的文件结构对应不同的解析方式;按照所述文件结构对应的解析方式,对所述依赖信息文件进行解析,得到所述第二依赖信息。
这样,在目标文件包括依赖信息文件的情况下,可以根据依赖信息文件的文件结构所对应的解析方式,对依赖信息文件进行解析,有助于提升信息确定的效率。
在一些可能的实施方式中,所述文件结构包括第一文件结构,所述第一文件结构表征为按照所述目标软件和组件之间的直接依赖关系以及各个组件之间的直接依赖关系进行层级划分的结构。
为了得到所述第二依赖信息,在所述文件结构为所述第一文件结构的情况下,从所述依赖信息文件中提取得到至少一个第二依赖关系,以及每个所述第二依赖关系中的所述第二组件携带的第二版本信息;基于所述第二依赖关系以及每个所述第二组件携带的第二版本信息,确定所述第二依赖信息。
这里,在各个第二依赖关系中可能会存在同一第二组件在不同的依赖关系中携带的版本信息指示的版本范围不同的情况,此时可以将该第二组件对应的各个版本范围中、版本范围最小的版本信息,确定为所述第二版本信息。
这样,在文件结构为第一文件结构的情况下,可以直接从依赖信息文件中提取得到第二依赖关系和第二版本信息,有助于提升确定第二依赖信息的效率。
在另一些可能的实施方式中,所述文件结构包括第二文件结构,所述第二文件结构表征为将与所述目标软件存在直接和间接依赖关系的各个组件设置在同一层级下,并且所述第二文件结构的依赖信息文件包括与所述目标软件存在直接和间接依赖关系的各个组件的目录信息。
为了得到所述第二依赖信息,在所述文件结构为所述第二文件结构的情况下,从所述依赖信息文件中提取得到各个所述目录信息,所述目录信息包括该组件的版本信息和/或该组件调用其他组件的依赖关系;从各个所述目录信息中提取得到至少一个第二依赖关系,以及每个所述第二依赖关系中的所述第二组件携带的第二版本信息;基于所述第二依赖关系以及每个所述第二组件携带的第二版本信息,确定所述第二依赖信息。
这样,在文件结构为第二文件结构的情况下,此时依赖信息文件包括与目标软件存在直接和间接依赖关系的各个组件的目录信息,从而可以从依赖信息文件中提取各个目录信息,进而从各个目录信息中提取得到第二依赖关系和第二版本信息,有助于提升确定第二依赖信息的效率。
示例性的,请同时参阅图6,图6为本公开实施例所提供的一种第二依赖信息的结构示意图。如图6中所示,存在版本号为2.1.5的组件a调用版本号为1.1.9的组件b的第二依赖关系,以及版本号为1.3.1的组件c调用版本号为1.2.1的组件b的第二依赖关系。这里版本号为2.1.5的组件a与版本号为1.1.9的组件b之间通过实线连接,表示版本号为2.1.5的组件a与版本号为1.1.9的组件b之间为直接依赖关系,并且版本号为1.3.1的组件c与版本号为1.2.1的组件b之间也通过实线连接,表示版本号为1.3.1的组件c与版本号为1.2.1的组件b之间也为直接依赖关系。
S105:基于所述第一依赖信息和所述第二依赖信息,确定所述目标软件的组件依赖信息。
本步骤中,可以根据所述目标软件直接调用至少一个第一组件的第一依赖关系、每个所述第一组件携带的第一版本信息、每个所述第一组件调用至少一个第二组件的第二依赖关系以及每个所述第二组件携带的第二版本信息,确定所述目标软件的组件依赖信息。
具体的,所述第二依赖信息还包括每个所述第一组件携带的第三版本信息,所述第一版本信息指示的版本范围大于所述第三版本信息指示的版本范围。
可以将所述第一依赖关系和所述第二依赖关系进行组合,得到所述目标软件的组件依赖关系;将所述第二依赖信息中所述第一组件携带的第三版本信息确定为所述第一组件的依赖版本信息;基于所述组件依赖关系、所述第一组件的依赖版本信息以及所述第二组件携带的第二版本信息,生成所述组件依赖信息。
这样,可以通过第二依赖关系对第一依赖关系进行补充,得到目标软件的组件依赖关系,有助于提升组件依赖关系的全面性,并且在第一依赖信息和第二依赖信息均包括第一组件的版本信息的情况下,最终保留指示的版本范围更小的第三版本信息,将其作为第一组件的依赖版本信息,从而综合组件依赖关系、第一组件的依赖版本信息以及第二组件携带的第二版本信息,生成组件依赖信息,有助于提升信息确定的精确性和完整性。
示例性的,请同时参阅图7,图7为本公开实施例所提供的一种组件依赖信息的结构示意图。如图7中所示,版本号为1.0.0的目标软件foo调用版本号为2.1.5的组件a和版本号为1.3.1的组件c,版本号为2.1.5的组件a调用版本号为1.1.9的组件b,版本号为1.3.1的组件c调用版本号为1.2.1的组件b。这里版本号为1.0.0的目标软件foo,分别与版本号为2.1.5的组件a和版本号为1.3.1的组件c之间通过实线连接,表示版本号为1.0.0的目标软件foo,分别与版本号为2.1.5的组件a和版本号为1.3.1的组件c之间均为直接依赖关系。版本号为2.1.5的组件a与版本号为1.1.9的组件b之间通过虚线连接,表示版本号为2.1.5的组件a与版本号为1.1.9的组件b之间为直接依赖关系,版本号为1.0.0的目标软件foo与版本号为1.1.9的组件b之间为间接依赖关系。并且版本号为1.3.1的组件c与版本号为1.2.1的组件b之间也通过虚线连接,表示版本号为1.3.1的组件c与版本号为1.2.1的组件b之间为直接依赖关系,版本号为1.0.0的目标软件foo与版本号为1.2.1的组件b之间为间接依赖关系。
在确定所述组件依赖信息后,可以基于所述组件依赖信息对所述目标软件进行安全检测,有助于保障所述目标软件的安全性,降低所述目标软件的风险。
本公开实施例提供的SCA组件依赖信息的确定方法,无需调用包管理器来解析文件,直接对目标软件的软件依赖管理文件和目标文件进行解析,这样,文件解析无需依赖与包管理器的运行环境一致和版本一致,针对任何运行环境和任何版本的目标软件都可以进行组件依赖信息的确定,通过兼容性的组件依赖信息确定方法,有助于保障确定组件依赖信息的效果,减少调用包管理器的资源耗费,降低信息确定过程中出现错误的可能性。
进一步的,在对软件依赖管理文件进行解析得到第一依赖信息的基础上,还可以对目标文件进行解析得到第二依赖信息,通过第二依赖信息对第一依赖信息进行补充得到目标软件的组件依赖信息,这样,即便在软件依赖管理文件残缺或者不符合规范的情况下,仍然可以最大化地得到组件依赖信息,有助于提升组件依赖信息的全面性和完整性,提升信息确定的精确性。
更进一步的,本方法无需获取目标软件的完整代码,只需获取目标软件的软件依赖管理文件和目标文件即可,有效降低组件依赖信息确定的复杂度。
本公开实施例中,是确定所述文件包中是否存在所述目标文件,在所述文件包中存在所述目标文件的情况下,对所述目标文件进行解析。而在实际应用中,由于涉及隐私需求,或者所述目标软件调用的组件的版本与当前进行信息确定的组件的版本不一致等情况,无法获取到所述目标文件,此时需要借助第三方仓库,来对所述第一依赖信息进行补充。
参见图8所示,图8为本公开实施例提供的另一种SCA组件依赖信息的确定方法的流程图,如图8中所示,本公开实施例提供的SCA组件依赖信息的确定方法包括步骤S801~S806,其中:
S801:获取目标软件的文件包;所述文件包包括所述目标软件的软件依赖管理文件,所述软件依赖管理文件用于记录所述目标软件直接调用的组件信息。
S802:对所述软件依赖管理文件进行解析,得到第一依赖信息,所述第一依赖信息包括所述目标软件直接调用至少一个第一组件的第一依赖关系以及每个所述第一组件携带的第一版本信息。
S803:确定所述文件包中是否存在目标文件,所述目标文件用于记录所述目标软件调用的组件信息。
其中,步骤S801至步骤S803的描述可以参照步骤S101至步骤S103的描述,并且可以达到相同的技术效果和解决相同的技术问题,在此不做赘述。
S804:在所述文件包中不存在所述目标文件的情况下,从与所述目标软件对应的组件库中获取所述第一组件的组件信息。
这里,所述组件库具体可以为第三方仓库,所述组件库中存储有所述目标软件直接调用的所述第一组件的组件信息。
其中,所述组件库中存储的所述第一组件的组件信息包括所述第一组件的名称、所述第一组件的版本信息、所述第一组件调用其他组件的依赖关系以及被该组件调用的其他组件的版本信息。
S805:基于从所述组件库中获取到的所述第一组件的组件信息,得到第三依赖信息,所述第三依赖信息包括每个所述第一组件调用至少一个第三组件的第三依赖关系以及每个所述第三组件携带的第四版本信息。
本步骤中,可以对从所述组件库中获取到的所述第一组件的组件信息进行信息提取,得到所述第三依赖信息。
可选地,所述第三依赖信息还包括每个所述第一组件携带的第五版本信息;具体的,可以基于从所述组件库中获取到的所述第一组件的组件信息,确定所述第一组件的至少一个历史版本、以及每个历史版本的第一组件调用至少一个第三组件的依赖关系,以及所述第三组件对应的版本信息;基于所述第一版本信息指示的版本范围,从至少一个历史版本中确定目标历史版本,所述目标历史版本为位于所述版本范围内的各个历史版本中的最新版本;将所述目标历史版本确定为所述第五版本信息,将所述目标历史版本的第一组件调用至少一个第三组件的依赖关系确定为所述第三依赖关系,并将与所述目标历史版本的第一组件存在所述第三依赖关系的第三组件对应的版本信息确定为所述第四版本信息。
其中,所述第三组件与所述第二组件可以相同也可以不同。
示例性的,所述组件库中存储有所述第一组件a的两个历史版本,第一历史版本的第一组件a的版本号为2.1.5,版本号为2.1.5的第一组件a调用版本信息为^1.1.9的第三组件b,第一历史版本的第一组件a的版本号为3.1.1,版本号为3.1.1的第一组件a调用版本信息为^2.2.0的第三组件b。第一版本信息为^2.0.0,所述第一版本信息指示的版本范围表征为第一组件a的版本号大于等于2.0.0、并且小于3.0.0,因此将位于该版本范围的版本号2.1.5确定为所述第五版本信息,将版本号为2.1.5的第一组件a调用第三组件b的依赖关系确定为所述第三依赖关系,并将该依赖关系中第三组件b携带的版本信息^1.1.9确定为所述第四版本信息。
这样,组件库中的每个组件往往记录有至少一个历史版本,可以结合第一版本信息指示的版本范围,从至少一个历史版本中筛选得到目标历史版本,从而确定出第五版本信息、第三依赖关系以及第四版本信息,有助于提升信息确定的精确性。
示例性的,请同时参阅图9,图9为本公开实施例所提供的一种第三依赖信息的结构示意图。如图9中所示,存在版本号为2.1.5的组件a调用版本信息为^1.1.9的组件b的第三依赖关系,以及版本号为1.3.1的组件c调用版本信息为^1.2.1的组件b的第三依赖关系。这里版本号为2.1.5的组件a与版本信息为^1.1.9的组件b之间通过实线连接,表示版本号为2.1.5的组件a与版本信息为^1.1.9的组件b之间为直接依赖关系,并且版本号为1.3.1的组件c与版本信息为^1.2.1的组件b之间也通过实线连接,表示版本号为1.3.1的组件c与版本信息为^1.2.1的组件b之间也为直接依赖关系。
S806:基于所述第一依赖信息和所述第三依赖信息,确定所述目标软件的组件依赖信息。
本步骤中,可以根据所述目标软件直接调用至少一个第一组件的第一依赖关系、每个所述第一组件携带的第一版本信息、每个所述第一组件调用至少一个第三组件的第三依赖关系以及每个所述第三组件携带的第四版本信息,确定所述目标软件的组件依赖信息。
具体的,所述第三依赖信息还包括每个所述第一组件携带的第五版本信息,所述第一版本信息指示的版本范围大于所述第五版本信息指示的版本范围。
可以将所述第一依赖关系和所述第三依赖关系进行组合,得到所述目标软件的组件依赖关系;将所述第三依赖信息中所述第一组件携带的第五版本信息确定为所述第一组件的依赖版本信息;基于所述组件依赖关系、所述第一组件的依赖版本信息以及所述第二组件携带的第二版本信息,生成所述组件依赖信息。
这样,可以通过第三依赖关系对第一依赖关系进行补充,得到目标软件的组件依赖关系,有助于提升组件依赖关系的全面性,并且在第一依赖信息和第三依赖信息均包括第一组件的版本信息的情况下,最终保留指示的版本范围更小的第五版本信息,将其作为第一组件的依赖版本信息,从而综合组件依赖关系、第一组件的依赖版本信息以及第二组件携带的第二版本信息,生成组件依赖信息,有助于提升信息确定的精确性和完整性。
示例性的,请同时参阅图10,图10为本公开实施例所提供的另一种组件依赖信息的结构示意图。如图10中所示,版本号为1.0.0的目标软件foo调用版本号为2.1.5的组件a和版本号为1.3.1的组件c,版本号为2.1.5的组件a调用版本信息为^1.1.9的组件b,版本号为1.3.1的组件c调用版本信息为^1.2.1的组件b。这里版本号为1.0.0的目标软件foo,分别与版本号为2.1.5的组件a和版本号为1.3.1的组件c之间通过实线连接,表示版本号为1.0.0的目标软件foo,分别与版本号为2.1.5的组件a和版本号为1.3.1的组件c之间均为直接依赖关系。版本号为2.1.5的组件a与版本信息为^1.1.9的组件b之间通过虚线连接,表示版本号为2.1.5的组件a与版本信息为^1.1.9的组件b之间为直接依赖关系,版本号为1.0.0的目标软件foo与版本信息为^1.1.9的组件b之间为间接依赖关系。并且版本号为1.3.1的组件c与版本信息为^1.2.1的组件b之间也通过虚线连接,表示版本号为1.3.1的组件c与版本信息为^1.2.1的组件b之间为直接依赖关系,版本号为1.0.0的目标软件foo与版本信息为^1.2.1的组件b之间为间接依赖关系。
本公开实施例提供的SCA组件依赖信息的确定方法,本公开实施例中,无需调用包管理器来解析文件,直接对目标软件的软件依赖管理文件进行解析,这样,文件解析无需依赖与包管理器的运行环境一致和版本一致,针对任何运行环境和任何版本的目标软件都可以进行组件依赖信息的确定,通过兼容性的组件依赖信息确定方法,有助于保障确定组件依赖信息的效果,减少调用包管理器的资源耗费,降低信息确定过程中出现错误的可能性。
进一步的,在对软件依赖管理文件进行解析得到第一依赖信息的基础上,还可以通过与目标软件对应的组件库得到第三依赖信息,通过第三依赖信息对第一依赖信息进行补充得到目标软件的组件依赖信息,这样,即便在软件依赖管理文件残缺或者不符合规范的情况下,仍然可以最大化地得到组件依赖信息,有助于提升组件依赖信息的全面性和完整性,提升信息确定的精确性。
更进一步的,本方法无需获取目标软件的完整代码,只需获取目标软件的软件依赖管理文件即可,有效降低组件依赖信息确定的复杂度。
本领域技术人员可以理解,在具体实施方式的上述方法中,各步骤的撰写顺序并不意味着严格的执行顺序而对实施过程构成任何限定,各步骤的具体执行顺序应当以其功能和可能的内在逻辑确定。
基于同一发明构思,本公开实施例中还提供了与SCA组件依赖信息的确定方法对应的SCA组件依赖信息的确定装置,由于本公开实施例中的SCA组件依赖信息的确定装置解决问题的原理与本公开实施例上述SCA组件依赖信息的确定方法相似,因此SCA组件依赖信息的确定装置的实施可以参见SCA组件依赖信息的确定方法的实施,重复之处不再赘述。
请参阅图11和图12,图11为本公开实施例提供的一种SCA组件依赖信息的确定装置的示意图之一,图12为本公开实施例提供的一种SCA组件依赖信息的确定装置的示意图之二。如图11中所示,本公开实施例提供的SCA组件依赖信息的确定装置1100包括:
文件确定模块1110,用于获取目标软件的文件包;所述文件包包括所述目标软件的软件依赖管理文件,所述软件依赖管理文件用于记录所述目标软件直接调用的组件信息;
第一文件解析模块1120,用于对所述软件依赖管理文件进行解析,得到第一依赖信息,所述第一依赖信息包括所述目标软件直接调用至少一个第一组件的第一依赖关系以及每个所述第一组件携带的第一版本信息;
文件检测模块1130,用于确定所述文件包中是否存在目标文件,所述目标文件用于记录所述目标软件调用的组件信息;
第二文件解析模块1140,用于在所述文件包中存在所述目标文件的情况下,对所述目标文件进行解析,得到第二依赖信息,所述第二依赖信息包括每个所述第一组件调用至少一个第二组件的第二依赖关系以及每个所述第二组件携带的第二版本信息;
第一信息确定模块1150,用于基于所述第一依赖信息和所述第二依赖信息,确定所述目标软件的组件依赖关系。
一种可选的实施方式中,所述第二依赖信息还包括每个所述第一组件携带的第三版本信息,所述第一版本信息指示的版本范围大于所述第三版本信息指示的版本范围;所述第一信息确定模块1150具体用于:
将所述第一依赖关系和所述第二依赖关系进行组合,得到所述目标软件的组件依赖关系;
将所述第二依赖信息中所述第一组件携带的第三版本信息确定为所述第一组件的依赖版本信息;
基于所述组件依赖关系、所述第一组件的依赖版本信息以及所述第二组件携带的第二版本信息,生成所述组件依赖信息。
一种可选的实施方式中,所述目标文件包括软件目录文件,所述软件目录文件包括所述目标软件调用的每个第一组件的组件目录文件;所述第二文件解析模块1140在用于所述对所述目标文件进行解析,得到第二依赖信息时,具体用于:
对所述软件目录文件进行解析,得到所述第二依赖关系;
对所述软件目录文件和所述组件目录文件进行解析,得到每个所述第二组件携带的第二版本信息;
基于所述第二依赖关系以及每个所述第二组件携带的第二版本信息,确定所述第二依赖信息。
一种可选的实施方式中,所述软件目录文件包括所述目标软件直接调用的每个第一组件的第一组件依赖管理文件,所述第一组件依赖管理文件用于记录该第一组件调用的组件信息;所述第二文件解析模块1140在用于所述对所述软件目录文件进行解析,得到所述第二依赖关系时,具体用于:
针对每个所述第一组件,从所述软件目录文件中提取所述第一组件依赖管理文件;
基于所述第一组件依赖管理文件,确定所述第二依赖关系。
一种可选的实施方式中,所述组件目录文件包括该第一组件调用的每个所述第二组件的第二组件依赖管理文件;所述软件目录文件包括所述目标软件直接和间接调用的每个组件的组件依赖管理文件,所述组件依赖管理文件用于记录该组件调用的组件信息;所述第二文件解析模块1140在用于所述对所述软件目录文件和所述组件目录文件进行解析,得到每个所述第二组件携带的第二版本信息时,具体用于:
针对每个所述第一组件,基于所述软件目录文件和所述组件目录文件,得到所述第二组件的第二组件依赖管理文件;
基于所述第二组件依赖管理文件,确定所述第二组件携带的第二版本信息。
一种可选的实施方式中,所述第二文件解析模块1140在用于所述基于所述软件目录文件和所述组件目录文件,得到所述第二组件的第二组件依赖管理文件时,具体用于:
确定所述组件目录文件中是否存在所述第二组件;
在所述组件目录文件中存在所述第二组件的情况下,从所述组件目录文件中提取所述第二组件依赖管理文件;
在所述组件目录文件中不存在所述第二组件的情况下,从所述软件目录文件中提取所述第二组件依赖管理文件。
一种可选的实施方式中,所述目标文件包括依赖信息文件;所述第二文件解析模块1140在用于所述对所述目标文件进行解析,得到第二依赖信息时,具体用于:
确定所述依赖信息文件的文件结构,不同的文件结构对应不同的解析方式;
按照所述文件结构对应的解析方式,对所述依赖信息文件进行解析,得到所述第二依赖信息。
一种可选的实施方式中,所述文件结构包括第一文件结构,所述第一文件结构表征为按照所述目标软件和组件之间的直接依赖关系以及各个组件之间的直接依赖关系进行层级划分的结构;所述第二文件解析模块1140在用于所述按照所述文件结构对应的解析方式,对所述依赖信息文件进行解析,得到所述第二依赖信息时,具体用于:
在所述文件结构为所述第一文件结构的情况下,从所述依赖信息文件中提取得到至少一个第二依赖关系,以及每个所述第二依赖关系中的所述第二组件携带的第二版本信息;
基于所述第二依赖关系以及每个所述第二组件携带的第二版本信息,确定所述第二依赖信息。
一种可选的实施方式中,所述文件结构包括第二文件结构,所述第二文件结构表征为将与所述目标软件存在直接和间接依赖关系的各个组件设置在同一层级下,并且所述第二文件结构的依赖信息文件包括与所述目标软件存在直接和间接依赖关系的各个组件的目录信息;所述第二文件解析模块1140在用于所述按照所述文件结构对应的解析方式,对所述依赖信息文件进行解析,得到所述第二依赖信息时,具体用于:
在所述文件结构为所述第二文件结构的情况下,从所述依赖信息文件中提取得到各个所述目录信息,所述目录信息包括该组件的版本信息和/或该组件调用其他组件的依赖关系;
从各个所述目录信息中提取得到至少一个第二依赖关系,以及每个所述第二依赖关系中的所述第二组件携带的第二版本信息;
基于所述第二依赖关系以及每个所述第二组件携带的第二版本信息,确定所述第二依赖信息。
一种可选的实施方式中,如图12中所示,所述SCA组件依赖信息的确定装置1100还包括第二信息确定模块1160,所述第二信息确定模块1160用于:
在所述文件包中不存在所述目标文件的情况下,从与所述目标软件对应的组件库中获取所述第一组件的组件信息;
基于从所述组件库中获取到的所述第一组件的组件信息,得到第三依赖信息,所述第三依赖信息包括每个所述第一组件调用至少一个第三组件的第三依赖关系以及每个所述第三组件携带的第四版本信息;
基于所述第一依赖信息和所述第三依赖信息,确定所述目标软件的组件依赖信息。
一种可选的实施方式中,所述第三依赖信息还包括每个所述第一组件携带的第五版本信息;所述第二信息确定模块1160在用于所述基于从所述组件库中获取到的所述第一组件的组件信息,得到第三依赖信息时,具体用于:
基于从所述组件库中获取到的所述第一组件的组件信息,确定所述第一组件的至少一个历史版本、以及每个历史版本的第一组件调用至少一个第三组件的依赖关系,以及所述第三组件对应的版本信息;
基于所述第一版本信息指示的版本范围,从至少一个历史版本中确定目标历史版本,所述目标历史版本为位于所述版本范围内的各个历史版本中的最新版本;
将所述目标历史版本确定为所述第五版本信息,将所述目标历史版本的第一组件调用至少一个第三组件的依赖关系确定为所述第三依赖关系,并将与所述目标历史版本的第一组件存在所述第三依赖关系的第三组件对应的版本信息确定为所述第四版本信息。
关于装置中的各模块的处理流程、以及各模块之间的交互流程的描述可以参照上述方法实施例中的相关说明,这里不再详述。
本公开实施例提供的SCA组件依赖信息的确定装置,无需调用包管理器来解析文件,直接对目标软件的软件依赖管理文件和目标文件进行解析,这样,文件解析无需依赖与包管理器的运行环境一致和版本一致,针对任何运行环境和任何版本的目标软件都可以进行组件依赖信息的确定,通过兼容性的组件依赖信息确定方法,有助于保障确定组件依赖信息的效果,减少调用包管理器的资源耗费,降低信息确定过程中出现错误的可能性。
进一步的,在对软件依赖管理文件进行解析得到第一依赖信息的基础上,还可以对目标文件进行解析得到第二依赖信息,通过第二依赖信息对第一依赖信息进行补充得到目标软件的组件依赖信息,这样,即便在软件依赖管理文件残缺或者不符合规范的情况下,仍然可以最大化地得到组件依赖信息,有助于提升组件依赖信息的全面性和完整性,提升信息确定的精确性。
更进一步的,本方法无需获取目标软件的完整代码,只需获取目标软件的软件依赖管理文件和目标文件即可,有效降低组件依赖信息确定的复杂度。
对应于上述的SCA组件依赖信息的确定方法,本公开实施例还提供了一种电子设备1300,如图13中所示,为本公开实施例提供的电子设备1300的结构示意图,包括:
处理器1310、存储器1320、和总线1330。其中,存储器1320用于存储执行指令,包括内存1321和外部存储器1322;这里的内存1321也称内存储器,用于暂时存放处理器1310中的运算数据,以及与硬盘等外部存储器1322交换的数据,处理器1310通过内存1321与外部存储器1322进行数据交换。
本申请实施例中,存储器1320具体用于存储执行本申请方案的应用程序代码,并由处理器1310来控制执行。也即,当电子设备1300运行时,处理器1310与存储器1320之间通过总线1330通信,使得处理器1310执行存储器1320中存储的应用程序代码,进而执行前述任一实施例中所述的SCA组件依赖信息的确定方法的步骤。
其中,存储器1320可以是,但不限于,随机存取存储器(Random Access Memory,RAM),只读存储器(Read Only Memory,ROM),可编程只读存储器(Programmable Read-Only Memory,PROM),可擦除只读存储器(Erasable Programmable Read-Only Memory,EPROM),电可擦除只读存储器(Electric Erasable Programmable Read-Only Memory,EEPROM)等。
处理器1310可能是一种集成电路芯片,具有信号的处理能力。上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(NetworkProcessor,NP)等;还可以是数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(FieldProgrammable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
可以理解的是,本申请实施例示意的结构并不构成对电子设备1300的具体限定。在本申请另一些实施例中,电子设备1300可以包括比图示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。图示的部件可以以硬件,软件或软件和硬件的组合实现。
本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述方法实施例中所述的SCA组件依赖信息的确定方法的步骤。其中,该存储介质可以是易失性或非易失的计算机可读取存储介质。
本公开实施例还提供一种计算机程序产品,该计算机程序产品包括有计算机指令,所述计算机指令被处理器执行时可以执行上述方法实施例中所述的SCA组件依赖信息的确定方法的步骤,具体可参见上述方法实施例,在此不再赘述。
其中,上述计算机程序产品可以具体通过硬件、软件或其结合的方式实现。在一个可选实施例中,所述计算机程序产品具体体现为计算机存储介质,在另一个可选实施例中,计算机程序产品具体体现为软件产品,例如软件开发包(Software Development Kit,SDK)等等。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的设备和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本公开所提供的几个实施例中,应该理解到,所揭露的设备、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上所述实施例,仅为本公开的具体实施方式,用以说明本公开的技术方案,而非对其限制,本公开的保护范围并不局限于此,尽管参照前述实施例对本公开进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本公开实施例技术方案的精神和范围,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应所述以权利要求的保护范围为准。
Claims (13)
1.一种SCA组件依赖信息的确定方法,其特征在于,所述方法包括:
获取目标软件的文件包;所述文件包包括所述目标软件的软件依赖管理文件,所述软件依赖管理文件用于记录所述目标软件直接调用的组件信息;
对所述软件依赖管理文件进行解析,得到第一依赖信息,所述第一依赖信息包括所述目标软件直接调用至少一个第一组件的第一依赖关系以及每个所述第一组件携带的第一版本信息;
确定所述文件包中是否存在目标文件,所述目标文件用于记录所述目标软件调用的组件信息;
在所述文件包中存在所述目标文件的情况下,对所述目标文件进行解析,得到第二依赖信息,所述第二依赖信息包括每个所述第一组件调用至少一个第二组件的第二依赖关系以及每个所述第二组件携带的第二版本信息;
基于所述第一依赖信息和所述第二依赖信息,确定所述目标软件的组件依赖信息;
所述第二依赖信息还包括每个所述第一组件携带的第三版本信息,所述第一版本信息指示的版本范围大于所述第三版本信息指示的版本范围;所述基于所述第一依赖信息和所述第二依赖信息,确定所述目标软件的组件依赖信息,包括:
将所述第一依赖关系和所述第二依赖关系进行组合,得到所述目标软件的组件依赖关系;
将所述第二依赖信息中所述第一组件携带的第三版本信息确定为所述第一组件的依赖版本信息;
基于所述组件依赖关系、所述第一组件的依赖版本信息以及所述第二组件携带的第二版本信息,生成所述组件依赖信息。
2.根据权利要求1所述的方法,其特征在于,所述目标文件包括软件目录文件,所述软件目录文件包括所述目标软件调用的每个第一组件的组件目录文件;所述对所述目标文件进行解析,得到第二依赖信息,包括:
对所述软件目录文件进行解析,得到所述第二依赖关系;
对所述软件目录文件和所述组件目录文件进行解析,得到每个所述第二组件携带的第二版本信息;
基于所述第二依赖关系以及每个所述第二组件携带的第二版本信息,确定所述第二依赖信息。
3.根据权利要求2所述的方法,其特征在于,所述软件目录文件包括所述目标软件直接调用的每个第一组件的第一组件依赖管理文件,所述第一组件依赖管理文件用于记录该第一组件调用的组件信息;所述对所述软件目录文件进行解析,得到所述第二依赖关系,包括:
针对每个所述第一组件,从所述软件目录文件中提取所述第一组件依赖管理文件;
基于所述第一组件依赖管理文件,确定所述第二依赖关系。
4.根据权利要求2所述的方法,其特征在于,所述组件目录文件包括该第一组件调用的每个所述第二组件的第二组件依赖管理文件;所述软件目录文件包括所述目标软件直接和间接调用的每个组件的组件依赖管理文件,所述组件依赖管理文件用于记录该组件调用的组件信息;
所述对所述软件目录文件和所述组件目录文件进行解析,得到每个所述第二组件携带的第二版本信息,包括:
针对每个所述第一组件,基于所述软件目录文件和所述组件目录文件,得到所述第二组件的第二组件依赖管理文件;
基于所述第二组件依赖管理文件,确定所述第二组件携带的第二版本信息。
5.根据权利要求4所述的方法,其特征在于,所述基于所述软件目录文件和所述组件目录文件,得到所述第二组件的第二组件依赖管理文件,包括:
确定所述组件目录文件中是否存在所述第二组件;
在所述组件目录文件中存在所述第二组件的情况下,从所述组件目录文件中提取所述第二组件依赖管理文件;
在所述组件目录文件中不存在所述第二组件的情况下,从所述软件目录文件中提取所述第二组件依赖管理文件。
6.根据权利要求1所述的方法,其特征在于,所述目标文件包括依赖信息文件;所述对所述目标文件进行解析,得到第二依赖信息,包括:
确定所述依赖信息文件的文件结构,不同的文件结构对应不同的解析方式;
按照所述文件结构对应的解析方式,对所述依赖信息文件进行解析,得到所述第二依赖信息。
7.根据权利要求6所述的方法,其特征在于,所述文件结构包括第一文件结构,所述第一文件结构表征为按照所述目标软件和组件之间的直接依赖关系以及各个组件之间的直接依赖关系进行层级划分的结构;所述按照所述文件结构对应的解析方式,对所述依赖信息文件进行解析,得到所述第二依赖信息,包括:
在所述文件结构为所述第一文件结构的情况下,从所述依赖信息文件中提取得到至少一个第二依赖关系,以及每个所述第二依赖关系中的所述第二组件携带的第二版本信息;
基于所述第二依赖关系以及每个所述第二组件携带的第二版本信息,确定所述第二依赖信息。
8.根据权利要求6所述的方法,其特征在于,所述文件结构包括第二文件结构,所述第二文件结构表征为将与所述目标软件存在直接和间接依赖关系的各个组件设置在同一层级下,并且所述第二文件结构的依赖信息文件包括与所述目标软件存在直接和间接依赖关系的各个组件的目录信息;所述按照所述文件结构对应的解析方式,对所述依赖信息文件进行解析,得到所述第二依赖信息,包括:
在所述文件结构为所述第二文件结构的情况下,从所述依赖信息文件中提取得到各个所述目录信息,所述目录信息包括该组件的版本信息和/或该组件调用其他组件的依赖关系;
从各个所述目录信息中提取得到至少一个第二依赖关系,以及每个所述第二依赖关系中的所述第二组件携带的第二版本信息;
基于所述第二依赖关系以及每个所述第二组件携带的第二版本信息,确定所述第二依赖信息。
9.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在所述文件包中不存在所述目标文件的情况下,从与所述目标软件对应的组件库中获取所述第一组件的组件信息;
基于从所述组件库中获取到的所述第一组件的组件信息,得到第三依赖信息,所述第三依赖信息包括每个所述第一组件调用至少一个第三组件的第三依赖关系以及每个所述第三组件携带的第四版本信息;
基于所述第一依赖信息和所述第三依赖信息,确定所述目标软件的组件依赖信息。
10.根据权利要求9所述的方法,其特征在于,所述第三依赖信息还包括每个所述第一组件携带的第五版本信息;所述基于从所述组件库中获取到的所述第一组件的组件信息,得到第三依赖信息,包括:
基于从所述组件库中获取到的所述第一组件的组件信息,确定所述第一组件的至少一个历史版本、以及每个历史版本的第一组件调用至少一个第三组件的依赖关系,以及所述第三组件对应的版本信息;
基于所述第一版本信息指示的版本范围,从至少一个历史版本中确定目标历史版本,所述目标历史版本为位于所述版本范围内的各个历史版本中的最新版本;
将所述目标历史版本确定为所述第五版本信息,将所述目标历史版本的第一组件调用至少一个第三组件的依赖关系确定为所述第三依赖关系,并将与所述目标历史版本的第一组件存在所述第三依赖关系的第三组件对应的版本信息确定为所述第四版本信息。
11.一种SCA组件依赖信息的确定装置,其特征在于,所述装置包括:
文件确定模块,用于获取目标软件的文件包;所述文件包包括所述目标软件的软件依赖管理文件,所述软件依赖管理文件用于记录所述目标软件直接调用的组件信息;
第一文件解析模块,用于对所述软件依赖管理文件进行解析,得到第一依赖信息,所述第一依赖信息包括所述目标软件直接调用至少一个第一组件的第一依赖关系以及每个所述第一组件携带的第一版本信息;
文件检测模块,用于确定所述文件包中是否存在目标文件,所述目标文件用于记录所述目标软件调用的组件信息;
第二文件解析模块,用于在所述文件包中存在所述目标文件的情况下,对所述目标文件进行解析,得到第二依赖信息,所述第二依赖信息包括每个所述第一组件调用至少一个第二组件的第二依赖关系以及每个所述第二组件携带的第二版本信息;
第一信息确定模块,用于基于所述第一依赖信息和所述第二依赖信息,确定所述目标软件的组件依赖信息;
所述第二依赖信息还包括每个所述第一组件携带的第三版本信息,所述第一版本信息指示的版本范围大于所述第三版本信息指示的版本范围;所述第一信息确定模块具体用于:
将所述第一依赖关系和所述第二依赖关系进行组合,得到所述目标软件的组件依赖关系;
将所述第二依赖信息中所述第一组件携带的第三版本信息确定为所述第一组件的依赖版本信息;
基于所述组件依赖关系、所述第一组件的依赖版本信息以及所述第二组件携带的第二版本信息,生成所述组件依赖信息。
12.一种电子设备,其特征在于,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当电子设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行如权利要求1至10中任一项所述的SCA组件依赖信息的确定方法的步骤。
13.一种计算机可读存储介质,其特征在于,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行如权利要求1至10中任一项所述的SCA组件依赖信息的确定方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311735364.XA CN117667080B (zh) | 2023-12-15 | 2023-12-15 | 一种sca组件依赖信息的确定方法、装置、设备及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311735364.XA CN117667080B (zh) | 2023-12-15 | 2023-12-15 | 一种sca组件依赖信息的确定方法、装置、设备及介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117667080A CN117667080A (zh) | 2024-03-08 |
CN117667080B true CN117667080B (zh) | 2024-05-28 |
Family
ID=90076954
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311735364.XA Active CN117667080B (zh) | 2023-12-15 | 2023-12-15 | 一种sca组件依赖信息的确定方法、装置、设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117667080B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110737460A (zh) * | 2019-09-04 | 2020-01-31 | 厦门网宿有限公司 | 一种平台项目管理方法及装置 |
CN112711438A (zh) * | 2021-01-13 | 2021-04-27 | 苏州棱镜七彩信息科技有限公司 | 依赖组件信息提取方法、设备及计算机可读存储介质 |
CN114356447A (zh) * | 2021-12-28 | 2022-04-15 | 广东三维家信息科技有限公司 | 一种插件管理方法、装置、电子设备及存储介质 |
CN114816393A (zh) * | 2022-05-18 | 2022-07-29 | 北京百度网讯科技有限公司 | 信息生成方法、装置、设备以及存储介质 |
CN114995871A (zh) * | 2022-06-07 | 2022-09-02 | 上海时代光华教育发展有限公司 | 一种软件版本适配方法、装置、电子设备和存储介质 |
CN115016831A (zh) * | 2022-08-08 | 2022-09-06 | 北京安普诺信息技术有限公司 | 一种依赖组件信息获取方法、装置及存储介质 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9563434B2 (en) * | 2010-02-02 | 2017-02-07 | International Business Machines Corporation | Mining dependencies from disk images |
US11055081B2 (en) * | 2018-09-17 | 2021-07-06 | International Business Machines Corporation | Recommending software project dependency upgrades |
-
2023
- 2023-12-15 CN CN202311735364.XA patent/CN117667080B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110737460A (zh) * | 2019-09-04 | 2020-01-31 | 厦门网宿有限公司 | 一种平台项目管理方法及装置 |
CN112711438A (zh) * | 2021-01-13 | 2021-04-27 | 苏州棱镜七彩信息科技有限公司 | 依赖组件信息提取方法、设备及计算机可读存储介质 |
CN114356447A (zh) * | 2021-12-28 | 2022-04-15 | 广东三维家信息科技有限公司 | 一种插件管理方法、装置、电子设备及存储介质 |
CN114816393A (zh) * | 2022-05-18 | 2022-07-29 | 北京百度网讯科技有限公司 | 信息生成方法、装置、设备以及存储介质 |
CN114995871A (zh) * | 2022-06-07 | 2022-09-02 | 上海时代光华教育发展有限公司 | 一种软件版本适配方法、装置、电子设备和存储介质 |
CN115016831A (zh) * | 2022-08-08 | 2022-09-06 | 北京安普诺信息技术有限公司 | 一种依赖组件信息获取方法、装置及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN117667080A (zh) | 2024-03-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110007920B (zh) | 一种获取代码依赖关系的方法、装置及电子设备 | |
CN110007957A (zh) | 调用链路构建方法、装置及设备 | |
CN111124906A (zh) | 基于动态埋点的跟踪方法、编译方法、装置和电子设备 | |
CN112733158B (zh) | Android系统漏洞检测方法、电子设备及存储介质 | |
EP3462330A1 (en) | Fault tolerant adapter system to consume database as a service | |
US8132093B2 (en) | Instance annotation in object-oriented programming | |
US20210357206A1 (en) | Modification of Codified Infrastructure for Orchestration in a Multi-Cloud Environment | |
CN106411970A (zh) | 一种基于服务调用的故障处理方法、装置和系统 | |
CN112181430B (zh) | 代码变更统计方法、装置、电子设备及存储介质 | |
CN110975279B (zh) | 一种游戏数据处理方法、装置、游戏服务器及存储介质 | |
CN115408193A (zh) | 多模块间错误码处理方法及装置 | |
CN115269683A (zh) | 一种基于多方协作的数据查询方法及装置 | |
US10873628B2 (en) | System and method for non-intrusive context correlation across cloud services | |
CN110457132B (zh) | 一种功能对象的创建方法、装置和终端设备 | |
CN110598419A (zh) | 一种区块链客户端漏洞挖掘方法、装置、设备及存储介质 | |
CN114116509A (zh) | 程序分析方法、装置、电子设备和存储介质 | |
CN117667080B (zh) | 一种sca组件依赖信息的确定方法、装置、设备及介质 | |
CN111124883B (zh) | 一种基于树形表格的测试用例库引入方法、系统及设备 | |
US10922210B2 (en) | Automatic software behavior identification using execution record | |
US8607201B2 (en) | Augmenting visualization of a call stack | |
CN111352631A (zh) | 一种接口兼容性检测方法及装置 | |
CN110955415A (zh) | 一种投影多平台服务适配的方法 | |
CN116578282A (zh) | 代码生成方法、装置、电子设备及介质 | |
CN115809193A (zh) | 前端逆向异常数据健壮性检测方法、装置及存储介质 | |
CN112799954B (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 |