一种代码检测方法、装置、电子设备及存储介质转让专利

申请号 : CN202310706532.6

文献号 : CN116483377B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 蒙欣远黄飞刘浩

申请人 : 太平金融科技服务(上海)有限公司深圳分公司

摘要 :

本发明实施例公开了一种代码检测方法、装置、电子设备及存储介质。该方法包括:获取检测代码匹配的代码扫描配置数据和代码校验配置数据;根据代码扫描配置数据对检测代码进行扫描,以获取检测代码的检测代码内容;根据代码校验配置数据对检测代码内容进行检测校验。本发明实施例的技术方案能够提高代码检测的适用范围,提高代码检测的灵活性和适配性。

权利要求 :

1.一种代码检测方法,其特征在于,包括:获取检测代码匹配的代码扫描配置数据和代码校验配置数据;

根据所述代码扫描配置数据对所述检测代码进行扫描,以获取所述检测代码的检测代码内容;

根据所述代码校验配置数据对所述检测代码内容进行检测校验;所述根据所述代码扫描配置数据对所述检测代码进行扫描,以获取所述检测代码的检测代码内容,包括:根据所述代码扫描配置数据的代码占位符对所述检测代码进行扫描,以获取所述检测代码的扫描代码段;

根据所述扫描代码段匹配的代码占位符确定所述扫描代码段的代码校验类型和第一代码校验标识;

将所述扫描代码段、所述代码校验类型和所述第一代码校验标识作为所述检测代码的检测代码内容;

其中,所述代码扫描配置数据是利用标识符、校验类型和提示信息预生成的编码规则;

在所述获取检测代码匹配的代码扫描配置数据和代码校验配置数据之前,还包括:获取所述检测代码的代码收集关联信息;

根据所述代码收集关联信息生成所述检测代码的代码数据表;

在所述根据所述代码扫描配置数据对所述检测代码进行扫描之前,还包括:根据所述检测代码的代码数据表获取所述检测代码;

在所述根据所述代码校验配置数据对所述检测代码内容进行检测校验之后,还包括:根据所述检测代码的代码检测结果与所述代码数据表进行关联关系匹配;

根据关联关系匹配结果生成所述检测代码的衍生检测结果;

其中,所述代码收集关联信息为文件名称、代码影响范围、文件类型、使用技术、关联关系和业务逻辑说明;

所述根据所述代码校验配置数据对所述检测代码内容进行检测校验,包括:根据所述检测代码内容从所述代码校验配置数据中确定目标代码校验子配置数据;

根据所述目标代码校验子配置数据对所述检测代码内容进行检测校验;

所述根据所述目标代码校验子配置数据对所述检测代码内容进行检测校验,包括:根据所述目标代码校验子配置数据确定所述检测代码内容的验证方式、验证参考值和错误提示信息;

根据所述验证方式从所述检测代码内容获取待校验代码内容;

对所述待校验代码内容和所述验证参考值进行匹配;

根据所述待校验代码内容和所述验证参考值的匹配结果确定所述检测代码内容的错误提示信息。

2.根据权利要求1所述的方法,其特征在于,所述根据所述代码扫描配置数据的代码占位符对所述检测代码进行扫描,以获取所述检测代码的扫描代码段,包括:根据所述代码扫描配置数据确定所述检测代码匹配的代码占位符;其中,所述代码占位符包括起始占位符和结束占位符;

根据所述起始占位符对所述检测代码进行扫描,以获取所述检测代码内容的起始代码字符;

根据所述结束占位符对所述检测代码进行扫描,以获取所述检测代码内容的结束代码字符;

将所述检测代码中位于所述起始代码字符和所述结束代码字符之间的代码内容作为所述扫描代码段。

3.根据权利要求1所述的方法,其特征在于,所述根据所述检测代码内容从所述代码校验配置数据中确定目标代码校验子配置数据,包括:根据所述检测代码的扫描代码段的第一代码校验标识从所述代码校验配置数据中匹配第二代码校验标识;

根据所述第二代码校验标识从所述代码校验配置数据中确定所述目标代码校验子配置数据。

4.一种代码检测装置,其特征在于,包括:配置数据获取模块,用于获取检测代码匹配的代码扫描配置数据和代码校验配置数据;

检测代码内容获取模块,用于根据所述代码扫描配置数据对所述检测代码进行扫描,以获取所述检测代码的检测代码内容;

代码内容检测校验模块,用于根据所述代码校验配置数据对所述检测代码内容进行检测校验;

所述检测代码内容获取模块,具体用于:

根据所述代码扫描配置数据的代码占位符对所述检测代码进行扫描,以获取所述检测代码的扫描代码段;

