CN116521742B - 源代码分析结果聚合方法、装置、电子设备及存储介质 - Google Patents

源代码分析结果聚合方法、装置、电子设备及存储介质 Download PDF

Info

Publication number
CN116521742B
CN116521742B CN202310746822.3A CN202310746822A CN116521742B CN 116521742 B CN116521742 B CN 116521742B CN 202310746822 A CN202310746822 A CN 202310746822A CN 116521742 B CN116521742 B CN 116521742B
Authority
CN
China
Prior art keywords
file
report
list
module
source code
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
Application number
CN202310746822.3A
Other languages
English (en)
Other versions
CN116521742A (zh
Inventor
张涛
陈钟
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Peking University
Original Assignee
Peking University
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Peking University filed Critical Peking University
Priority to CN202310746822.3A priority Critical patent/CN116521742B/zh
Publication of CN116521742A publication Critical patent/CN116521742A/zh
Application granted granted Critical
Publication of CN116521742B publication Critical patent/CN116521742B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24553Query execution of query operations
    • G06F16/24554Unary operations; Data partitioning operations
    • G06F16/24556Aggregation; Duplicate elimination
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3608Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/21Design, administration or maintenance of databases
    • G06F16/215Improving data quality; Data cleansing, e.g. de-duplication, removing invalid entries or correcting typographical errors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/25Integrating or interfacing systems involving database management systems
    • G06F16/254Extract, transform and load [ETL] procedures, e.g. ETL data flows in data warehouses

Abstract

本申请提供一种源代码分析结果聚合方法、装置、电子设备及存储介质,涉及源代码分析领域,包括:对目标源代码进行文件统计,构造初始综合报告;获取所述目标源代码的多个不同来源的分析报告,对所述多个不同来源的分析报告进行编码生成对应的报告组件集合;将所述报告组件集合填充到初始综合报告中,输出最终综合报告。将不同来源的多份原始分析报告的结果进行清洗,并聚合填充到综合报告。利用多种分析报告的结果,实现根据问题在源代码中的位置进行编排的效果。相当于提供了不同维度分析结果的统一数据规格,为后续分析工作的流程化和标准化提供支撑,也便于深入挖掘不同分析维度间问题的事实联系,提升了源代码分析结果的关联性和指导意义。

Description

源代码分析结果聚合方法、装置、电子设备及存储介质
技术领域
本申请涉及源代码分析领域,具体而言,涉及一种源代码分析结果聚合方法、装置、电子设备及存储介质。
背景技术
在进行源代码分析的过程中,例如静态代码分析SAST(Static applicationsecurity testing),软件成分分析SCA(SoftwareComposition Analysis),各种独立的分析工具都可以通过自身的技术特色和优势,生成一组分析结果。这些分析结果有的存在漏报(实际存在问题但没有被检测出),有的存在误报(实际不存在问题却被识别)。经过长期的实践会发现,对一份源码工程的多种工具分析结果进行综合,经常能对误报和漏报现象有所改善。但每次依靠人工来对上万到几十万问题规模的分析报告进行综合是一项人力成本很高的行为,难以持续和流程化。
相关技术中是简单的将多种报告分别存储和呈现的朴素方法。存储方面主要是以适当方式获得分析结果后,以统一标识归档。浏览报告时,分别在对应的分析系统提供的功能界面里查阅。通过部署一个与源码分析系统没有直接关系的外部存储设施,常见包括共享存储、数据库等。额外研发分析结果的管理工具,具体根据对应分析系统的特性,实现对分析报告的抽离和转存。设置一种关联分析结果和具体分析系统的跳转程序,帮助用户跳转适当的工具查阅报告。
上述方案本质上只是减少用户切换使用具体工具浏览报告的操作负担,但不同分析报告之间的信息仍然是隔离的,对照、选取、过滤、聚合等分析工作仍然需要人工完成,并且不同分析报告之间的信息隔离使得后续分析工作难以流程化、标准化。依靠人工对报告进行整合处理也不符合当下回归分析的实际实施频率,也难以从分析结果的综合整理中享受信息整合的优势。长期以来,围绕源代码分析的领域深度细分,各种工具的有益成果缺乏联合分析视图。
发明内容
有鉴于此,本申请实施例的目的在于提供一种源代码分析结果聚合方法、装置、电子设备及存储介质,解决不同分析报告之间信息隔离的问题。
本申请实施例第一方面提供了一种源代码分析结果聚合方法,包括:对目标源代码进行文件统计,构造初始综合报告;获取所述目标源代码的多个不同来源的分析报告,对所述多个不同来源的分析报告进行编码生成对应的报告组件集合;将所述报告组件集合填充到初始综合报告中,输出最终综合报告。
因此,与相关技术中将多种报告分别存储和呈现,不同分析报告之间的信息仍然是隔离不同的是,本申请通过构造综合报告,将各种来源的多份原始报告进行清洗,并聚合填充到综合报告,利用多种分析报告的结果,实现根据问题在源代码中的位置进行编排的效果。相当于提供了不同维度分析报告的统一数据规格,为后续分析工作的流程化和标准化提供支撑,也便于后续深入挖掘不同分析维度间问题的事实联系,提升了源代码分析报告的关联性和指导意义。
结合第一方面,在本申请的一种实施方式中,所述对目标源代码进行文件统计,构造初始综合报告,包括:从所述目标源代码中提取第一文件列表,第一文件列表包括所述目标源代码中的所有文件。
作为用于组成最终综合报告的初始综合报告中的第一文件列表包括目标源代码中的所有文件,这样可以保证最终综合报告呈现的更加全面,避免报告内容因为找不到对应文件而被丢弃后的漏报问题。
可选的,所述第一文件列表包括:多个第一文件,以及与第一文件对应的文件统计信息、第一文件元信息和第一文件相对路径,以及与第一文件对应的被设置为空的第一问题列表。
通过构造初始综合报告中第一文件列表的数据结构,为后续报告内容的补充提供统一数据规格支持,便于后续的标准化和流程化,进而提升内容聚合质量和效率。
结合第一方面,在本申请的一种实施方式中,所述对目标源代码进行文件统计,构造初始综合报告还包括:从所述目标源代码中提取报告标识信息、报告统计信息和报告元信息。
通过构造初始综合报告的整体数据结构,将唯一地代表一份综合报告的标识信息,作为源代码工程目录基本属性的统计信息,以及描述报告本身额外数据的元信息,为后续报告内容的补充提供统一数据规格支持,便于后续的标准化和流程化,进而提升内容聚合质量和效率。
结合第一方面,在本申请的一种实施方式中,所述对所述多个不同来源的分析报告进行编码生成对应的报告组件集合,包括:从多个不同来源的分析报告的每一个分析报告中分别提取对应的来源标识符、组件元信息和第二文件列表组成对应的报告组件,收集所有报告组件组成对应的报告组件集合。
对应初始综合报告的数据结构,通过将不同来源的分析报告提取对应的关键数据构造报告组件的数据结构,便于后续数据内容聚合的标准化和流程化。
可选的,所述第二文件列表包括多个第二文件以及与第二文件对应的第二文件相对路径、第二文件元信息和第二问题列表。
文件相对路径唯一地表示该文件在以源代码工程目录为根路径的位置。文件元信息是可选自定义的针对该文件的一系列额外数据。通过构造报告组件中文件列表的数据结构,为后续报告内容的补充提供更丰富的数据支持,进而使报告内容聚合更加全面。
可选的,所述第二问题列表包括多个第二问题以及与第二问题对应的位置信息和类型描述符。
位置信息是问题在源代码中涉及的范围,由起始和结束的行列坐标共同组成。类型描述符是表示问题定义的符号引用,用于连接一个详细的外部问题定义描述数据集合。通过对问题对应位置信息和类型描述符的构造,能够实现根据问题在源代码中的位置进行编排的效果。
结合第一方面,在本申请的一种实施方式中,所述将所述报告组件集合填充到初始综合报告中,输出最终综合报告,包括:将所述报告组件集合中的每个报告组件按照预设规则填充到初始综合报告中,所述预设规则包括:第一提取规则,从所述报告组件中提取对应的来源标识符、组件元信息和第二文件列表;第二提取规则,根据第二文件列表中的当前第二文件提取对应的第二文件相对路径、第二文件元信息和第二问题列表;从所述第一文件列表中提取与第二文件相对路径匹配的第一文件作为目标文件,并将对应的第二文件元信息追加到目标文件中;第三提取规则,从所述第二问题列表中提取当前第二问题对应的位置信息和类型描述符;第一填充规则,根据所述来源标识符、类型描述符和位置信息生成第一问题,并将第一问题填充到所述目标文件对应的第一问题列表中。
可选的,所述预设规则还包括:第一检查规则,检查所述报告组件集合中是否存在未填充的报告组件;若是,执行所述第一提取规则;若否,结束填充; 第二检查规则,检查所述第二文件列表中是否存在未处理的第二文件;若是,执行所述第二提取规则;若否,执行第三移除规则;第三检查规则,检查所述第二问题列表中是否存在未处理的第二问题;若是,执行所述第三提取规则;若否,执行第二移除规则;第二填充规则,将第一问题填充到所述目标文件对应的第一问题列表中之后,执行第一移除规则;第一移除规则,从所述第二问题列表中移除当前第二问题,执行所述第三检查规则;第二移除规则,从所述第二文件列表中移除当前第二文件,执行所述第二检查规则;第三移除规则,从所述报告组件集合中移除当前报告组件,执行所述第一检查规则。
本申请实施例第二方面提供了一种源代码分析结果聚合装置,包括:
构造模块,用于对目标源代码进行文件统计,构造初始综合报告;编码模块,用于获取所述目标源代码的多个不同来源的分析报告,对所述多个不同来源的分析报告进行编码生成对应的报告组件集合;合并模块,用于将所述报告组件集合填充到初始综合报告中,输出最终综合报告。
结合第二方面,在本申请的一种实施方式中,所述合并模块包括提取模块,所述提取模块包括:第一提取模块,用于从所述报告组件中提取对应的来源标识符、组件元信息和第二文件列表;第二提取模块,用于根据第二文件列表中的当前第二文件提取对应的第二文件相对路径、第二文件元信息和第二问题列表,从所述第一文件列表中提取与第二文件相对路径匹配的第一文件作为目标文件,并将对应的第二文件元信息追加到目标文件中;第三提取模块,用于从所述第二问题列表中提取当前第二问题对应的位置信息和类型描述符;所述合并模块还包括:填充模块,用于根据所述来源标识符、类型描述符和位置信息生成第一问题,并将第一问题填充到所述目标文件对应的第一问题列表中。
结合第二方面,在本申请的一种实施方式中,所述合并模块还包括检查模块,所述检查模块包括:第一检查模块,用于检查所述报告组件集合中是否存在未填充的报告组件,若是,执行所述第一提取规则,若否,结束填充;第二检查模块,用于检查所述第二文件列表中是否存在未处理的第二文件,若是,执行所述第二提取规则,若否,执行第三移除规则;第三检查模块,用于检查所述第二问题列表中是否存在未处理的第二问题,若是,执行所述第三提取规则,若否,执行第二移除规则;所述合并模块还包括移除模块,所述移除模块包括:第一移除模块,用于从所述第二问题列表中移除当前第二问题,执行所述第三检查规则;第二移除模块,用于从所述第二文件列表中移除当前第二文件,执行所述第二检查规则;第三移除模块,用于从所述报告组件集合中移除当前报告组件,执行所述第一检查规则;所述填充模块,还用于将第一问题填充到所述目标文件对应的第一问题列表中之后,执行第一移除规则。
本申请实施例第三方面提供了一种电子设备,所述电子设备包括存储器和处理器,所述存储器存储有计算机程序,所述处理器运行所述计算机程序时,执行本申请实施例第一方面中的任一实现方式的步骤。
本申请实施例第四方面提供了一种可读存储介质,所述可读取存储介质中存储有计算机程序,所述计算机程序在处理器上运行时,执行本申请实施例第一方面中的任一实现方式的步骤。
本申请实施例第五方面提供了一种计算机程序产品,所述计算机程序产品在计算机上运行时,执行如第一方面中的任一实现方式的步骤。
本申请实施例提供的上述技术方案与现有技术相比具有如下优点:
通过构造综合报告的数据结构,将不同来源的多份原始分析报告的结果进行清洗,并聚合填充到综合报告。利用多种分析报告的结果,实现根据问题在源代码中的位置进行编排的效果。相当于提供了不同维度分析结果的统一数据规格,为后续分析工作的流程化和标准化提供支撑,也便于后续深入挖掘不同分析维度间问题的事实联系,提升了源代码分析结果的关联性和最终综合报告的指导意义。
应当理解,发明内容部分中所描述的内容并非旨在限定本公开的实施例的关键或重要特征,亦非用于限制本公开的范围。本公开的其它特征将通过以下的描述变得容易理解。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本申请实施例提供的一种源代码分析结果聚合方法的报告组件的数据结构示意图;
图2为本申请实施例提供的一种源代码分析结果聚合方法的综合报告的数据结构示意图;
图3为本申请实施例提供的一种源代码分析结果聚合方法的流程示意图;
图4为本申请实施例提供的一种源代码分析结果聚合方法中报告组件填充至综合报告的过程示意图;
图5为本申请实施例提供的一种源代码分析结果聚合装置的结构示意图;
图6为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。在本申请的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。显而易见地,下面所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请实施例的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请实施例保护的范围。
实施例一:
请参阅图1,图1为本申请实施例提供的一种源代码分析结果聚合方法的报告组件的数据结构示意图。图1示出本发明组合成“综合报告”的“报告组件”的数据结构,“报告组件”由“组件元信息”、“来源标识符”和“第二文件列表”组成的。“来源标识符”提供标识信息能够唯一的表示该报告组件的内容是通过某个特定分析工具和方法提供。“组件元信息”是自定义可选的针对“报告组件”的一系列额外数据。“第二文件列表”中的每个第二文件都主要由“第二文件元信息”、“第二文件相对路径”和“第二问题列表”组成。“第二文件相对路径”唯一的表示该第二文件在以工程目录为根路径的位置。“第二文件元信息”是自定义可选的针对该第二文件的一系列额外数据。“第二问题列表”中的每个问题都由“位置信息”和“类型描述符”组成。“位置信息”是问题在源代码文本中涉及的范围,由起始和结束的行列坐标共同组成,具体包括起始行、起始列、结束行和结束列。“类型描述符”是表示问题定义的符号引用,用于连接一个详细的外部问题定义描述数据集合。
请参阅图2,图2为本申请实施例提供的一种源代码分析结果聚合方法的综合报告的数据结构示意图。图2示出本发明“综合报告”的数据结构,“综合报告”主要由“报告标识信息”、“报告统计信息”、“报告元信息”和“第一文件列表”组成。“报告标识信息”提供标识信息能够在世界空间唯一的代表一份综合报告(例如哈希值)。“报告统计信息”是源代码工程目录的基本属性,是可选可扩展的,如源码大小、文件数和行数等。“报告元信息”是一组描述报告本身的额外信息和“组件元信息”的总和,包括如开始时间、结束时间和元数据域等。“第一文件列表”中的每个第一文件都主要由“第一文件元信息”、“第一文件相对路径”、“文件统计信息”和“第一问题列表”组成。“第一文件元信息”是一组描述文件本身额外信息和“第二文件元信息”的总和,包括如语言标志、元数据域等。“第一文件相对路径” 唯一的表示该第一文件在以工程目录为根路径的位置。“文件统计信息”包括如文件行数等。“第一问题列表”中的每个第一问题主要由“来源描述符”、“类型描述符”和“位置信息”组成。“来源描述符”与上述“来源标识符”等同,用于提供描述信息能够唯一的表示该第一问题的内容是通过某个特定分析工具和方法提供。“类型描述符”是表示问题定义的符号引用,用于连接一个详细的外部问题定义描述数据集合。“位置信息”是问题在源代码文本中涉及的范围,由起始和结束的行列坐标共同组成,具体包括起始行、起始列、结束行和结束列。
请参阅图3,图3为本申请实施例提供的一种源代码分析结果聚合方法的流程示意图。其中,该源代码分析结果聚合方法包括以下步骤:
S100:对目标源代码进行文件统计,构造初始综合报告。
示例性地,对目标源代码工程的目录进行文件级别的统计,构造一份包含所有文件,但文件中不包含问题的初始综合报告。同时记录必要的标识信息、元信息和统计信息。令该初始综合报告为r。
本实施例中,从目标源代码中提取第一文件列表,第一文件列表包括目标源代码中的所有文件。按照定义的“综合报告”的数据结构,构造初始综合报告的主要数据要素。作为用于组成最终综合报告的初始综合报告中的第一文件列表包括目标源代码中的所有文件,这样可以保证最终综合报告呈现的更加全面,避免报告内容因为找不到对应文件而被丢弃后的漏报问题。
本实施例中,第一文件列表包括多个第一文件,以及与第一文件对应的文件统计信息、第一文件元信息和第一文件相对路径,以及与第一文件对应的被设置为空的第一问题列表。通过构造初始综合报告中第一文件列表的数据结构,为后续报告内容的补充提供统一数据规格支持,便于后续的标准化和流程化,进而提升内容聚合质量和效率。第一问题列表被设置为空是用于后续填充不同分析报告的不同问题。
本实施例中,对目标源代码进行文件统计,从所述目标源代码中提取报告标识信息、报告统计信息和报告元信息,构造初始综合报告。按照定义的“综合报告”的数据结构,构造初始综合报告的整体数据要素,如唯一地代表一份综合报告的标识信息,以及作为源代码工程目录基本属性的统计信息,以及描述报告本身额外数据的元信息,为后续报告内容的补充提供统一数据规格支持,便于后续的标准化和流程化,进而提升内容聚合质量和效率。
S200:获取所述目标源代码的多个不同来源的分析报告,对所述多个不同来源的分析报告进行编码生成对应的报告组件集合。
示例性地,可并行的将来自不同源代码分析装置(A, B, ..., N)的分析报告结果(a, b, ..., n),输入给对应的编码器(对应不同的源代码分析装置),分别生成报告组件并收集,组成报告组件集合(a', b', ..., n')。
示例性地,多个不同来源的分析报告可以是来自静态代码分析SAST工具,静态代码分析SAST工具的分析报告包括源代码静态分析相关信息的报告内容。
示例性地,多个不同来源的分析报告可以是来自软件成分分析SCA工具,软件成分分析SCA工具的分析报告包括开源组件相关信息的报告内容。
示例性地,多个不同来源的分析报告来自静态代码分析SAST工具和软件成分分析SCA工具,静态代码分析SAST工具的分析报告包括源代码静态分析相关信息的报告内容,软件成分分析SCA工具的分析报告包括开源组件相关信息的报告内容。
本实施例中,对多个不同来源的分析报告进行编码生成对应的报告组件集合,具体是从每个来源的分析报告中按照定义的“报告组件”的数据结构提取对应的来源标识符、组件元信息和第二文件列表组成对应的报告组件,收集所有报告组件组成对应的报告组件集合。
对应定义的“报告组件”数据结构,通过将不同来源的分析报告提取对应的关键数据构造报告组件的数据要素,便于后续数据内容聚合的标准化和流程化。
本实施例中,第二文件列表包括多个第二文件以及与第二文件对应的第二文件相对路径、第二文件元信息和第二问题列表。文件相对路径唯一地表示该文件在以源代码工程目录为根路径的位置。文件元信息是可选自定义的针对该文件的一系列额外数据。通过构造报告组件中文件列表的数据结构,为后续报告内容的补充提供更丰富的数据支持,进而使报告内容聚合更加全面。
本实施例中,第二问题列表包括多个第二问题以及与第二问题对应的位置信息和类型描述符。位置信息是问题在源代码中涉及的范围,由起始和结束的行列坐标共同组成。类型描述符是表示问题定义的符号引用,用于连接一个详细的外部问题定义描述数据集合。通过对问题对应位置信息和类型描述符的构造,能够实现根据问题在源代码中的位置进行编排的效果。
S300:将所述报告组件集合填充到初始综合报告中,输出最终综合报告。
示例性地,使用填充流程,将步骤S100中的初始综合报告r和步骤S200中的报告组件集合(a', b', ..., n')输入给填充器,以将所有报告组件按预设规则合并进r,最终完成最终综合报告R。
请参阅图4,图4为本申请实施例提供的一种源代码分析结果聚合方法中报告组件填充至综合报告的过程示意图。
本实施例中,将报告组件集合中的每个报告组件按照预设规则填充到初始综合报告中。预设规则主要有检查规则、提取规则、填充规则和移除规则。
检查规则包括:第一检查规则,检查报告组件集合中是否存在未填充的报告组件;若是,执行第一提取规则;若否,结束填充; 第二检查规则,检查第二文件列表中是否存在未处理的第二文件;若是,执行所述第二提取规则;若否,执行第三移除规则;第三检查规则,检查第二问题列表中是否存在未处理的第二问题;若是,执行所述第三提取规则;若否,执行第二移除规则。
提取规则包括:第一提取规则,从报告组件中提取对应的来源标识符、组件元信息和第二文件列表。第二提取规则,根据第二文件列表中的当前第二文件提取对应的第二文件相对路径、第二文件元信息和第二问题列表;从第一文件列表中提取与第二文件相对路径匹配的第一文件作为目标文件,并将对应的第二文件元信息追加到目标文件中;具体是将第二文件元信息填充到第一文件元信息中。第三提取规则,从第二问题列表中提取当前第二问题对应的位置信息和类型描述符。
填充规则包括:第一填充规则,根据提取到的来源标识符、类型描述符和位置信息生成新的第一问题,并将第一问题填充到目标文件(第一文件)对应的空的第一问题列表中。第二填充规则,将第一问题填充到目标文件对应的第一问题列表中之后,执行第一移除规则。
移除规则包括:第一移除规则,从第二问题列表中移除当前第二问题,执行第三检查规则,检查第二问题列表中的其它第二问题。第二移除规则,从第二文件列表中移除当前第二文件,执行第二检查规则,检查第二文件列表中的其它第二文件。第三移除规则,从报告组件集合中移除当前报告组件,执行第一检查规则,检查报告组件集合中的其它报告组件。
报告组件集合按照预设规则填充到初始综合报告,其步骤如下:
1.设初始综合报告为r,报告组件集合为C;
2.检查报告组件集合C中是否存在未填充的组件?具体是通过检查报告组件集合对应的列表长度是否大于0,当大于0时,进行步骤3。当等于0时,跳转执行步骤13;
3.从当前报告组件c中提取来源标识符s,提取组件元信息cm并追加到初始综合报告r中,获取第二文件列表F;
4.检查第二文件列表F中是否存在未处理的第二文件?具体是通过检查第二文件列表的长度是否大于0,当大于0时,进行步骤5。当等于0时,跳转执行步骤12;
5.从当前第二文件f中,提取第二文件相对路径p,提取第二文件元信息fm,获取第二问题列表I;
6.通过第二文件相对路径p从初始综合报告r中提取第一文件,记作目标文件rf,具体是从第一文件列表中提取与第二文件相对路径相同的第一文件相对路径对应的第一文件作为目标文件,并将对应的第二文件元信息fm追加到目标文件中;
7.检查第二问题列表I中是否存在未处理的第二问题?具体是通过检查第二问题列表的长度是否大于0,当大于0时,进行步骤8。当等于0时,跳转执行步骤11;
8.从当前第二问题i中提取对应的代码的位置信息pos,提取类型描述符t;
9.用来源标识符s、类型描述符t、代码的位置信息pos组成新问题(即第一问题)并追加到目标文件rf(即第一文件)的问题列表中;
10.移除当前第二问题i,跳转执行步骤7;
11.移除当前第二文件f,跳转执行步骤4;
12.移除当前报告组件c,跳转执行步骤2;
13.结束。
在一些实施场景中,结合图1至图4,以JSON规范为序列化形式举例,将来自A、B两个工具来源生成的分析报告结果,分别编码成报告组件a'、b',然后生成最终综合报告R的数据转化过程如下:
A工具是静态代码分析SAST工具,A工具分析的报告a编码后的报告组件a'中:来源标识符s包括"A",组件元信息cm包括"by": "admin",第二文件列表中的当前第二文件的第二文件相对路径包括"example.c",第二文件元信息fm包括"time":654801,第二问题列表的位置信息pos包括"start": [0, 0],"end": [2, 45],类型描述符t包括"foo"。
B工具是软件成分分析SCA工具,B工具分析的报告b编码后的报告组件b'中,来源标识符s包括"B",组件元信息cm包括null,第二文件列表中的当前第二文件的第二文件相对路径包括"example.c",第二问题列表的位置信息pos包括"start": [1, 0],"end": [1,20],类型描述符t包括"bar"。
构造初始综合报告,对目标源代码工程的目录进行文件级别的统计,构造包含所有文件,但文件中不包含问题的第一文件列表,第一文件列表中包括第一文件相对路径"example.c",和空的第一问题列表"issues"。同时记录报告标识信息、报告元信息和报告统计信息。
将报告组件a'、b'按照规则填充到初始综合报告中,输出的最终综合报告R包括:报告标识信息"id",报告元信息包括开始时间"startedAt"、结束时间"finishedAt"和报告元数据域"metas",报告统计信息包括文件数"files"、源码大小"size"、行数"lines",第一文件列表的第一文件相对路径包括"example.c",语言标志"language",文件统计信息包括行数"lines",第一文件元信息包括"A": 654801(来自A工具的第二文件元信息填充)。将生成的两个新的第一问题填充到第一问题列表"issues"中,与工具B相关的第一问题B是:位置信息"start": [1, 0],"end": [1, 20],来源标识符"B",类型描述符"bar",第一问题B包括该位置信息的源代码静态分析相关信息,用于后续进一步的缺陷分析定位及修复;与工具A相关的第一问题A是:位置信息"start":[0, 0],"end": [2, 45],来源标识符"A",类型描述符"foo",第一问题A包括该位置信息的开源组件相关信息,用于后续进一步的软件成分分析。
在一些实施场景中,同一位置信息同时对应SCA和SAST的不同报告的不同问题,基于上述报告聚合可以基于SCA软件成分分析识别现有开源成分,再基于开源成分选择现成的该开源成分的缺陷处置方案,直接实现对静态分析SAST结果的快速修复或处置。
本申请通过构造“综合报告”和“报告组件”,将不同来源的代码分析装置的多份不同原始报告进行数据清洗,并聚合填充到最终综合报告,利用多种分析报告的结果,实现根据问题在源代码中的位置进行编排的效果。为不同维度分析报告提供了统一数据规格,为后续分析工作的流程化和标准化提供支撑,也便于后续深入挖掘不同分析维度间问题的事实联系,提升了源代码分析报告的关联性和指导意义。本发明确认了一种具有广泛兼容性的分析综合报告的总体规格和数据结构,打破分析报告间的信息壁垒。提出了一种从原始分析报告到综合报告片段的一致化规范,为综合报告处理提供前提。提出了综合报告片段的数据聚合环节和一种具体策略实现了综合报告时数据的关联处理。定义了解析综合报告的图形渲染的必要特性,为用户提供最终一致的审阅体验,发挥综合报告数据关联分析的核心价值。
实施例二:
请参阅图5,图5为本申请实施例提供的一种源代码分析结果聚合装置的结构示意图,该装置500包括:
构造模块510,用于对目标源代码进行文件统计,构造初始综合报告;
编码模块520,用于获取所述目标源代码的多个不同来源的分析报告,对所述多个不同来源的分析报告进行编码生成对应的报告组件集合;
合并模块530,用于将所述报告组件集合填充到初始综合报告中,输出最终综合报告。
本实施例中,合并模块530包括检查模块、提取模块、填充模块和移除模块。
检查模块包括:第一检查模块532,用于检查所述报告组件集合中是否存在未填充的报告组件,若是,执行所述第一提取规则,若否,结束填充;第二检查模块532,用于检查所述第二文件列表中是否存在未处理的第二文件,若是,执行所述第二提取规则,若否,执行第三移除规则;第三检查模块533,用于检查所述第二问题列表中是否存在未处理的第二问题,若是,执行所述第三提取规则,若否,执行第二移除规则;
提取模块包括:第一提取模块534,用于从所述报告组件中提取对应的来源标识符、组件元信息和第二文件列表;第二提取模块535,用于根据第二文件列表中的当前第二文件提取对应的第二文件相对路径、第二文件元信息和第二问题列表,从所述第一文件列表中提取与第二文件相对路径匹配的第一文件作为目标文件,并将对应的第二文件元信息追加到目标文件中;第三提取模块536,用于从所述第二问题列表中提取当前第二问题对应的位置信息和类型描述符;
填充模块537,用于根据所述来源标识符、类型描述符和位置信息生成第一问题,并将第一问题填充到所述目标文件对应的第一问题列表中;还用于将第一问题填充到所述目标文件对应的第一问题列表中之后,执行第一移除规则。
移除模块包括:第一移除模块538,用于从所述第二问题列表中移除当前第二问题,执行所述第三检查规则;第二移除模块539,用于从所述第二文件列表中移除当前第二文件,执行所述第二检查规则;第三移除模块5310,用于从所述报告组件集合中移除当前报告组件,执行所述第一检查规则。
上述源代码分析结果聚合装置的详细描述,请参见上述实施例中相关方法步骤的描述。
实施例三:
请参阅图6,图6为本申请实施例提供的一种电子设备的结构示意图,该电子设备600包括:存储器610和处理器620,存储器610和处理器620通过总线630连接,存储器610存储有计算机程序,处理器620读取并运行计算机程序时,以使电子设备600可执行上述的实施例中方法的全部或部分流程,以实现源代码分析结果聚合方法中的步骤。
应当理解是,该电子设备可以是个人电脑(Personal Computer,PC)、平板电脑、智能手机等具有逻辑计算功能的电子设备。
本申请实施例还提供了一种可读存储介质,可读取存储介质中存储有计算机程序,计算机程序在处理器上运行时,执行源代码分析结果聚合方法中的步骤。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本申请的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
另外,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应所述以权利要求的保护范围为准。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

Claims (11)

1.一种源代码分析结果聚合方法,其特征在于,包括:
对目标源代码进行文件统计,构造初始综合报告,包括:
从所述目标源代码中提取第一文件列表,第一文件列表包括所述目标源代码中的所有文件;
获取所述目标源代码的多个不同来源的分析报告,对所述多个不同来源的分析报告进行编码生成对应的报告组件集合;
将所述报告组件集合填充到初始综合报告中,输出最终综合报告,包括:
将所述报告组件集合中的每个报告组件按照预设规则填充到初始综合报告中,所述预设规则包括:
第一提取规则,从所述报告组件中提取对应的来源标识符、组件元信息和第二文件列表;
第二提取规则,根据第二文件列表中的当前第二文件提取对应的第二文件相对路径、第二文件元信息和第二问题列表;从所述第一文件列表中提取与第二文件相对路径匹配的第一文件作为目标文件,并将对应的第二文件元信息追加到目标文件中;
第三提取规则,从所述第二问题列表中提取当前第二问题对应的位置信息和类型描述符;
第一填充规则,根据所述来源标识符、类型描述符和位置信息生成第一问题,并将第一问题填充到所述目标文件对应的第一问题列表中。
2.根据权利要求1所述的方法,其特征在于,所述第一文件列表包括:多个第一文件,以及与第一文件对应的文件统计信息、第一文件元信息和第一文件相对路径,以及与第一文件对应的被设置为空的第一问题列表。
3.根据权利要求1所述的方法,其特征在于,所述对目标源代码进行文件统计,构造初始综合报告还包括:
从所述目标源代码中提取报告标识信息、报告统计信息和报告元信息。
4.根据权利要求1所述的方法,其特征在于,所述对所述多个不同来源的分析报告进行编码生成对应的报告组件集合,包括:
从多个不同来源的分析报告的每一个分析报告中分别提取对应的来源标识符、组件元信息和第二文件列表组成对应的报告组件,收集所有报告组件组成对应的报告组件集合。
5.根据权利要求4所述的方法,其特征在于,所述第二文件列表包括:多个第二文件以及与第二文件对应的第二文件相对路径、第二文件元信息和第二问题列表。
6.根据权利要求5所述的方法,其特征在于,所述第二问题列表包括:多个第二问题以及与第二问题对应的位置信息和类型描述符。
7.根据权利要求1所述的方法,其特征在于,所述预设规则还包括:
第一检查规则,检查所述报告组件集合中是否存在未填充的报告组件;若是,执行所述第一提取规则;若否,结束填充;
第二检查规则,检查所述第二文件列表中是否存在未处理的第二文件;若是,执行所述第二提取规则;若否,执行第三移除规则;
第三检查规则,检查所述第二问题列表中是否存在未处理的第二问题;若是,执行所述第三提取规则;若否,执行第二移除规则;
第二填充规则,将第一问题填充到所述目标文件对应的第一问题列表中之后,执行第一移除规则;
第一移除规则,从所述第二问题列表中移除当前第二问题,执行所述第三检查规则;
第二移除规则,从所述第二文件列表中移除当前第二文件,执行所述第二检查规则;
第三移除规则,从所述报告组件集合中移除当前报告组件,执行所述第一检查规则。
8.一种源代码分析结果聚合装置,其特征在于,包括:
构造模块,用于对目标源代码进行文件统计,构造初始综合报告;包括:
用于从所述目标源代码中提取第一文件列表,第一文件列表包括所述目标源代码中的所有文件;
编码模块,用于获取所述目标源代码的多个不同来源的分析报告,对所述多个不同来源的分析报告进行编码生成对应的报告组件集合;
合并模块,用于将所述报告组件集合填充到初始综合报告中,输出最终综合报告;
所述合并模块包括提取模块,所述提取模块包括:
第一提取模块,用于从所述报告组件中提取对应的来源标识符、组件元信息和第二文件列表;
第二提取模块,用于根据第二文件列表中的当前第二文件提取对应的第二文件相对路径、第二文件元信息和第二问题列表,从所述第一文件列表中提取与第二文件相对路径匹配的第一文件作为目标文件,并将对应的第二文件元信息追加到目标文件中;
第三提取模块,用于从所述第二问题列表中提取当前第二问题对应的位置信息和类型描述符;
所述合并模块还包括:
填充模块,用于根据所述来源标识符、类型描述符和位置信息生成第一问题,并将第一问题填充到所述目标文件对应的第一问题列表中。
9.根据权利要求8所述的装置,其特征在于,所述合并模块还包括检查模块,所述检查模块包括:
第一检查模块,用于检查所述报告组件集合中是否存在未填充的报告组件,若是,执行所述第一提取模块,若否,结束填充;
第二检查模块,用于检查所述第二文件列表中是否存在未处理的第二文件,若是,执行所述第二提取模块,若否,执行第三移除模块;
第三检查模块,用于检查所述第二问题列表中是否存在未处理的第二问题,若是,执行所述第三提取模块,若否,执行第二移除模块;
所述合并模块还包括移除模块,所述移除模块包括:
第一移除模块,用于从所述第二问题列表中移除当前第二问题,执行所述第三检查模块;
第二移除模块,用于从所述第二文件列表中移除当前第二文件,执行所述第二检查模块;
第三移除模块,用于从所述报告组件集合中移除当前报告组件,执行所述第一检查模块;
所述填充模块,还用于将第一问题填充到所述目标文件对应的第一问题列表中之后,执行第一移除模块。
10.一种电子设备,其特征在于,所述电子设备包括存储器和处理器,所述存储器存储有计算机程序,所述处理器运行所述计算机程序时执行权利要求1至7中任一项所述的方法。
11.一种可读存储介质,其特征在于,所述可读存储介质中存储有计算机程序,所述计算机程序在处理器上运行时执行权利要求1至7中任一项所述的方法。
CN202310746822.3A 2023-06-25 2023-06-25 源代码分析结果聚合方法、装置、电子设备及存储介质 Active CN116521742B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310746822.3A CN116521742B (zh) 2023-06-25 2023-06-25 源代码分析结果聚合方法、装置、电子设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310746822.3A CN116521742B (zh) 2023-06-25 2023-06-25 源代码分析结果聚合方法、装置、电子设备及存储介质

Publications (2)

Publication Number Publication Date
CN116521742A CN116521742A (zh) 2023-08-01
CN116521742B true CN116521742B (zh) 2023-09-22

Family

ID=87401421

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310746822.3A Active CN116521742B (zh) 2023-06-25 2023-06-25 源代码分析结果聚合方法、装置、电子设备及存储介质

Country Status (1)

Country Link
CN (1) CN116521742B (zh)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104021180A (zh) * 2014-06-09 2014-09-03 南京航空航天大学 一种组合式软件缺陷报告分类方法
JP2015005031A (ja) * 2013-06-19 2015-01-08 株式会社エヌ・ティ・ティ・データ ソースコード解析装置、ソースコード解析方法、及びプログラム
CN104391795A (zh) * 2014-12-03 2015-03-04 北京京东尚科信息技术有限公司 一种分布式系统中自动化测试覆盖率的测试方法及系统
CN113963770A (zh) * 2021-10-11 2022-01-21 深圳市人民医院 报告文件生成方法、装置、计算机设备及其存储介质
CN114065222A (zh) * 2021-11-24 2022-02-18 安天科技集团股份有限公司 源代码风险分析方法、装置、电子设备及存储介质

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2015005031A (ja) * 2013-06-19 2015-01-08 株式会社エヌ・ティ・ティ・データ ソースコード解析装置、ソースコード解析方法、及びプログラム
CN104021180A (zh) * 2014-06-09 2014-09-03 南京航空航天大学 一种组合式软件缺陷报告分类方法
CN104391795A (zh) * 2014-12-03 2015-03-04 北京京东尚科信息技术有限公司 一种分布式系统中自动化测试覆盖率的测试方法及系统
CN113963770A (zh) * 2021-10-11 2022-01-21 深圳市人民医院 报告文件生成方法、装置、计算机设备及其存储介质
CN114065222A (zh) * 2021-11-24 2022-02-18 安天科技集团股份有限公司 源代码风险分析方法、装置、电子设备及存储介质

Also Published As

Publication number Publication date
CN116521742A (zh) 2023-08-01

Similar Documents

Publication Publication Date Title
CN102135938B (zh) 一种软件产品测试方法及系统
US9104720B2 (en) Generation of technical description of report from functional description of report
Sun et al. IFCCompressor: A content-based compression algorithm for optimizing Industry Foundation Classes files
CN109062780B (zh) 自动化测试用例的开发方法及终端设备
CN111090417B (zh) 二进制文件解析方法、装置、设备及介质
CN111611236A (zh) 一种数据分析方法及系统
CN110825805B (zh) 一种数据的可视化方法及装置
CN112199937B (zh) 一种短文本相似度分析方法及其系统、计算机设备、介质
CN112000656A (zh) 基于元数据的智能化数据清洗方法及装置
US20120259661A1 (en) Systems and methods for data mining of DICOM structured reports
CN112732763A (zh) 数据的聚合方法、装置、电子设备及介质
CN112364923A (zh) 样本数据的处理方法及装置、系统、存储介质、电子设备
CN110851630A (zh) 一种深度学习标注样本的管理系统及方法
CN116521742B (zh) 源代码分析结果聚合方法、装置、电子设备及存储介质
KR101783791B1 (ko) 프로버넌스 관리를 위한 압축 장치 및 방법
CN113434627A (zh) 工单的处理方法、装置和计算机可读存储介质
CN111367971A (zh) 一种基于数据挖掘的金融系统异常辅助分析方法及装置
CN113138974B (zh) 数据库合规检测的方法和装置
CN113407678B (zh) 知识图谱构建方法、装置和设备
CN110807466A (zh) 一种处理订单数据的方法和装置
CN114691769A (zh) 电力监控系统的非结构化数据处理方法、装置
CN109977104B (zh) 数据管理方法及装置
CN113434607A (zh) 基于图数据的行为分析方法、装置、电子设备和存储介质
CN113159118A (zh) 物流数据指标的处理方法、装置、设备及存储介质
Garcia et al. Procedures for health data linkage: Applications in health surveillance

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