CN114647413A - 一种代码处理方法以及相关设备 - Google Patents

一种代码处理方法以及相关设备 Download PDF

Info

Publication number
CN114647413A
CN114647413A CN202011499700.1A CN202011499700A CN114647413A CN 114647413 A CN114647413 A CN 114647413A CN 202011499700 A CN202011499700 A CN 202011499700A CN 114647413 A CN114647413 A CN 114647413A
Authority
CN
China
Prior art keywords
static analysis
code
rule
compiler
static
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.)
Pending
Application number
CN202011499700.1A
Other languages
English (en)
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.)
Huawei Cloud Computing Technologies Co Ltd
Original Assignee
Huawei Cloud Computing Technologies Co Ltd
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 Huawei Cloud Computing Technologies Co Ltd filed Critical Huawei Cloud Computing Technologies Co Ltd
Priority to CN202011499700.1A priority Critical patent/CN114647413A/zh
Priority to PCT/CN2021/120536 priority patent/WO2022127263A1/zh
Publication of CN114647413A publication Critical patent/CN114647413A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • 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

Abstract

本申请提供了一种代码处理方法,应用于代码处理系统,该系统包括编译器,该方法包括:编译器获取代码,从远端的静态分析规则库获取代码对应的静态分析规则,根据静态分析规则获得对代码的分析结果。该方法利用编译器调用远端的静态分析规则库中的静态分析规则进行静态分析,无需软件开发人员花费大量时间和精力学习使用不同种类的静态分析工具,提高了静态分析的效率,提高了用户体验。

Description