根据所述扫描代码段匹配的代码占位符确定所述扫描代码段的代码校验类型和第一代码校验标识;

将所述扫描代码段、所述代码校验类型和所述第一代码校验标识作为所述检测代码的检测代码内容;

其中,所述代码扫描配置数据是利用标识符、校验类型和提示信息预生成的编码规则;

代码数据表生成模块,用于获取所述检测代码的代码收集关联信息;根据所述代码收集关联信息生成所述检测代码的代码数据表;

检测代码获取模块,用于:根据所述检测代码的代码数据表获取所述检测代码;

衍生检测结果生成模块,用于:根据所述检测代码的代码检测结果与所述代码数据表进行关联关系匹配;根据关联关系匹配结果生成所述检测代码的衍生检测结果;

其中,所述代码收集关联信息为文件名称、代码影响范围、文件类型、使用技术、关联关系和业务逻辑说明;

所述代码内容检测校验模块具体用于:

根据所述检测代码内容从所述代码校验配置数据中确定目标代码校验子配置数据;

根据所述目标代码校验子配置数据对所述检测代码内容进行检测校验;

所述代码内容检测校验模块具体用于:

根据所述目标代码校验子配置数据确定所述检测代码内容的验证方式、验证参考值和错误提示信息;

根据所述验证方式从所述检测代码内容获取待校验代码内容;

对所述待校验代码内容和所述验证参考值进行匹配;

根据所述待校验代码内容和所述验证参考值的匹配结果确定所述检测代码内容的错误提示信息。

5.一种电子设备,其特征在于,所述电子设备包括:至少一个处理器;以及

与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的计算机程序,所述计算机程序被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1‑3中任一项所述的代码检测方法。

6.一种计算机存储介质,其特征在于,所述计算机可读存储介质存储有计算机指令,所述计算机指令用于使处理器执行时实现权利要求1‑3中任一项所述的代码检测方法。

说明书 :

一种代码检测方法、装置、电子设备及存储介质

技术领域

[0001] 本发明实施例涉及计算机软件应用技术领域,尤其涉及一种代码检测方法、装置、电子设备及存储介质。

背景技术

[0002] 代码检测可以是在软件工程中,对于源代码直接使用某些扫描工具对其进行扫描,从而找出代码当中存在的一些语义缺陷以及安全漏洞的解决方案。
[0003] 现有技术中,对于常用的主流编程代码,比如java(门面向对象的编程语言)代码以及FndBugs.php(静态分析工具)代码均有相对应的代码扫描工具进行代码检测,因此,每个扫描工具支持的编程语言有限,而针对于冷门编程语言,例如,数据库存储过程、脚本以及前端页面,只能靠编译器中基本的语法检查来得知代码是否编写正确,因此,对于所有编程语言而言,很难有一种扫描工具可以对所有编程语言进行检测。
[0004] 因此,如何提高代码检测的普适性成为亟待解决的问题。

发明内容

