CN111427769A - 一种代码质量检测方法、设备、服务器及可读存储介质 - Google Patents
一种代码质量检测方法、设备、服务器及可读存储介质 Download PDFInfo
- Publication number
- CN111427769A CN111427769A CN202010128292.2A CN202010128292A CN111427769A CN 111427769 A CN111427769 A CN 111427769A CN 202010128292 A CN202010128292 A CN 202010128292A CN 111427769 A CN111427769 A CN 111427769A
- Authority
- CN
- China
- Prior art keywords
- project
- codes
- code
- module
- tree
- 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
Links
Images
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/3604—Software analysis for verifying properties of programs
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明实施例公开了一种代码质量检测方法、设备、服务器及可读存储介质,其中,该方法包括:获取待测试的项目源代码对应的项目树,所述项目树包括多个模块文件;对所述项目树中各个模块文件中的代码进行过滤,并根据过滤后的所述项目树中各个模块文件中的代码确定所述各个模块文件之间的关联关系;根据所述各个模块文件之间的关联关系,从所述项目树中确定出关联度大于预设关联度阈值的目标模块文件;对所述目标模块文件中的代码进行分析,并根据分析结果确定所述项目源代码的质量。通过这种实施方式,可以自动化、智能化地分析代码,有助于提高代码质量检测的效率。
Description
技术领域
本发明涉及代码质量检测技术领域,尤其涉及一种代码质量检测方法、设备、服务器及可读存储介质。
背景技术
目前,针对项目代码质量的检测,在获取到待检测的项目代码后需要人工对项目代码进行分析以区分项目代码的结构以及指定项目代码中待分析的模块区域,从而根据人工确定的项目代码的结构和待分析的模块区域来检测项目代码质量。然而,这种方式在面对多个项目时需要大量的人员精力来对多个项目代码进行分析,工作量大,效率低,从而影响项目代码质量检测的效率。因此,如何更高效快速地进行代码分析,以提高项目代码质量检测的效率成为亟待解决的问题。
发明内容
本发明实施例提供了一种代码质量检测方法、设备、服务器及可读存储介质,可以自动化、智能化地分析代码,有助于提高代码质量检测的效率。
第一方面,本发明实施例提供了一种代码质量检测方法,包括:
获取待测试的项目源代码对应的项目树,所述项目树包括多个模块文件;
对所述项目树中各个模块文件中的代码进行过滤,并根据过滤后的所述项目树中各个模块文件中的代码确定所述各个模块文件之间的关联关系;
根据所述各个模块文件之间的关联关系,从所述项目树中确定出关联度大于预设关联度阈值的目标模块文件;
对所述目标模块文件中的代码进行分析,并根据分析结果确定所述项目源代码的质量。
进一步地,所述对所述项目树中各个模块文件中的代码进行过滤,包括:
获取所述项目树中各个模块文件中代码的语法格式;
根据所述项目树中各个模块文件中代码的语法格式确定通用语法关系;
根据所述通用语法关系对所述项目树中各个模块文件中的代码进行过滤处理。
进一步地,所述根据所述通用语法关系对所述项目树中各个模块文件中的代码进行过滤处理,包括:
根据所述通用语法关系确定与所述项目树中各个模块文件中的代码对应的语法树;
对所述语法树进行遍历得到遍历结果,并根据所述遍历结果从所述项目树的各个模块文件的代码中删除不满足预设质量条件的冗余代码。
进一步地,所述根据所述遍历结果从所述项目树的各个模块文件的代码中删除不满足预设质量条件的冗余代码,包括:
根据所述待测试的项目源代码建立语法规范性检测模型;
根据所述语法规范性检测模型对所述待测试的项目源代码进行检测,得到检测结果;
将所述遍历结果与所述检测结果进行比较,并根据比较结果从所述项目树的各个模块文件的代码中删除不满足预设质量条件的冗余代码。
进一步地,所述根据比较结果从所述项目树的各个模块文件的代码中删除不满足预设质量条件的冗余代码,包括:
如果比较结果为所述遍历结果中存在与所述检测结果不一致的冗余代码,则确定所述冗余代码不满足预设质量条件;
从所述项目树的各个模块文件的代码中删除所述冗余代码。
进一步地,所述根据过滤后的所述项目树中各个模块文件中的代码确定所述各个模块文件之间的关联关系,包括:
根据过滤后的所述项目树中各个模块文件中的代码,计算所述各个模块文件之间的关联度;
根据所述各个模块文件之间的关联度确定各个模块文件之间的关联关系。
进一步地,所述获取待测试的项目源代码对应的项目树,包括:
获取待测试的项目源代码;
对所述待测试的项目源代码进行分析,并确定出所述待测试的项目源代码的项目结构;
根据所述项目结构确定所述待测试的项目源代码对应的项目树。
第二方面,本发明实施例提供了一种代码质量检测设备,该代码质量检测设备包括用于执行上述第一方面的代码质量检测方法的单元。
第三方面,本发明实施例提供了一种服务器,包括处理器、输入设备、输出设备和存储器,所述处理器、输入设备、输出设备和存储器相互连接,其中,所述存储器用于存储支持代码质量检测设备执行上述方法的计算机程序,所述计算机程序包括程序,所述处理器被配置用于调用所述程序,执行上述第一方面的方法。
第四方面,本发明实施例提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行以实现上述第一方面的方法。
本发明实施例,通过获取待测试的项目源代码对应的项目树,对所述项目树中各个模块文件中的代码进行过滤,并根据过滤后的所述项目树中各个模块文件中的代码确定所述各个模块文件之间的关联关系,以根据所述各个模块文件之间的关联关系从所述项目树中确定出关联度大于预设关联度阈值的目标模块文件,从而对所述目标模块文件中的代码进行分析,以根据分析结果确定所述项目源代码的质量。通过这种实施方式,可以自动化、智能化地分析代码,有助于提高代码质量检测的效率。
附图说明
为了更清楚地说明本发明实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的一种代码质量检测方法的示意流程图;
图2是本发明实施例提供的一种代码质量检测设备的示意框图;
图3是本发明实施例提供的一种服务器的示意框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供的代码质量检测方法可以由一种代码质量检测设备执行,其中,所述代码质量检测设备可以设置在服务器上。在某些实施例中,所述代码质量检测设备可以安装在服务器上;在某些实施例中,所述代码质量检测设备可以在空间上独立于所述服务器;在某些实施例中,所述代码质量检测设备可以是所述服务器的部件,即所述服务器包括代码质量检测设备。
本发明实施例提供的代码质量检测方法可以在自动化构建前,通过对项目源代码进行分析得到待扫描的目标模块文件,并调用代码质量扫描工具对目标模块文件中的代码进行扫描,以根据扫描结果确定所述项目源代码的质量,从而大大缩短了构建过程和质量扫描过程。
在一个实施例中,代码质量检测设备可以获取待测试的项目源代码对应的项目树,所述项目树包括多个模块文件,并对所述项目树中各个模块文件中的代码进行过滤,以根据过滤后的所述项目树中各个模块文件中的代码确定所述各个模块文件之间的关联关系。所述代码质量检测设备可以根据所述各个模块文件之间的关联关系,从所述项目树中确定出关联度大于预设关联度阈值的目标模块文件,并对所述目标模块文件中的代码进行分析,以根据分析结果确定所述项目源代码的质量。通过这种实施方式,可以自动化、智能化地分析代码,有助于提高代码质量检测的效率。
下面结合附图对本发明实施例的代码质量检测方法进行示意性说明。
请参见图1,图1是本发明实施例提供的一种代码质量检测方法的示意流程图,如图1所示,该方法可以由代码质量检测设备执行,所述代码质量检测设备的具体解释如前所述,此处不再赘述。具体地,本发明实施例的所述方法包括如下步骤。
S101:获取待测试的项目源代码对应的项目树,所述项目树包括多个模块文件。
本发明实施例中,代码质量检测设备可以获取待测试的项目源代码对应的项目树,所述项目树包括多个模块文件。在某些实施例中,所述多个模块文件中的各个模块文件中包括不同代码。
在一个实施例中,代码质量检测设备在获取待测试的项目源代码对应的项目树时,可以获取待测试的项目源代码,并对所述待测试的项目源代码进行分析,确定出所述待测试的项目源代码的项目结构,以及根据所述项目结构确定所述待测试的项目源代码对应的项目树。在某些实施例中,所述项目结构包括但不限于项目源代码模块、项目构建工具、项目构建配置、项目自动编译文件等。可见,通过确定待测试的项目源代码的项目结构,可以根据项目结构中模块、工具、配置、文件等对项目源代码进行解析,以准确的定位分析所需要的代码在项目结构中的位置。
在一个实施例中,所述代码质量检测设备在对所述待测试的项目源代码进行分析,确定出所述待测试的项目源代码的项目结构时,可以调用预设的项目结构扫描工具对所述待测试的项目源代码进行扫描,以确定出所述待测试的项目源代码的项目结构。
S102:对所述项目树中各个模块文件中的代码进行过滤,并根据过滤后的所述项目树中各个模块文件中的代码确定所述各个模块文件之间的关联关系。
本发明实施例中,代码质量检测设备可以对所述项目树中各个模块文件中的代码进行过滤,并根据过滤后的所述项目树中各个模块文件中的代码确定所述各个模块文件之间的关联关系。
在一个实施例中,代码质量检测设备在对所述项目树中各个模块文件中的代码进行过滤时,可以获取所述项目树中各个模块文件中代码的语法格式,并根据所述项目树中各个模块文件中代码的语法格式确定通用语法关系,以及根据所述通用语法关系对所述项目树中各个模块文件中的代码进行过滤处理。
在一些实施例中,机器语言C、C++、Java、JS等这些不同的机器语言各自有各自特定的统称语法和语法格式,每种机器语言都可以根据这些语法和语法格式分为类似主谓宾这种划分的通用语法关系,通过各个机器语言的语法、语法格式和对应的通用语法关系可以编写出不同的应用程序。在某些实施例中,所述机器语言的语法包括方法名、返回值、修饰符、构造函数、运算规则、代码块等任意一种或多种,本发明实施例对各个机器语言的语法和语法格式不做具体限定。
在一个实施例中,代码质量检测设备在根据所述通用语法关系对所述项目树中各个模块文件中的代码进行过滤处理时,可以根据所述通用语法关系确定与所述项目树中各个模块文件中的代码对应的语法树,并对所述语法树进行遍历得到遍历结果,以及根据所述遍历结果从所述项目树的各个模块文件的代码中删除不满足预设质量条件的冗余代码。
例如,在所述语法规范性检测模型中传入一个文件路径,代码质量检测设备可以根据所述文件路径获取到待测试的项目源代码,如果从所述待测试的项目源代码中获取到方法名、返回值、修饰符、构造函数和代码块等,则可以根据所述方法名、返回值、修饰符、构造函数和代码块,按照通用语法关系确定出语法树的顶层,通过过滤顶层语法树得到一个语法树的各个节点(如MethodTree、ClassTree、BlockTree、ExpressionStatementTree等),然后根据项目源代码逻辑确定出语法树。
在一种实施方式中,代码质量检测设备在对所述语法树进行遍历时,可以对所述语法树中的每个节点的代码进行遍历检查,以得到对所述语法树中每个节点的代码进行遍历得到的遍历结果。在某些实施例中,所述遍历结果为对所述语法树中的每个节点的代码进行遍历得到的代码语句。
在一个实施例中,代码质量检测设备在根据所述遍历结果从所述项目树的各个模块文件的代码中删除不满足预设质量条件的冗余代码时,可以根据所述待测试的项目源代码建立语法规范性检测模型,并根据所述语法规范性检测模型对所述待测试的项目源代码进行检测得到检测结果,以及将所述遍历结果与所述检测结果进行比较,并根据比较结果从所述项目树的各个模块文件的代码中删除不满足预设质量条件的冗余代码。在某些实施例中,所述检测结果为根据规范性检测模型检测得到的代码语句。
在一种实施方式中,代码质量检测设备可以将对语法树中的每个节点的代码进行遍历检查得到的代码语句与通过所述法规范性检测模型对所述待测试的项目源代码进行检测得到的代码语句进行比较,并确定遍历检查得到的与通过所述法规范性检测模型对所述待测试的项目源代码进行检测得到的代码语句不一致的代码语句为冗余代码,并从所述项目树的各个模块文件的代码中删除所述冗余代码。
在某些实施例中,所述语法规范是开发者在使用Java等语言编写代码时在代码中所进行的合理的描写规范。例如,在通常开发中项目的名字中添加有公司的缩写,把这种开发规范进行整理,生成源代码的语法规范性检测模型。
在一个实施例中,代码质量检测设备在根据比较结果从所述项目树的各个模块文件的代码中删除不满足预设质量条件的冗余代码时,如果比较结果为所述遍历结果中存在与所述检测结果不一致的冗余代码,则可以确定所述冗余代码不满足预设质量条件,并从所述项目树的各个模块文件的代码中删除所述冗余代码。
在一种实施方式中,所述代码质量检测设备在根据所述语法规范性检测模型对所述待测试的项目源代码进行检测时,可以根据语法规范性检测模型对待测试的项目源代码进行一句句的的检查,如果检查到该待测试的项目源代码中的语法规范性检测模型与所述遍历结果不一致,则可以确定所述遍历结果中存在与所述检测结果不一致的冗余代码。
可见,通过这种实施方式,可以删除冗余代码,有助于提高代码质量检测的效率和准确率。
在一个实施例中,代码质量检测设备在根据过滤后的所述项目树中各个模块文件中的代码确定所述各个模块文件之间的关联关系时,可以根据过滤后的所述项目树中各个模块文件中的代码,计算所述各个模块文件之间的关联度,并根据所述各个模块文件之间的关联度确定各个模块文件之间的关联关系。
在一些实施例中,项目源代码的各个模块文件之间存在相关使用等关联关系,通过根据所述各个模块文件之间的关联度确定各个模块文件之间的关联关系,可以确定所述项目在进行构建时对哪些模块文件进行构建,以节省构建时间。
在一个实施例中,代码质量检测设备在根据过滤后的所述项目树中各个模块文件中的代码确定所述各个模块文件之间的关联关系时,可以对所述项目树中各个模块文件中的代码结构点进行分析,以确定所述项目树中的各个模块文件中代码的编写语言,并根据所述各个模块文件中代码的编码语言选取对应的语言分析工具对所述各个模块文件的代码进行分析,从而根据对所述各个模块文件中的代码进行分析得到的分析结果,确定各个模块文件之间的关联关系。在某些实施例中,所述代码结构点是指项目源代码的各个模块文件中的指定文件夹,在一个示例中,所述代码结构点可以为项目源代码的各个模块文件中的src文件夹,其中,所述src文件夹是源码文件。
在一个示例中,代码质量检测设备可以对所述项目树中各个模块文件中的代码结构点进行分析,如果代码质量检测设备确定出所述项目树中的各个模块文件中代码的编写语言为C语言,则可以根据所述各个模块文件中代码的编码语言C语言选取对应的C语言分析工具对所述各个模块文件的代码进行分析,从而根据对所述各个模块文件中的代码进行分析得到的分析结果,确定各个模块文件之间的关联关系。
S103:根据所述各个模块文件之间的关联关系,从所述项目树中确定出关联度大于预设关联度阈值的目标模块文件。
本发明实施例中,代码质量检测设备可以根据所述各个模块文件之间的关联关系,从所述项目树中确定出关联度大于预设关联度阈值的目标模块文件。在某些实施例中,所述目标模块文件包括一个或多个,本发明实施例在此不做具体限定。
在一个实施例中,代码质量检测设备在根据所述各个模块文件之间的关联关系,从所述项目树中确定出关联度大于预设关联度阈值的目标模块文件时,如果确定出关联度小于或等于预设关联度阈值,且通过代码分析工具对各模块文件进行识别确定出与预设格式匹配的模块文件,则可以删除所述关联度小于或等于预设关联度阈值,且与预设格式匹配的模块文件,以得到待扫描的目标模块文件。
例如,通过预设的自动化识别脚本自动识别出arr格式的模块文件,如果arr格式的模块文件与其他模块之间的关联度小于或等于预设关联度阈值,则可以将这部分模块文件准确定位出来进行删除,从而减小扫描范围,缩短扫描时间,有助于缩短代码质量分析的时间,提升代码质量的分析效率。
可见,通过这种实施方式,可以在确定出不需要的文件时将其过滤,删除无用的模块文件,得到待分析的目标模块文件,从而减小扫描范围,缩短扫描时间。
在一个实施例中,代码质量检测设备在确定出一个或多个目标模块文件之后,可以将一个或多个目标模块文件发送给自动化构建平台,以使自动化构建平台对所述一个或多个目标模块文件进行构建,以得到由一个或多个目标模块文件组成的应用程序。
S104:对所述目标模块文件中的代码进行分析,并根据分析结果确定所述项目源代码的质量。
本发明实施例中,代码质量检测设备可以对所述目标模块文件中的代码进行分析,并根据分析结果确定所述项目源代码的质量。
在一个实施例中,代码质量检测设备可以根据目标模块文件中代码的机器语言确定分析规则,并根据分析规则对所述目标模块文件中的代码进行分析,从而根据分析结果确定所述项目源代码的质量。在某些实施例中,所述分析规则可以包括但不限于各个机器语言中规定的代码撰写应当避免的规则或者用户自定义的规则等。
在一些实施例中,代码质量检测设备可以获取在对所述目标模块文件进行分析时确定出的满足分析规则的代码,并根据满足分析规则的代码的类别和数量确定所述项目源代码的质量。在一种实施方式中,代码质量检测设备可以根据预设的类别和数量与质量分数的对应关系,确定与所述项目源代码中满足分析规则的代码的类别和数量对应的质量分数,从而确定出所述项目源代码的质量。
在一个示例中,所述分析规则可以包括检测if语句、for循环、while循环等语句的表达式是否使用{},检测if语句嵌套的深度是否大于预设深度阈值(如if语句嵌套的深度不超过2层);检测代码中是否出现“空”的语句;检测是否出现重复的代码;检测是否包括没有使用的私有成员、本地变量、私有方法、方法参数(如参数定义了,但方法内没有使用此参数)等等。在此本发明实施例不做具体限定。
例如,代码质量检测设备在根据分析规则对所述目标模块文件中的代码进行分析时,如果分析得到的分析结果中包括所述目标模块文件中的代码中出现“空”的语句的数量为n,if语句嵌套的深度大于预设深度阈值2层的数量为m,则可以根据代码中出现“空”的语句的数量n,以及if语句嵌套的深度大于预设深度阈值2层的数量m,确定所述项目源代码的质量。
在一个实施例中,代码质量检测设备可以调用预设的代码质量扫描工具对所述目标模块文件中的代码进行扫描,并根据扫描结果确定所述项目源代码的质量。在某些实施例中,代码质量检查工具可以嵌入在代码库中,并可以持续更新,可以静态分析即可以在无需运行程序的情况下就报告错误。在某些实施例中,所述预设的代码质量扫描工具可以包括不同机器语言的代码质量扫描工具;在一个示例中,针对Java语言的代码质量扫描工具包括checkstyle。本发明实施例在此对各个机器语言的代码质量扫描工具不做具体限定。
在一个实施例中,代码质量检测设备在根据分析结果确定所述项目源代码的质量后,如果确定出存在代码质量小于预设阈值的代码,则可以确定对代码质量小于预设阈值的代码添加标识。通过这种实施方式,有助于后续开发者对添加了标识的代码进行修复,以加强项目源代码的质量。
本发明实施例中,代码质量检测设备可以获取待测试的项目源代码对应的项目树,所述项目树包括多个模块文件,通过对所述项目树中各个模块文件中的代码进行过滤,并根据过滤后的所述项目树中各个模块文件中的代码确定所述各个模块文件之间的关联关系,以及根据所述各个模块文件之间的关联关系,从所述项目树中确定出关联度大于预设关联度阈值的目标模块文件,从而对所述目标模块文件中的代码进行分析,并根据分析结果确定所述项目源代码的质量。通过这种实施方式,可以自动化、智能化地分析代码,有助于提高代码质量检测的效率。
本发明实施例还提供了一种代码质量检测设备,该代码质量检测设备用于执行前述任一项所述的方法的单元。具体地,参见图2,图2是本发明实施例提供的一种代码质量检测设备的示意框图。本实施例的代码质量检测设备包括:获取单元201、过滤单元202、确定单元203、扫描单元204。
获取单元201,用于获取待测试的项目源代码对应的项目树,所述项目树包括多个模块文件;
过滤单元202,用于对所述项目树中各个模块文件中的代码进行过滤,并根据过滤后的所述项目树中各个模块文件中的代码确定所述各个模块文件之间的关联关系;
确定单元203,用于根据所述各个模块文件之间的关联关系,从所述项目树中确定出关联度大于预设关联度阈值的目标模块文件;
扫描单元204,用于对所述目标模块文件中的代码进行分析,并根据分析结果确定所述项目源代码的质量。
进一步地,所述过滤单元202对所述项目树中各个模块文件中的代码进行过滤时,具体用于:
获取所述项目树中各个模块文件中代码的语法格式;
根据所述项目树中各个模块文件中代码的语法格式确定通用语法关系;
根据所述通用语法关系对所述项目树中各个模块文件中的代码进行过滤处理。
进一步地,所述过滤单元202根据所述通用语法关系对所述项目树中各个模块文件中的代码进行过滤处理时,具体用于:
根据所述通用语法关系确定与所述项目树中各个模块文件中的代码对应的语法树;
对所述语法树进行遍历得到遍历结果,并根据所述遍历结果从所述项目树的各个模块文件的代码中删除不满足预设质量条件的冗余代码。
进一步地,所述过滤单元202根据所述遍历结果从所述项目树的各个模块文件的代码中删除不满足预设质量条件的冗余代码时,具体用于:
根据所述待测试的项目源代码建立语法规范性检测模型;
根据所述语法规范性检测模型对所述待测试的项目源代码进行检测,得到检测结果;
将所述遍历结果与所述检测结果进行比较,并根据比较结果从所述项目树的各个模块文件的代码中删除不满足预设质量条件的冗余代码。
进一步地,所述过滤单元202根据比较结果从所述项目树的各个模块文件的代码中删除不满足预设质量条件的冗余代码时,具体用于:
如果比较结果为所述遍历结果中存在与所述检测结果不一致的冗余代码,则确定所述冗余代码不满足预设质量条件;
从所述项目树的各个模块文件的代码中删除所述冗余代码。
进一步地,所述过滤单元202根据过滤后的所述项目树中各个模块文件中的代码确定所述各个模块文件之间的关联关系时,具体用于:
根据过滤后的所述项目树中各个模块文件中的代码,计算所述各个模块文件之间的关联度;
根据所述各个模块文件之间的关联度确定各个模块文件之间的关联关系。
进一步地,所述获取单元201获取待测试的项目源代码对应的项目树时,具体用于:
获取待测试的项目源代码;
对所述待测试的项目源代码进行分析,并确定出所述待测试的项目源代码的项目结构;
根据所述项目结构确定所述待测试的项目源代码对应的项目树。
本发明实施例中,代码质量检测设备可以获取待测试的项目源代码对应的项目树,所述项目树包括多个模块文件,通过对所述项目树中各个模块文件中的代码进行过滤,并根据过滤后的所述项目树中各个模块文件中的代码确定所述各个模块文件之间的关联关系,以及根据所述各个模块文件之间的关联关系,从所述项目树中确定出关联度大于预设关联度阈值的目标模块文件,从而对所述目标模块文件中的代码进行分析,并根据分析结果确定所述项目源代码的质量。通过这种实施方式,可以自动化、智能化地分析代码,有助于提高代码质量检测的效率。
参见图3,图3是本发明实施例提供的一种服务器的示意框图。如图所示的本实施例中的服务器可以包括:一个或多个处理器301;一个或多个输入设备302,一个或多个输出设备303和存储器304。上述处理器301、输入设备302、输出设备303和存储器304通过总线305连接。存储器304用于存储计算机程序,所述计算机程序包括程序,处理器301用于执行存储器304存储的程序。其中,处理器301被配置用于调用所述程序执行:
获取待测试的项目源代码对应的项目树,所述项目树包括多个模块文件;
对所述项目树中各个模块文件中的代码进行过滤,并根据过滤后的所述项目树中各个模块文件中的代码确定所述各个模块文件之间的关联关系;
根据所述各个模块文件之间的关联关系,从所述项目树中确定出关联度大于预设关联度阈值的目标模块文件;
对所述目标模块文件中的代码进行分析,并根据分析结果确定所述项目源代码的质量。
进一步地,所述处理器301对所述项目树中各个模块文件中的代码进行过滤时,具体用于:
获取所述项目树中各个模块文件中代码的语法格式;
根据所述项目树中各个模块文件中代码的语法格式确定通用语法关系;
根据所述通用语法关系对所述项目树中各个模块文件中的代码进行过滤处理。
进一步地,所述处理器301根据所述通用语法关系对所述项目树中各个模块文件中的代码进行过滤处理时,具体用于:
根据所述通用语法关系确定与所述项目树中各个模块文件中的代码对应的语法树;
对所述语法树进行遍历得到遍历结果,并根据所述遍历结果从所述项目树的各个模块文件的代码中删除不满足预设质量条件的冗余代码。
进一步地,所述处理器301根据所述遍历结果从所述项目树的各个模块文件的代码中删除不满足预设质量条件的冗余代码时,具体用于:
根据所述待测试的项目源代码建立语法规范性检测模型;
根据所述语法规范性检测模型对所述待测试的项目源代码进行检测,得到检测结果;
将所述遍历结果与所述检测结果进行比较,并根据比较结果从所述项目树的各个模块文件的代码中删除不满足预设质量条件的冗余代码。
进一步地,所述处理器301根据比较结果从所述项目树的各个模块文件的代码中删除不满足预设质量条件的冗余代码时,具体用于:
如果比较结果为所述遍历结果中存在与所述检测结果不一致的冗余代码,则确定所述冗余代码不满足预设质量条件;
从所述项目树的各个模块文件的代码中删除所述冗余代码。
进一步地,所述处理器301根据过滤后的所述项目树中各个模块文件中的代码确定所述各个模块文件之间的关联关系时,具体用于:
根据过滤后的所述项目树中各个模块文件中的代码,计算所述各个模块文件之间的关联度;
根据所述各个模块文件之间的关联度确定各个模块文件之间的关联关系。
进一步地,所述处理器301获取待测试的项目源代码对应的项目树时,具体用于:
获取待测试的项目源代码;
对所述待测试的项目源代码进行分析,并确定出所述待测试的项目源代码的项目结构;
根据所述项目结构确定所述待测试的项目源代码对应的项目树。
本发明实施例中,服务器可以获取待测试的项目源代码对应的项目树,所述项目树包括多个模块文件,通过对所述项目树中各个模块文件中的代码进行过滤,并根据过滤后的所述项目树中各个模块文件中的代码确定所述各个模块文件之间的关联关系,以及根据所述各个模块文件之间的关联关系,从所述项目树中确定出关联度大于预设关联度阈值的目标模块文件,从而对所述目标模块文件中的代码进行分析,并根据分析结果确定所述项目源代码的质量。通过这种实施方式,可以自动化、智能化地分析代码,有助于提高代码质量检测的效率。
应当理解,在本发明实施例中,所称处理器301可以是中央处理单元(CenSralProcessing UniS,CPU),该处理器还可以是其他通用处理器、数字信号处理器(DigiSalSignal Processor,DSP)、专用集成电路(ApplicaSion Specific InSegraSed CircuiS,ASIC)、现成可编程门阵列(Field-Programmable GaSe Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
输入设备302可以包括触控板、麦克风等,输出设备303可以包括显示器(LCD等)、扬声器等。
该存储器304可以包括只读存储器和随机存取存储器,并向处理器301提供指令和数据。存储器304的一部分还可以包括非易失性随机存取存储器。例如,存储器304还可以存储设备类型的信息。
具体实现中,本发明实施例中所描述的处理器301、输入设备302、输出设备303可执行本发明实施例提供的代码质量检测方法的图1或图2所述的方法实施例中所描述的实现方式,也可执行本发明实施例图3所描述的代码质量检测设备的实现方式,在此不再赘述。
本发明实施例中还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现图1或图2所对应实施例中描述的代码质量检测方法,也可实现本发明图3所对应实施例的代码质量检测设备,在此不再赘述。
所述计算机可读存储介质可以是前述任一实施例所述的代码质量检测设备的内部存储单元,例如代码质量检测设备的硬盘或内存。所述计算机可读存储介质也可以是所述代码质量检测设备的外部存储设备,例如所述代码质量检测设备上配备的插接式硬盘,智能存储卡(SmarS Media Card,SMC),安全数字(Secure DigiSal,SD)卡,闪存卡(FlashCard)等。进一步地,所述计算机可读存储介质还可以既包括所述代码质量检测设备的内部存储单元也包括外部存储设备。所述计算机可读存储介质用于存储所述计算机程序以及所述代码质量检测设备所需的其他程序和数据。所述计算机可读存储介质还可以用于暂时地存储已经输出或者将要输出的数据。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个计算机可读存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,终端,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的计算机可读存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的部分实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。
Claims (10)
1.一种代码质量检测方法,其特征在于,包括:
获取待测试的项目源代码对应的项目树,所述项目树包括多个模块文件;
对所述项目树中各个模块文件中的代码进行过滤,并根据过滤后的所述项目树中各个模块文件中的代码确定所述各个模块文件之间的关联关系;
根据所述各个模块文件之间的关联关系,从所述项目树中确定出关联度大于预设关联度阈值的目标模块文件;
对所述目标模块文件中的代码进行分析,并根据分析结果确定所述项目源代码的质量。
2.根据权利要求1所述的方法,其特征在于,所述对所述项目树中各个模块文件中的代码进行过滤,包括:
获取所述项目树中各个模块文件中代码的语法格式;
根据所述项目树中各个模块文件中代码的语法格式确定通用语法关系;
根据所述通用语法关系对所述项目树中各个模块文件中的代码进行过滤处理。
3.根据权利要求2所述的方法,其特征在于,所述根据所述通用语法关系对所述项目树中各个模块文件中的代码进行过滤处理,包括:
根据所述通用语法关系确定与所述项目树中各个模块文件中的代码对应的语法树;
对所述语法树进行遍历得到遍历结果,并根据所述遍历结果从所述项目树的各个模块文件的代码中删除不满足预设质量条件的冗余代码。
4.根据权利要求3所述的方法,其特征在于,所述根据所述遍历结果从所述项目树的各个模块文件的代码中删除不满足预设质量条件的冗余代码,包括:
根据所述待测试的项目源代码建立语法规范性检测模型;
根据所述语法规范性检测模型对所述待测试的项目源代码进行检测,得到检测结果;
将所述遍历结果与所述检测结果进行比较,并根据比较结果从所述项目树的各个模块文件的代码中删除不满足预设质量条件的冗余代码。
5.根据权利要求4所述的方法,其特征在于,所述根据比较结果从所述项目树的各个模块文件的代码中删除不满足预设质量条件的冗余代码,包括:
如果比较结果为所述遍历结果中存在与所述检测结果不一致的冗余代码,则确定所述冗余代码不满足预设质量条件;
从所述项目树的各个模块文件的代码中删除所述冗余代码。
6.根据权利要求1-5任一项所述的方法,其特征在于,所述根据过滤后的所述项目树中各个模块文件中的代码确定所述各个模块文件之间的关联关系,包括:
根据过滤后的所述项目树中各个模块文件中的代码,计算所述各个模块文件之间的关联度;
根据所述各个模块文件之间的关联度确定各个模块文件之间的关联关系。
7.根据权利要求1所述的方法,其特征在于,所述获取待测试的项目源代码对应的项目树,包括:
获取待测试的项目源代码;
对所述待测试的项目源代码进行分析,并确定出所述待测试的项目源代码的项目结构;
根据所述项目结构确定所述待测试的项目源代码对应的项目树。
8.一种代码质量检测设备,其特征在于,包括用于执行如权利要求1-7任一项权利要求所述的方法的单元。
9.一种服务器,其特征在于,包括处理器、输入设备、输出设备和存储器,所述处理器、输入设备、输出设备和存储器相互连接,其中,所述存储器用于存储计算机程序,所述计算机程序包括程序,所述处理器被配置用于调用所述程序,执行如权利要求1-7任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行以实现权利要求1-7任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010128292.2A CN111427769A (zh) | 2020-02-27 | 2020-02-27 | 一种代码质量检测方法、设备、服务器及可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010128292.2A CN111427769A (zh) | 2020-02-27 | 2020-02-27 | 一种代码质量检测方法、设备、服务器及可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111427769A true CN111427769A (zh) | 2020-07-17 |
Family
ID=71547998
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010128292.2A Pending CN111427769A (zh) | 2020-02-27 | 2020-02-27 | 一种代码质量检测方法、设备、服务器及可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111427769A (zh) |
-
2020
- 2020-02-27 CN CN202010128292.2A patent/CN111427769A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110688307B (zh) | JavaScript代码检测方法、装置、设备和存储介质 | |
CN107045477B (zh) | 一种可进行多维度检测的质量评估平台 | |
JP2018026135A (ja) | 静的解析警告の効率的な運用のための原因ポイント解析のためのシステム及び方法 | |
CN113434395B (zh) | 测试用例的自动化生成方法、装置、设备及介质 | |
CN115269444B (zh) | 代码静态检测方法、装置及服务器 | |
CN114968807A (zh) | 代码检测方法、装置、电子设备及可读存储介质 | |
US10782942B1 (en) | Rapid onboarding of data from diverse data sources into standardized objects with parser and unit test generation | |
CN112131573A (zh) | 安全漏洞的检测方法、装置及存储介质 | |
CN111767213B (zh) | 数据库检查点的测试方法、装置、电子设备及存储介质 | |
CN113778852A (zh) | 一种基于正则表达式的代码分析方法 | |
CN112631944A (zh) | 基于抽象语法树的源码检测方法及装置、计算机存储介质 | |
CN112540925A (zh) | 新特性兼容性检测系统及方法、电子设备及可读存储介质 | |
CN111258562A (zh) | Java代码质量检查方法、装置、设备和存储介质 | |
CN113176999A (zh) | 基于分布式应用程序的软件测试方法及系统 | |
CN111966578A (zh) | 一种安卓兼容性缺陷修复效果的自动化评估方法 | |
CN112084108A (zh) | 一种测试脚本生成方法、装置及相关组件 | |
CN111427769A (zh) | 一种代码质量检测方法、设备、服务器及可读存储介质 | |
CN115438341A (zh) | 提取代码循环计数器的方法、装置、存储介质和电子设备 | |
CN114625633A (zh) | 用于接口测试的方法、系统和存储介质 | |
CN110321130B (zh) | 基于系统调用日志的不可重复编译定位方法 | |
CN113434430A (zh) | 一种sql查询语句性能检测方法和装置 | |
CN113051262A (zh) | 一种数据质检方法、装置、设备及存储介质 | |
CN111782220A (zh) | 一种文件的检测方法和装置 | |
CN116541305B (zh) | 一种异常检测的方法、装置、电子设备及存储介质 | |
CN116661758B (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 |