一种代码处理方法以及相关设备
技术领域
本申请涉及软件开发技术领域,尤其涉及一种代码处理方法、编译器、代码处理系统以及计算机可读存储介质、计算机程序产品。
背景技术
在进行软件开发时,开发人员常常需要利用静态分析工具对程序代码进行程序静态程分析。所谓程序静态分析是指在不运行计算机程序的条件下进行程序分析的方法。静态分析工具可以帮助开发人员查找代码错误(如词法错误、语法错误)、提高代码可读性及开发团队内代码风格的一致性。
目前,业内各语言都提供有丰富的静态分析工具,从而提供差异化的静态分析服务。然而,各类静态分析工具架构设计的差异化导致开发人员需要花费大量时间和精力学习使用这些不同种类的静态分析工具,降低了静态分析的效率,影响了用户体验。
发明内容
本申请提供了一种代码处理方法,该方法利用编译器调用远端的静态分析规则库中的静态分析规则进行静态分析,无需软件开发人员花费大量时间和精力学习使用不同种类的静态分析工具,提高了静态分析的效率,提高了用户体验。本申请还提供了上述方法对应的编译器、代码处理系统、设备、计算机可读存储介质以及计算机程序产品。
第一方面,本申请提供了一种代码处理方法。该方法可以由代码处理系统执行。代码处理系统包括编译器。编译器获取代码,具体是待分析的代码,然后编译器从远端的静态分析规则库获取上述代码对应的静态分析规则,利用该静态分析规则对代码进行静态分析,获得对代码的分析结果。
该方法利用编译器调用远端的静态分析规则库中的静态分析规则进行静态分析,无需软件开发人员花费大量时间和精力学习使用不同种类的静态分析工具,提高了静态分析的效率,从而提高了用户体验。
并且,远端的静态分析规则库能够根据代码情况向编译器实时分发相应的静态分析规则,编译器无需预先加载较多的静态分析规则,减少了资源占用,由此可以实现提供高可用、低成本的静态分析服务。另外,静态分析过程在编译器中实现,例如嵌入到编译器编译解释阶段,可以不需要配置额外的软硬件资源进行独立的静态分析,降低了相关软硬件资源在静态分析层面的投入,进一步降低了成本。
在一些可能的实现方式中,分析结果包括两种,一种为分析通过,一种为分析不通过。为了便于用户(例如开发人员)对代码进行修正,提高开发效率,当分析结果表征静态分析不通过时,所述编译器还可以向用户呈现针对所述代码的提示信息。该提示信息可以包括错误(error)信息或告警(warning)信息中的一个或多个。
具体地,编译器可以向用户呈现代码包括n1个error和n2个warning。其中,n1和n2为整数。进一步地,编译器还可以向用户呈现错误位置、错误原因以及告警位置和告警原因中的任意一个或多个。
如此,用户可以根据提示信息快速跳转至代码的错误位置,根据提示的错误原因对错误位置的代码进行修正,或者快速跳转至代码的告警位置,根据提示的告警原因对告警位置的代码进行优化。由此可以实现快速完善代码,提高开发效率,以及提高代码质量。
在一些可能的实现方式中,静态分析规则库中包括不同计算机语言的静态分析规则。编译器可以支持对各计算机语言的静态分析规则进行加载和执行,由此实现通过统一的方式对不同计算机语言的代码进行静态分析。用户无需安装不同计算机语言的静态分析工具,轻量级的终端即可通过编译器调用远端的静态分析规则库中的静态分析规则实现对代码的静态分析,降低了对终端的性能要求。
在一些可能的实现方式中,所述代码处理系统还包括规则管理装置。该规则管理装置可以对静态分析规则进行管理,例如进行增删查改等操作。具体地,规则管理装置接收用户通过标准接口,如标准化的应用程序编程接口(application programminginterface,API)输入的规则描述信息,然后将根据所述规则描述信息形成的静态分析规则存储在所述静态分析规则库中。
如此实现了提供统一的静态分析规则扩展能力。软件开发人员仅掌握通用的编译器使用能力以及通用的静态分析规则扩写能力即可在软件开发的各个阶段定制与业务需求相对应的静态分析规则,通过编译器加载该静态分析规则进行静态分析,提高了静态分析效率。
在一些可能的实现方式中,静态分析规则在传输或存储时的形态与在内存中使用的形态可以是不同的。为了便于传输或存储,规则管理装置还可以在形成静态分析规则后,对根据所述规则描述信息形成的静态分析规则进行序列化,在一些计算机语言中,序列化也可以称作编集(marshalling),然后规则管理装置将序列化后的所述静态分析规则存储在所述静态分析规则库中。
如此,可以实现通过少量的存储资源存储大量的静态分析规则,提高存储资源利用率,节约存储资源。
在一些可能的实现方式中,当静态分析规则库中存储的静态分析规则为序列化后的静态分析规则时,则编译器在对代码进行静态分析过程中,先从远端的静态分析规则库获取所述代码对应的、序列化后的静态分析规则,对所述代码对应的、序列化后的静态分析规则进行反序列化,得到所述代码对应的静态分析规则。
在一些可能的实现方式中,所述编译器可以获取来自于开发环境、门禁环境或者运行环境的代码。其中,开发环境指利用开发工具进行软件开发的环境,开发工具可以是集成开发环境(integrated development environment,IDE),基于此,开发环境也可以称作IDE环境。门禁环境是指进行门禁检查的环境。在持续集成持续交付(continuousintegration/continuous deployment,CI/CD)模式下,软件开发人员提交代码后,可以自动触发门禁检查。门禁检查包括的检查任务可以预先设定。在一些可能的实现方式中,门禁检查可以包括静态检查,也即静态分析。运行环境具体是指代码运行时的环境,运行环境具体可以包括测试环境、生产环境。
如此,满足了用户在不同场景例如是不同环境下对代码进行静态分析的需求,无需在不同环境下分别提供相应的静态分析工具,降低了静态分析的成本。
在一些可能的实现方式中,所述编译器对所述代码进行静态分析的触发条件是用户在开发环境、门禁环境或者运行环境通过用户界面触发代码分析,例如是通过图形用户界面(graphical user interface,GUI)上承载的静态分析控件触发代码分析,或者是通过命令用户界面(command user interface,CUI)输入静态分析命令触发代码分析。
当上述触发条件被满足时,编译器可以启动对代码的静态分析,以查找代码错误(如词法错误、语法错误)、提高代码可读性或者是提高开发团队内代码风格的一致性。
第二方面,本申请提供了一种编译器。所述编译器包括:
交互模块,用于获取代码;
规则加载模块,用于从远端的静态分析规则库获取所述代码对应的静态分析规则;
静态分析模块,用于根据所述静态分析规则获得对所述代码的分析结果。
在一些可能的实现方式中,所述交互模块还用于:
当所述分析结果表征静态分析不通过时,向用户呈现针对所述代码的提示信息。
在一些可能的实现方式中,所述规则加载模块具体用于:
从远端的静态分析规则库获取所述代码对应的、序列化后的静态分析规则;
对所述代码对应的、序列化后的静态分析规则进行反序列化,得到所述代码对应的静态分析规则。
在一些可能的实现方式中,所述交互模块具体用于:
获取来自于开发环境、门禁环境或者运行环境的代码。
在一些可能的实现方式中,所述编译器对所述代码进行静态分析的触发条件是用户在开发环境、门禁环境或者运行环境通过用户界面触发代码分析。
第三方面,本申请提供了一种代码处理系统。所述代码处理系统包括编译器和规则管理装置,其中:
所述规则管理装置,用于接收用户通过标准接口输入的规则描述信息,将根据所述规则描述信息形成的静态分析规则存储在远端的静态分析规则库中;
所述编译器,用于获取代码,从所述静态分析规则库获取所述代码对应的静态分析规则,根据所述静态分析规则获得对所述代码的分析结果。
在一些可能的实现方式中,所述规则管理装置具体用于:
对根据所述规则描述信息形成的静态分析规则进行序列化;
将序列化后的所述静态分析规则存储在所述静态分析规则库中。
第四方面,本申请提供一种设备,所述设备包括处理器和存储器。所述处理器、所述存储器进行相互的通信。所述处理器用于执行所述存储器中存储的指令,以使得设备执行如第一方面或第一方面的任一种实现方式中由编译器执行的代码处理方法。
第五方面,本申请提供一种设备,所述设备包括处理器和存储器。所述处理器、所述存储器进行相互的通信。所述处理器用于执行所述存储器中存储的指令,以使得设备执行如第一方面或第一方面的任一种实现方式中由规则管理装置执行的代码处理方法。
第六方面,本申请提供一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,所述指令指示设备执行上述第一方面或第一方面的任一种实现方式所述的代码处理方法。
第七方面,本申请提供了一种包含指令的计算机程序产品,当其在设备上运行时,使得设备执行上述第一方面或第一方面的任一种实现方式所述的代码处理方法。
本申请在上述各方面提供的实现方式的基础上,还可以进行进一步组合以提供更多实现方式。
附图说明
为了更清楚地说明本申请实施例的技术方法,下面将对实施例中所需使用的附图作以简单地介绍。
图1为本申请实施例提供的一种代码处理系统的系统架构图;
图2为本申请实施例提供的一种代码处理系统的主界面的界面示意图;
图3为本申请实施例提供的一种代码处理系统呈现分析结果的界面示意图;
图4为本申请实施例提供的一种代码处理系统呈现分析结果的界面示意图;
图5A为本申请实施例提供的一种代码处理系统的架构示意图;
图5B为本申请实施例提供的一种代码处理系统的架构示意图;
图6为本申请实施例提供的一种代码处理方法的流程图;
图7为本申请实施例提供的一种设备的结构示意图;
图8为本申请实施例提供的一种设备的结构示意图。
具体实施方式
本申请实施例中的术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。
首先对本申请实施例中所涉及到的一些技术术语进行介绍。
软件开发是根据用户需求建造出软件系统或者软件系统中的软件部分的过程。软件开发是一项包括需求捕捉、需求分析、设计、实现和测试的系统工程。软件一般是软件开发人员基于软件开发工具如集成开发环境(integrated development environment,IDE),利用一种或多种计算机语言(也称作程序设计语言)编写代码实现的。
软件开发人员通过程序设计语言编写的代码也称作程序代码、计算机代码。由于计算机通常是直接执行机器语言代码(例如是指令集中的指令),而软件开发人员直接阅读指令集过于困难,且以机器语言编程耗时较长,软件开发人员通常采用高级程序语言或者汇编语言(与机器语言同属机器语言,但是比机器语言易于理解)编写源代码,然后通过编译器进行编译,或者通过汇编器进行汇编得到能够被计算机识别的二进制代码,也即目标代码。
在软件开发过程中,软件开发人员常常需要利用静态分析工具对程序代码进行程序静态分析(program static analysis)。所谓程序静态分析是指在不运行计算机程序的条件下进行程序分析的方法。静态分析工具可以帮助软件开发人员查找代码错误(如源代码中的词法错误、语法错误)、提高代码可读性及开发团队内代码风格的一致性。
目前,主流的高级程序语言例如Python、Java等语言的编译器均提供有静态分析工具。静态分析工具可以调用编译器,获得代码编译过程中产生的抽象语法树(abstractsyntax tree,AST),然后结合该静态分析工具内的规则进行分析,以识别代码质量以及代码风格等问题。不同语言分别提供有丰富的静态分析工具,从而提供差异化的静态分析服务。
然而,各类静态分析工具架构设计的差异化导致开发人员需要花费大量时间和精力学习使用这些不同种类的静态分析工具,降低了静态分析的效率,影响了用户体验。
有鉴于此,本申请提供了一种代码处理方法。该方法可以由代码处理系统执行。代码处理系统包括编译器。编译器获取代码,具体是待分析的代码,然后从远端的静态分析规则库获取上述代码对应的静态分析规则,利用该静态分析规则对代码进行静态分析,获得对代码的分析结果。
该方法利用编译器调用远端的静态分析规则库中的静态分析规则进行静态分析,无需软件开发人员花费大量时间和精力学习使用不同种类的静态分析工具,提高了静态分析的效率,从而提高了用户体验。
并且,远端的静态分析规则库能够根据代码情况向编译器实时分发相应的静态分析规则,编译器无需预先加载较多的静态分析规则,减少了资源占用,由此可以实现提供高可用、低成本的静态分析服务。另外,静态分析过程在编译器中实现,例如嵌入到编译器编译解释阶段,可以不需要配置额外的软硬件资源进行独立的静态分析,降低了相关软硬件资源在静态分析层面的投入,进一步降低了成本。
进一步地,该方法还提供统一的静态分析规则扩展能力。软件开发人员仅掌握通用的编译器使用能力以及通用的静态分析规则扩写能力即可在软件开发的各个阶段定制与业务需求相对应的静态分析规则,通过编译器加载该静态分析规则进行静态分析,提高了静态分析效率。
为了使得本申请的技术方案更加清楚、易于理解,下面结合附图对本申请实施例提供的代码处理系统进行介绍。
参见图1所示的代码处理系统的系统架构图,如图1所示,代码处理系统100包括编译器102和远端的静态分析规则库104。其中,编译器102除了用于对代码(例如是源代码)进行编译以外,还可以用于对代码进行静态分析。静态分析规则库104中存储有静态分析规则。
本申请实施例将静态分析工具设计为编译器102的模块,将编译器102转化为在线工具,编译器102从远端的静态分析规则库104中获取相应的静态分析规则,并基于该静态分析规则进行静态分析,得到对代码的分析结果。由此实现将静态分析工具融入编译器102中,无需软件开发人员花费大量时间和精力学习不同静态分析工具,降低了软件开发人员的使用成本。
具体地,编译器102包括交互模块1022、规则加载模块1024和静态分析模块1026。其中,交互模块1022用于获取代码。规则加载模块1024用于从远端的静态分析规则库104中获取与待分析的代码对应的静态分析规则。静态分析模块1026用于根据规则加载模块1024获取的静态分析规则,对代码进行静态分析,获得分析结果。
在一些实施例中,交互模块1022提供有用户界面,例如可以是图形用户界面(graphical user interface,GUI)或者是命令用户界面(command user interface,CUI)。交互模块1022根据代码文件的路径,加载代码文件,从而获得该代码文件中的代码。在一些可能的实现方式中,编译器102可以设置对代码进行静态分析的触发条件。例如,该触发条件可以为用户通过用户界面如GUI或CUI触发静态分析。具体地,交互模块1022可以通过GUI接收用户通过该GUI上承载的静态分析控件触发的代码分析指令,或者通过CUI接收用户输入的代码分析指令。该代码分析指令指示对代码进行静态分析。为了便于描述,后文以GUI进行示例说明。
图2示出了编译器102的交互模块1022提供的主界面的界面示意图,如图2所示,主界面200包括代码显示区202和目录显示区204。其中,代码显示区202用于显示编译器102加载的代码文件中的代码,目录显示区204用于显示编译器102加载的代码文件的目录。主界面200还承载有编译控件206和静态分析控件208。编译控件206被触发时,例如通过鼠标点击、快捷键或者语音口令等方式被触发时,编译器102可以执行对代码的编译流程。静态分析控件208被触发时,编译器102可以执行对代码的静态分析流程。
静态分析模块1026对代码进行静态分析,得到分析结果后,还可以将分析结果返回该交互模块1022。交互模块1022还用于向用户呈现上述分析结果。分析结果包括分析通过或分析不通过。进一步地,分析结果为分析通过时,代码中语句可以正常执行,分析结果为分析不通过时,交互模块1022还用于向用户呈现针对所述代码的提示信息,该提示信息可以包括错误(error)信息或告警(warning)信息中的一个或多个。
图3示出了编译器102的交互模块1022在主界面呈现分析结果的界面示意图,如图3所示,主界面200的代码显示区202下方还包括分析结果显示区207,该分析结果显示区207用于显示对代码的分析结果。分析结果为分析不通过时,分析结果显示区207可以显示代码包括n1个error和n2个warning。其中,n1和n2为整数。分析结果显示区207还可以进一步显示错误位置、错误原因以及告警位置和告警原因中的任意一个或多个。
在图3的示例中,分析结果为分析不通过,代码具体包括1个error和2个warning,分析结果显示区207依次显示有error的属性信息和warning的属性信息。其中,error的属性信息包括错误位置和错误原因,例如错误位置为line137,错误原因为使用了未定义的变量a。warning的属性信息包括告警位置和告警原因,例如warning(1)对应的告警位置为line145,告警原因为变量z不可达,又例如,warning(2)对应的告警位置为line176,告警原因为赋予变量x的值未使用。
图3是以主界面200的代码显示区202下方显示分析结果进行示例说明,在一些实施例中,交互模块1022还可以通过弹窗的形式显示分析结果。参见图4所示的主界面200显示分析结果的界面示意图,如图4所示,主界面200还包括弹窗209,该弹窗209具体用于显示对代码的分析结果。
在一些可能的实现方式中,用户可以在开发环境、门禁环境或运行环境通过用户界面触发代码分析。相应地,编译器102可以接收来自于开发环境、门禁环境或者运行环境的代码分析指令。其中,开发环境是指利用开发工具进行软件开发的环境,开发工具可以是IDE,基于此,开发环境也可以称作IDE环境。门禁环境是指进行门禁检查的环境。在持续集成持续交付(continuous integration/continuous deployment,CI/CD)模式下,软件开发人员提交代码后,可以自动触发门禁检查。门禁检查包括的检查任务可以预先设定。在一些可能的实现方式中,门禁检查可以包括静态检查,也即静态分析。运行环境具体是指代码运行时的环境,运行环境具体可以包括测试环境、生产环境。
具体地,编译器102提供有用户界面,用户可以在开发环境、门禁环境或者运行环境下通过用户界面触发代码分析,编译器102可以通过上述用户界面接收对应的代码分析指令,从而对代码进行静态分析。
考虑到一些情况下,静态分析规则库104中已有的静态分析规则无法满足开发需求,本申请实施例的代码处理系统100还可以包括规则管理装置106。该规则管理装置106可以用于对静态分析规则进行管理,例如支持软件开发人员扩写静态分析规则。在一些实施例中,规则管理装置106还支持软件开发人员更新、修改或者删除已有的静态分析规则。
具体地,规则管理装置106接收用户通过标准接口,如标准化的应用程序编程接口(application programming interface,API)输入的规则描述信息。该规则描述信息用于描述静态分析规则的分析逻辑。然后规则管理装置106可以根据上述规则描述信息生成静态分析规则,将该静态分析规则存储在静态分析规则库104中。
进一步地,规则管理装置106将静态分析规则存储到静态分析规则库104前,还可以对静态分析规则进行序列化处理,也称作编集(marshalling)处理,从而将静态分析规则的内存表示转换为适合存储或传输的数据格式。
对应地,编译器102可以从远端的静态分析规则库104获取与待分析的代码对应的、序列化后的静态分析规则,然后对序列化后的静态分析规则进行反序列化处理,从而得到与待分析的代码对应的静态分析规则。如此,编译器102可以利用反序列化所得静态分析规则对待分析的代码进行静态分析。
需要说明的是,代码处理系统100中的编译器102、规则管理装置106可以是软件,例如是相互独立的软件。在一些实施例中,规则管理装置106也可以是以功能模块、插件等形式集成在编译器102中。
本申请实施例的代码处理系统100具有多种部署方式。下面结合附图,对本申请实施例提供的代码处理系统100的部署方式进行示例说明。
参见图5A所示的代码处理系统100的一种架构示意图,如图5A所示,代码处理系统100中的编译器102可以部署在终端,静态分析规则库104和规则管理装置106可以部署在云环境中,具体为云环境上的一个或多个计算设备(例如:中心服务器)。
其中,终端包括但不限于台式机、笔记本电脑、平板电脑或者智能手机等用户终端。云环境指示云服务提供商拥有的,用于提供计算、存储、通信资源的中心计算设备集群。该云环境例如可以是公有云、私有云或者混合云。
软件开发人员可以在终端运行编译器102,编译器102访问云环境中的静态分析规则库104,从该静态分析规则库104获取相应的静态分析规则对代码进行静态分析。当然,软件开发人员也可以通过终端访问云环境中的规则管理装置106,该规则管理装置106具体可以是以云服务的形式提供给软件开发人员使用,软件开发人员可以基于规则管理装置106提供的规则管理服务进行静态分析规则扩写,从而实现根据业务需求自定义静态分析规则。
代码处理系统100中的静态分析规则库104和规则管理装置106还可以部署在边缘环境中,如此,编译器102可以快速加载静态分析规则,或者快速加载规则管理服务,由此提高了静态分析的效率或静态分析规则扩写的效率。
其中,边缘环境指示在地理位置上距离端设备(例如终端设备)较近的,用于提供计算、存储、通信资源的边缘计算设备集群。边缘环境中包括一个或多个计算设备,边缘计算设备可以为服务器、计算盒子等。
图5A是以代码处理系统100的多个部分分布式部署在不同环境中进行示例说明。在一些可能的实现方式中,代码处理系统100的多个部分也可以集中部署在同一环境。参见图5B所示的示意图,代码处理系统100的编译器102、静态分析规则库104、规则管理装置106也可以部署在云环境中,例如部署在同一云服务提供商提供的云计算集群中。
如此,软件开发人员可以通过访问云服务,实现在线编译、在线静态分析或者在线扩写静态分析规则。
需要说明的是,图5A、图5B仅仅是本申请实施例中代码处理系统100的一些示意性部署方式,在本申请实施例其他可能的实现方式中,代码处理系统100还可以通过其他方式部署。
接下来,将从代码处理系统100的角度,对本申请实施例提供的代码处理方法进行详细介绍。
参见图6所示的代码处理方法的流程图,该方法包括:
S602:编译器102获取代码。
编译器102具体是具有代码分析规则加载功能的编译器。具体地,软件开发人员可以为开源的编译器或者自研的编译器编写模块加载库,或者是对已有模块加载库进行改写,使得该编译器能够从远端的静态分析规则库104加载静态分析规则。其中,软件开发人员可以针对不同计算机语言,如Java、Python等分别编写模块加载库。
编译器102发布后,需要使用该编译器102进行静态分析的软件开发人员可以将该编译器102部署到相应的环境,例如是开发环境、门禁环境或者运行环境中。
用户如软件开发人员可以利用该编译器102加载代码文件,如此,编译器102可以获取代码文件中的代码。当用户设置开启静态分析功能,或者通过静态分析控件触发静态分析操作,编译器102可以接收到相应的代码分析指令,该代码分析指令具体用于指示对代码进行静态分析。其中,代码可以是编译器102当前加载的代码。
S604:编译器102从静态分析规则库104获取与代码对应的静态分析规则。
静态分析规则库104中存储有不同计算机语言对应的静态分析规则,编译器102可以根据代码所采用的计算机语言,从静态分析规则库104获取相应语言的静态分析规则。进一步地,编译器102还可以根据代码内容从静态分析规则库104中获取与代码对应的静态分析规则。
在一些可能的实现方式中,静态分析规则可以包括基于源代码直接进行静态分析的规则,基于抽象语法树(abstract syntax tree,AST)进行静态分析的规则,或者是基于源代码的中间表示(intermediate representation,IR)进行静态分析的规则。
其中,抽象语法树是程序源代码的语法结构的树状表示。程序源代码经过词法分析器(Lexer)进行词法分析可以得到各种不同种类的单词(Token),再由语法分析器(Parser)进行语法分析可以得到抽象语法树。抽象语法树的根节点表示整个程序,内部节点是抽象语法结构或者单词。AST能够与源代码中的各个语法元素一一对应。中间表示是编译器102对程序源代码进行扫描生成的内部表示。其中,中间表示可以是三地址形式(3-Address Form)。
基于AST进行静态分析的规则适于检查代码规范,例如标识符命名规范检查或常见的编码惯用法检查。基于IR进行静态分析的规则能够进行更深层次的流敏感分析、过程间分析、上下文敏感分析和对象敏感分析,具有更高的检测准确度,能够检测出高难度的程序漏洞。
S606:编译器102根据静态分析规则对代码进行静态分析,获得对代码的分析结果。分析结果表征分析不通过时,执行S608。
具体地,静态分析规则为基于源代码直接进行静态分析的规则时,编译器102可以直接利用该静态分析规则对源代码进行静态分析,得到分析结果。
静态分析规则为基于AST进行静态分析的规则时,编译器102还可以获取源代码的AST,然后利用该静态分析规则对AST进行图模式匹配,从而实现静态分析,得到分析结果。
静态分析规则为基于IR进行静态分析的规则时,编译器102还可以获取源代码的IR,后利用该静态分析规则对源代码的IR进行静态分析,得到对源代码的分析结果。
进一步地,静态分析规则库104中存储的静态分析规则一般是序列化后的静态分析规则,因此,编译器102从静态分析规则库104中获取序列化后的静态分析规则后,还可以对序列化后的静态分析规则进行反序列化,然后再利用该静态分析规则进行静态分析。
S608:编译器102向用户呈现针对所述代码的提示信息。
代码的提示信息具体可以包括代码中的错误信息或告警信息中的一个或多个。其中,错误信息包括错误的属性信息,例如错误位置、错误原因,告警信息包括告警的属性信息,例如告警位置、告警原因。
编译器102可以通过用户界面如GUI向用户呈现错误位置、错误原因,以及告警位置、告警原因中的任意一个或多个,以便用户(如软件开发人员)可以根据该提示信息对代码进行针对性纠正。
本申请实施例中,编译器102依赖静态分析规则库104中的静态分析规则实现对代码的静态分析。而静态分析规则可以由软件开发人员基于规则管理装置106进行扩写。
参见图6,在编译器102接收代码分析指令之前,该方法还可以包括:
S702:规则管理装置106接收用户通过标准接口输入的规则描述信息。
S704:规则管理装置106根据规则描述信息生成静态分析规则。
其中,标准接口可以是标准的API接口。该API接口配置有规则描述信息的格式,软件开发人员可以按照该格式输入规则描述信息,规则管理装置106可以接收该规则描述信息。其中,规则描述信息描述有静态分析规则的分析逻辑。对应地,规则管理装置106可以根据规则描述信息描述的分析逻辑生成静态分析规则。
S706:规则管理装置106将静态分析规则存储在静态分析规则库104中,以使编译器102从静态分析规则库104中获取相应的静态分析规则进行静态分析。
在具体实现时,规则管理装置106还可以对静态分析规则进行序列化处理,以将静态分析规则的内存表示转换为适于存储或传输的数据格式,然后将序列化处理后的静态分析规则存储在静态分析规则库104中。
如此,编译器102从静态分析规则库104中获取序列化处理后的静态分析规则,还可以对其进行反序列化处理,得到静态分析规则,然后利用静态分析规则进行静态分析。
需要说明的是,上述S702至S706的执行顺序可以根据实际需求而调整,例如在一些可能的实现方式中,S702至S706也可以在S602至S608之后执行。
基于上述内容描述,本申请实施例提供了一种代码处理方法。具体地,具有静态分析功能的编译器获取代码,然后编译器从远端的静态分析规则库获取上述代码对应的静态分析规则,利用该静态分析规则对代码进行静态分析,获得对代码的分析结果。
该方法利用编译器调用远端的静态分析规则库中的静态分析规则进行静态分析,无需软件开发人员花费大量时间和精力学习使用不同种类的静态分析工具,提高了静态分析的效率,从而提高了用户体验。
上文结合图1至图6对本申请实施例提供的代码处理方法进行了详细介绍,下面将结合附图对本申请实施例提供的编译器102和代码处理系统100进行介绍。
参见图1所示的编译器的结构示意图,该编译器102包括:
交互模块1022,用于获取代码;
规则加载模块1024,用于从远端的静态分析规则库获取所述代码对应的静态分析规则;
静态分析模块1026,用于根据所述静态分析规则获得对所述代码的分析结果。
在一些可能的实现方式中,所述交互模块1022还用于:
当所述分析结果表征静态分析不通过时,向用户呈现针对所述代码的提示信息。
在一些可能的实现方式中,所述规则加载模块1024具体用于:
从远端的静态分析规则库获取所述代码对应的、序列化后的静态分析规则;
对所述代码对应的、序列化后的静态分析规则进行反序列化,得到所述代码对应的静态分析规则。
在一些可能的实现方式中,所述交互模块1022具体用于:
获取来自于开发环境、门禁环境或者运行环境的代码。
在一些可能的实现方式中,所述编译器102对所述代码进行静态分析的触发条件是用户在开发环境、门禁环境或者运行环境通过用户界面触发代码分析。
根据本申请实施例的编译器102可对应于执行本申请实施例中描述的方法,并且编译器102的各个模块/单元的上述和其它操作和/或功能分别为了实现图6所示实施例中的各个方法的相应流程,为了简洁,在此不再赘述。
接下来,参见图1所示的代码处理系统100的结构示意图,如图1所示,该系统100包括:
规则管理装置106,用于接收用户通过标准接口输入的规则描述信息,将根据所述规则描述信息形成的静态分析规则存储在远端的静态分析规则库中;
编译器102,用于获取代码,从所述静态分析规则库获取所述代码对应的静态分析规则,根据所述静态分析规则获得对所述代码的分析结果。
在一些可能的实现方式中,所述规则管理装置106具体用于:
对根据所述规则描述信息形成的静态分析规则进行序列化;
将序列化后的所述静态分析规则存储在所述静态分析规则库中。
根据本申请实施例的代码处理系统100可对应于执行本申请实施例中描述的方法,并且代码处理系统100的各个模块/单元的上述和其它操作和/或功能分别为了实现图6所示实施例中的各个方法的相应流程,为了简洁,在此不再赘述。
本申请实施例还提供了一种设备,该设备可以是终端,包括但不限于台式机、笔记本电脑、平板电脑。该设备具体可以用于实现如图1所示的编译器102的功能。接下来,将从硬件实体化的角度,对本申请实施例提供的设备进行介绍。
图7提供了一种设备700的结构示意图,如图7所示,设备700包括总线701、处理器702、通信接口703和存储器704。处理器702、存储器704和通信接口703之间通过总线701通信。
总线701可以是外设部件互连标准(peripheral component interconnect,PCI)总线或扩展工业标准结构(extended industry standard architecture,EISA)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,图7中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
处理器702可以为中央处理器(central processing unit,CPU)、图形处理器(graphics processing unit,GPU)、微处理器(micro processor,MP)或者数字信号处理器(digital signal processor,DSP)等处理器中的任意一种或多种。
通信接口703是一种输入输出(input/output,I/O)设备。通信接口703用于和外部通信。具体地,通信接口703可以是显示器,用于向用户呈现用户界面如GUI或CUI,显示器可以通过用户界面接收用户触发的代码分析指令,或者是通过用户界面向用户呈现分析结果。其中,分析结果表征静态分析不通过时,显示器还可以向用户呈现针对该代码的提示信息。
存储器704可以包括易失性存储器(volatile memory),例如随机存取存储器(random access memory,RAM)。存储器704还可以包括非易失性存储器(non-volatilememory),例如只读存储器(read-only memory,ROM),快闪存储器,机械硬盘(hard diskdrive,HDD)或固态硬盘(solid state drive,SSD)。
存储器704中存储有可执行的程序代码,处理器702执行该可执行的程序代码以执行获取代码,从远端的静态分析规则库获取与该代码对应的静态分析规则,并根据静态分析规则对代码进行静态分析,获得对代码的分析结果的步骤。从而执行前述代码处理方法。
本申请实施例还提供了一种设备,该设备可以是服务器,例如是私有的服务器或者是租赁的公有云中的服务器。该设备具体可以用于实现如图1所示的规则管理装置106的功能。接下来,将从硬件实体化的角度,对本申请实施例提供的设备进行介绍。
图8提供了一种设备的结构示意图,如图8所示,设备800包括总线801、处理器802、通信接口803和存储器804。处理器802、存储器804和通信接口803之间通过总线801通信。
总线801可以是PCI总线或EISA总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,图8中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。处理器802可以为CPU、GPU、MP或者DSP等处理器中的任意一种或多种。
通信接口803是一种I/O设备。通信接口803用于和外部通信。具体地,通信接口803可以接收用户输入的规则描述信息,或者是将基于该规则描述信息生成的静态分析规则传输至远端的静态分析规则库进行存储。
存储器804可以包括易失性存储器,例如随机存取存储器RAM。存储器804还可以包括非易失性存储器,例如ROM,快闪存储器,机械硬盘HDD或固态硬盘SSD。
存储器804中存储有可执行的程序代码,处理器802执行该可执行的程序代码以执行接收用户通过标准接口输入的规则描述信息,将根据所述规则描述信息形成的静态分析规则存储在远端的静态分析规则库中的步骤,从而执行前述代码处理方法。
本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质包括指令,所述指令指示设备700或设备800执行上述代码处理方法。
本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质包括指令,所述指令指示设备700或设备800执行上述代码处理方法。
本申请实施例还提供了一种计算机程序产品,所述计算机程序产品被计算机执行时,所述计算机执行前述的代码处理方法的任一方法。该计算机程序产品可以为一个软件安装包,在需要使用前述代码处理方法的任一方法的情况下,可以下载该计算机程序产品并在计算机上执行该计算机程序产品。