[0005] 本发明实施例提供一种代码检测方法、装置、电子设备及存储介质,能够提高代码检测的适用范围,提高代码检测的灵活性和适配性。
[0006] 根据本发明的一方面,提供了一种代码检测方法,包括:
[0007] 获取检测代码匹配的代码扫描配置数据和代码校验配置数据;
[0008] 根据所述代码扫描配置数据对所述检测代码进行扫描,以获取所述检测代码的检测代码内容;
[0009] 根据所述代码校验配置数据对所述检测代码内容进行检测校验。
[0010] 可选的,所述根据所述代码扫描配置数据对所述检测代码进行扫描,以获取所述检测代码的检测代码内容,包括:
[0011] 根据所述代码扫描配置数据的代码占位符对所述检测代码进行扫描,以获取所述检测代码的扫描代码段;
[0012] 根据所述扫描代码段匹配的代码占位符确定所述扫描代码段的代码校验类型和第一代码校验标识;
[0013] 将所述扫描代码段、所述代码校验类型和所述第一代码校验标识作为所述检测代码的检测代码内容。
[0014] 可选的,所述根据所述代码扫描配置数据的代码占位符对所述检测代码进行扫描,以获取所述检测代码的扫描代码段,包括:
[0015] 根据所述代码扫描配置数据确定所述检测代码匹配的代码占位符;其中,所述代码占位符包括起始占位符和结束占位符;
[0016] 根据所述起始占位符对所述检测代码进行扫描,以获取所述检测代码内容的起始代码字符;
[0017] 根据所述结束占位符对所述检测代码进行扫描,以获取所述检测代码内容的结束代码字符;
[0018] 将所述检测代码中位于所述起始代码字符和所述结束代码字符之间的代码内容作为所述扫描代码段。
[0019] 可选的,所述根据所述代码校验配置数据对所述检测代码内容进行检测校验,包括:
[0020] 根据所述检测代码内容从所述代码校验配置数据中确定目标代码校验子配置数据;
[0021] 根据所述目标代码校验子配置数据对所述检测代码内容进行检测校验。
[0022] 可选的,所述根据所述检测代码内容从所述代码校验配置数据中确定目标代码校验子配置数据,包括:
[0023] 根据所述检测代码的扫描代码段的第一代码校验标识从所述代码校验配置数据中匹配第二代码校验标识;
[0024] 根据所述第二代码校验标识从所述代码校验配置数据中确定所述目标代码校验子配置数据。
[0025] 可选的,所述根据所述目标代码校验子配置数据对所述检测代码内容进行检测校验,包括:
[0026] 根据所述目标代码校验子配置数据确定所述检测代码内容的验证方式、验证参考值和错误提示信息;
[0027] 根据所述验证方式从所述检测代码内容获取待校验代码内容;
[0028] 对所述待校验代码内容和所述验证参考值进行匹配;
[0029] 根据所述待校验代码内容和所述验证参考值的匹配结果确定所述检测代码内容的错误提示信息。
[0030] 可选的,在所述获取检测代码匹配的代码扫描配置数据和代码校验配置数据之前,还包括:
[0031] 获取所述检测代码的代码收集关联信息;
[0032] 根据所述代码收集关联信息生成所述检测代码的代码数据表;
[0033] 在所述根据所述代码扫描配置数据对所述检测代码进行扫描之前,还包括:
[0034] 根据所述检测代码的代码数据表获取所述检测代码;
[0035] 在所述根据所述代码校验配置数据对所述检测代码内容进行检测校验之后,还包括:
[0036] 根据所述检测代码的代码检测结果与所述代码数据表进行关联关系匹配;
[0037] 根据关联关系匹配结果生成所述检测代码的衍生检测结果。
[0038] 根据本发明的另一方面,提供了一种代码检测装置,包括:
[0039] 配置数据获取模块,用于获取检测代码匹配的代码扫描配置数据和代码校验配置数据;
[0040] 检测代码内容获取模块,用于根据所述代码扫描配置数据对所述检测代码进行扫描,以获取所述检测代码的检测代码内容;
[0041] 代码内容检测校验模块,用于根据所述代码校验配置数据对所述检测代码内容进行检测校验。
[0042] 根据本发明的另一方面,提供了一种电子设备,所述电子设备包括:
[0043] 至少一个处理器;以及
[0044] 与所述至少一个处理器通信连接的存储器;其中,
[0045] 所述存储器存储有可被所述至少一个处理器执行的计算机程序,所述计算机程序被所述至少一个处理器执行,以使所述至少一个处理器能够执行本发明任一实施例所述的一种代码检测方法。
[0046] 根据本发明的另一方面,提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,所述计算机指令用于使处理器执行时实现本发明任一实施例所述的代码检测方法。
[0047] 本发明实施例通过获取检测代码匹配的代码扫描配置数据和代码校验配置数据,以根据获取的代码扫描配置数据对检测代码进行扫描,得到检测代码的检测代码内容,并根据代码校验配置数据对检测代码内容进行检测校验,解决现有代码检测方法适用范围较小以及灵活性和适配性较低等问题,能够提高代码检测的适用范围,提高代码检测的灵活性和适配性。
[0048] 应当理解,本部分所描述的内容并非旨在标识本发明的实施例的关键或重要特征,也不用于限制本发明的范围。本发明的其它特征将通过以下的说明书而变得容易理解。

附图说明

[0049] 为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0050] 图1a是本发明实施例一提供的一种代码检测方法的流程图;
[0051] 图1b是本发明实施例一提供的另一种代码检测方法的流程图;
[0052] 图2a是本发明实施例二提供的又一种代码检测方法的流程图;
[0053] 图2b是本发明实施例二提供的又一种代码检测方法的流程图;
[0054] 图3是本发明实施例三提供的一种代码检测装置的结构示意图;
[0055] 图4为本发明实施例四提供的一种电子设备的结构示意图。

具体实施方式

