一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

代码检查方法、装置、计算机设备和存储介质与流程

2022-11-14 23:12:19 来源:中国专利 TAG:


1.本技术涉及计算机技术领域,特别是涉及一种代码检查方法、装置、计算机设备和存储介质。


背景技术:

2.代码检查是软件开发过程中的重要工作之一,传统技术中,通常先对源码进行编译,再通过代码检查工具(如coverity、infer)基于编译后的代码进行分析检查,编译过程需要编译器(如gcc、clang)参与,对于中大型项目,编译代码的时间长达分钟至小时级别,影响代码检查效率。上述传统技术方案只适用于持续集成的自动化测试阶段,如果在测试阶段暴露出代码问题,需要通过测试人员反馈到开发侧,再由开发人员对有问题的代码进行修复,进而影响代码修复效率。


技术实现要素:

3.基于此,有必要针对上述技术问题,提供一种能够提高代码检查和修复效率的代码检查方法、装置、计算机设备和存储介质。
4.一种代码检查方法,所述方法包括:
5.当监听到代码文件变更时,获取变更的代码文件作为待检查代码文件;
6.根据所述待检查代码文件的语言类型,确定所述待检查代码文件对应的解析脚本和检查规则;
7.通过对应的所述解析脚本对所述待检查代码文件进行解析,获得所述待检查代码文件对应的解析树;
8.根据对应的所述解析树和所述检查规则进行匹配检查,获得所述待检查代码文件的检查结果。
9.一种代码检查装置,所述装置包括:
10.获取模块,用于当监听到代码文件变更时,获取变更的代码文件作为待检查代码文件;
11.确定模块,用于根据所述待检查代码文件的语言类型,确定所述待检查代码文件对应的解析脚本和检查规则;
12.解析模块,用于通过对应的所述解析脚本对所述待检查代码文件进行解析,获得所述待检查代码文件对应的解析树;
13.检查模块,用于根据对应的所述解析树和所述检查规则进行匹配检查,获得所述待检查代码文件的检查结果。
14.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
15.当监听到代码文件变更时,获取变更的代码文件作为待检查代码文件;
16.根据所述待检查代码文件的语言类型,确定所述待检查代码文件对应的解析脚本
和检查规则;
17.通过对应的所述解析脚本对所述待检查代码文件进行解析,获得所述待检查代码文件对应的解析树;
18.根据对应的所述解析树和所述检查规则进行匹配检查,获得所述待检查代码文件的检查结果。
19.一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
20.当监听到代码文件变更时,获取变更的代码文件作为待检查代码文件;
21.根据所述待检查代码文件的语言类型,确定所述待检查代码文件对应的解析脚本和检查规则;
22.通过对应的所述解析脚本对所述待检查代码文件进行解析,获得所述待检查代码文件对应的解析树;
23.根据对应的所述解析树和所述检查规则进行匹配检查,获得所述待检查代码文件的检查结果。
24.上述代码检查方法、装置、计算机设备和存储介质,当监听到代码文件变更时,获取变更的代码文件作为待检查代码文件;根据待检查代码文件的语言类型,确定待检查代码文件对应的解析脚本和检查规则;通过对应的解析脚本对待检查代码文件进行解析,获得待检查代码文件对应的解析树;根据对应的解析树和检查规则进行匹配检查,获得待检查代码文件的检查结果。据此,无需编译过程,可在代码开发阶段实现代码实时检查,提高代码检查效率,帮助开发人员在编译前及时发现代码问题,缩短开发人员修复问题代码的流程,提高代码修复效率,降低修复问题代码的沟通成本。
附图说明
25.图1为一个实施例中代码检查方法的应用环境图;
26.图2为一个实施例中代码检查方法的流程示意图;
27.图3为一个实施例中对错误等级的错误信息进行弹窗提示的示意图;
28.图4为一个实施例中对警告等级的错误信息进行弹窗提示的示意图;
29.图5为一个实施例中对错误信息进行展示的示意图;
30.图6为一个实施例中代码检查方法的流程示意图;
31.图7为一个实施例中代码检查装置的结构框图;
32.图8为一个实施例中计算机设备的内部结构图;
33.图9为一个实施例中计算机设备的内部结构图。
具体实施方式
34.为了使本技术的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本技术进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本技术,并不用于限定本技术。
35.本技术提供的代码检查方法,可以应用于如图1所示的应用环境中。其中,终端102通过网络与服务器104进行通信。用户可以通过终端102访问软件开发平台,服务器104可以
是该平台所在的服务器。代码检查方法可以应用于安装有软件开发平台的终端,也可以应用于该平台所在的服务器,还可以应用于包括终端和服务器的系统,并通过终端和服务器的交互实现。其中,服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、cdn、以及大数据和人工智能平台等基础云计算服务的云服务器。终端可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表等,但并不局限于此。终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接,本技术在此不做限制。
36.在一个实施例中,如图2所示,提供了一种代码检查方法,以该方法应用于图1中的终端为例进行说明,包括以下步骤s202至步骤s208。
37.s202,当监听到代码文件变更时,获取变更的代码文件作为待检查代码文件。
38.开发人员在开发阶段编写代码时,终端可以通过应用程序编程接口(api)实时监听工程目录的文件变更,当监听到代码文件变更时,获取变更的代码文件作为待检查代码文件,开始进行代码检查,据此实现在开发人员编写代码阶段对代码的实时检查,帮助开发人员在编写了问题代码后可以及时发现并快速修复问题代码。可以理解的是,此时待检查代码文件是未经过编译的代码文件,在进行代码检查前无需对源代码进行编译,缩短代码检查和修复的流程。
39.s204,根据待检查代码文件的语言类型,确定待检查代码文件对应的解析脚本和检查规则。
40.待检查代码文件的语言类型是指开发人员编写该待检查代码文件所采用的语言类型,可以包括但不限于c 语言、objective-c语言和java语言。
41.在一个实施例中,获取待检查代码文件的后缀名,根据待检查代码文件的后缀名确定待检查代码文件的语言类型。代码文件的后缀名与语言类型之间存在对应关系,例如一种语言类型可以对应一种或多种后缀名,根据待检查代码文件的后缀名以及上述对应关系可以确定待检查代码文件的语言类型。例如,若待检查代码文件的后缀名为.cpp,则可以判断该待检查代码文件的语言类型为c 语言;若待检查代码文件的后缀名为.m或.mm,则可以判断该待检查代码文件的语言类型为objective-c语言;若待检查代码文件的后缀名为.java,则可以判断该待检查代码文件的语言类型为java语言。
42.解析脚本是指用于对代码文件进行解析以获得其主要语法信息的脚本,通过解析脚本对代码文件进行解析后得到的信息中可以仅包含必要的语法信息,例如包括类、变量、方法相关的语法信息,相比于编译器解析得到的信息更加精简,有助于提高解析速度。
43.由于不同的语言具有不同的语法,在解析时会有细微区别,因此针对不同的语言类型需编写不同的解析脚本。确定待检查代码文件的语言类型后,可以根据该待检查代码文件的语言类型,确定用于解析该待检查代码文件的解析脚本。在一个实施例中,可以采用脚本语言php编写解析脚本。
44.检查规则包括代码文件需要满足的语法规则,由于不同的语言具有不同的语法,因此针对不同的语言类型需编写不同的检查规则。确定待检查代码文件的语言类型后,可以根据该待检查代码文件的语言类型,确定该待检查代码文件需要满足的语法规则。在一个实施例中,检查规则还可以包括自定义的业务规则,业务规则可根据业务侧需求灵活配
置,例如业务要求所有的颜色必须按照特定的规范编写,这种规则不属于基本的语法规则,需要业务侧自己编写。
45.s206,通过对应的解析脚本对待检查代码文件进行解析,获得待检查代码文件对应的解析树。
46.待检查代码文件对应的解析树,是以树状结构表达该待检查代码文件的语法信息,通过解析脚本对该待检查代码文件进行解析获得。在一个实施例中,解析树仅包含必要的语法信息,适用于所有语言类型,即不同语言类型的代码文件经对应的解析脚本解析后,生成的解析树的结构是相同的,实现将一些语言特性打平为统一的格式,方便后续可以使用统一的检查脚本进行代码检查。
47.s208,根据对应的解析树和检查规则进行匹配检查,获得待检查代码文件的检查结果。
48.根据对应的解析树和检查规则进行匹配检查,是指检查解析树中的语法信息是否符合检查规则的要求。待检查代码文件对应的检查规则可以包括多个规则,具体可以是规则列表形式,将规则列表导入解析树,输出每个规则对应的检查结果,待检查代码文件的检查结果包括所有规则对应的检查结果。
49.上述代码检查方法中,当监听到代码文件变更时,获取变更的代码文件作为待检查代码文件;根据待检查代码文件的语言类型,确定待检查代码文件对应的解析脚本和检查规则;通过对应的解析脚本对待检查代码文件进行解析,获得待检查代码文件对应的解析树;根据对应的解析树和检查规则进行匹配检查,获得待检查代码文件的检查结果。据此,无需编译过程,可在代码开发阶段实现代码实时检查,提高代码检查效率,帮助开发人员在编译前及时发现代码问题,缩短开发人员修复问题代码的流程,提高代码修复效率,降低修复问题代码的沟通成本。
50.在一个实施例中,预先配置各种语言类型对应的解析脚本和检查规则,并建立语言类型与解析脚本之间的第一映射关系、以及语言类型与检查规则之间的第二映射关系。
51.由于不同的语言具有不同的语法,因此针对不同的语言类型编写不同的解析脚本和检查规则,从而为每种语言类型配置对应的解析脚本和检查规则。据此,可以支持多种语言的代码文件检查,此外可以灵活地自定义代码检查规则,满足多样化的检查需求。
52.第一映射关系表示语言类型与解析脚本之间的映射关系,一种语言类型对应一个解析脚本。第二映射关系表示语言类型与检查规则之间的映射关系,一种语言类型对应一个检查规则。
53.在一个实施例中,根据待检查代码文件的语言类型,确定待检查代码文件对应的解析脚本和检查规则的步骤,具体可以包括:根据待检查代码文件的语言类型、以及第一映射关系,确定待检查代码文件对应的解析脚本;根据待检查代码文件的语言类型、以及第二映射关系,确定待检查代码文件对应的检查规则。
54.根据待检查代码文件的语言类型以及第一映射关系,可以获得待检查代码文件的语言类型对应的解析脚本,作为待检查代码文件对应的解析脚本。根据待检查代码文件的语言类型以及第二映射关系,可以获得待检查代码文件的语言类型对应的检查规则,作为待检查代码文件对应的检查规则。
55.在一个实施例中,通过对应的解析脚本对待检查代码文件进行解析,获得待检查
代码文件对应的解析树的步骤,具体可以包括:通过对应的解析脚本提取待检查代码文件的语法信息;基于待检查代码文件的语法信息,获得待检查代码文件对应的解析树。
56.具体而言,使用正则和字符串匹配,提取待检查代码文件的语法信息,本实施例中,仅提取必要的语法信息,包括类、变量、方法相关的语法信息。以类的定义识别为例,"@interface rendermodel:nsobject"是一个objc的类的定义,通过识别关键字"@interface"可以识别这一行语句为类的定义,进一步通过正则"@interface(.*):(.*)"可以提取出类名与继承的父类。通过该方式对整个待检查代码文件进行解析后得到的解析树,其结构如下:
[0057][0058]
其中,类、变量和方法的定义如下:
[0059]
[0060][0061]
本实施例中,通过解析脚本对待检查代码文件进行解析,可以提高解析速度,解析一个1000行代码的文件,本实施例只需要100毫秒左右,而编译器解析需要10-30秒左右。此外,本实施例生成的解析树更适合做代码检查,代码检查主要检查的是错误的语法使用,大多数情况可以通过正则提取出特征值,仅需要做一些类、变量、方法进行辅助检查。而编译器输出的抽象语法树具有相当冗余的语法信息,遍历这些信息需要花费更多的时间,相比之下本实施例生成的解析树包含的信息更精简,可以快速完成检查。
[0062]
在一个实施例中,根据对应的解析树和检查规则进行匹配检查,获得待检查代码文件的检查结果的步骤,具体可以包括:对于检查规则中的每一个规则,提取解析树中与规则对应的语法特征,将语法特征的特征值与规则进行匹配,获得规则对应的检查结果;根据检查规则中所有规则对应的检查结果,获得待检查代码文件的检查结果。
[0063]
解析树的语法信息包含类、变量、方法相关的语法信息,其中,类、变量、方法表示语法特征,每一语法特征可以对应多个特征值。以语法特征为变量为例,对应的特征值可以包括变量的代码位置、名字、类型和修饰符。以语法特征为方法为例,对应的特征值可以包括方法的代码位置、名字、方法类型、返回值类型、参数列表和方法内容。
[0064]
每一个规则中包含语法特征和特征值相关的信息,对于每一个规则,根据该规则中的语法特征相关信息,从解析树中获取与该语法特征相关信息相匹配的语法特征,根据匹配到的语法特征从解析树中获取具有该语法特征的语法信息,将该语法信息中的特征值与该规则中的特征值相关信息进行匹配,确定该语法信息中的特征值是否符合该规则中的特征值相关信息的要求,从而获得该规则对应的检查结果。
[0065]
检查规则中可以包括通用规则和业务规则,通用规则是指通用的语法规则,业务规则是指根据业务需求自定义的规则,通用规则和业务规则都可以有多个,对每一个规则和解析树进行匹配检查,直到所有规则都检查完,将所有规则对应的检查结果进行合并,获得待检查代码文件的检查结果。
[0066]
通用规则以“方法内容行数《100”为例,其对应的语法特征为方法,特征值为方法内容行数,使用正则和字符串匹配,提取类中的所有方法,计算方法内容中的换行符数量,检查换行符数量是否小于100,如果换行符数量不小于100,则认为该规则检查不通过,输出检查结果错误,继续上述检查步骤直到所有的方法内容都检查完成。
[0067]
业务规则以“nsstring修饰符错误使用strong”为例,其对应的语法特征为变量,特征值为变量修饰符,使用正则和字符串匹配,提取类中的所有变量,过滤出类型为nsstring的变量,检查变量修饰符是否为strong,如果变量修饰符为strong,则认为该规则检查不通过,输出检查结果错误,继续上述检查直到所有的类型为nsstring的变量都检查完成。
[0068]
在一个实施例中,当待检查代码文件的检查结果中包含错误信息时,对错误信息进行告警。
[0069]
对错误信息进行告警,具体可以是展示错误信息,以提示开发人员进行修复。在一个实施例中,检查规则设有错误等级属性,分为提示(info)、警告(warning)和错误(error),根据不同的错误等级给出不同的提示。例如,如图3和图4所示,对于警告等级以上的错误信息会进行弹窗提示。如图5所示,所有等级的错误信息都会通过固定窗口展示。
[0070]
在一个实施例中,如图6所示,提供了一种代码检查方法,包括以下步骤s601至步骤s606。
[0071]
s601,当监听到代码文件变更时,获取变更的代码文件作为待检查代码文件。
[0072]
s602,根据待检查代码文件的语言类型,确定待检查代码文件对应的解析脚本和检查规则。
[0073]
s603,通过对应的解析脚本提取待检查代码文件的语法信息,基于待检查代码文件的语法信息,获得待检查代码文件对应的解析树。
[0074]
s604,对于检查规则中的每一个规则,提取解析树中与规则对应的语法特征,将语法特征的特征值与规则进行匹配,获得规则对应的检查结果。
[0075]
s605,根据检查规则中所有规则对应的检查结果,获得待检查代码文件的检查结果。
[0076]
s606,当待检查代码文件的检查结果中包含错误信息时,对错误信息进行告警。
[0077]
对于步骤s601至步骤s606的具体限定可以参考上文实施例,此处不再赘述。本实施例中,无需编译过程,可在代码开发阶段实现代码实时检查,提高代码检查效率,帮助开发人员在编译前及时发现代码问题,缩短开发人员修复问题代码的流程,提高代码修复效率,降低修复问题代码的沟通成本。
[0078]
应该理解的是,虽然上述实施例涉及的各流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,上述实施例涉及的各流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或
者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
[0079]
在一个实施例中,如图7所示,提供了一种代码检查装置700,该装置可以采用软件模块或硬件模块,或者是二者的结合成为计算机设备的一部分,该装置具体包括:获取模块710、确定模块720、解析模块730和检查模块740,其中:
[0080]
获取模块710,用于当监听到代码文件变更时,获取变更的代码文件作为待检查代码文件。
[0081]
确定模块720,用于根据待检查代码文件的语言类型,确定待检查代码文件对应的解析脚本和检查规则。
[0082]
解析模块730,用于通过对应的解析脚本对待检查代码文件进行解析,获得待检查代码文件对应的解析树。
[0083]
检查模块740,用于根据对应的解析树和检查规则进行匹配检查,获得待检查代码文件的检查结果。
[0084]
在一个实施例中,确定模块720还用于:获取待检查代码文件的后缀名,根据待检查代码文件的后缀名确定待检查代码文件的语言类型。
[0085]
在一个实施例中,该装置还包括配置模块,用于预先配置各种语言类型对应的解析脚本和检查规则,并建立语言类型与解析脚本之间的第一映射关系、以及语言类型与检查规则之间的第二映射关系。
[0086]
在一个实施例中,确定模块720在根据待检查代码文件的语言类型,确定待检查代码文件对应的解析脚本和检查规则时,具体用于:根据待检查代码文件的语言类型、以及第一映射关系,确定待检查代码文件对应的解析脚本;根据待检查代码文件的语言类型、以及第二映射关系,确定待检查代码文件对应的检查规则。
[0087]
在一个实施例中,解析模块730在通过对应的解析脚本对待检查代码文件进行解析,获得待检查代码文件对应的解析树时,具体用于:通过对应的解析脚本提取待检查代码文件的语法信息;基于待检查代码文件的语法信息,获得待检查代码文件对应的解析树。
[0088]
在一个实施例中,检查模块740在根据对应的解析树和检查规则进行匹配检查,获得待检查代码文件的检查结果时,具体用于:对于检查规则中的每一个规则,提取解析树中与规则对应的语法特征,将语法特征的特征值与规则进行匹配,获得规则对应的检查结果;根据检查规则中所有规则对应的检查结果,获得待检查代码文件的检查结果。
[0089]
在一个实施例中,该装置还包括告警模块,用于当待检查代码文件的检查结果中包含错误信息时,对错误信息进行告警。
[0090]
关于代码检查装置的具体限定可以参见上文中对于代码检查方法的限定,在此不再赘述。上述代码检查装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
[0091]
在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图8所示。该计算机设备包括通过系统总线连接的处理器、存储器和网络接口。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易
失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种代码检查方法。
[0092]
在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图9所示。该计算机设备包括通过系统总线连接的处理器、存储器、通信接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的通信接口用于与外部的终端进行有线或无线方式的通信,无线方式可通过wifi、运营商网络、nfc(近场通信)或其他技术实现。该计算机程序被处理器执行时以实现一种代码检查方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
[0093]
本领域技术人员可以理解,图8或图9中示出的结构,仅仅是与本技术方案相关的部分结构的框图,并不构成对本技术方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
[0094]
在一个实施例中,还提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述各方法实施例中的步骤。
[0095]
在一个实施例中,提供了一种计算机可读存储介质,存储有计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。
[0096]
在一个实施例中,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述各方法实施例中的步骤。
[0097]
需要理解的是,上述实施例中的术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。此外,在本技术的描述中,除非另有说明,“多个”的含义是指至少两个。
[0098]
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本技术所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(read-only memory,rom)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器(random access memory,ram)或外部高速缓冲存储器。作为说明而非局限,ram可以是多种形式,比如静态随机存取存储器(static random access memory,sram)或动态随机存取存储器(dynamic random access memory,dram)等。
[0099]
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例
中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
[0100]
以上所述实施例仅表达了本技术的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本技术构思的前提下,还可以做出若干变形和改进,这些都属于本技术的保护范围。因此,本技术专利的保护范围应以所附权利要求为准。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献