Claims (17)

1.一种代码处理方法,其特征在于,应用于代码处理系统,所述代码处理系统包括编译器,所述方法包括:
所述编译器获取代码;
所述编译器从远端的静态分析规则库获取所述代码对应的静态分析规则;
所述编译器根据所述静态分析规则获得对所述代码的分析结果。
2.根据权利要求1所述的方法,其特征在于,当所述分析结果表征静态分析不通过时,所述方法还包括:
所述编译器向用户呈现针对所述代码的提示信息。
3.根据权利要求1或2所述的方法,其特征在于,所述代码处理系统还包括规则管理装置,所述方法还包括:
所述规则管理装置接收用户通过标准接口输入的规则描述信息;
所述规则管理装置将根据所述规则描述信息形成的静态分析规则存储在所述静态分析规则库中。
4.根据权利要求3所述的方法,其特征在于,所述规则管理装置将根据所述规则描述信息形成的静态分析规则存储在所述静态分析规则库中,包括:
所述规则管理装置对根据所述规则描述信息形成的静态分析规则进行序列化;
所述规则管理装置将序列化后的所述静态分析规则存储在所述静态分析规则库中。
5.根据权利要求4所述的方法,其特征在于,所述编译器从远端的静态分析规则库获取所述代码对应的静态分析规则,包括:
所述编译器从远端的静态分析规则库获取所述代码对应的、序列化后的静态分析规则;
所述编译器对所述代码对应的、序列化后的静态分析规则进行反序列化,得到所述代码对应的静态分析规则。
6.根据权利要求1至5任一项所述的方法,其特征在于,所述编译器获取代码,包括:
所述编译器获取来自于开发环境、门禁环境或者运行环境的代码。
7.根据权利要求1至6任一项所述的方法,其特征在于,所述编译器对所述代码进行静态分析的触发条件是用户在开发环境、门禁环境或者运行环境通过用户界面触发代码分析。
8.一种编译器,其特征在于,所述编译器包括:
交互模块,用于获取代码;
规则加载模块,用于从远端的静态分析规则库获取所述代码对应的静态分析规则;
静态分析模块,用于根据所述静态分析规则获得对所述代码的分析结果。
9.根据权利要求8所述的编译器,其特征在于,所述交互模块还用于:
当所述分析结果表征静态分析不通过时,向用户呈现针对所述代码的提示信息。
10.根据权利要求8或9所述的编译器,其特征在于,所述规则加载模块具体用于:
从远端的静态分析规则库获取所述代码对应的、序列化后的静态分析规则;
对所述代码对应的、序列化后的静态分析规则进行反序列化,得到所述代码对应的静态分析规则。
11.根据权利要求8至10任一项所述的编译器,其特征在于,所述交互模块具体用于:
获取来自于开发环境、门禁环境或者运行环境的代码。
12.根据权利要求8至11任一项所述的编译器,其特征在于,所述编译器对所述代码进行静态分析的触发条件是用户在开发环境、门禁环境或者运行环境通过用户界面触发代码分析。
13.一种代码处理系统,其特征在于,所述代码处理系统包括编译器和规则管理装置;
所述规则管理装置,用于接收用户通过标准接口输入的规则描述信息,将根据所述规则描述信息形成的静态分析规则存储在远端的静态分析规则库中;
所述编译器,用于获取代码,从所述静态分析规则库获取所述代码对应的静态分析规则,根据所述静态分析规则获得对所述代码的分析结果。
14.根据权利要求13所述的系统,其特征在于,所述规则管理装置具体用于:
对根据所述规则描述信息形成的静态分析规则进行序列化;
将序列化后的所述静态分析规则存储在所述静态分析规则库中。
15.一种设备,其特征在于,所述设备包括处理器和存储器;
所述处理器用于执行所述存储器中存储的指令,以使得所述设备执行如权利要求1至7中任一项所述的方法。
16.一种计算机可读存储介质,其特征在于,包括指令,所述指令指示设备执行如权利要求1至7中任一项所述的方法。
17.一种计算机程序产品,其特征在于,当所述计算机程序产品在计算机上运行时,使得计算机执行如权利要求1至7中任一项所述的方法。
CN202011499700.1A 2020-12-17 2020-12-17 一种代码处理方法以及相关设备 Pending CN114647413A (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN202011499700.1A CN114647413A (zh) 2020-12-17 2020-12-17 一种代码处理方法以及相关设备
PCT/CN2021/120536 WO2022127263A1 (zh) 2020-12-17 2021-09-26 一种代码处理方法以及相关设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011499700.1A CN114647413A (zh) 2020-12-17 2020-12-17 一种代码处理方法以及相关设备

Publications (1)

Publication Number Publication Date
CN114647413A true CN114647413A (zh) 2022-06-21

Family

ID=81989632

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011499700.1A Pending CN114647413A (zh) 2020-12-17 2020-12-17 一种代码处理方法以及相关设备

Country Status (2)

Country Link
CN (1) CN114647413A (zh)
WO (1) WO2022127263A1 (zh)

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4057938B2 (ja) * 2003-03-26 2008-03-05 株式会社東芝 コンパイラ、コンパイル方法、及びプログラム開発ツール
CN103927473A (zh) * 2013-01-16 2014-07-16 广东电网公司信息中心 检测移动智能终端的源代码安全的方法、装置及系统
CN106354632B (zh) * 2016-08-24 2019-03-12 北京奇虎测腾安全技术有限公司 一种基于静态分析技术的源代码检测系统及方法
CN109254776B (zh) * 2018-09-29 2022-02-01 深圳市雷赛控制技术有限公司 多语言代码编译方法及编译器
CN110532165A (zh) * 2019-07-05 2019-12-03 中国平安财产保险股份有限公司 应用程序安装包特性检测方法、装置、设备及存储介质

Also Published As

Publication number Publication date
WO2022127263A1 (zh) 2022-06-23

Similar Documents

Publication Publication Date Title
US10083025B2 (en) Dynamic update of an application in compilation and deployment with warm-swapping
JP5415557B2 (ja) デバッギングのためのユーザ・スクリプト・コードの変換
US9298427B2 (en) Creating inferred symbols from code usage
US10331425B2 (en) Automated source code adaption to inject features between platform versions
US8645938B2 (en) System and method for replacing code
US10459708B2 (en) Composing a module system and a non-module system
US10514898B2 (en) Method and system to develop, deploy, test, and manage platform-independent software
US9965257B2 (en) Automatic configuration of project system from project capabilities
US9459986B2 (en) Automatic generation of analysis-equivalent application constructs
CN112148278A (zh) 可视化的区块链智能合约框架及智能合约开发部署方法
US10839124B1 (en) Interactive compilation of software to a hardware language to satisfy formal verification constraints
KR20080043345A (ko) 선언적으로 정의되는 컨트롤 액션
US9141356B2 (en) Process for generating dynamic type
CN114217789A (zh) 功能组件拓展方法、装置、设备、存储介质及程序产品
KR20060044361A (ko) 런타임 전에 코딩 에러를 감소시키는 컴퓨터 구현 방법
US8365154B2 (en) Multi-language software development
US11947966B2 (en) Identifying computer instructions enclosed by macros and conflicting macros at build time
CN114647413A (zh) 一种代码处理方法以及相关设备
CN112379885A (zh) 小程序编译方法、装置、设备及可读存储介质
US7917893B2 (en) Using a system of annotations to generate views and adapters
CN111367796A (zh) 应用程序调试方法及装置
CN114253615B (zh) 一种引导程序设置方法、装置、电子设备及存储介质
US20230214310A1 (en) Infrastructure to integrate an integrated development environment (ide) with game engines
Császár et al. Building fast and reliable reverse engineering tools with Frida and Rust
EP3164800B1 (en) Bridging a module system and a non-module system

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