[0056] 为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
[0057] 需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
[0058] 实施例一
[0059] 图1a是本发明实施例一提供的一种代码检测方法的流程图,本实施例可适用于对任意类型的代码内容进行代码检测情况,该方法可以由代码检测装置来执行,该装置可以由软件和/或硬件的方式来实现,并一般可集成在电子设备中,该电子设备可以是终端设备,也可以是服务器设备,本发明实施例并不对电子设备的具体设备类型进行限定。相应的,如图1a所示,该方法包括如下操作:
[0060] S110、获取检测代码匹配的代码扫描配置数据和代码校验配置数据。
[0061] 本实施例中的代码扫描配置数据可以是利用标识符、校验类型和提示等信息预生成的编码规则,根据该编码规则对检测代码进行扫描,获取对应的代码内容。该编码规则可以用于对代码扫描数据进行预先配置,其中,编码规则可以理解为将规范文档中的语言描述转化成数据的过程,规则可以根据当前系统的情况进行制定,当前系统的情况可以是当前系统的架构以及使用的编程语言类型等,本实施例对此不做具体限制;其中,编码规则可以包括规则制定,规则制定可以理解为系统对规则进行映射,映射可以理解为将代码对应的标识符、校验类型、提示以及校验类型针对扫描时要处理的方式进行编码,并将规则录入到系统。
[0062] 具体的,标识符可以是根据编程语言的语法确定的,因此,对检测代码进行检测时,根据标识符可以判断该段代码所属的校验类型,进一步的,标识符可以是起始占位符和结束标识符,因此,可以通过标识符确定检测代码的位置。
[0063] 具体的,提示信息可以用于对扫描后出现的异常代码进行提示。
[0064] 本实施例中的代码校验配置数据可以是将规范内容转化成数据使用数据库表进行存储的数据;其中,开发规范可以理解为用于约束开发人员编码的规则,在进行代码扫描时系统可以根据编码规则确定好编程方式后再根据开发规范进行规则匹配。
[0065] 可选的,在获取检测代码匹配的代码扫描配置数据和代码校验配置数据之前,还可以包括:获取检测代码的代码收集关联信息;根据代码收集关联信息生成检测代码的代码数据表。
[0066] 其中,代码收集关联信息可以是文件名称、代码影响范围、文件类型、使用技术、关联关系以及业务逻辑说明等。代码数据表可以是用于展示代码收集关联信息,并以数据库的方式进行存储的表格。
[0067] 本实施例中可以对系统中检测代码的代码收集关联信息进行收集分析,建立对应的代码数据表。其中,代码数据库也可以称为代码库,可以包含代码存储路径,通过该存储路径可以获取检测代码的内容以及代码的关联信息。
[0068] 代码库也可以理解为系统的代码文件字典,通过对检测代码的代码收集关联信息进行收集分析完成初始化,代码库的建立为接下来的代码扫描和数据统计提供基础。
[0069] 具体的,对文件进行收集可以是收集包含代码文件的关联信息,收集方式可以根据系统实际情况而定,可以通过人工收集或者文件扫描。
[0070] 其中,关联信息可以决定代码之间是否具有联系,若某个代码出现异常,可以通过关联信息判断是否对其存在关联的代码也出现影响;业务逻辑说明可以是代码所能实现的基本功能。
[0071] 可选地,在获取检测代码匹配的代码扫描配置数据和代码校验配置数据之前,还可以包括:根据检测代码的代码数据表获取检测代码。
[0072] 进一步的,代码扫描可以是根据代码库包含的代码的路径信息确定检测代码,并对检测代码进行扫描。
[0073] S120、根据代码扫描配置数据对检测代码进行扫描,以获取检测代码的检测代码内容。
[0074] 其中,检测代码内容可以包括但不限于变量、常量、代码块、执行语句以及方法名等。
[0075] 可选的,扫描方式可以以文本读取的方式进行,通过预先写好的代码扫描配置数据对检测代码扫描以截取关键的信息,截取的信息可以包括但不限于变量、常量、代码块、执行语句以及方法名。
[0076] S130、根据代码校验配置数据对检测代码内容进行检测校验。
[0077] 本实施例可以根据代码校验配置数据对检测代码内容进行检测校验,具体为对检测代码内容进行逐行读取并匹配,根据匹配结果,判断是否有不符合规范的代码,若是,则对其进行提示。
[0078] 本实施例的技术方案的步骤可以如图1b所示,该方案可以以数据库存储过程、SQL(Structured Query Language,结构化查询语言)以及HTML(Hyper Text Markup Language,超文本标记语言)前端代码为例,在准备工作时,对检测代码扫描前可以预先对系统所有文件进行收集分析,并建立对应的代码库,根据代码校验数据配置相应的规则;准备工作完成后,开始对检测代码进行扫描,扫描顺序可以参考代码库中的优先级来进行,扫描方式可以以文本读取的方式进行,通过预先配置的规则截取关键的信息,截取的信息可以是检测代码内容;检测代码内容可以包括但不限于:变量、常量、代码块、执行语句以及方法名等,获取检测代码内容后,再根据预先配置的规则对检测代码进行校验,根据校验结果确定是否含有不符合要求的代码片段给予提示并保存,最后基于校验结果生成统计报表。
[0079] 本实施例的技术方案,通过获取检测代码匹配的代码扫描配置数据和代码校验配置数据,以根据获取的代码扫描配置数据对检测代码进行扫描,得到检测代码的检测代码内容,并根据代码校验配置数据对检测代码内容进行检测校验,解决现有代码检测方法适用范围较小以及灵活性和适配性较低等问题,能够提高代码检测的适用范围,提高代码检测的灵活性和适配性。
[0080] 实施例二
[0081] 图2a是本发明实施例二提供的一种代码检测方法的流程图,本实施例以上述实施例为基础进行具体化,在本实施例中,根据所述代码扫描配置数据对所述检测代码进行扫描,以获取所述检测代码的检测代码内容,具体为:根据代码扫描配置数据的代码占位符对检测代码进行扫描,以获取检测代码的扫描代码段;根据扫描代码段匹配的代码占位符确定扫描代码段的代码校验类型和第一代码校验标识;将扫描代码段、代码校验类型和第一代码校验标识作为检测代码的检测代码内容;根据检测代码内容从代码校验配置数据中确定目标代码校验子配置数据;根据目标代码校验子配置数据对检测代码内容进行检测校验。相应的,如图2a所示,本实施例的方法可以包括:
[0082] S210、获取检测代码匹配的代码扫描配置数据和代码校验配置数据。
[0083] 本实施例中,代码库可以在扫描前期收集代码收集关联信息并汇总生成代码库,代码库作为存放代码文件基本信息,并使用数据库的方式进行存储,基础的字段可以如下表1的代码数据表所示:
[0084] 表1代码数据表
[0085]
[0086] 需要说明的是,对于代码库收集的代码文件的基本信息需要确保正确,防止后续出现误差。
[0087] S220、根据代码扫描配置数据的代码占位符对检测代码进行扫描,以获取检测代码的扫描代码段。
[0088] 本实施例可以在扫描前先获取代码扫描数据,依照代码扫描数据遍历文件内容,通过代码扫描数据里的占位符来定位需要检测代码的扫描代码段。
[0089] 其中,代码扫描配置数据可以如下表2所示:
[0090] 表2代码扫描配置数据表
[0091]
[0092] 上述表2中的START_PLACEHOLDER、END_PLACEHOLDER、HOLDER_TYPE以及REMARK分别代表起始占位符、结束占位符、校验类型以及提示等代码扫描配置数据。
[0093] 可选地,根据代码扫描配置数据的代码占位符对检测代码进行扫描,以获取检测代码的扫描代码段可以包括:根据代码扫描配置数据确定检测代码匹配的代码占位符;其中,代码占位符包括起始占位符和结束占位符;根据起始占位符对检测代码进行扫描,以获取检测代码内容的起始代码字符;根据结束占位符对检测代码进行扫描,以获取检测代码内容的结束代码字符;将检测代码中位于起始代码字符和结束代码字符之间的代码内容作为扫描代码段。
[0094] 本实施例中可以根据代码扫描配置数据的起始占位符和结束占位符获取检测代码的扫描代码段,比如:对于变量和/或常量的检测可以从起始占位符开始第二个单词,例如var i=0;第二个单词为“i”, 确定“i”为当前变量名称并将其作为检测内容;对于代码块可以从起始占位符开始至结束占位符结束,期间若有嵌套则单独新增一个代码块。例如:if(1=1){print; if(2=2){print}};确定检测代码内容可以为:if(1=1){print; if(2=2){print}};、if(2=2){print};对于执行语句可以是函数或公式,对于函数可以从起始占位符开始到结束占位符结束;对于公式可以从起始占位符开始到结束占位符结束,嵌套则单独新增一个代码块,对于方法名可以是行,则直接获取单行作为代码检测内容。
[0095] 其中,标识符可以代表代码所在的位置,因此,根据占位符可以确定具体需要检测的代码扫描段,其中,代码扫描段的形式可以是一段单独的代码、变量或公式等。
[0096] 本实施例可以如上述代码扫描配置数据表2所示,若通过以下代码扫描配置数据确定扫描代码段可以是:
[0097] var i=0;
[0098] If(i==1){
[0099] Print(“hello world”) };
[0100] 若 if(i==1){...}需要有开发规范要求时,将其录入至开发规范要求表可以如下表3所示:
[0101] 表3扫描代码段表
[0102]
[0103] 上述表3中起始占位符可以是“if(”,结束占位符可以是“}”,在开始进行扫描时,可以根据起始占位符和结束占位符即可获取对应的扫描代码段,即,if代码块。上述表3只是作为一种理解的方式出现,本实施例对起始占位符、结束占位符以及扫描代码段不做具体限制。
[0104] S230、根据扫描代码段匹配的代码占位符确定扫描代码段的代码校验类型和第一代码校验标识。
[0105] 其中,第一代码校验标识可以理解为代码段配置的ID号,用于对应校验配置数据,即,通过第一代码校验标识可以确定对应的代码校验配置数据。
[0106] 可选的,本发明实施例可以通过代码校验配置数据将规范内容转化成数据使用的数据库表,具体可以如下表4的开发规范表所示:
[0107] 表4开发规范表
[0108]
[0109] 可见,上述表4中可以通过代码块ID确定校验类型的验证方式,其中,基础的验证方式可以是正则表达式、大小、包含等其他验证方式,在上述基础验证方式中,还可以对基础验证方式展开叠加2级目录等。根据验证方式可以确定验证参考值,验证参考值可以理解为用于校验的值信息;当系统获取开发规范表对代码内容进行逐行读取并匹配,支持正则表达式的验证方式,若匹配成功,则代表代码块当中存在有不符合规范的代码,系统会对其进行错误提示,并进行记录。
[0110] 本实施例可以利用代码Var var1进行说明,如下表5所示:
[0111] 表5第一校验标识
[0112]
[0113] 其代码校验类型可以为公式;第一代码校验标识可以是1,本实施例对此不作具体限制。
[0114] S240、将扫描代码段、代码校验类型和第一代码校验标识作为检测代码的检测代码内容。
[0115] 可选地,还可以将起始占位符、结束占位符、校验类型以及提示等其他扫描配置信息作为检测代码的检测代码内容。
[0116] S250、根据检测代码内容从代码校验配置数据中确定目标代码校验子配置数据。
[0117] 其中,目标代码校验子配置数据可以理解为与第一代码校验标识匹配的代码校验配置数据。
[0118] 可以理解的是,代码校验配置数据中可以包括多种不同类型的代码校验子配置数据。每个代码校验子配置数据具体可以对某一种类型的代码内容进行检测校验。
[0119] 可选地,根据检测代码内容从代码校验配置数据中确定目标代码校验子配置数据可以包括:根据检测代码的扫描代码段的第一代码校验标识从代码校验配置数据中匹配第二代码校验标识;根据第二代码校验标识从代码校验配置数据中确定目标代码校验子配置数据。
[0120] 其中,第二代码校验标识可以是代码校验配置数据中的标识,用于标识每一种具体的代码校验规范,可以与第一代码校验标识相匹配,以对扫描代码段进行检测校验。
[0121] 本实施例中根据检测代码的扫描代码段的第一代码校验标识从代码校验配置数据中匹配第二代码校验标识,可以如下表6所示,根据上述表5确定出了第一代码校验标识为1,则从代码校验数据中对应匹配第二代码校验标识,如表6所示:
[0122] 表6第二代码校验标识确定表
[0123]
[0124] 将上述表6内容可以作为目标代码校验子配置数据。
[0125] S260、根据目标代码校验子配置数据对检测代码内容进行检测校验。
[0126] 可选地,根据目标代码校验子配置数据对检测代码内容进行检测校验,可以包括:根据目标代码校验子配置数据确定检测代码内容的验证方式、验证参考值和错误提示信息;根据验证方式从检测代码内容获取待校验代码内容;对待校验代码内容和验证参考值进行匹配;根据待校验代码内容和验证参考值的匹配结果确定检测代码内容的错误提示信息。
[0127] 其中,验证参考值可以是字符、数值、公式以及正则表达式等,本发明实施例并不对验证参考值的具体值类型进行限定。
[0128] 本实施例中,可以校验已提取的代码片段。根据预设的开发规范表,逐一进行校验,可以根据代码片段具体的代码校验类型采用四种可选的验证方式进行判断,包括但不限于是否包含、比较大小、正则表达式以及其他验证方式。示例性的,可以通过是否包含判断当前是否包含验证参考值片段,比较大小则可以将已提取的代码片段中的目标检测值与验证参考值进行比较,正则表达式则可以判断是否存在负荷正则表达式的相关代码数据。除此之外,还可以根据其他验证范式进行验证。其他验证方式可以通过后台自定义逻辑输出判断,从而确定检测代码内容的错误提示信息。错误信息是根据逻辑判断的,因此,并非每个检测代码内容中都包含错误表达信息。
[0129] 可选地,在获取检测代码匹配的代码扫描配置数据和代码校验配置数据之后,还可以包括:根据检测代码的代码检测结果与代码数据表进行关联关系匹配;根据关联关系匹配结果生成检测代码的衍生检测结果。
[0130] 本实施例中,代码扫描后代码校验数据会对检测代码内容进行检测校验,并根据代码检测结果生成衍生检测结果,即,异常清单,除此之外还会关联代码库返回代码的影响范围。以数据库容器存储为例,异常清单汇总表可以如下表7所示:
[0131] 表7异常清单汇总表
[0132]
[0133] 本实施例中可以根据衍生检测结果生成提示,一类提示可以是代码警告,用于提示开发人员进行给予纠正;另一类可以是文件提示,对代码影响范围大的文件给予提示,提醒开发人员注意编码质量,每一次提示都会记录到对应的开发人员名下,从而为后续统计提供信息;方便统计开发人员不规范的编码的类型,方便开发人员纠错。
[0134] 可选的,本实施例对于检测代码的扫描流程时间可以是从文件收集开始,到提示告警结束为一个周期,并可以以单个文件为最小的扫描单位,从而边开发边扫描,以节省开发时间同时提高代码质量。
[0135] 本实施例可以以图2b的代码检测方法的流程图为例,展示通过代码校验配置数据获取扫描代码段;根据扫描代码段确定检测代码内容;根据检测代码内容从代码校验配置数据中确定目标代码校验子配置数据,并根据目标代码校验子配置数据对检测代码内容进行检测校验;根据校验结果判断是否给予错误提示,若是,则给予告警提示,否则,依照扫描代码段确定检测代码内容。
[0136] 本实施例在对检测代码内容进行检测校验之后需要对数据进行统计,其中,数据统计可以是当系统完成一次代码扫描时,根据代码库基本信息输出统计报表;该统计报表可以将扫描结果结合代码库进行总结,用于展示该开发在不同的编码规则下出现错误的次数,汇总以数据的方式展示出来,供开发人员自查;表单样式如下表8的自查表所示:
[0137] 表8自查表
[0138]
[0139] 本实施例通过扫描代码段匹配的代码占位符确定扫描代码段的代码校验类型和第一代码校验标识;将扫描代码段、代码校验类型和第一代码校验标识作为检测代码的检测代码内容;根据检测代码内容从代码校验配置数据中确定目标代码校验子配置数据;根据目标代码校验子配置数据对检测代码内容进行检测校验,可以解决现有代码检测方法适用范围较小以及灵活性和适配性较低等问题,能够提高代码检测的适用范围,提高代码检测的灵活性和适配性。
[0140] 实施例三
[0141] 图3是本发明实施例三提供的一种代码检测装置的示意图,如图3所示,所述装置包括:配置数据获取310、检测代码内容获取模块320以及代码内容检测校验模块330,其中:
[0142] 配置数据获取模块310,用于获取检测代码匹配的代码扫描配置数据和代码校验配置数据;
[0143] 检测代码内容获取模块320,用于根据所述代码扫描配置数据对所述检测代码进行扫描,以获取所述检测代码的检测代码内容;
[0144] 代码内容检测校验模块330,用于根据所述代码校验配置数据对所述检测代码内容进行检测校验。
[0145] 可选地,检测代码内容获取模块320具体用于:
[0146] 根据所述代码扫描配置数据的代码占位符对所述检测代码进行扫描,以获取所述检测代码的扫描代码段;
[0147] 根据所述扫描代码段匹配的代码占位符确定所述扫描代码段的代码校验类型和第一代码校验标识;
[0148] 将所述扫描代码段、所述代码校验类型和所述第一代码校验标识作为所述检测代码的检测代码内容。
[0149] 可选地,检测代码内容获取模块320具体用于:
[0150] 根据所述代码扫描配置数据确定所述检测代码匹配的代码占位符;其中,所述代码占位符包括起始占位符和结束占位符;
[0151] 根据所述起始占位符对所述检测代码进行扫描,以获取所述检测代码内容的起始代码字符;
[0152] 根据所述结束占位符对所述检测代码进行扫描,以获取所述检测代码内容的结束代码字符;
[0153] 将所述检测代码中位于所述起始代码字符和所述结束代码字符之间的代码内容作为所述扫描代码段。
[0154] 可选地,代码内容检测校验模块320具体用于:
[0155] 根据所述检测代码内容从所述代码校验配置数据中确定目标代码校验子配置数据;
[0156] 根据所述目标代码校验子配置数据对所述检测代码内容进行检测校验。
[0157] 可选地,代码内容检测校验模块330具体用于:
[0158] 所述根据所述检测代码内容从所述代码校验配置数据中确定目标代码校验子配置数据,包括:
[0159] 根据所述检测代码的扫描代码段的第一代码校验标识从所述代码校验配置数据中匹配第二代码校验标识;
[0160] 根据所述第二代码校验标识从所述代码校验配置数据中确定所述目标代码校验子配置数据。
[0161] 可选地,代码内容检测校验模块330具体用于:
[0162] 根据所述目标代码校验子配置数据确定所述检测代码内容的验证方式、验证参考值和错误提示信息;
[0163] 根据所述验证方式从所述检测代码内容获取待校验代码内容;
[0164] 对所述待校验代码内容和所述验证参考值进行匹配;
[0165] 根据所述待校验代码内容和所述验证参考值的匹配结果确定所述检测代码内容的错误提示信息。
[0166] 可选地,所述装置还包括代码数据表生成模块,用于获取所述检测代码的代码收集关联信息;根据所述代码收集关联信息生成所述检测代码的代码数据表;
[0167] 检测代码获取模块,用于:根据所述检测代码的代码数据表获取所述检测代码;
[0168] 衍生检测结果生成模块,用于:根据所述检测代码的代码检测结果与所述代码数据表进行关联关系匹配;根据关联关系匹配结果生成所述检测代码的衍生检测结果。
[0169] 上述代码检测装置可执行本发明任意实施例所提供的代码检测方法,具备执行方法相应的功能模块和有益效果。未在本实施例中详尽描述的技术细节,可参见本发明任意实施例提供的一种代码检测方法。
[0170] 由于上述所介绍的一种代码检测装置为可以执行本发明实施例中的一种代码检测方法的装置,故而基于本发明实施例中所介绍的一种代码检测方法,本领域所属技术人员能够了解本实施例的一种代码检测装置的具体实施方式以及其各种变化形式,所以在此对于该一种代码检测装置如何实现本发明实施例中的一种代码检测方法不再详细介绍。只要本领域所属技术人员实施本发明实施例中一种代码检测方法所采用的装置,都属于本申请所欲保护的范围。
[0171] 实施例四
[0172] 图4示出了可以用来实施本发明的实施例的电子设备10的结构示意图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本发明的实现。
[0173] 如图4所示,电子设备10包括至少一个处理器11,以及与至少一个处理器11通信连接的存储器,如只读存储器(ROM)12、随机访问存储器(RAM)13等,其中,存储器存储有可被至少一个处理器执行的计算机程序,处理器11可以根据存储在只读存储器(ROM)12中的计算机程序或者从存储单元18加载到随机访问存储器(RAM)13中的计算机程序,来执行各种适当的动作和处理。在RAM 13中,还可存储电子设备10操作所需的各种程序和数据。处理器11、ROM 12以及RAM 13通过总线14彼此相连。输入/输出(I/O)接口15也连接至总线14。
[0174] 电子设备10中的多个部件连接至I/O接口15,包括:输入单元16,例如键盘、鼠标等;输出单元17,例如各种类型的显示器、扬声器等;存储单元18,例如磁盘、光盘等;以及通信单元19,例如网卡、调制解调器、无线通信收发机等。通信单元19允许电子设备10通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
[0175] 处理器11可以是各种具有处理和计算能力的通用和/或专用处理组件。处理器11的一些示例包括但不限于中央处理单元(CPU)、图形处理单元(GPU)、各种专用的人工智能(AI)计算芯片、各种运行机器学习模型算法的处理器、数字信号处理器(DSP)、以及任何适当的处理器、控制器、微控制器等。处理器11执行上文所描述的各个方法和处理,例如一种代码检测方法。
[0176] 在一些实施例中,一种代码检测方法可被实现为计算机程序,其被有形地包含于计算机可读存储介质,例如存储单元18。在一些实施例中,计算机程序的部分或者全部可以经由ROM 12和/或通信单元19而被载入和/或安装到电子设备10上。当计算机程序加载到RAM 13并由处理器11执行时,可以执行上文描述的一种代码检测方法的一个或多个步骤。备选地,在其他实施例中,处理器11可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行一种代码检测方法。
[0177] 本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、芯片上系统的系统(SOC)、负载可编程逻辑设备(CPLD)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
[0178] 用于实施本发明的方法的计算机程序可以采用一个或多个编程语言的任何组合来编写。这些计算机程序可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器,使得计算机程序当由处理器执行时使流程图和/或框图中所规定的功能/操作被实施。计算机程序可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
[0179] 在本发明的上下文中,计算机可读存储介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的计算机程序。计算机可读存储介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。备选地,计算机可读存储介质可以是机器可读信号介质。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD‑ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
[0180] 为了提供与用户的交互,可以在电子设备上实施此处描述的系统和技术,该电子设备具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给电子设备。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者触觉输入)来接收来自用户的输入。
[0181] 可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)、区块链网络和互联网。
[0182] 计算系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端‑服务器关系的计算机程序来产生客户端和服务器的关系。服务器可以是云服务器,又称为云计算服务器或云主机,是云计算服务体系中的一项主机产品,以解决了传统物理主机与VPS服务中,存在的管理难度大,业务扩展性弱的缺陷。