CN115757181B - 一种代码检测方法、装置、设备及可读存储介质 - Google Patents
一种代码检测方法、装置、设备及可读存储介质 Download PDFInfo
- Publication number
- CN115757181B CN115757181B CN202211549389.6A CN202211549389A CN115757181B CN 115757181 B CN115757181 B CN 115757181B CN 202211549389 A CN202211549389 A CN 202211549389A CN 115757181 B CN115757181 B CN 115757181B
- Authority
- CN
- China
- Prior art keywords
- code
- detection
- target
- rule
- custom
- 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
Images
Landscapes
- Debugging And Monitoring (AREA)
- Testing, Inspecting, Measuring Of Stereoscopic Televisions And Televisions (AREA)
Abstract
本申请公开了一种代码检测方法、装置、设备及可读存储介质,获取每一目标检测规则的检测结果,目标检测规则的检测结果用于指示目标检测规则是否被触发,获取每一异常检测规则的自定义参数集合,自定义参数集合至少包括名称和预设的重要度,依据预设的控制条件、每一异常检测规则的重要度和被触发的次数,获取代码检测结果。由于重要度指示异常检测规则被触发一次,导致待检测代码运行异常的严重程度,本方法综合考虑每一异常检测规则被触发一次导致待检测代码运行异常的严重程度、被触发的次数、以及问题类型,通过控制条件控制用于指示待检测代码是否通过,提高了代码检测的准确度和灵活性。
Description
技术领域
本申请涉及数据处理技术领域,尤其涉及一种代码检测方法、装置、设备及可读存储介质。
背景技术
随着业务的不断扩大,代码的质量在需求开发以及系统维护的过程中的重要性不断地提升,传统方法依据代码规则检测代码,识别并标识异常代码,从而降低代码在运行时出现问题的概率。但是,传统静态代码检测方法中仅通过检测固定的代码规则,预测代码是否存在运行错误,代码检测的全面性和灵活性均较低。
发明内容
本申请提供了一种代码检测方法、装置、设备及可读存储介质,如下:
一种代码检测方法,包括:
基于每一目标检测规则,检测待检测代码,获取每一所述目标检测规则的检测结果,所述目标检测规则的检测结果用于指示所述目标检测规则是否被触发,所述待检测代码为待检测项目的源代码;
将被触发至少一次的目标检测规则作为异常检测规则;
获取每一所述异常检测规则的自定义参数集合,所述异常检测规则的自定义参数集合至少包括问题类型和预设的重要度,所述重要度指示所述异常检测规则被触发一次,导致所述待检测代码运行异常的严重程度;
依据预设的控制条件、每一所述异常检测规则的自定义参数集合和被触发的次数,获取代码检测结果,所述代码检测结果用于指示所述待检测代码是否通过检测。
可选地,代码检测方法还包括:
部署自定义规则集合,所述自定义规则集合包括多条自定义检测规则;
对应部署每一所述自定义检测规则的自定义参数集合,所述自定义检测规则的自定义参数集合至少包括问题类型以及重要度;
对应部署每一所述自定义检测规则的页面描述代码,用于触发展示所述自定义检测规则的触发信息,所述触发信息至少基于所述自定义参数集合生成。
在所述获取每一目标检测规则的检测结果之前,还包括:
响应于接收到预设的检测指令,获取所述待检测代码和所述目标检测规则,所述目标检测规则包括从所述自定义规则集合中选择的至少一条自定义检测规则。
可选地,基于每一目标检测规则,检测待检测代码,获取每一所述目标检测规则的检测结果,包括:
将所述待检测代码转换为抽象语法树;
调用所述目标检测规则对应的执行方法检测所述抽象语法树,得到所述目标检测规则的检测结果。
可选地,依据预设的控制条件、每一所述异常检测规则的自定义参数集合和被触发的次数,获取代码检测结果,包括:
获取每一问题类型的次数统计值,目标问题类型的次数统计值包括所述目标问题类型对应的所有异常检测规则被触发的总次数,所述目标问题类型为任意一个问题类型;
获取每一问题类型的重要度统计数据,所述目标问题类型的重要度统计数据包括每一重要度的数量,目标重要度的数量等于所述目标问题类型对应的所有异常检测规则中,目标重要度对应的所有异常检测规则被触发的总次数,所述目标重要度为任意一个重要度;
判断所述待检测代码是否满足所述控制条件,所述控制条件包括:每一问题类型满足:统计值不大于对应的第一预设阈值,并且重要度统计数据中,各个重要度的数量均不大于对应的第二预设阈值;
若是,所述代码检测结果用于指示所述待检测代码通过检测;
若否,所述代码检测结果用于指示所述待检测代码未通过检测。
可选地,异常检测规则的自定义参数集合还包括:修复时长;
所述依据预设的控制条件、每一所述异常检测规则的自定义参数集合和被触发的次数,获取代码检测结果还包括:
获取各个问题类型的修复参数,所述目标问题类型的修复参数等于所述目标问题类型对应的所有异常检测规则的修复时长;
依据各个问题类型的次数统计值、重要度统计数据、以及修复参数,获取各个预设的指标的指标等级;
所述控制条件还包括:
各个指标的指标等级均不低于对应的预设等级阈值。
可选地,在所述依据预设的控制条件、每一所述异常检测规则的自定义参数集合和被触发的次数,获取代码检测结果之后,还包括:
将所述代码检测结果记录到预设的结果数据库中,并与所述待检测项目关联;
响应于所述待检测项目的展示指令,展示所述代码检测结果、各个问题类型的次数统计值、重要度统计数据、以及修复参数。
可选地,在所述依据预设的控制条件、每一所述异常检测规则的自定义参数集合和被触发的次数,获取代码检测结果之后,还包括:
响应于所述目标问题类型的展示指令,调用所述目标问题类型对应异常检测规则的页面描述代码,触发展示所述目标问题类型对应的各个异常检测规则的触发信息。
一种代码检测装置,包括:
规则检测模块,用于基于每一目标检测规则,检测待检测代码,获取每一所述目标检测规则的检测结果,所述目标检测规则的检测结果用于指示所述目标检测规则是否被触发,所述待检测代码为待检测项目的源代码;
异常规则确定模块,用于将被触发至少一次的目标检测规则作为异常检测规则;
参数获取模块,用于获取每一所述异常检测规则的自定义参数集合,所述异常检测规则的自定义参数集合至少包括问题类型和预设的重要度,所述重要度指示所述异常检测规则被触发一次,导致所述待检测代码运行异常的严重程度;
检测控制模块,用于依据预设的控制条件、每一所述异常检测规则的自定义参数集合和被触发的次数,获取代码检测结果,所述代码检测结果用于指示所述待检测代码是否通过检测。
一种代码检测设备,包括:存储器和处理器;
所述存储器,用于存储程序;
所述处理器,用于执行所述程序,实现代码检测方法的各个步骤。
一种可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时,实现代码检测方法的各个步骤。
由上述技术方案可以看出,本申请实施例提供的代码检测方法、装置、设备及可读存储介质,基于每一目标检测规则,检测待检测代码,获取每一目标检测规则的检测结果,目标检测规则的检测结果用于指示目标检测规则是否被触发,将被触发至少一次的目标检测规则作为异常检测规则,获取每一异常检测规则的自定义参数集合,自定义参数集合至少包括名称和预设的重要度,依据预设的控制条件、每一异常检测规则的自定义参数集合和被触发的次数,获取代码检测结果。由于自定义参数集合至少包括重要度和问题类型,重要度指示异常检测规则被触发一次,导致待检测代码运行异常的严重程度因此,本方法综合考虑每一异常检测规则被触发一次导致待检测代码运行异常的严重程度、问题类型以及被触发的次数,通过控制条件确定用于指示待检测代码是否通过检测的代码检测结果,提高了代码检测的准确度和灵活性。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的一种代码检测方法的具体实施方式的流程示意图;
图2a为本申请实施例提供的一种代码检测结果的展示界面的示意图;
图2b为本申请实施例提供的一种触发信息的展示界面的示意图;
图3为本申请实施例提供的一种代码检测方法的流程示意图;
图4为本申请实施例提供的一种代码检测装置的结构示意图;
图5为本申请实施例提供的一种代码检测设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
现有的静态代码检测方法为使用代码检测工具对源代码进行检测,例如,常见的代码检测工具包括SonarQube工具,具体地,SonarQube工具对源代码进行检测时,依据固定的代码检测规则检测出代码是否存在缺陷或漏洞,也即利用固定的代码检测规则预测代码是否会产生运行错误。但是经本申请的发明人研究发现,现有的代码检测工具的代码检测方法存在以下技术缺点:
一方面,现有的代码检测工具缺乏对代码检测的控制,例如,现有的代码检测工具仅依据每一固定的代码检测规则检测出代码是否存在该代码检测规则指示的代码问题并展示,但是在实际代码运行时,由于不同的代码问题导致的代码运行异常的严重程度不同,以及相同的代码问题在不同项目中,导致的代码运行异常的严重程度不同。
例如,代码问题1或代码问题2单独出现时,导致的代码运行异常的严重程度较低(甚至可忽略),但是一旦代码问题1和代码问题2同时出现,导致的代码运行异常的严重程度非常高,再例如,超过数量阈值的简单代码问题(导致的代码运行异常的严重程度较低的问题)将导致代码运行异常的严重程度非常高。再例如,在针对项目1的代码检测时,代码问题1导致的代码运行异常的严重程度较低,在针对项目2的代码检测时,代码问题1导致的代码运行异常的严重程度较高。
可见,判断代码是否通过检测需要基于单条代码检测规则的检测结果,综合考虑各个代码检测规则指示的代码问题导致的待检测代码运行异常的严重程度,控制输出用于指示待检测代码是否通过检测的检测结果。
另一方面,由于现有的代码检测规则无法灵活定制,因而对于代码开发规范没有支撑,其中代码开发规范至少包括代码语义规范,可以理解的是,代码语义规范为在开发过程中定制化的、用于维持编码风格统一、提高可读性、且降低代码漏洞的规则。现有技术中,维持代码开发规范需要消耗大量人力去复查已开发完成的代码来保证该代码满足代码开发规范。
可见,现有的代码检测工具中,代码检测的检测点单一,无法兼顾代码缺陷问题和代码规范问题。
需要说明的是,代码缺陷问题包括导致的代码运行异常的各类问题,第一类指标用于指示代码缺陷问题的问题类型,可选地,第一类指标包括但不限于:可靠性指标(例如Bug)以及安全性指标(例如漏洞和安全热点)。代码规范问题包括导致代码不符合代码开发规范的各类问题,第二类指标用于指示代码规范问题的问题类型,可选地,第二类指标包括可维护性指标(例如异味)。
具体的,Bug用于表示代码中存在打断代码正常运行的情况,需要被立刻修复。漏洞用于表示代码中存在被黑客攻击的情况。安全热点用于表示代码需要人力复核以判断代码是否会出现问题。
异味用于表示代码中存在不满足代码开发规范的情况。
因此,本申请实施例提供的一种代码检测方法预先配置自定义检测规则以及自定义检测规则对应的自定义控制参数,基于自定义检测规则的检测结果和自定义控制参数,获取最终的代码检测结果。目的在于提高代码检测的准确性、灵活性和检测效率,且降低了人力成本。
本申请实施例提供的一种代码检测方法应用于但不限于利用代码检测工具实现静态代码检测方法的场景,可选地,本方法可以应用于代码检测工具。需要说明的是,代码检测工具包括但不限于SonarQube工具。本实施例以使用SonarQube工具进行代码检测的场景为例,对本申请实施例提供的一种代码检测方法进行具体介绍。
图1为本申请实施例提供的一种代码检测方法的具体实现流程,如图1所示,本方法包括:
S101、部署自定义规则集合。
本实施例中,自定义规则集合包括多条自定义检测规则,其中,每一条自定义检测规则通过自定义检测规则代码生成,自定义检测规则代码为依据预设的规则模板编写的代码。
需要说明的是,在开发者模式下,通过sonarqube平台预设的规则模板,编写自定义检测规则代码,编写的自定义检测规则代码与业务代码隔离,单独进行代码版本控制,目的在于,利用版本控制快速弥补因自定义规则代码本身的问题造成的检测失败。
具体地,自定义检测规则的部署流程包括:
1、获取并编译打包自定义检测规则代码,将编译打包后的自定义检测规则代码部署到sonarqube平台所属服务器中sonarqube程序对应的extensions目录下,并执行重启sonarqube平台的操作。在重启过程中识别extensions文件夹下的文件,寻找编译打包后的自定义检测规则文件,并识别自定义检测规则文件中的自定义检测规则。
2、对应部署每一自定义检测规则的执行方法。
本实施例中,自定义检测规则的执行方法包括用于定义自定义检测规则中检测点的检测逻辑的方法。
本实施例中,对应部署自定义检测规则的执行方法的具体方法包括:
编译后的自定义检测规则被捕所有的自定义检测规则在编写完毕后都会被加入到org.sonar.samples.java.RulesList类中的getJavaChecks方法中,sonarqube会扫描编译后的自定义检测规则代码,定位到这个具体的方法,从而获取所有的自定义检测规则,之后计算机会根据被加入到该方法中的规则,进行逐个识别。
自定义规则编写在规则文件里,需要把所有的规则文件,加入到ruleList文件中指定的列表方法中的列表内,ruleList文件和规则文件会被打包成为jar包jar包会被部署至sonarqube服务所在服务器。重启sonarqube服务后,sonarqube会从这个jar包中去定位ruleList文件,找到ruleList文件后找到ruleList文件中指定的列表方法中的列表,就可获取规则文件并识别自定义规则的逻辑。
sonar-java提供了许多自定义规则模板用于编写自定义规则具体实现代码,计算机通过识别规则列表类,找到继承org.sonar.plugins.java.api.tree.BaseTreeVisitor类的自定义规则代码,得到自定义规则中对于静态代码的具体检测点,例如:方法体,if语句块这两个检测点,分别都会有一个方法来对应相应的检测点。
为了对应不同的检测点,每一个检测点都有一个具体的方法,所有的检测逻辑都是定义在这些方法中的。计算机先找到对应的方法,进而去识别方法中检测规则的具体逻辑。
S102、对应部署每一自定义检测规则的页面描述代码。
本实施例中,自定义检测规则的页面描述代码用于触发展示自定义检测规则的触发信息,可选地,自定义检测规则的触发信息包括自定义检测规则的基本信息(包括名称和关键字等)、自定义检测规则的触发原因、以及解决方案(包括修复模型以及修复时间等)。
本实施例中,对应部署每一自定义检测规则的页面描述代码的一种具体方法包括:
依据自定义检测规则获取页面描述代码,可选地,首先依据自定义检测规则的文件名称和预设的名称对应关系,获取自定义检测规则对应的描述页面文件的名称,例如自定义检测规则的文件名称AvoidGetMappingOnSaveUpdateDeleteRule.java,编译后的文件为AvoidGetMappingOnSaveUpdateDeleteRule.class,则对应的规则描述页面的文件名称为AvoidGetMappingOnSaveUpdateDeleteRule.html。
在计算机识别之后,这个页面会与资源库中的对应自定义规则关联起来。当用户查看规则以及静态代码扫描时触发该规则后被展示出来,用于解释对应规则以及展示为何会触发规则并展示解决方案。
S103、对应部署每一自定义检测规则的自定义参数集合。
本实施例中,自定义检测规则的自定义参数集合包括多项自定义控制参数,可选地,多项自定义控制参数包括名称title、问题类型type、状态status、修复参数remdediation:(包括修复模型和修复时长)、关键字tags、重要度defaultServerity。
其中,自定义检测规则的问题类型为触发自定义检测规则的代码问题的问题类型,例如,Bug、语义问题、以及漏洞等,自定义检测规则的状态包括Ready(就绪)、Deprecated(过时)以及Beta(体验版本)中任一项,具体的,若自定义检测规则为Ready(就绪),表示自定义检测规则可以在生产环境放心的被使用,若自定义检测规则为Deprecated(过时),表示自定义检测规则不再被使用,若自定义检测规则为Beta(体验版本),表示自定义检测规则缺少有效反馈。可以理解的是,自定义检测规则的状态指示为自定义检测规则的规则类型。
修复参数包括所需修复模型以及利用该修复模型修复代码所需时长。
重要度用于指示代码问题的严重程度,可选地,以等级的高低表示重要程度(例如,重要度包括预设等级:阻断、次要、严重、主要、以及提示等)、以数值(例如,重要度包括预设数值:1~10)的大小表示重要程度。
本实施例中,通过预先创建的元数据文件描述自定义参数集合中的各个控制参数,例如,预先创建的一个用于描述自定义参数集合C1的元数据文件如下:
{
"title": "Avoid using @GetMapping on save/update/delete/... methodsin @RestController context",
"type": "CODE_SMELL",
"status": "ready",
"remediation": {
"func": "Constant\/Issue",
"constantCost": "5min"
},
"tags": [
"spring",
"security"
],
"defaultSeverity": "Minor"
}
本实施例中,以与自定义检测规则的文件名称相同,但文件格式不同的文件储存用于描述自定义检测规则的自定义控制参数的元数据文件,实现对应部署每一自定义检测规则的自定义控制参数。
例如,通过文件名的方式关联自定义检测规则W1和自定义参数集合C1包括:W1的文件名称AvoidGetMappingOnSaveUpdateDeleteRule.java,则用于描述C1的元数据文件的文件名为AvoidGetMappingOnSaveUpdateDeleteRule.json。
S104、响应于检测指令,获取待检测代码和目标检测规则集合。
本实施例中,待检测代码为项目提交的源代码,通过Maven工具下的sonar插件触发检测指令。具体的,检测指令的触发时机包括:接收到预设的触发指令,和/或监测到Jenkins自动构建项目。需要说明的是,触发检测指令后,sonarqube平台通过传入的令牌得知被检测项目的信息(例如标识或者名称)。其中,令牌预先在sonarqube平台创建,并且在创建的令牌与一个预先在sonarqube创建的项目建立联系,并且令牌只与创建令牌的用户相关。在实际应用中,进行代码检测时,相当于用于使用对应的令牌登录到sonarqube平台,sonarqube平台通过令牌得知被检测项目的信息。
本实施例中,目标检测规则集合包括从预先部署的自定义规则集合中选取的至少一条自定义检测规则,将目标检测规则集合中的自定义检测规则作为目标检测规则。需要说明的是,依据用户的选择操作获取每一条目标检测规则,或者依据待检测项目的信息(包括类型、重要等级、以及名称等)以及预先的项目规则对应关系(包括项目的信息和自定义检测规则的关系)获取待检测项目对应的自定义检测规则作为目标检测规则。
S105、将待检测代码转换为抽象语法树AST。
本实施例中,sonarqube平台扫描待检测代码,并将待检测代码解析成抽象语法树(AST,源代码的抽象语法结构的树状表示)。
S106、调用目标检测规则对应的执行方法检测AST,得到目标检测规则的检测结果。
本实施例中,目标检测规则对应的执行方法定义目标检测规则中的检测点的检测逻辑。其中,任一目标检测规则的检测结果用于指示目标检测规则是否通过,若目标检测规则的检测结果指示目标检测规则为未通过,说明目标检测规则被触发一次。
S107、将被触发至少一次的目标检测规则作为异常检测规则。
S108、获取异常检测规则的自定义参数集合。
本实施例中,自定义参数集合包括名称title、问题类型type、状态status、修复参数remdediation:(包括修复模型和修复时长)、关键字tags、重要度defaultServerity。
S109、依据异常检测规则的自定义参数集合以及被触发的次数,获取每一问题类型的统计结果。
本实施例中,统计结果包括次数统计值、重要度统计数据、以及修复参数。
具体的,目标问题类型(任意一个问题类型)的统计结果获取方法包括:
1、获取目标问题类型的次数统计值,目标问题类型的次数统计值包括所述目标问题类型对应的所有异常检测规则被触发的总次数。
以问题类型包括Bug、漏洞、安全热点、债务、以及异味为例,获取第二检测结果的获取方法包括:
获取问题类型为Bug的目标检测规则被触发的次数,作为Bug的次数统计值。
获取问题类型为漏洞的目标检测规则被触发的次数,作为漏洞的次数统计值。
获取问题类型为安全热点的目标检测规则被触发的次数,作为安全热点的次数统计值,通常用个数标识。
获取问题类型为异味的目标检测规则被触发的次数,作为异味的次数统计值。
2、获取目标问题类型的重要度统计数据,目标问题类型的重要度统计数据包括每一重要度的数量,目标重要度(任意一个重要度)的数量等于目标问题类型对应的所有异常检测规则中,目标重要度对应的所有异常检测规则被触发的总次数。
3、获取目标问题类型的修复参数,目标问题类型的修复参数等于目标问题类型对应的所有异常检测规则的修复时长。
S110、依据各个问题类型的次数统计值、重要度统计数据、以及修复参数,获取各个预设的指标的指标等级。
本实施例中,任意指标包括至少一个问题类型。
具体的,基于预设的等级规则以及目标指标(任意一类指标)包括的问题类型的次数统计值、重要度统计数据、以及修复参数获取目标指标的指标等级,等级规则包括下述至少一项:
属于目标指标的问题类型的次数统计值越高,则目标指标的指标等级越低;
属于目标指标的问题类型的最高重要度越高,则目标指标的指标等级越低,其中,最高重要度为重要度统计数据中指示严重程度最高的重要度;
属于目标指标的问题类型的修复时间越长,则目标指标的指标等级越低。
例如,将问题类型分为可靠性,安全性,可维护性,覆盖率,重复五类指标,每一类指标包括至少一个问题类型,例如,可靠性指标包括Bug,安全性指标包括漏洞和安全热点,可维护性指标包括异味。
以可靠性指标的指标等级(可靠性等级)为例,可靠性等级的获取方法为:
属于可靠性指标目标问题类型(也即Bug)的最高重要度越高,则可靠性等级越低,例如:
若Bug的重要度统计数据中,最高重要度为提示,则可靠性等级为A。
若Bug的重要度统计数据中,最高重要度为次要,则可靠性等级为B。
若Bug的重要度统计数据中,最高重要度为严重,则可靠性等级为C。
若Bug的重要度统计数据中,最高重要度为主要,则可靠性等级为D。
若Bug的重要度统计数据中,最高重要度为阻断,则可靠性等级为E。
以可维护性指标的指标等级(可维护性等级)为例,可维护性等级的获取方法为:
获取预设的可维护性等级对应关系中,目标范围对应的等级作为可维护性等级。
其中,可维护性等级对应关系包括每一等级对应的范围,范围包括次数范围和时长范围。目标范围包括异味被触发的次数所属的次数范围以及修复时长所属的时长范围。
S111、判断待检测代码是否满足预设的控制条件。
本实施例中,控制条件包括下述1、2以及3:
1、各个问题类型的次数统计值均不大于对应的第一预设阈值。
本实施例中,通过预先配置的第一对应关系确定每一问题类型对应的第一预设阈值,其中,第一对应关系用于指示每一问题类型和最大数量的对应关系,将目标问题类型对应的最大数量作为目标问题类型对应的第一预设阈值。
例如,问题类型包括Bug和漏洞,Bug对应的第一预设阈值为5,漏洞对应的第一预设阈值为4,因此,控制条件包括:
B1、Bug的次数统计值不大于5,且漏洞的次数统计值不大于4。
2、各个问题类型的重要度统计数据中,各个重要度的数量均不大于对应的第二预设阈值。
本实施例中,通过预先配置的第二对应关系确定每一重要度的第二预设阈值,其中,第二对应关系用于指示各个重要度和最大数量的对应关系,将各个重要度对应的最大数量作为对应的第二预设阈值。
本实施例中,重要度包括:阻断、次要、严重、主要、以及提示,需要说明的是,重要度越高表示严重程度越高,可选地,重要度从高到低排列为:阻断、次要、严重、主要、以及提示。
例如,第二对应关系指示问题类型为Bug时:
重要度为阻断对应的最大数量为1,重要度为次要对应的最大数量为1,重要度为严重对应的最大数量为1,重要度为主要对应的最大数量为2,重要度为提示对应的最大数量为3。
因此,控制条件包括下述B2:
B2、Bug的重要度统计数据中,“阻断”的数量不大于1、“次要”的数量不大于1、“严重”的数量不大于1、“主要”的数量不大于2、且“提示”的数量不大于3。
3、各指标的指标等级均不低于对应的预设等级阈值。需要说明的是,依据等级阈值对应关系确定各类指标的指标等级对应的预设等级阈值,其中,等级阈值对应关系包括每一指标与等级阈值的对应关系。
例如,等级阈值对应关系包括:可维护性等级的等级阈值为D,安全性等级的等级阈值为C,可维护性等级的等级阈值为C。
则控制条件包括:
B4、可维护性等级不低于D、安全性等级不低于C、且可维护性等级不低于C。
S112、若满足控制条件,则代码检测结果用于指示待检测代码通过检测。
S113、若不满足控制条件,代码检测结果用于指示待检测代码未通过检测。
S114、将代码检测结果记录到预设的结果数据库中,并与待检测项目关联。
S115、响应于待检测项目的展示指令,展示代码检测结果、各个问题类型的次数统计值、重要度统计数据、以及修复参数。
本实施例中,待检测项目的展示指令通过用户登录的选择操作触发。可选地,图2a示例了一种具体的代码检测结果的展示界面,如图2a所示:
第一检测结果展示区域用于展示:代码检测结果,表示待检测代码通过检测。本实施例中,以质量阈正常表示待检测代码通过检测。
第二检测结果展示区域用于展示:
可靠性指标:Bugs的次数统计值为11。
安全性指标:漏洞的次数统计值为6,安全热点的次数统计值为18。
可维护性指标:异味的次数统计值为58,对应的债务为1天。
覆盖率指标:覆盖率为0.0%。
需要说明的是,生成展示待检测代码的代码检测结果的展示界面的具体展示方法参见现有技术。
S116、响应于目标问题类型的展示指令,调用问题类型为目标问题类型的异常检测规则的页面描述代码,展示异常检测规则的触发信息。
本实施例中,异常检测规则的触发信息包括异常检测规则的基本信息(包括名称和关键字等)、自定义检测规则的触发原因、以及解决方案(包括修复模型以及修复时间等)。
图2b示例了一种具体的异常检测规则的触发信息的展示界面,如图2b所示,左侧界面展示:
对应的问题类型和次数统计值、严重程度的数据(例如重要度统计数据,图中未示出)、以及其他预设参数按钮(如图2b所示的处理方式、状态、标准等)。以[Bug:8]为例,表示问题类型为Bug的次数统计值为8。
右侧界面展示:
被选中的问题类型对应的各个异常检测规则的名称、关键字、触发原因、修复模型以及修复时间等信息。
需要说明的是,具体的展示方法可以参见现有技术,例如,设置展示规则按钮,用于触发展示异常检测规则的具体内容。由上述技术方法可以看出,本申请实施例提供的代码检测方法,至少可以实现下述有益效果:
预先部署的自定义规则集合包括多条自定义检测规则,每一条自定义检测规则用于检测代码是否存在至少一个预设的代码问题,其中代码问题包括语义问题和缺陷问题,由此,本方法在检测待检测代码时调用多条自定义检测规则实现对待检测代码的语义问题和缺陷问题的检测,进而兼顾代码可读性和安全性要求,进一步,由于对于代码语义规范有很好的支撑,无需人工复核语义问题,从而降低人力成本。且自定义代码检测规则为编码型规则,降低了学习成本。
本方法预先部署每一自定义检测规则的自定义参数集合,自定义参数集合中包括自定义检测规则对应的重要度,在对待检测代码进行检测时,依据每一被触发的自定义检测规则的重要度以及触发次数,确定待检测代码是否通过检测,也即,综合考虑各个被触发的自定义检测代码的代码问题导致的待检测代码运行异常的严重程度,控制代码检测结果。
通过定制每一项目的自定义检测规则,实现灵活检测不同项目的待检测代码,提高代码检测的准确性和个性化。
第四、预先部署每一自定义检测规则的页面描述代码,通过调用自定义检测规则的页面描述代码实现每一自定义检测规则被触发时的页面展示内容的自定义。
第六、相对于现有技术中,代码检测结果的查看更加依赖于每次检测生成的静态文件,本是方法提供了图像化界面来展示各项代码检测结果并且将代码检测结果持久化至数据库中,提高了代码检测结果查看的便利性。
综上所述,本发明一方面通过自定义控制参数实现代码检测结果的灵活控制,另一方面,通过自定义检测规则,兼顾针对代码缺陷问题和代码规范问题的检测,满足代码安全性要求和代码可读性要求。从而实现灵活的控制代码检测的功能,同时减少了代码复核的人力成本。
需要说明的是,图1仅示例了本申请实施例提供的一种代码检测方法的可选的具体实现流程,本申请还包括其他可选的具体实现方法。
例如,S101~S103仅为一种可选的自定义规则集合以及对应的页面描述代码和自定义参数集合的具体实现方法,可选的其他方法包括通过定于对应关系表,将对应的自定义检测规则、页面描述代码、以及自定义参数集合联系起来,具体实现方法可以参见现有技术。
再例如,S104~S105仅为一种可选的获取每一目标检测规则的检测结果的具体实现方法,其他可选的具体实现方法可以参见现有技术。
再例如,S109中获取Bug的统计值的方法仅为一种可选方法,另一种可选方法包括:获取第一类目标检测规则被触发的次数和第二类目标检测规则被触发的次数之和,作为Bug的统计值,其中,第一类目标检测规则包括问题类型为Bug的目标检测规则,第二类目标检测规则包括问题类型为语义错误、且重要度大于预设阈值的目标检测规则。
综上所述,将本申请实施例提供的代码检测方法总结概括为图3所示的流程,如图3所示,本方法包括:
S301、基于每一目标检测规则,检测待检测代码,获取目标检测规则的检测结果。
本实施例中,目标检测规则的检测结果用于指示目标检测规则是否被触发,任一条目标检测规则被触发表示待检测代码未通过目标检测规则,也即一次调用目标检测规则待检测代码的检测结果为未通过,需要说明的是,获取目标检测规则的检测结果的方法包括多种,具体参见图1所示的流程。
S302、将被触发至少一次的目标检测规则作为异常检测规则。
S303、获取每一异常检测规则的自定义参数集合。
本实施例中,自定义参数集合至少包括问题类型和重要度。需要说明的是,每一条异常检测规则的自定义参数集合预先配置,其中,异常检测规则的重要度指示异常检测规则被触发一次的情况下,导致待检测代码运行异常的严重程度,异常检测规则的问题类型为预设类型中的至少一项,指示异常检测规则被触发导致的问题的类型。
S304、依据预设的控制条件、每一异常检测规则的自定义参数集合和被触发的次数,获取代码检测结果。
本实施例中,代码检测结果用于指示待检测代码是否通过检测,也即,代码检测结果包括通过或未通过。
需要说明的是,图1所示的流程中S109~S113示出了一种可选的获取代码检测结果的具体方法,本申请还包括至少一种其它获取代码检测结果的具体方法。
在一种可选的实施例中,依据预设的控制条件、每一异常检测规则的重要度和被触发的次数,获取代码检测结果包括:
依据每一异常检测规则的重要度和被触发的次数,获取每一问题类型的统计结果。判断待检测代码是否满足预设的控制条件,控制条件包括:各个问题类型的次数统计值均不大于对应的第一预设阈值,且各个问题类型的重要度统计数据中,各个重要度的数量均不大于对应的第二预设阈值。
需要说明的是,具体实现方法参见上述实施例。
由上述技术方案可以看出,本申请实施例提供的一种代码检测方法,基于每一目标检测规则,检测待检测代码,获取每一目标检测规则的检测结果,目标检测规则的检测结果用于指示目标检测规则是否被触发,将被触发至少一次的目标检测规则作为异常检测规则,获取每一异常检测规则的自定义参数集合,自定义参数集合至少包括名称和预设的重要度,依据预设的控制条件、每一异常检测规则的自定义参数集合和被触发的次数,获取代码检测结果。由于自定义参数集合至少包括重要度和问题类型,重要度指示异常检测规则被触发一次,导致待检测代码运行异常的严重程度因此,本方法综合考虑每一异常检测规则被触发一次导致待检测代码运行异常的严重程度、问题类型以及被触发的次数,通过控制条件确定用于指示待检测代码是否通过检测的代码检测结果,提高了代码检测的准确度和灵活性。
图4示出了本申请实施例提供的一种代码检测装置的结构示意图,如图4所示,该装置可以包括:
规则检测模块401,用于基于每一目标检测规则,检测待检测代码,获取每一所述目标检测规则的检测结果,所述目标检测规则的检测结果用于指示所述目标检测规则是否被触发,所述待检测代码为待检测项目的源代码;
异常规则确定模块402,用于将被触发至少一次的目标检测规则作为异常检测规则;
参数获取模块403,用于获取每一所述异常检测规则的自定义参数集合,所述异常检测规则的自定义参数集合至少包括问题类型和预设的重要度,所述重要度指示所述异常检测规则被触发一次,导致所述待检测代码运行异常的严重程度;
检测控制模块404,用于依据预设的控制条件、每一所述异常检测规则的自定义参数集合和被触发的次数,获取代码检测结果,所述代码检测结果用于指示所述待检测代码是否通过检测。
可选地,本装置还包括:部署单元,用于:
部署自定义规则集合,所述自定义规则集合包括多条自定义检测规则;
对应部署每一所述自定义检测规则的自定义参数集合,所述自定义检测规则的自定义参数集合至少包括问题类型以及重要度;
对应部署每一所述自定义检测规则的页面描述代码,用于触发展示所述自定义检测规则的触发信息,所述触发信息至少基于所述自定义参数集合生成。
在所述获取每一目标检测规则的检测结果之前,还包括:
规则获取单元,用于响应于接收到预设的检测指令,获取所述待检测代码和所述目标检测规则,所述目标检测规则包括从所述自定义规则集合中选择的至少一条自定义检测规则。
可选地,规则检测模块用于基于每一目标检测规则,检测待检测代码,获取每一所述目标检测规则的检测结果,包括:规则检测模块具体用于:
将所述待检测代码转换为抽象语法树;
调用所述目标检测规则对应的执行方法检测所述抽象语法树,得到所述目标检测规则的检测结果。
可选地,检测控制模块用于依据预设的控制条件、每一所述异常检测规则的自定义参数集合和被触发的次数,获取代码检测结果,包括:检测控制模块具体用于:
获取每一问题类型的次数统计值,目标问题类型的次数统计值包括所述目标问题类型对应的所有异常检测规则被触发的总次数,所述目标问题类型为任意一个问题类型;
获取每一问题类型的重要度统计数据,所述目标问题类型的重要度统计数据包括每一重要度的数量,目标重要度的数量等于所述目标问题类型对应的所有异常检测规则中,目标重要度对应的所有异常检测规则被触发的总次数,所述目标重要度为任意一个重要度;
判断所述待检测代码是否满足所述控制条件,所述控制条件包括:每一问题类型满足:统计值不大于对应的第一预设阈值,并且重要度统计数据中,各个重要度的数量均不大于对应的第二预设阈值;
若是,所述代码检测结果用于指示所述待检测代码通过检测;
若否,所述代码检测结果用于指示所述待检测代码未通过检测。
可选地,异常检测规则的自定义参数集合还包括:修复时长;
检测控制模块用于依据预设的控制条件、每一所述异常检测规则的自定义参数集合和被触发的次数,获取代码检测结果,还包括:检测控制模块具体用于:
获取各个问题类型的修复参数,所述目标问题类型的修复参数等于所述目标问题类型对应的所有异常检测规则的修复时长;
依据各个问题类型的次数统计值、重要度统计数据、以及修复参数,获取各个预设的指标的指标等级;
所述控制条件还包括:
各个指标的指标等级均不低于对应的预设等级阈值。
可选地,本装置还包括:第一结果展示单元,用于在所述依据预设的控制条件、每一所述异常检测规则的自定义参数集合和被触发的次数,获取代码检测结果之后,将所述代码检测结果记录到预设的结果数据库中,并与所述待检测项目关联;响应于所述待检测项目的展示指令,展示所述代码检测结果、各个问题类型的次数统计值、重要度统计数据、以及修复参数。
可选地,本装置还包括:第二结果展示单元,用于在所述依据预设的控制条件、每一所述异常检测规则的自定义参数集合和被触发的次数,获取代码检测结果之后,响应于所述目标问题类型的展示指令,调用所述目标问题类型对应异常检测规则的页面描述代码,触发展示所述目标问题类型对应的各个异常检测规则的触发信息。
图5示出了该代码检测设备的结构示意图,该设备可以包括:至少一个处理器501,至少一个通信接口502,至少一个存储器503和至少一个通信总线504;
在本申请实施例中,处理器501、通信接口502、存储器503、通信总线504的数量为至少一个,且处理器501、通信接口502、存储器503通过通信总线504完成相互间的通信;
处理器501可能是一个中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecificIntegratedCircuit),或者是被配置成实施本发明实施例的一个或多个集成电路等;
存储器503可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatilememory)等,例如至少一个磁盘存储器;
其中,存储器存储有程序,处理器可执行存储器存储的程序,实现本申请实施例提供的一种代码检测方法的各个步骤,如下:
一种代码检测方法,包括:
基于每一目标检测规则,检测待检测代码,获取每一所述目标检测规则的检测结果,所述目标检测规则的检测结果用于指示所述目标检测规则是否被触发,所述待检测代码为待检测项目的源代码;
将被触发至少一次的目标检测规则作为异常检测规则;
获取每一所述异常检测规则的自定义参数集合,所述异常检测规则的自定义参数集合至少包括问题类型和预设的重要度,所述重要度指示所述异常检测规则被触发一次,导致所述待检测代码运行异常的严重程度;
依据预设的控制条件、每一所述异常检测规则的自定义参数集合和被触发的次数,获取代码检测结果,所述代码检测结果用于指示所述待检测代码是否通过检测。
可选地,代码检测方法还包括:
部署自定义规则集合,所述自定义规则集合包括多条自定义检测规则;
对应部署每一所述自定义检测规则的自定义参数集合,所述自定义检测规则的自定义参数集合至少包括问题类型以及重要度;
对应部署每一所述自定义检测规则的页面描述代码,用于触发展示所述自定义检测规则的触发信息,所述触发信息至少基于所述自定义参数集合生成。
在所述获取每一目标检测规则的检测结果之前,还包括:
响应于接收到预设的检测指令,获取所述待检测代码和所述目标检测规则,所述目标检测规则包括从所述自定义规则集合中选择的至少一条自定义检测规则。
可选地,基于每一目标检测规则,检测待检测代码,获取每一所述目标检测规则的检测结果,包括:
将所述待检测代码转换为抽象语法树;
调用所述目标检测规则对应的执行方法检测所述抽象语法树,得到所述目标检测规则的检测结果。
可选地,依据预设的控制条件、每一所述异常检测规则的自定义参数集合和被触发的次数,获取代码检测结果,包括:
获取每一问题类型的次数统计值,目标问题类型的次数统计值包括所述目标问题类型对应的所有异常检测规则被触发的总次数,所述目标问题类型为任意一个问题类型;
获取每一问题类型的重要度统计数据,所述目标问题类型的重要度统计数据包括每一重要度的数量,目标重要度的数量等于所述目标问题类型对应的所有异常检测规则中,目标重要度对应的所有异常检测规则被触发的总次数,所述目标重要度为任意一个重要度;
判断所述待检测代码是否满足所述控制条件,所述控制条件包括:每一问题类型满足:统计值不大于对应的第一预设阈值,并且重要度统计数据中,各个重要度的数量均不大于对应的第二预设阈值;
若是,所述代码检测结果用于指示所述待检测代码通过检测;
若否,所述代码检测结果用于指示所述待检测代码未通过检测。
可选地,异常检测规则的自定义参数集合还包括:修复时长;
所述依据预设的控制条件、每一所述异常检测规则的自定义参数集合和被触发的次数,获取代码检测结果还包括:
获取各个问题类型的修复参数,所述目标问题类型的修复参数等于所述目标问题类型对应的所有异常检测规则的修复时长;
依据各个问题类型的次数统计值、重要度统计数据、以及修复参数,获取各个预设的指标的指标等级;
所述控制条件还包括:
各个指标的指标等级均不低于对应的预设等级阈值。
可选地,在所述依据预设的控制条件、每一所述异常检测规则的自定义参数集合和被触发的次数,获取代码检测结果之后,还包括:
将所述代码检测结果记录到预设的结果数据库中,并与所述待检测项目关联;
响应于所述待检测项目的展示指令,展示所述代码检测结果、各个问题类型的次数统计值、重要度统计数据、以及修复参数。
可选地,在所述依据预设的控制条件、每一所述异常检测规则的自定义参数集合和被触发的次数,获取代码检测结果之后,还包括:
响应于所述目标问题类型的展示指令,调用所述目标问题类型对应异常检测规则的页面描述代码,触发展示所述目标问题类型对应的各个异常检测规则的触发信息。
本申请实施例还提供一种可读存储介质,该可读存储介质可存储有适于处理器执行的计算机程序,计算机程序被处理器执行时,实现本申请实施例提供的一种代码检测方法的各个步骤,如下:
一种代码检测方法,包括:
基于每一目标检测规则,检测待检测代码,获取每一所述目标检测规则的检测结果,所述目标检测规则的检测结果用于指示所述目标检测规则是否被触发,所述待检测代码为待检测项目的源代码;
将被触发至少一次的目标检测规则作为异常检测规则;
获取每一所述异常检测规则的自定义参数集合,所述异常检测规则的自定义参数集合至少包括问题类型和预设的重要度,所述重要度指示所述异常检测规则被触发一次,导致所述待检测代码运行异常的严重程度;
依据预设的控制条件、每一所述异常检测规则的自定义参数集合和被触发的次数,获取代码检测结果,所述代码检测结果用于指示所述待检测代码是否通过检测。
可选地,代码检测方法还包括:
部署自定义规则集合,所述自定义规则集合包括多条自定义检测规则;
对应部署每一所述自定义检测规则的自定义参数集合,所述自定义检测规则的自定义参数集合至少包括问题类型以及重要度;
对应部署每一所述自定义检测规则的页面描述代码,用于触发展示所述自定义检测规则的触发信息,所述触发信息至少基于所述自定义参数集合生成。
在所述获取每一目标检测规则的检测结果之前,还包括:
响应于接收到预设的检测指令,获取所述待检测代码和所述目标检测规则,所述目标检测规则包括从所述自定义规则集合中选择的至少一条自定义检测规则。
可选地,基于每一目标检测规则,检测待检测代码,获取每一所述目标检测规则的检测结果,包括:
将所述待检测代码转换为抽象语法树;
调用所述目标检测规则对应的执行方法检测所述抽象语法树,得到所述目标检测规则的检测结果。
可选地,依据预设的控制条件、每一所述异常检测规则的自定义参数集合和被触发的次数,获取代码检测结果,包括:
获取每一问题类型的次数统计值,目标问题类型的次数统计值包括所述目标问题类型对应的所有异常检测规则被触发的总次数,所述目标问题类型为任意一个问题类型;
获取每一问题类型的重要度统计数据,所述目标问题类型的重要度统计数据包括每一重要度的数量,目标重要度的数量等于所述目标问题类型对应的所有异常检测规则中,目标重要度对应的所有异常检测规则被触发的总次数,所述目标重要度为任意一个重要度;
判断所述待检测代码是否满足所述控制条件,所述控制条件包括:每一问题类型满足:统计值不大于对应的第一预设阈值,并且重要度统计数据中,各个重要度的数量均不大于对应的第二预设阈值;
若是,所述代码检测结果用于指示所述待检测代码通过检测;
若否,所述代码检测结果用于指示所述待检测代码未通过检测。
可选地,异常检测规则的自定义参数集合还包括:修复时长;
所述依据预设的控制条件、每一所述异常检测规则的自定义参数集合和被触发的次数,获取代码检测结果还包括:
获取各个问题类型的修复参数,所述目标问题类型的修复参数等于所述目标问题类型对应的所有异常检测规则的修复时长;
依据各个问题类型的次数统计值、重要度统计数据、以及修复参数,获取各个预设的指标的指标等级;
所述控制条件还包括:
各个指标的指标等级均不低于对应的预设等级阈值。
可选地,在所述依据预设的控制条件、每一所述异常检测规则的自定义参数集合和被触发的次数,获取代码检测结果之后,还包括:
将所述代码检测结果记录到预设的结果数据库中,并与所述待检测项目关联;
响应于所述待检测项目的展示指令,展示所述代码检测结果、各个问题类型的次数统计值、重要度统计数据、以及修复参数。
可选地,在所述依据预设的控制条件、每一所述异常检测规则的自定义参数集合和被触发的次数,获取代码检测结果之后,还包括:
响应于所述目标问题类型的展示指令,调用所述目标问题类型对应异常检测规则的页面描述代码,触发展示所述目标问题类型对应的各个异常检测规则的触发信息。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (8)
1.一种代码检测方法,其特征在于,包括:
基于每一目标检测规则,检测待检测代码,获取每一所述目标检测规则的检测结果,所述目标检测规则的检测结果用于指示所述目标检测规则是否被触发,所述待检测代码为待检测项目的源代码;
将被触发至少一次的目标检测规则作为异常检测规则;
获取每一所述异常检测规则的自定义参数集合,所述异常检测规则的自定义参数集合至少包括问题类型、预设的重要度和修复时长,所述重要度指示所述异常检测规则被触发一次,导致所述待检测代码运行异常的严重程度;
获取每一问题类型的次数统计值,目标问题类型的次数统计值包括所述目标问题类型对应的所有异常检测规则被触发的总次数,所述目标问题类型为任意一个问题类型;
获取每一问题类型的重要度统计数据,所述目标问题类型的重要度统计数据包括每一重要度的数量,目标重要度的数量等于所述目标问题类型对应的所有异常检测规则中,目标重要度对应的所有异常检测规则被触发的总次数,所述目标重要度为任意一个重要度;
获取各个问题类型的修复参数,所述目标问题类型的修复参数等于所述目标问题类型对应的所有异常检测规则的修复时长;
依据各个问题类型的次数统计值、重要度统计数据、以及修复参数,获取各个预设的指标的指标等级;
判断所述待检测代码是否满足预设的控制条件,获取代码检测结果,所述代码检测结果用于指示所述待检测代码是否通过检测;所述控制条件包括:各个所述指标的指标等级均不低于对应的预设等级阈值、以及每一问题类型满足:统计值不大于对应的第一预设阈值,并且重要度统计数据中,各个重要度的数量均不大于对应的第二预设阈值;
若是,所述代码检测结果用于指示所述待检测代码通过检测;
若否,所述代码检测结果用于指示所述待检测代码未通过检测。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
部署自定义规则集合,所述自定义规则集合包括多条自定义检测规则;
对应部署每一所述自定义检测规则的自定义参数集合,所述自定义检测规则的自定义参数集合至少包括问题类型以及重要度;
对应部署每一所述自定义检测规则的页面描述代码,用于触发展示所述自定义检测规则的触发信息,所述触发信息至少基于所述自定义参数集合生成;
在所述获取每一所述目标检测规则的检测结果之前,还包括:
响应于接收到预设的检测指令,获取所述待检测代码和所述目标检测规则,所述目标检测规则包括从所述自定义规则集合中选择的至少一条自定义检测规则。
3.根据权利要求2所述的方法,其特征在于,所述基于每一目标检测规则,检测待检测代码,获取每一所述目标检测规则的检测结果,包括:
将所述待检测代码转换为抽象语法树;
调用所述目标检测规则对应的执行方法检测所述抽象语法树,得到所述目标检测规则的检测结果。
4.根据权利要求3所述的方法,其特征在于,在所述获取代码检测结果之后,还包括:
将所述代码检测结果记录到预设的结果数据库中,并与所述待检测项目关联;
响应于所述待检测项目的展示指令,展示所述代码检测结果、各个问题类型的次数统计值、重要度统计数据、以及修复参数。
5.根据权利要求4所述的方法,其特征在于,在所述获取代码检测结果之后,还包括:
响应于所述目标问题类型的展示指令,调用所述目标问题类型对应异常检测规则的页面描述代码,触发展示所述目标问题类型对应的各个异常检测规则的触发信息。
6.一种代码检测装置,其特征在于,包括:
规则检测模块,用于基于每一目标检测规则,检测待检测代码,获取每一所述目标检测规则的检测结果,所述目标检测规则的检测结果用于指示所述目标检测规则是否被触发,所述待检测代码为待检测项目的源代码;
异常规则确定模块,用于将被触发至少一次的目标检测规则作为异常检测规则;
参数获取模块,用于获取每一所述异常检测规则的自定义参数集合,所述异常检测规则的自定义参数集合至少包括问题类型、预设的重要度和修复时长,所述重要度指示所述异常检测规则被触发一次,导致所述待检测代码运行异常的严重程度;
检测控制模块,用于:
获取每一问题类型的重要度统计数据,所述目标问题类型的重要度统计数据包括每一重要度的数量,目标重要度的数量等于所述目标问题类型对应的所有异常检测规则中,目标重要度对应的所有异常检测规则被触发的总次数,所述目标重要度为任意一个重要度;
获取各个问题类型的修复参数,所述目标问题类型的修复参数等于所述目标问题类型对应的所有异常检测规则的修复时长;
依据各个问题类型的次数统计值、重要度统计数据、以及修复参数,获取各个预设的指标的指标等级;
判断所述待检测代码是否满足预设的控制条件,获取代码检测结果,所述代码检测结果用于指示所述待检测代码是否通过检测;所述控制条件包括:各个所述指标的指标等级均不低于对应的预设等级阈值、以及每一问题类型满足:统计值不大于对应的第一预设阈值,并且重要度统计数据中,各个重要度的数量均不大于对应的第二预设阈值;
若是,所述代码检测结果用于指示所述待检测代码通过检测;
若否,所述代码检测结果用于指示所述待检测代码未通过检测。
7.一种代码检测设备,其特征在于,包括:存储器和处理器;
所述存储器,用于存储程序;
所述处理器,用于执行所述程序,实现如权利要求1~5中任一项所述的代码检测方法的各个步骤。
8.一种可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时,实现如权利要求1~5中任一项所述的代码检测方法的各个步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211549389.6A CN115757181B (zh) | 2022-12-05 | 2022-12-05 | 一种代码检测方法、装置、设备及可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211549389.6A CN115757181B (zh) | 2022-12-05 | 2022-12-05 | 一种代码检测方法、装置、设备及可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115757181A CN115757181A (zh) | 2023-03-07 |
CN115757181B true CN115757181B (zh) | 2023-05-16 |
Family
ID=85343298
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211549389.6A Active CN115757181B (zh) | 2022-12-05 | 2022-12-05 | 一种代码检测方法、装置、设备及可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115757181B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116383834B (zh) * | 2023-06-02 | 2023-08-08 | 北京邮电大学 | 针对源码漏洞检测工具异常的检测方法以及相关设备 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108898018A (zh) * | 2018-07-23 | 2018-11-27 | 南方电网科学研究院有限责任公司 | 一种程序代码安全检测方法、设备及可读存储介质 |
CN110109820A (zh) * | 2019-03-19 | 2019-08-09 | 深圳壹账通智能科技有限公司 | 回归测试用例确定方法、装置、计算机设备及存储介质 |
CN110377497A (zh) * | 2019-05-27 | 2019-10-25 | 深圳壹账通智能科技有限公司 | 代码检测方法、装置、计算机装置及存储介质 |
CN110489314A (zh) * | 2019-07-05 | 2019-11-22 | 中国平安人寿保险股份有限公司 | 模型异常检测方法、装置、计算机设备和存储介质 |
CN110543356A (zh) * | 2019-09-11 | 2019-12-06 | 深圳前海微众银行股份有限公司 | 异常任务检测方法、装置、设备及计算机存储介质 |
CN111552640A (zh) * | 2020-04-24 | 2020-08-18 | 北京字节跳动网络技术有限公司 | 一种代码检测方法、装置、设备及存储介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9009535B2 (en) * | 2012-08-16 | 2015-04-14 | International Business Machines Corporation | Anomaly detection at the level of run time data structures |
-
2022
- 2022-12-05 CN CN202211549389.6A patent/CN115757181B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108898018A (zh) * | 2018-07-23 | 2018-11-27 | 南方电网科学研究院有限责任公司 | 一种程序代码安全检测方法、设备及可读存储介质 |
CN110109820A (zh) * | 2019-03-19 | 2019-08-09 | 深圳壹账通智能科技有限公司 | 回归测试用例确定方法、装置、计算机设备及存储介质 |
CN110377497A (zh) * | 2019-05-27 | 2019-10-25 | 深圳壹账通智能科技有限公司 | 代码检测方法、装置、计算机装置及存储介质 |
CN110489314A (zh) * | 2019-07-05 | 2019-11-22 | 中国平安人寿保险股份有限公司 | 模型异常检测方法、装置、计算机设备和存储介质 |
CN110543356A (zh) * | 2019-09-11 | 2019-12-06 | 深圳前海微众银行股份有限公司 | 异常任务检测方法、装置、设备及计算机存储介质 |
CN111552640A (zh) * | 2020-04-24 | 2020-08-18 | 北京字节跳动网络技术有限公司 | 一种代码检测方法、装置、设备及存储介质 |
Non-Patent Citations (2)
Title |
---|
M. H. Bhuyan 等.Network Anomaly Detection: Methods, Systems and Tools.《IEEE Communications Surveys & Tutorials》.2013,第16卷(第01期),303-336. * |
崔舒宁 等.建立抽象语法树模型评测C++代码.《计算机应用》.2018,(第z1期),183-185,191. * |
Also Published As
Publication number | Publication date |
---|---|
CN115757181A (zh) | 2023-03-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109684847B (zh) | 脚本漏洞的自动修复方法、装置、设备及存储介质 | |
US7624394B1 (en) | Software installation verification | |
EP3265916B1 (en) | A method for identifying a cause for a failure of a test | |
US9990501B2 (en) | Diagnosing and tracking product vulnerabilities for telecommunication devices via a database | |
CN109669844B (zh) | 设备故障处理方法、装置、设备和存储介质 | |
US11418534B2 (en) | Threat analysis system and threat analysis method | |
CN115757181B (zh) | 一种代码检测方法、装置、设备及可读存储介质 | |
CN109783128A (zh) | 代码改动通知方法、设备、存储介质及装置 | |
CN111190807B (zh) | 一种埋点测试方法及设备 | |
US10095512B2 (en) | Program development support device, non-transitory storage medium storing thereon computer-readable program development support program, and program development support method | |
CN110781091A (zh) | 应用程序的测试方法、装置、电子设备及存储介质 | |
US8327189B1 (en) | Diagnosing an incident on a computer system using a diagnostics analyzer database | |
CN111581211B (zh) | 数据表的更新方法、装置、设备及计算机可读存储介质 | |
US8090994B2 (en) | System, method, and computer readable media for identifying a log file record in a log file | |
CN110096442B (zh) | 代码调试方法、用户设备、存储介质及装置 | |
US20120310849A1 (en) | System and method for validating design of an electronic product | |
CN112559023A (zh) | 一种变更风险的预测方法、装置、设备及可读存储介质 | |
CN111966630B (zh) | 文件类型的检测方法、装置、设备和介质 | |
CN111124828B (zh) | 一种数据处理方法、装置、设备及存储介质 | |
JP4886404B2 (ja) | ソースコード修正優先度付けシステムおよびその優先度付け方法 | |
US8423831B2 (en) | System and method for performing auditing and correction | |
CN115758389A (zh) | 漏洞处理结果校验方法、装置、电子设备及存储介质 | |
CN106855804B (zh) | 代码变更管控方法及装置 | |
CN114281688A (zh) | 一种无码或低码的自动化用例管理方法和装置 | |
CN115129355B (zh) | 页面修复方法及其系统、计算机设备 |
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 |