CN116756048B - 一种代码分析方法、装置、计算机设备及存储介质 - Google Patents
一种代码分析方法、装置、计算机设备及存储介质 Download PDFInfo
- Publication number
- CN116756048B CN116756048B CN202311034335.0A CN202311034335A CN116756048B CN 116756048 B CN116756048 B CN 116756048B CN 202311034335 A CN202311034335 A CN 202311034335A CN 116756048 B CN116756048 B CN 116756048B
- Authority
- CN
- China
- Prior art keywords
- analysis
- subtask
- code
- subtasks
- code analysis
- 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
- 238000004458 analytical method Methods 0.000 title claims abstract description 914
- 238000000034 method Methods 0.000 claims abstract description 50
- 230000004044 response Effects 0.000 claims description 12
- 238000004590 computer program Methods 0.000 claims description 8
- 230000008569 process Effects 0.000 description 12
- 230000002159 abnormal effect Effects 0.000 description 7
- 230000005856 abnormality Effects 0.000 description 7
- 238000010586 diagram Methods 0.000 description 7
- 230000006870 function Effects 0.000 description 6
- 238000004364 calculation method Methods 0.000 description 4
- 230000015556 catabolic process Effects 0.000 description 4
- 238000004891 communication 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
- 238000001514 detection method Methods 0.000 description 2
- 230000010354 integration Effects 0.000 description 2
- 239000004973 liquid crystal related substance Substances 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 238000013475 authorization Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000003993 interaction Effects 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
- 238000010223 real-time analysis Methods 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
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3692—Test management for test results analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3696—Methods or tools to render software testable
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Abstract
本公开提供了一种代码分析方法、装置、计算机设备及存储介质,其中,该方法包括:响应于接收到指示使用多种代码分析工具对待分析代码进行分析的代码分析任务指令,对代码分析任务指令进行解析,得到各代码分析工具分别对应的分析子任务;针对任一分析子任务,在检测到代码分析引擎存储的分析状态信息中,不存在与该分析子任务匹配的历史子任务分析结果的情况下,调用与该分析子任务对应的代码分析工具,执行该分析子任务,并在该分析子任务执行完毕后,根据该分析子任务的子任务分析结果,对代码分析引擎存储的分析状态信息进行更新;基于各分析子任务分别对应的子任务分析结果,生成待分析代码对应的代码分析结果。
Description
技术领域
本公开涉及计算机技术领域,具体而言,涉及一种代码分析方法、装置、计算机设备及存储介质。
背景技术
在对软件工程源代码进行分析的过程中,往往会使用到多种代码分析工具,以通过不同的分析方式对软件工程源代码进行分析,但每种代码分析工具的使用方法和运行环境往往是不同的,因此难以同时使用多种代码分析工具对源代码进行分析。
相关技术中,为了能够同时使用多种代码分析工具进行源代码分析,可以采用持续集成的方式将各个代码分析工具集成为一个整体,并在进行源代码分析的过程中依次串行执行各代码分析工具,这样虽然能够依次使用多种代码分析工具进行源代码分析,但是由于将多个代码分析工具集成为一个整体,因此当集成后的代码分析工具在分析过程中崩溃的情况下,则需要重新进行源代码分析,效率较低。
发明内容
本公开实施例至少提供一种代码分析方法、装置、计算机设备及存储介质。
第一方面,本公开实施例提供了一种代码分析方法,应用于代码分析引擎,所述代码分析引擎用于调用代码分析工具进行代码分析,包括:
响应于接收到指示使用多种代码分析工具对待分析代码进行分析的代码分析任务指令,对所述代码分析任务指令进行解析,得到各代码分析工具分别对应的分析子任务;其中,不同种代码分析工具对应的运行环境不同;
针对任一所述分析子任务,在检测到所述代码分析引擎存储的分析状态信息中,不存在与该分析子任务匹配的历史子任务分析结果的情况下,调用与该分析子任务对应的代码分析工具,执行该分析子任务,并在该分析子任务执行完毕后,根据该分析子任务的子任务分析结果,对所述代码分析引擎存储的分析状态信息进行更新;其中,所述分析状态信息包括历史分析子任务对应的历史子任务分析结果;
基于各分析子任务分别对应的子任务分析结果,生成所述待分析代码对应的代码分析结果。
一种可能的实施方式中,所述对所述代码分析任务指令进行解析,包括:
在用户态空间中创建用于进行指令解析的主例程,并调用所述主例程对所述代码分析任务指令进行解析,将解析得到的分析子任务添加至分析子任务列表中。
一种可能的实施方式中,在对所述代码分析任务指令进行解析之前,所述方法还包括:
在内核态空间中加载所述代码分析引擎中存储的分析状态信息,并在检测到所述分析状态信息为空的情况下,建立所述分析子任务列表。
一种可能的实施方式中,所述分析子任务通过所述代码分析引擎分配的计算节点执行;
所述调用与该分析子任务对应的代码分析工具,执行该分析子任务,包括:
在所述计算节点的数量满足并行执行所述分析子任务列表中的各分析子任务对应的数量要求的情况下,为各所述分析子任务分配对应的计算节点,并通过各计算节点并行执行分析子任务;以及,
在所述计算节点的数量不满足并行执行所述分析子任务列表中的各分析子任务对应的数量要求的情况下,按照所述分析子任务列表中执行的各个分析子任务的执行顺序,在该分析子任务之前的其他分析子任务执行完毕后,为该分析子任务分配计算节点,并通过该分析子任务被分配的计算节点,调用与该分析子任务对应的代码分析工具,执行该分析子任务。
一种可能的实施方式中,在执行分析子任务之前,所述方法还包括:
在用户态空间中创建与各分析子任务对应的代码分析工具的运行环境匹配的子例程;
所述通过该分析子任务被分配的计算节点,调用与该分析子任务对应的代码分析工具,执行该分析子任务,包括:
通过该分析子任务被分配的计算节点,在该分析子任务对应的代码分析工具的运行环境匹配的子例程中,调用与该分析子任务对应的代码分析工具,执行该分析子任务。
一种可能的实施方式中,所述方法还包括:
针对任一被分配的计算节点,在该计算节点对应的分析子任务执行完成后,释放该计算节点,以对该计算节点进行重新分配。
一种可能的实施方式中,所述方法还包括:
针对任一所述分析子任务,在检测到所述代码分析引擎存储的分析状态信息中,存在与该分析子任务匹配的历史子任务分析结果的情况下,将与该分析子任务匹配的历史子任务分析结果,作为该分析子任务对应的子任务分析结果。
一种可能的实施方式中,所述方法还包括:
响应于接收到客户端发送的分析进度查询请求,基于所述代码分析引擎存储的分析状态信息确定分析进度查询结果;
将所述分析进度查询结果发送至所述客户端,以在所述客户端中基于所述分析进度查询结果进行代码分析任务的进度展示。
第二方面,本公开实施例还提供一种代码分析装置,应用于代码分析引擎,所述代码分析引擎用于调用代码分析工具进行代码分析,包括:
解析模块,用于响应于接收到指示使用多种代码分析工具对待分析代码进行分析的代码分析任务指令,对所述代码分析任务指令进行解析,得到各代码分析工具分别对应的分析子任务;其中,不同种代码分析工具对应的运行环境不同;
执行模块,用于针对任一所述分析子任务,在检测到所述代码分析引擎存储的分析状态信息中,不存在与该分析子任务匹配的历史子任务分析结果的情况下,调用与该分析子任务对应的代码分析工具,执行该分析子任务,并在该分析子任务执行完毕后,根据该分析子任务的子任务分析结果,对所述代码分析引擎存储的分析状态信息进行更新;其中,所述分析状态信息包括历史分析子任务对应的历史子任务分析结果;
生成模块,用于基于各分析子任务分别对应的子任务分析结果,生成所述待分析代码对应的代码分析结果。
一种可能的实施方式中,所述解析模块,在对所述代码分析任务指令进行解析时,用于:
在用户态空间中创建用于进行指令解析的主例程,并调用所述主例程对所述代码分析任务指令进行解析,将解析得到的分析子任务添加至分析子任务列表中。
一种可能的实施方式中,在对所述代码分析任务指令进行解析之前,所述解析模块还用于:
在内核态空间中加载所述代码分析引擎中存储的分析状态信息,并在检测到所述分析状态信息为空的情况下,建立所述分析子任务列表。
一种可能的实施方式中,所述分析子任务通过所述代码分析引擎分配的计算节点执行;
所述执行模块,在调用与该分析子任务对应的代码分析工具,执行该分析子任务时,用于:
在所述计算节点的数量满足并行执行所述分析子任务列表中的各分析子任务对应的数量要求的情况下,为各所述分析子任务分配对应的计算节点,并通过各计算节点并行执行分析子任务;以及,
在所述计算节点的数量不满足并行执行所述分析子任务列表中的各分析子任务对应的数量要求的情况下,按照所述分析子任务列表中执行的各个分析子任务的执行顺序,在该分析子任务之前的其他分析子任务执行完毕后,为该分析子任务分配计算节点,并通过该分析子任务被分配的计算节点,调用与该分析子任务对应的代码分析工具,执行该分析子任务。
一种可能的实施方式中,在执行分析子任务之前,所述执行模块还用于:
在用户态空间中创建与各分析子任务对应的代码分析工具的运行环境匹配的子例程;
所述执行模块,在通过该分析子任务被分配的计算节点,调用与该分析子任务对应的代码分析工具,执行该分析子任务时,用于:
通过该分析子任务被分配的计算节点,在该分析子任务对应的代码分析工具的运行环境匹配的子例程中,调用与该分析子任务对应的代码分析工具,执行该分析子任务。
一种可能的实施方式中,所述执行模块还用于:
针对任一被分配的计算节点,在该计算节点对应的分析子任务执行完成后,释放该计算节点,以对该计算节点进行重新分配。
一种可能的实施方式中,所述执行模块还用于:
针对任一所述分析子任务,在检测到所述代码分析引擎存储的分析状态信息中,存在与该分析子任务匹配的历史子任务分析结果的情况下,将与该分析子任务匹配的历史子任务分析结果,作为该分析子任务对应的子任务分析结果。
一种可能的实施方式中,所述生成模块还用于:
响应于接收到客户端发送的分析进度查询请求,基于所述代码分析引擎存储的分析状态信息确定分析进度查询结果;
将所述分析进度查询结果发送至所述客户端,以在所述客户端中基于所述分析进度查询结果进行代码分析任务的进度展示。
第三方面,本公开实施例还提供一种计算机设备,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当计算机设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤。
第四方面,本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤。
本公开实施例提供的代码分析方法、装置、计算机设备及存储介质,应用于可以调用代码分析工具进行代码分析的代码分析引擎,通过在任一分析子任务执行完毕后,根据该分析子任务的子任务分析结果,对所述代码分析引擎存储的分析状态信息进行更新,可以及时存储各分析子任务的子任务分析结果,从而可以在出现崩溃等需要重新启动的异常情况下,快速的恢复至异常之前的任务分析进度,从而使得代码分析引擎具有分析进度中断后的断点恢复能力,相较于使用多种代码分析工具集成后的代码分析工具进行代码分析,本申请中的代码分析引擎调用代码分析工具进行代码分析的方式更为灵活,且在分析过程中崩溃的情况下,也无需重新进行源代码分析,效率较高。
为使本公开的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,此处的附图被并入说明书中并构成本说明书中的一部分,这些附图示出了符合本公开的实施例,并与说明书一起用于说明本公开的技术方案。应当理解,以下附图仅示出了本公开的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1示出了本公开实施例所提供的一种代码分析方法的流程图;
图2示出了本公开实施例所提供的代码分析方法中,代码分析引擎的整体代码分析流程的示意图;
图3示出了本公开实施例所提供的代码分析方法中,一种代码分析引擎在进行代码分析任务指令的解析和执行时的示意图;
图4示出了本公开实施例所提供的代码分析方法中,另一种代码分析引擎在进行代码分析任务指令的解析和执行时的示意图;
图5示出了本公开实施例所提供的一种代码分析装置的架构示意图;
图6示出了本公开实施例所提供的一种计算机设备的结构示意图。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本公开实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本公开的实施例的详细描述并非旨在限制要求保护的本公开的范围,而是仅仅表示本公开的选定实施例。基于本公开的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
本文中术语“和/或”,仅仅是描述一种关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中术语“至少一种”表示多种中的任意一种或多种中的至少两种的任意组合,例如,包括A、B、C中的至少一种,可以表示包括从A、B和C构成的集合中选择的任意一个或多个元素。
可以理解的是,在使用本公开各实施例公开的技术方案之前,均应当依据相关法律法规通过恰当的方式对本公开所涉及个人信息的类型、使用范围、使用场景等告知用户并获得用户的授权。
例如,在响应于接收到用户的主动请求时,向用户发送提示信息,以明确地提示用户,其请求执行的操作将需要获取和使用到用户的个人信息。从而,使得用户可以根据提示信息来自主地选择是否向执行本公开技术方案的操作的电子设备、应用程序、服务器或存储介质等软件或硬件提供个人信息。
作为一种可选的但非限定性的实现方式,响应于接收到用户的主动请求,向用户发送提示信息的方式例如可以是弹窗的方式,弹窗中可以以文字的方式呈现提示信息。此外,弹窗中还可以承载供用户选择“同意”或者“不同意”向电子设备提供个人信息的选择控件。
可以理解的是,上述通知和获取用户授权过程仅是示意性的,不对本公开的实现方式构成限定,其它满足相关法律法规的方式也可应用于本公开的实现方式中。
经研究发现,为了能够同时使用多种代码分析工具进行源代码分析,可以采用持续集成的方式将各个代码分析工具集成为一个整体,并在进行源代码分析的过程中依次串行执行各代码分析工具,这样虽然能够依次使用多种代码分析工具进行源代码分析,但是由于将多个代码分析工具集成为一个整体,因此当集成后的代码分析工具在分析过程中崩溃的情况下,则需要重新进行源代码分析,效率较低。
基于上述研究,本公开提供了一种代码分析方法、装置、计算机设备及存储介质,应用于可以调用代码分析工具进行代码分析的代码分析引擎,通过在任一分析子任务执行完毕后,根据该分析子任务的子任务分析结果,对所述代码分析引擎存储的分析状态信息进行更新,可以及时存储各分析子任务的子任务分析结果,从而可以在出现崩溃等需要重新启动的异常情况下,快速的恢复至异常之前的任务分析进度,从而使得代码分析引擎具有分析进度中断后的断点恢复能力,相较于使用多种代码分析工具集成后的代码分析工具进行代码分析,本申请中的代码分析引擎调用代码分析工具进行代码分析的方式更为灵活,且在分析过程中崩溃的情况下,也无需重新进行源代码分析,效率较高。
为便于对本实施例进行理解,首先对本公开实施例所公开的一种代码分析方法进行详细介绍,本公开实施例所提供的代码分析方法的执行主体为代码分析引擎,所述代码分析引擎部署在具有一定计算能力的计算机设备上,该计算机设备例如包括:终端设备或服务器或其它处理设备,终端设备可以为用户设备(User Equipment,UE)、移动设备、用户终端、终端、个人数字助理(Personal Digital Assistant,PDA)、手持设备、计算设备、车载设备、可穿戴设备等。在一些可能的实现方式中,该代码分析方法可以通过处理器调用存储器中存储的计算机可读指令的方式来实现。
参见图1所示,为本公开实施例提供的代码分析方法的流程图,所述方法包括S101~S103,其中:
S101:响应于接收到指示使用多种代码分析工具对待分析代码进行分析的代码分析任务指令,对所述代码分析任务指令进行解析,得到各代码分析工具分别对应的分析子任务;其中,不同种代码分析工具对应的运行环境不同。
S102:针对任一所述分析子任务,在检测到所述代码分析引擎存储的分析状态信息中,不存在与该分析子任务匹配的历史子任务分析结果的情况下,调用与该分析子任务对应的代码分析工具,执行该分析子任务,并在该分析子任务执行完毕后,根据该分析子任务的子任务分析结果,对所述代码分析引擎存储的分析状态信息进行更新;其中,所述分析状态信息包括历史分析子任务对应的历史子任务分析结果。
S103:基于各分析子任务分别对应的子任务分析结果,生成所述待分析代码对应的代码分析结果。
以下是对上述步骤的详细介绍。
针对S101、
所述待分析代码可以是开发完成后得到的源代码,通过使用代码分析工具对源代码进行分析,可以确定出源代码对应的源代码漏洞,以便于根据源代码漏洞进行修复;所述代码分析任务指令可以是用户在所述代码分析引擎对应的客户端发送的;所述代码分析任务指令所指示的多种代码分析工具可以是通过用户的触发操作确定的;所述分析子任务可以是使用代码分析工具进行代码分析过程中全部任务中的部分任务,一个代码分析工具对应的分析子任务的数量可以为多个,比如使用代码分析工具A进行代码分析时需要按照5种方式进行漏洞检测,则所述代码分析工具A对应的全部任务即为使用5种方式进行漏洞检测,可以解析成5个分析子任务,各分析子任务的具体内容即为使用其中一种方式进行漏洞检测。
具体的,在对所述代码分析任务指令进行解析时,可以是边接收代码分析任务指令,边解析接收到的代码分析指令得到分析子任务。在执行后续的子任务分析的过程中,可以同时接收待分析代码,以通过所述代码分析引擎中实现边接收待分析代码边进行代码分析的流水线功能。
一种可能的实施方式中,在对所述代码分析任务指令进行解析时,可以在用户态空间中创建用于进行指令解析的主例程,并调用所述主例程对所述代码分析任务指令进行解析,将解析得到的分析子任务添加至分析子任务列表中。
这里,用于在用户态空间创建主例程的主例程创建指令,可以是在内核态空间执行的,通过在内核态空间中执行主例程创建指令,可以在用户态空间中创建用于进行指令解析的主例程。
具体的,所述主例程对所述代码分析任务指令进行解析时,可以加载所述代码分析任务指令对应的代码分析参数列表,并根据所述代码分析参数列表进行计算,生成子任务创建参数,从而可以根据子任务创建参数生成分析子任务。
一种可能的实施方式中,在对所述代码分析任务指令进行解析之前还可以在内核态空间中加载所述代码分析引擎中存储的分析状态信息,并在检测到所述分析状态信息为空的情况下,建立所述分析子任务列表。
这里,所述分析子任务列表可以是在分析状态信息中建立的,也即建立后添加的待执行的分析子任务可以添加至所述分析状态信息中,从而可以通过分析状态信息记录当前需要执行的分析子任务。
其中,所述分析状态信息将在下文进行详细介绍,在此不再展开说明;若所述分析状态信息为空,则表明不存在已完成和需要执行的分析子任务,此时可以建立分析子任务列表,从而可以将后续解析出的分析子任务添加至所述分析子任务列表中,以便于所述代码分析引擎根据所述分析子任务列表进行分析子任务的执行调度。
针对S102、
这里,所述分析子任务可以通过所述代码分析引擎分配的计算节点执行,计算节点为所述代码分析引擎中具体用于调用硬件资源的节点,所述计算节点的数量可以为多个,多个计算节点构成计算节点池,所述计算节点的数量可以与能够调用的硬件资源的资源量呈正比,也即能够调用的硬件资源的资源量越多,则计算节点的数量也越多;在执行分析子任务之前,还可以在用户态空间中创建与各分析子任务对应的代码分析工具的运行环境匹配的子例程,从而可以在与各代码分析工具的运行环境匹配的子例程中执行分析子任务。
实际应用中,由于待分析代码中可能存在较为严重的代码漏洞等原因,代码分析工具在持续进行代码分析的过程中,可能会出现崩溃等需要重新启动的异常情况,而若重新启动后的代码分析引擎重新对待分析代码进行分析,则会造成时间和计算资源的浪费。
一种可能的实施方式中,针对任一所述分析子任务,在检测到所述代码分析引擎存储的分析状态信息中,存在与该分析子任务匹配的历史子任务分析结果的情况下,将与该分析子任务匹配的历史子任务分析结果,作为该分析子任务对应的子任务分析结果。
这里,由于所述代码分析引擎存储的分析状态信息中,存在与该分析子任务匹配的历史子任务分析结果,因此在出现崩溃等需要重新启动的异常情况下,可以直接使用分析子任务匹配的历史子任务分析结果,而无需重新执行已执行过的分析子任务。
这样,通过在任一分析子任务执行完毕后,根据该分析子任务的子任务分析结果,对所述代码分析引擎存储的分析状态信息进行更新,可以及时存储各分析子任务的子任务分析结果,从而可以在出现崩溃等需要重新启动的异常情况下,快速的恢复至异常之前的任务分析进度,从而使得代码分析引擎具有分析进度中断后的断点恢复能力。
一种可能的实施方式中,在调用与该分析子任务对应的代码分析工具,执行该分析子任务时,可以分为以下情况:
情况1、所述计算节点的数量满足并行执行所述分析子任务列表中的各分析子任务对应的数量要求。
这里,计算节点的数量满足并行执行所述分析子任务列表中的各分析子任务对应的数量要求,可以是所述计算节点池中可调用的计算节点的节点数量大于或等于分析子任务列表中的任务数量。
具体的,可以为各所述分析子任务分配对应的计算节点,并通过各计算节点并行执行分析子任务。
示例性的,以计算节点的数量为5,解析后得到的分析子任务的数量为4为例,则可以将解析得到的4个分析子任务添加至新创建的分析子任务列表中,并为4个分析子任务分配对应的4个计算节点,从而可以通过各分析子任务分别对应的计算节点执行对应的分析子任务。
情况2、所述计算节点的数量不满足并行执行所述分析子任务列表中的各分析子任务对应的数量要求。
这里,由于待分析代码可以持续不断的发送至代码分析引擎,因此计算节点池中的计算节点可能会出现无法满足实时调用需求的情况,此时可以将解析得到的分析子任务添加至分析子任务列表中,以根据分析子任务列表中包含的分析子任务,在计算节点空闲的情况下进行计算节点分配。
具体的,可以按照所述分析子任务列表中执行的各个分析子任务的执行顺序,在该分析子任务之前的其他分析子任务执行完毕后,为该分析子任务分配计算节点,并通过该分析子任务被分配的计算节点,调用与该分析子任务对应的代码分析工具,执行该分析子任务。
其中,在通过该分析子任务被分配的计算节点,调用与该分析子任务对应的代码分析工具,执行该分析子任务时,可以通过该分析子任务被分配的计算节点,在该分析子任务对应的代码分析工具的运行环境匹配的子例程中,调用与该分析子任务对应的代码分析工具,执行该分析子任务。
进一步的,针对任一被分配的计算节点,在该计算节点对应的分析子任务执行完成后,释放该计算节点,以对该计算节点进行重新分配。
这样,通过计算节点的分配和释放,可以依次执行分析子任务列表中的分析子任务,从而能够通过计算节点执行代码分析的过程中,使用分析子任务列表存储待执行的分析子任务,使得代码分析引擎能够具有在接收待分析代码的同时进行代码分析的流水线功能。
针对S103、
这里,在基于各分析子任务分别对应的子任务分析结果,生成所述待分析代码对应的代码分析结果时,可以根据各分析子任务分别对应的子任务分析结果,确定子任务分析结果的结果类型为存在异常的目标分析子任务,并将由所述目标分析子任务对应的任务分析结果组成的代码分析日志作为所述待分析代码对应的代码分析结果。
一种可能的实施方式中,还可以通过以下步骤A1~A2进行进度展示:
A1:响应于接收到客户端发送的分析进度查询请求,基于所述代码分析引擎存储的分析状态信息确定分析进度查询结果。
A2:将所述分析进度查询结果发送至所述客户端,以在所述客户端中基于所述分析进度查询结果进行代码分析任务的进度展示。
这里,所述客户端发送的分析进度查询请求,可以是所述客户端通过轮询的方式发起的,所述客户端在进行轮询时可以按照预设的轮询间隔向所述代码分析引擎发送分析进度查询请求,以获取所述待分析代码对应的实时分析进度。
下面,结合图2对本公开实施例提供的代码分析引擎的整体代码分析流程进行介绍,图2中,在使用代码分析引擎进行代码分析时,客户端与代码分析引擎在进行代码分析时可以执行以下步骤:
1、客户端向代码分析引擎发送代码分析任务指令。
2、代码分析引擎在接收到代码分析任务指令后,可以将其中携带的待分析代码添加到流水线中,以实现边接收待分析代码边进行代码分析(可以包括进行解析生成新的分析子任务)的流水线功能。
3、解析代码分析指令,并将得到的分析子任务添加至分析子任务列表中。
4、代码分析引擎中的调度节点按照分析子任务列表,向计算节点池中的计算节点分发分析子任务,以为分析子任务分配计算节点。
5、计算节点串行或并行执行分析子任务,并反馈子任务分析结果。
6、任一计算节点,在该计算节点对应的分析子任务执行完成后,释放该计算节点,以对该计算节点进行重新分配,直至代码分析任务指令执行完毕。
7、客户端在发送代码分析任务指令后,可以向代码分析引擎轮询分析进度。
8、代码分析引擎在接收到客户端发送的查询请求后,可以反馈所述代码分析任务指令对应的分析进度。
9、客户端在接收到所述代码分析任务指令对应的分析进度后,可以进行分析进度展示。
具体的,上述步骤的具体描述可以参照上文相关内容的描述,在此不再赘述。
下面,结合图3对本公开实施例提供的代码分析引擎在进行代码分析任务指令进行解析的步骤介绍,如图3所示,在代码分析任务指令的解析和执行过程中可以执行以下步骤:
1、在内核态空间中加载所述代码分析引擎中存储的分析状态信息。
2、在用户态空间中创建用于进行指令解析的主例程,并在中断响应后,调用创建的主例程。
3、主例程加载代码分析参数列表P。
4、主例程计算得到子任务创建参数p0,在中断请求后,请求根据参数p0生成子任务。
5、在内核态空间中根据参数p0生成子任务j0。
6、判断j0是否为全新任务,若是则执行7,若否则执行8。
7、将j0添加至代码分析引擎的分析状态信息中,然后中止主例程。
这里,添加至代码分析引擎的分析状态信息中,可以是将j0添加至分析状态信息中的子任务执行列表中,以对j0进行标记,后续即可执行j0,并将得到的结果写入至分析状态信息中j0对应位置处。
8、从分析状态信息中获取结果r0。
9、继续边接收待分析代码边进行代码分析得到整体结果R,并在中断请求后,返回结果R。
10、将结果R写入至所述代码分析引擎的分析状态信息中。
11、反馈分析状态信息,以向客户端同步分析进度或者继续按照反馈的分析状态信息执行后续的代码分析步骤。
具体的,上述步骤的具体描述可以参照上文相关内容的描述,在此不再赘述。
下面,结合图4对本公开实施例提供的代码分析引擎在进行代码分析任务指令进行解析的步骤介绍,如图4所示,在同时解析两个分析子任务的情况下,在代码分析任务指令的解析和执行过程中可以执行以下步骤:
1、在内核态空间中加载所述代码分析引擎中存储的分析状态信息。
2、在用户态空间中创建用于进行指令解析的主例程,并在中断响应后,调用创建的主例程。
3、主例程加载代码分析参数列表P。
4、主例程创建子例程A和子例程B,并在中断请求后, 请求并行执行子例程A和子例程B。
5、在内核态空间中执行队列,以依次执行子例程A和子例程B,并在中断响应后,调用子例程A。
6、在子例程A中生成分析子任务j1,然后在j1对应的代码分析工具的运行环境中,调用j1对应的代码分析工具执行j1,并在中断请求后,请求在分析状态信息中添加子任务,以对子任务分析结果进行记录。
7、在内核态空间中将j1添加至分析状态信息中,以对j1进行记录,然后中止子例程A,并在中断请求后,调用子例程B。
8、在子例程B中生成分析子任务j2,然后在j2对应的代码分析工具的运行环境中,调用j2对应的代码分析工具执行j2,并在中断请求后,请求在分析状态信息中添加子任务,以对子任务分析结果进行记录。
9、在内核态空间中将j2添加至分析状态信息中,以对j2进行记录,然后依次中止子例程B和主例程,
10、反馈分析状态信息,以向客户端同步分析进度或者继续按照反馈的分析状态信息执行后续的代码分析步骤。
具体的,上述步骤的具体描述可以参照上文相关内容的描述,在此不再赘述。
下面,结合具体的代码分析工具对本公开实施例提供的代码分析方法进行介绍,代码分析工具对应的代码如下:
export default {
*mock() {
let count = 0, cause = null;
while (count<3) {
try {
// 启动一个A工作,yield语句相当于中断请求工作,尝试将结果赋给result;
/** b */ const result = yield this.run('A', {});
// 将结果返回,相当于执行了中断请求返回
return result;
} catch (error) {
cause = error;
}
count++;
}
if (cause !== null) {
throw new Error('Failed 3 times.', { cause });
}
},
*main() {
// 使用mock流程,创建了2个子例程,并形成子例程列表
const childList = [this.mock(), this.mock()];
// yield语句相当于中断请求并行childPair子例程列表
/** a */ const result = yield this.all(childList);
// 将结果返回,相当于执行了中断请求返回
return result;
},
}。
上述代码分析工具在执行过程中需要2轮解析和执行过程,其中:
第1轮、
1、加载分析状态信息CTX,由于是第1轮因此需要新建包含空的工作列表的CTX。
2、从主例程a语句,并发调用节点字列表childList所表示的两个mock子例程。
3、2个子例程分别在b语句中断请求工作。
4、将2个新的分析子任务的标识分别记录为id=0,id=1。
在第2轮解析之前可以执行2个新的分析子任务,并分别记录结果hello和world。
第2轮、
1、加载分析状态信息CTX,此时为id=0,result=hello;id=1,result=world。
2、从主例程a语句,并发调用childList所表示的两个mock子例程。
3、2个子例程分别在b语句中断请求子任务。
4、对应的两个子例程分别在b语句提取结果,并赋予标识符result。
5、两个子例程分别返回各自的result。
6、在主例程中,a语句的并发全部完成,则得出并发结果为['hello', 'world']
7、返回上述值['hello', 'world']作为本次流程的最终结果。
本公开实施例提供的代码分析方法,应用于可以调用代码分析工具进行代码分析的代码分析引擎,通过在任一分析子任务执行完毕后,根据该分析子任务的子任务分析结果,对所述代码分析引擎存储的分析状态信息进行更新,可以及时存储各分析子任务的子任务分析结果,从而可以在出现崩溃等需要重新启动的异常情况下,快速的恢复至异常之前的任务分析进度,从而使得代码分析引擎具有分析进度中断后的断点恢复能力,相较于使用多种代码分析工具集成后的代码分析工具进行代码分析,本申请中的代码分析引擎调用代码分析工具进行代码分析的方式更为灵活,且在分析过程中崩溃的情况下,也无需重新进行源代码分析,效率较高。
本领域技术人员可以理解,在具体实施方式的上述方法中,各步骤的撰写顺序并不意味着严格的执行顺序而对实施过程构成任何限定,各步骤的具体执行顺序应当以其功能和可能的内在逻辑确定。
基于同一发明构思,本公开实施例中还提供了与代码分析方法对应的代码分析装置,由于本公开实施例中的装置解决问题的原理与本公开实施例上述代码分析方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。
参照图5所示,为本公开实施例提供的一种代码分析装置的架构示意图,应用于代码分析引擎,所述代码分析引擎用于调用代码分析工具进行代码分析,所述装置包括:解析模块501、执行模块502、生成模块503;其中,
解析模块501,用于响应于接收到指示使用多种代码分析工具对待分析代码进行分析的代码分析任务指令,对所述代码分析任务指令进行解析,得到各代码分析工具分别对应的分析子任务;其中,不同种代码分析工具对应的运行环境不同;
执行模块502,用于针对任一所述分析子任务,在检测到所述代码分析引擎存储的分析状态信息中,不存在与该分析子任务匹配的历史子任务分析结果的情况下,调用与该分析子任务对应的代码分析工具,执行该分析子任务,并在该分析子任务执行完毕后,根据该分析子任务的子任务分析结果,对所述代码分析引擎存储的分析状态信息进行更新;其中,所述分析状态信息包括历史分析子任务对应的历史子任务分析结果;
生成模块503,用于基于各分析子任务分别对应的子任务分析结果,生成所述待分析代码对应的代码分析结果。
一种可能的实施方式中,所述解析模块501,在对所述代码分析任务指令进行解析时,用于:
在用户态空间中创建用于进行指令解析的主例程,并调用所述主例程对所述代码分析任务指令进行解析,将解析得到的分析子任务添加至分析子任务列表中。
一种可能的实施方式中,在对所述代码分析任务指令进行解析之前,所述解析模块501还用于:
在内核态空间中加载所述代码分析引擎中存储的分析状态信息,并在检测到所述分析状态信息为空的情况下,建立所述分析子任务列表。
一种可能的实施方式中,所述分析子任务通过所述代码分析引擎分配的计算节点执行;
所述执行模块502,在调用与该分析子任务对应的代码分析工具,执行该分析子任务时,用于:
在所述计算节点的数量满足并行执行所述分析子任务列表中的各分析子任务对应的数量要求的情况下,为各所述分析子任务分配对应的计算节点,并通过各计算节点并行执行分析子任务;以及,
在所述计算节点的数量不满足并行执行所述分析子任务列表中的各分析子任务对应的数量要求的情况下,按照所述分析子任务列表中执行的各个分析子任务的执行顺序,在该分析子任务之前的其他分析子任务执行完毕后,为该分析子任务分配计算节点,并通过该分析子任务被分配的计算节点,调用与该分析子任务对应的代码分析工具,执行该分析子任务。
一种可能的实施方式中,在执行分析子任务之前,所述执行模块502还用于:
在用户态空间中创建与各分析子任务对应的代码分析工具的运行环境匹配的子例程;
所述执行模块502,在通过该分析子任务被分配的计算节点,调用与该分析子任务对应的代码分析工具,执行该分析子任务时,用于:
通过该分析子任务被分配的计算节点,在该分析子任务对应的代码分析工具的运行环境匹配的子例程中,调用与该分析子任务对应的代码分析工具,执行该分析子任务。
一种可能的实施方式中,所述执行模块502还用于:
针对任一被分配的计算节点,在该计算节点对应的分析子任务执行完成后,释放该计算节点,以对该计算节点进行重新分配。
一种可能的实施方式中,所述执行模块502还用于:
针对任一所述分析子任务,在检测到所述代码分析引擎存储的分析状态信息中,存在与该分析子任务匹配的历史子任务分析结果的情况下,将与该分析子任务匹配的历史子任务分析结果,作为该分析子任务对应的子任务分析结果。
一种可能的实施方式中,所述生成模块503还用于:
响应于接收到客户端发送的分析进度查询请求,基于所述代码分析引擎存储的分析状态信息确定分析进度查询结果;
将所述分析进度查询结果发送至所述客户端,以在所述客户端中基于所述分析进度查询结果进行代码分析任务的进度展示。
本公开实施例提供的代码分析装置,应用于可以调用代码分析工具进行代码分析的代码分析引擎,通过在任一分析子任务执行完毕后,根据该分析子任务的子任务分析结果,对所述代码分析引擎存储的分析状态信息进行更新,可以及时存储各分析子任务的子任务分析结果,从而可以在出现崩溃等需要重新启动的异常情况下,快速的恢复至异常之前的任务分析进度,从而使得代码分析引擎具有分析进度中断后的断点恢复能力,相较于使用多种代码分析工具集成后的代码分析工具进行代码分析,本申请中的代码分析引擎调用代码分析工具进行代码分析的方式更为灵活,且在分析过程中崩溃的情况下,也无需重新进行源代码分析,效率较高。
关于装置中的各模块的处理流程、以及各模块之间的交互流程的描述可以参照上述方法实施例中的相关说明,这里不再详述。
基于同一技术构思,本公开实施例还提供了一种计算机设备。参照图6所示,为本公开实施例提供的计算机设备600的结构示意图,包括处理器601、存储器602、和总线603。其中,存储器602用于存储执行指令,包括内存6021和外部存储器6022;这里的内存6021也称内存储器,用于暂时存放处理器601中的运算数据,以及与硬盘等外部存储器6022交换的数据,处理器601通过内存6021与外部存储器6022进行数据交换,当计算机设备600运行时,处理器601与存储器602之间通过总线603通信,使得处理器601在执行以下指令:
响应于接收到指示使用多种代码分析工具对待分析代码进行分析的代码分析任务指令,对所述代码分析任务指令进行解析,得到各代码分析工具分别对应的分析子任务;其中,不同种代码分析工具对应的运行环境不同;
针对任一所述分析子任务,在检测到所述代码分析引擎存储的分析状态信息中,不存在与该分析子任务匹配的历史子任务分析结果的情况下,调用与该分析子任务对应的代码分析工具,执行该分析子任务,并在该分析子任务执行完毕后,根据该分析子任务的子任务分析结果,对所述代码分析引擎存储的分析状态信息进行更新;其中,所述分析状态信息包括历史分析子任务对应的历史子任务分析结果;
基于各分析子任务分别对应的子任务分析结果,生成所述待分析代码对应的代码分析结果。
一种可能的实施方式中,所述处理器601的指令中,所述对所述代码分析任务指令进行解析,包括:
在用户态空间中创建用于进行指令解析的主例程,并调用所述主例程对所述代码分析任务指令进行解析,将解析得到的分析子任务添加至分析子任务列表中。
一种可能的实施方式中,所述处理器601的指令中,在对所述代码分析任务指令进行解析之前,还包括:
在内核态空间中加载所述代码分析引擎中存储的分析状态信息,并在检测到所述分析状态信息为空的情况下,建立所述分析子任务列表。
一种可能的实施方式中,所述处理器601的指令中,所述分析子任务通过所述代码分析引擎分配的计算节点执行;
所述调用与该分析子任务对应的代码分析工具,执行该分析子任务,包括:
在所述计算节点的数量满足并行执行所述分析子任务列表中的各分析子任务对应的数量要求的情况下,为各所述分析子任务分配对应的计算节点,并通过各计算节点并行执行分析子任务;以及,
在所述计算节点的数量不满足并行执行所述分析子任务列表中的各分析子任务对应的数量要求的情况下,按照所述分析子任务列表中执行的各个分析子任务的执行顺序,在该分析子任务之前的其他分析子任务执行完毕后,为该分析子任务分配计算节点,并通过该分析子任务被分配的计算节点,调用与该分析子任务对应的代码分析工具,执行该分析子任务。
一种可能的实施方式中,所述处理器601的指令中,在执行分析子任务之前,还包括:
在用户态空间中创建与各分析子任务对应的代码分析工具的运行环境匹配的子例程;
所述通过该分析子任务被分配的计算节点,调用与该分析子任务对应的代码分析工具,执行该分析子任务,包括:
通过该分析子任务被分配的计算节点,在该分析子任务对应的代码分析工具的运行环境匹配的子例程中,调用与该分析子任务对应的代码分析工具,执行该分析子任务。
一种可能的实施方式中,所述处理器601的指令中,还包括:
针对任一被分配的计算节点,在该计算节点对应的分析子任务执行完成后,释放该计算节点,以对该计算节点进行重新分配。
一种可能的实施方式中,所述处理器601的指令中,还包括:
针对任一所述分析子任务,在检测到所述代码分析引擎存储的分析状态信息中,存在与该分析子任务匹配的历史子任务分析结果的情况下,将与该分析子任务匹配的历史子任务分析结果,作为该分析子任务对应的子任务分析结果。
一种可能的实施方式中,所述处理器601的指令中,还包括:
响应于接收到客户端发送的分析进度查询请求,基于所述代码分析引擎存储的分析状态信息确定分析进度查询结果;
将所述分析进度查询结果发送至所述客户端,以在所述客户端中基于所述分析进度查询结果进行代码分析任务的进度展示。
本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述方法实施例中所述的代码分析方法的步骤。其中,该存储介质可以是易失性或非易失的计算机可读取存储介质。
本公开实施例还提供一种计算机程序产品,该计算机程序产品承载有程序代码,所述程序代码包括的指令可用于执行上述方法实施例中所述的代码分析方法的步骤,具体可参见上述方法实施例,在此不再赘述。
其中,上述计算机程序产品可以具体通过硬件、软件或其结合的方式实现。在一个可选实施例中,所述计算机程序产品具体体现为计算机存储介质,在另一个可选实施例中,计算机程序产品具体体现为软件产品,例如软件开发包(Software Development Kit,SDK)等等。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体子任务过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本公开所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上所述实施例,仅为本公开的具体实施方式,用以说明本公开的技术方案,而非对其限制,本公开的保护范围并不局限于此,尽管参照前述实施例对本公开进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本公开实施例技术方案的精神和范围,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应所述以权利要求的保护范围为准。
Claims (9)
1.一种代码分析方法,其特征在于,应用于代码分析引擎,所述代码分析引擎用于调用代码分析工具进行代码分析,所述方法包括:
响应于接收到指示使用多种代码分析工具对待分析代码进行分析的代码分析任务指令,对所述代码分析任务指令进行解析,得到各代码分析工具分别对应的分析子任务;其中,不同种代码分析工具对应的运行环境不同;其中,所述对所述代码分析任务指令进行解析,包括:在用户态空间中创建用于进行指令解析的主例程,并调用所述主例程对所述代码分析任务指令进行解析,将解析得到的分析子任务添加至分析子任务列表中;
在检测到所述代码分析引擎重启并恢复执行代码分析的情况下,针对任一所述分析子任务,在检测到所述代码分析引擎存储的分析状态信息中,不存在与该分析子任务匹配的历史子任务分析结果的情况下,调用与该分析子任务对应的代码分析工具,执行该分析子任务,并在该分析子任务执行完毕后,根据该分析子任务的子任务分析结果,对所述代码分析引擎存储的分析状态信息进行更新;其中,所述分析状态信息包括历史分析子任务对应的历史子任务分析结果;以及,在检测到所述代码分析引擎存储的分析状态信息中,存在与该分析子任务匹配的历史子任务分析结果的情况下,将与该分析子任务匹配的历史子任务分析结果,作为该分析子任务对应的子任务分析结果;
基于各分析子任务分别对应的子任务分析结果,生成所述待分析代码对应的代码分析结果;其中,所述分析子任务通过所述代码分析引擎分配的计算节点执行,所述调用与该分析子任务对应的代码分析工具,执行该分析子任务,包括:在所述计算节点的数量不满足并行执行所述分析子任务列表中的各分析子任务对应的数量要求的情况下,按照所述分析子任务列表中执行的各个分析子任务的执行顺序,在该分析子任务之前的其他分析子任务执行完毕后,为该分析子任务分配计算节点,并通过该分析子任务被分配的计算节点,调用与该分析子任务对应的代码分析工具,执行该分析子任务。
2.根据权利要求1所述的方法,其特征在于,在对所述代码分析任务指令进行解析之前,所述方法还包括:
在内核态空间中加载所述代码分析引擎中存储的分析状态信息,并在检测到所述分析状态信息为空的情况下,建立所述分析子任务列表。
3.根据权利要求1或2所述的方法,其特征在于,所述调用与该分析子任务对应的代码分析工具,执行该分析子任务,包括:
在所述计算节点的数量满足并行执行所述分析子任务列表中的各分析子任务对应的数量要求的情况下,为各所述分析子任务分配对应的计算节点,并通过各计算节点并行执行分析子任务。
4.根据权利要求3所述的方法,其特征在于,在执行分析子任务之前,所述方法还包括:
在用户态空间中创建与各分析子任务对应的代码分析工具的运行环境匹配的子例程;
所述通过该分析子任务被分配的计算节点,调用与该分析子任务对应的代码分析工具,执行该分析子任务,包括:
通过该分析子任务被分配的计算节点,在该分析子任务对应的代码分析工具的运行环境匹配的子例程中,调用与该分析子任务对应的代码分析工具,执行该分析子任务。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
针对任一被分配的计算节点,在该计算节点对应的分析子任务执行完成后,释放该计算节点,以对该计算节点进行重新分配。
6.根据权利要求1所述的方法,其特征在于,所述方法还包括:
响应于接收到客户端发送的分析进度查询请求,基于所述代码分析引擎存储的分析状态信息确定分析进度查询结果;
将所述分析进度查询结果发送至所述客户端,以在所述客户端中基于所述分析进度查询结果进行代码分析任务的进度展示。
7.一种代码分析装置,其特征在于,应用于代码分析引擎,所述代码分析引擎用于调用代码分析工具进行代码分析,包括:
解析模块,用于响应于接收到指示使用多种代码分析工具对待分析代码进行分析的代码分析任务指令,对所述代码分析任务指令进行解析,得到各代码分析工具分别对应的分析子任务;其中,不同种代码分析工具对应的运行环境不同;其中,所述解析模块,在对所述代码分析任务指令进行解析时,用于:在用户态空间中创建用于进行指令解析的主例程,并调用所述主例程对所述代码分析任务指令进行解析,将解析得到的分析子任务添加至分析子任务列表中;
执行模块,用于在检测到所述代码分析引擎重启并恢复执行代码分析的情况下,针对任一所述分析子任务,在检测到所述代码分析引擎存储的分析状态信息中,不存在与该分析子任务匹配的历史子任务分析结果的情况下,调用与该分析子任务对应的代码分析工具,执行该分析子任务,并在该分析子任务执行完毕后,根据该分析子任务的子任务分析结果,对所述代码分析引擎存储的分析状态信息进行更新;其中,所述分析状态信息包括历史分析子任务对应的历史子任务分析结果;以及,在检测到所述代码分析引擎存储的分析状态信息中,存在与该分析子任务匹配的历史子任务分析结果的情况下,将与该分析子任务匹配的历史子任务分析结果,作为该分析子任务对应的子任务分析结果;
生成模块,用于基于各分析子任务分别对应的子任务分析结果,生成所述待分析代码对应的代码分析结果;其中,所述执行模块,在分析子任务通过所述代码分析引擎分配的计算节点执行,所述调用与该分析子任务对应的代码分析工具,执行该分析子任务时,用于:在所述计算节点的数量不满足并行执行所述分析子任务列表中的各分析子任务对应的数量要求的情况下,按照所述分析子任务列表中执行的各个分析子任务的执行顺序,在该分析子任务之前的其他分析子任务执行完毕后,为该分析子任务分配计算节点,并通过该分析子任务被分配的计算节点,调用与该分析子任务对应的代码分析工具,执行该分析子任务。
8.一种计算机设备,其特征在于,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当计算机设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行如权利要求1至6任一所述的代码分析方法的步骤。
9.一种计算机可读存储介质,其特征在于,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行如权利要求1至6任一所述的代码分析方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311034335.0A CN116756048B (zh) | 2023-08-16 | 2023-08-16 | 一种代码分析方法、装置、计算机设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311034335.0A CN116756048B (zh) | 2023-08-16 | 2023-08-16 | 一种代码分析方法、装置、计算机设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116756048A CN116756048A (zh) | 2023-09-15 |
CN116756048B true CN116756048B (zh) | 2023-10-31 |
Family
ID=87948212
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311034335.0A Active CN116756048B (zh) | 2023-08-16 | 2023-08-16 | 一种代码分析方法、装置、计算机设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116756048B (zh) |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101017458A (zh) * | 2007-03-02 | 2007-08-15 | 北京邮电大学 | 基于源代码静态分析的软件安全代码分析器及其检测方法 |
CN103425572A (zh) * | 2012-05-24 | 2013-12-04 | 腾讯科技(深圳)有限公司 | 代码分析方法及代码分析系统 |
CN113268245A (zh) * | 2021-05-25 | 2021-08-17 | 北京大米科技有限公司 | 代码分析方法、装置及存储介质 |
CN113377341A (zh) * | 2020-03-10 | 2021-09-10 | 阿里巴巴集团控股有限公司 | 代码分析方法、装置、电子设备及计算机可读介质 |
CN114386034A (zh) * | 2021-12-21 | 2022-04-22 | 中国电子科技集团公司第三十研究所 | 动态迭代的多引擎融合恶意代码检测方法、设备及介质 |
CN114625375A (zh) * | 2022-03-16 | 2022-06-14 | 珠海金山数字网络科技有限公司 | 代码分析方法及装置 |
CN115774881A (zh) * | 2023-02-13 | 2023-03-10 | 深圳开源互联网安全技术有限公司 | 代码审计方法、装置、设备及介质 |
CN116166556A (zh) * | 2023-02-28 | 2023-05-26 | 苏州浪潮智能科技有限公司 | 代码分析方法、装置以及系统 |
CN116257423A (zh) * | 2021-12-09 | 2023-06-13 | 腾讯科技(深圳)有限公司 | 一种任务处理方法及装置 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8806441B2 (en) * | 2009-06-29 | 2014-08-12 | International Business Machines Corporation | Static code analysis |
JP5976209B2 (ja) * | 2013-05-15 | 2016-08-23 | 三菱電機株式会社 | プログラム解析装置、プログラム解析方法およびプログラム解析プログラム |
-
2023
- 2023-08-16 CN CN202311034335.0A patent/CN116756048B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101017458A (zh) * | 2007-03-02 | 2007-08-15 | 北京邮电大学 | 基于源代码静态分析的软件安全代码分析器及其检测方法 |
CN103425572A (zh) * | 2012-05-24 | 2013-12-04 | 腾讯科技(深圳)有限公司 | 代码分析方法及代码分析系统 |
CN113377341A (zh) * | 2020-03-10 | 2021-09-10 | 阿里巴巴集团控股有限公司 | 代码分析方法、装置、电子设备及计算机可读介质 |
CN113268245A (zh) * | 2021-05-25 | 2021-08-17 | 北京大米科技有限公司 | 代码分析方法、装置及存储介质 |
CN116257423A (zh) * | 2021-12-09 | 2023-06-13 | 腾讯科技(深圳)有限公司 | 一种任务处理方法及装置 |
CN114386034A (zh) * | 2021-12-21 | 2022-04-22 | 中国电子科技集团公司第三十研究所 | 动态迭代的多引擎融合恶意代码检测方法、设备及介质 |
CN114625375A (zh) * | 2022-03-16 | 2022-06-14 | 珠海金山数字网络科技有限公司 | 代码分析方法及装置 |
CN115774881A (zh) * | 2023-02-13 | 2023-03-10 | 深圳开源互联网安全技术有限公司 | 代码审计方法、装置、设备及介质 |
CN116166556A (zh) * | 2023-02-28 | 2023-05-26 | 苏州浪潮智能科技有限公司 | 代码分析方法、装置以及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN116756048A (zh) | 2023-09-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107979508B (zh) | 微服务测试方法及装置 | |
US11544137B2 (en) | Data processing platform monitoring | |
CN108319495B (zh) | 任务处理方法及装置 | |
CN109408232B (zh) | 一种基于交易流程的组件化总线调用执行系统 | |
US11886302B1 (en) | System and method for execution of applications in a container | |
US20110067007A1 (en) | Automatic thread dumping | |
US20080301389A1 (en) | Memory-protection method and apparatus | |
US20120159258A1 (en) | Debugging in data parallel computations | |
CN111221550B (zh) | 用于流式计算的规则更新方法、装置及流式计算系统 | |
CN110780870A (zh) | 一种业务执行方法、装置、设备及存储介质 | |
CN109445937B (zh) | 一种组件化编程及无缝执行方法 | |
CN110599305A (zh) | 业务处理方法、装置及存储介质 | |
US8645920B2 (en) | Data parallelism aware debugging | |
CN116756048B (zh) | 一种代码分析方法、装置、计算机设备及存储介质 | |
CN110597613A (zh) | 任务处理方法、装置、设备及计算机可读存储介质 | |
CN111147541B (zh) | 基于参数服务器的节点处理方法、装置、设备及存储介质 | |
CN114691241B (zh) | 任务执行方法、装置、电子设备及存储介质 | |
CN114090183B (zh) | 一种应用启动方法、装置、计算机设备和存储介质 | |
US20100306777A1 (en) | Workflow message and activity correlation | |
CN115934272A (zh) | 一种联机批量任务处理方法及装置 | |
US20220276901A1 (en) | Batch processing management | |
CN114327673A (zh) | 一种任务启动方法、装置、电子设备及存储介质 | |
CN111061576B (zh) | 一种实体对象的创建方法及系统 | |
CN108062224A (zh) | 基于文件句柄的数据读写方法、装置及计算设备 | |
US7908375B2 (en) | Transparently externalizing plug-in computation to cluster |
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 |