CN111078568B - 代码规范方法、装置、计算机设备和存储介质 - Google Patents
代码规范方法、装置、计算机设备和存储介质 Download PDFInfo
- Publication number
- CN111078568B CN111078568B CN201911324183.1A CN201911324183A CN111078568B CN 111078568 B CN111078568 B CN 111078568B CN 201911324183 A CN201911324183 A CN 201911324183A CN 111078568 B CN111078568 B CN 111078568B
- Authority
- CN
- China
- Prior art keywords
- node
- code
- defect
- rule
- normalized
- 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
- 238000000034 method Methods 0.000 title claims abstract description 65
- 230000007547 defect Effects 0.000 claims abstract description 124
- 238000012986 modification Methods 0.000 claims abstract description 82
- 230000004048 modification Effects 0.000 claims abstract description 82
- 238000010606 normalization Methods 0.000 claims abstract description 81
- 238000012545 processing Methods 0.000 claims abstract description 35
- 238000001514 detection method Methods 0.000 claims description 24
- 238000012937 correction Methods 0.000 claims description 20
- 238000004590 computer program Methods 0.000 claims description 17
- 238000011161 development Methods 0.000 claims description 10
- 239000003607 modifier Substances 0.000 claims description 5
- 230000001960 triggered effect Effects 0.000 claims 2
- 238000010586 diagram Methods 0.000 description 13
- 230000008439 repair process Effects 0.000 description 4
- 230000000694 effects Effects 0.000 description 3
- 238000011425 standardization method Methods 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000012552 review Methods 0.000 description 1
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
- G06F11/3608—Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
-
- 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
-
- 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/362—Software debugging
- G06F11/3624—Software debugging by performing operations on the source code, e.g. via a compiler
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02P—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN THE PRODUCTION OR PROCESSING OF GOODS
- Y02P90/00—Enabling technologies with a potential contribution to greenhouse gas [GHG] emissions mitigation
- Y02P90/30—Computing systems specially adapted for manufacturing
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Stored Programmes (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请涉及一种代码规范方法、装置、计算机设备和存储介质,计算机设备获取待规范代码文件,并根据预设的规范规则对该待规范代码文件进行分析,以获取待规范代码文件中缺陷代码的修改命令,然后计算机设备根据缺陷代码的修改命令,对缺陷代码进行规范化处理。该方法中,利用计算机极快的处理速度,替代手工的人力消耗,使得代码规范化更容易落实到实践项目中,不会耗费人力成本。且可以精准、快速地将待规范代码文件与该规范规则进行对比,提高了代码规范化的效率和准确率。
Description
技术领域
本申请涉及计算机技术领域,特别是涉及一种代码规范方法、装置、计算机设备和存储介质。
背景技术
程序的开发离不开代码,而规范化的代码有助于提高程序的正确性、可读性和可维护性。
目前,对代码进行规范化方法主要包括:先通过一些检测工具对代码的规范性进行检测,以检测出不符合规范的代码,例如,常见的检测工具可以是诸如“CheckStyle”、“Lint”等工具。之后,基于这些检测工具检测到的不符合规范的代码,开发人员进行手动修正,最终得到规范化的代码。
但是,现有的对代码进行规范化方法存在效率和准确率低下的问题。
发明内容
基于此,有必要针对上述技术问题,提供一种代码规范方法、装置、计算机设备和存储介质。
第一方面,本申请实施例提供一种代码规范方法,该方法包括:
获取待规范代码文件;
根据预设的规范规则对待规范代码文件进行分析,获取待规范代码文件中缺陷代码的修改命令;规范规则用于表征所有代码的规范性规则;
根据缺陷代码的修改命令,对缺陷代码进行规范化处理。
在其中一个实施例中,上述根据预设的规范规则对待规范代码文件进行分析,获取待规范代码文件中缺陷代码的修改命令,包括:
对待规范代码文件进行语法解析,生成抽象语法树;
根据规范规则,分析抽象语法树的各个节点,得到节点规范性分析结果;
根据节点规范性分析结果,确定缺陷代码的修改命令。
在其中一个实施例中,上述根据规范规则,分析抽象语法树的各个节点,得到节点规范性分析结果,包括:
根据规范规则,以预设顺序遍历分析抽象语法树的各个节点,得到抽象语法树中每个节点的节点规范性分析结果;预设顺序至少包括从抽象语法树的根节点到叶节点。
在其中一个实施例中,上述根据规范规则,以预设顺序遍历分析抽象语法树的节点,得到抽象语法树每个节点的节点规范性分析结果,包括:
从规范规则中,确定抽象语法树的当前节点的类型对应的目标规范规则;
分析当前节点的属性信息与目标规范规则的对比结果;
根据对比结果,确定当前节点的节点规范性分析结果。
在其中一个实施例中,上述规范规则包括抽象语法树的各节点出现的次数、各节点代表的代码文本的长度、各节点的上一个节点的期望条件和下一个节点的期望条件中的至少一个。
在其中一个实施例中,上述缺陷代码的修改命令中包括缺陷代码的位置信息和修正信息;
则上述根据缺陷代码的修改命令,对缺陷代码进行规范化处理,包括:
根据修正信息对位置信息处的缺陷代码进行修正。
在其中一个实施例中,在上述获取待规范代码文件中缺陷代码的修改命令之后,该方法包括:
将缺陷代码的修改命令存储至待修改队列中;
则上述根据缺陷代码的修改命令,对缺陷代码进行规范化处理,包括:
若待规范代码文件中所有的缺陷代码的修改命令全部存储至待修改队列中,运行待修改队列中的修改命令,对所有的缺陷代码进行规范化处理。
第二方面,本申请实施例提供一种代码规范装置,该装置包括:
获取模块,用于获取待规范代码文件;
分析模块,用于根据预设的规范规则对待规范代码文件进行分析,获取待规范代码文件中缺陷代码的修改命令;规范规则用于表征所有代码的规范性规则;
处理模块,用于根据缺陷代码的修改命令,对缺陷代码进行规范化处理。
第三方面,本申请实施例提供一种计算机设备,包括存储器和处理器,存储器存储有计算机程序,处理器执行计算机程序时实现上述第一方面实施例提供的任一项方法的步骤。
第四方面,本申请实施例提供一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述第一方面实施例提供的任一项方法的步骤。
本申请实施例提供的一种代码规范方法、装置、计算机设备和存储介质,计算机设备获取待规范代码文件,并根据预设的规范规则对该待规范代码文件进行分析,以获取待规范代码文件中缺陷代码的修改命令,然后计算机设备根据缺陷代码的修改命令,对缺陷代码进行规范化处理。该方法中,利用计算机极快的处理速度,替代手工的人力消耗,从对待规范代码文件中缺陷代码的查找到对缺陷代码的修正,均为计算机设备自动处理,使得代码规范化更容易落实到实践项目中,不会耗费人力成本。且,计算机设备是根据预设的规范规则分析待规范代码文件,该规范规则中包括了所有代码的规范性规则这样,可以精准、快速地将待规范代码文件与该规范规则进行对比,提高了代码规范化的效率和准确率。
附图说明
图1为一个实施例提供的一种代码规范方法的应用环境图;
图2为一个实施例提供的一种代码规范方法的流程示意图;
图3为一个实施例提供的一种代码规范检测工具启动示意图;
图4为一个实施例提供的一种代码规范方法的流程示意图;
图5为一个实施例提供的一种设定规范规则的类图;
图6为一个实施例提供的一种遍历抽象语法书节点示意图;
图7为一个实施例提供的一种代码规范方法的流程示意图;
图7a为一个实施例提供的一种规范化处理结果示意图;
图7b为一个实施例提供的一种规范化处理结果示意图;
图7c为一个实施例提供的一种规范化处理结果示意图;
图7d为一个实施例提供的一种规范化处理结果示意图;
图8为一个实施例提供的一种代码规范装置的结构框图;
图9为一个实施例提供的一种代码规范装置的结构框图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
在应用程序开发过程中,随着开发团队规模的增大,代码规范就尤为显得重要。为了保证代码的规范性,实际应用中,会通过一些检测工具对代码的规范性进行检测,例如,业内的“CheckStyle”、“Lint”等工具,可以帮助开发团队检阅、复查代码的规范性。
但是,以上现有的检测工具都只是发现问题,并没有解决问题。也就是说通过这些检测工具定位出不符合规范的代码后,还是需要开发人员自行进行修正,使代码规范化。当面对代码量已经达到百万行级别的开发项目,这些检测工具一次全量的代码检测可以发现数千个问题。这种情况下,如果仍然依靠开发人员来完成这些问题的修复,就需要耗费大量的人力和时间,且随着项目不断开发壮大,就不断有新的问题会出现,每个版本迭代后都需要耗费资源来处理代码规范的问题,严重浪费了人力资源。另外,对于每次检测工具发现的数千个问题,开发人员手动进行修复时,修复结果的准确性更加难以保证。
基于此,本申请实施例提供一种代码规范方法、装置、计算机设备和存储介质,能够解决以上技术问题。本申请实施例提供一种代码规范方法提供一种自动规范化代码的工具,可以自动检测代码规范问题,且自动修复发现的问题。
图1为本申请提供一种代码规范方法的应用环境,如图1所示,该应用环境中,计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储代码规范方法的数据。该计算机设备的网络接口用于与外部的其他设备通过网络连接通信。该计算机程序被处理器执行时以实现一种代码规范方法。
下面将通过实施例并结合附图具体地对本申请的技术方案以及本申请的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。需要说明的是,本申请提供的一种代码规范方法,图2-图7的执行主体为计算机设备,其中,其执行主体还可以是代码规范装置,其中该装置可以通过软件、硬件或者软硬件结合的方式实现成为计算机设备的部分或者全部。
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。
在一个实施例中,图2提供了一种代码规范方法,本实施例涉及的是计算机设备获取待规范代码文件后,自动对待规范代码文件进行分析,以确定待规范代码文件中缺陷代码的修改命令,然后根据缺陷代码的修改命令,自动对缺陷代码进行规范化处理的具体过程,如图2所示,所述方法包括:
S101,获取待规范代码文件。
待规范代码文件指的是当前需要进行规范性检测并修复的代码文件。
实际应用中,计算机设备可以通过代码规范性检测的工具实现自动对待规范代码文件进行分析,自动确定出待规范代码文件中缺陷代码的修改命令,然后根据缺陷代码的修改命令,自动对缺陷代码进行规范化处理。
示例地,假设开发人员使用集成开发环境(Integrated DevelopmentEnvironment,IDE)作为代码编辑器,即待规范代码文件为当前IDE中的代码文本。基于此,实践中,可将代码规范性检测的工具嵌入到IDE中,并在IDE的用户界面设置一个该工具的启动入口,如图3所示,“javaFormatting”按钮即为代码规范性检测的工具的启动入口。然后,开发人员在IDE中编辑完所有代码文本后,通过触发“javaFormatting”按钮,运行代码规范性检测的工具,此时,代码规范性检测的工具就会读取IDE中的代码文件,此过程相当于,计算机设备获取了待规范代码文件。
S102,根据预设的规范规则对待规范代码文件进行分析,获取待规范代码文件中缺陷代码的修改命令;规范规则用于表征所有代码的规范性规则。
其中,规范规则为预先根据实际情况设定的代码规范性规则,该规范规则可以是针对所有代码的通用规则,也可以是针对性的对部分项目代码的规则,对此,本实施例不作限定。
基于上述规范规则,计算机设备对获取的待规范代码文件进行分析,例如,分析该待规范代码文件中是否存在不符合该规范规则的代码。
计算机设备分析完所有待规范代码文件后,获取待规范代码文件中缺陷代码的修改命令,也即是说,计算机设备若分析到待规范代码文件中存在不符合该规范规则的代码,就会将这些不符合规范规则的代码确定为缺陷代码,并生成针对该缺陷代码的修改命令。顺理可知,该缺陷代码的修改命令就是用于对这些不符合规范规则的代码进行修正的指令。
S103,根据缺陷代码的修改命令,对缺陷代码进行规范化处理。
基于上述计算机设备获取的缺陷代码的修改命令,计算机设备对缺陷代码进行规范化处理。其中,规范化处理指的就是将缺陷代码的错误信息进行修正。例如,将不符合规范的数组定义修改为符合规范的数组定义、将一些无意义的空语句删除、将缺失的常量修饰符添加上、对过长的单行语句进行换行等,本实施例对此不作限定。
本实施例提供的代码规范方法,计算机设备获取待规范代码文件,并根据预设的规范规则对该待规范代码文件进行分析,以获取待规范代码文件中缺陷代码的修改命令,然后计算机设备根据缺陷代码的修改命令,对缺陷代码进行规范化处理。该方法中,利用计算机极快的处理速度,替代手工的人力消耗,从对待规范代码文件中缺陷代码的查找到对缺陷代码的修正,均为计算机设备自动处理,使得代码规范化更容易落实到实践项目中,不会耗费人力成本。且,计算机设备是根据预设的规范规则分析待规范代码文件,该规范规则中包括了所有代码的规范性规则这样,可以精准、快速地将待规范代码文件与该规范规则进行对比,提高了代码规范化的效率和准确率。
下面对计算机设备获取缺陷代码的修改命令的过程进行具体说明,则在以上实施例的基础上,本申请实施例还提供了一种代码规范方法,如图4所示,上述S102步骤包括:上述根据预设的规范规则对待规范代码文件进行分析,获取待规范代码文件中缺陷代码的修改命令,包括:
S201,对待规范代码文件进行语法解析,生成抽象语法树。
计算机设备在对待规范代码文件进行分析时,可以将该待规范代码文件转换为对应的抽象语法树,其中,抽象语法树是源代码的抽象语法结构的树状表示,树上的每个节点都表示源代码中的一种结构。
实际应用中,计算机设备生成抽象语法树的可以是通过编译原理的词法分析和语法分析来完成,本实施例对此不限定,只要将待规范代码文件生成了抽象语法树即可。
S202,根据规范规则,分析抽象语法树的各个节点,得到节点规范性分析结果。
将待规范代码文件生成抽象语法树后,计算机设备分析的就是抽象语法树的各节点了。相应地,规范规则可以是看作是分析语法树的规则,即实际应用中,开发人员根据开发团队自身的代码规范,编写分析语法树的规则。
可选地,该规范规则包括抽象语法树的各节点出现的次数、各节点代表的代码文本的长度、各节点的上一个节点的期望条件和下一个节点的期望条件中的至少一个。
其中,该分析语法树的规则中包括分析各节点出现的次数、各节点代表的代码文本的长度,以及分析各节点的上一个节点的期望条件和下一个节点的期望条件是否符合规范。
图5提供了一种设定规范规则的类图,该图中以举例形式列举了几种不符合规则的缺陷代码的常见类型,例如包括:数组括号位置错位,多余空行错误,常量缺少静态修饰符错误等。
可选地,提供一种S202步骤的可实现方式,该实现方式包括:计算机设备根据规范规则,以预设顺序遍历分析抽象语法树的各个节点,得到抽象语法树中每个节点的节点规范性分析结果;预设顺序至少包括从抽象语法树的根节点到叶节点。
其中,计算机设备分析抽象语法树时,与预设顺序遍历该抽象语法树上的各节点。例如,该预设顺序为从抽象语法树的根节点到叶节点,具体地,从根节点到叶节点时,包括以包节点(package)、类节点(class)、成员变量节点(field)、方法节点(method)、局部变量节点(variable)、语句节点(statement)的顺序逐个访问分析节点。当然,分析时,对于同级的节点可以交换顺序,但是对于上下级的要依据顺序进行访问。
其中,计算机设备遍历分析抽象语法树的各个节点的顺序包括两种,一种是,先以规则为参照,依次访问分析各节点;另外一种是以节点为参照,依次根据各规则分析某一个节点。
图6提供一种访问顺序,从图6中可看出分析完节点p后,开始访问分析p的下一个节点q;若q不存在,表示p已经是最后一个节点了,则终止流程;若q存在,则查找规范规则中的各条规则,依次查找,存在的规则要对q进行分析,不存在的继续查找下一条,直到所有规则查找完成,完成对该q节点的分析。
可见,计算机设备根据规范规则,遍历分析抽象语法树中各节点,可依次得到各节点的规范性分析结果。
S203,根据节点规范性分析结果,确定缺陷代码的修改命令。
基于上述获取的抽象语法树上各节点的节点规范性分析结果,计算机设备将分析结果中不满足规范规则的,确定为缺陷代码,并生成缺陷代码的修改命令。
本实施例提供的代码规范方法,通过将待规范代码文件转换为抽象语法树,然后针对抽象语法树的各节点进行分析,以各节点的分析结果确定待规范文件代码中的缺陷代码的修改命令,这样可以更加准确、快速、全面地完成对待规范文件中缺陷代码的检测。
对于上述计算机设备根据规范规则,以预设顺序遍历分析抽象语法树的节点,得到抽象语法树每个节点的节点规范性分析结果的过程,提供一种实施例,如图7所示,该实施例包括:
S301,从规范规则中,确定抽象语法树的当前节点的类型对应的目标规范规则。
需要说明的是,规范规则中具有很多条规则,每条规则的内容均不同,那么,各条规则所关心的节点类型也不同,即规范规则中各条规则对应不同类型的节点。
基于此,计算机设备在针对抽象语法树中的各节点进行访问分析时,需要先确定每一个节点对应的规范规则。即计算机设备需要从规范规则中,确定抽象语法树的当前节点的类型对应的目标规范规则。
例如,规范规则中某个规则所关心的节点类型可以为package、class、field、method、variable、statement中部分或全部,那么在对其中某个节点进行分析时,需要确定出该节点的类型对应的规范规则。
S302,分析当前节点的属性信息与目标规范规则的对比结果。
确定了当前节点的目标规范规则后,分析该当前节点的属性信息与目标规范规则之间的对比结果。
例如,计算机设备判断当前节点的属性是否匹配目标规范规则指定的条件,包括:判断当前节点出现的次数、当前节点代表的代码文本的长度、当前节点的上一个节点是否符合期望、当前节点的下一个节点是否符合期望等。
S303,根据对比结果,确定当前节点的节点规范性分析结果。
对比结果包括当前节点的属性信息符合目标规范规则,或者当前节点的属性信息不符合目标规范规则两种。对于符合目标规范规则的结束流程,对于不符合目标规范规则的,计算机设备将该当前节点具体不符合哪条规范规则,不符合的原因等确定为当前节点的节点规范性分析结果。
在实际应用中,根据该当前节点的节点规范性分析结果,可生成对应的缺陷代码修改命令,即生成修改该当前节点属性信息的指令,这样计算机设备就可以根据修改命令对当前节点中的缺陷代码进行规范化。
本实施例提供的代码规范方法,通过先确定出各节点的目标规范规则,在对各节点分析时,只分析目标规范规则与节点属性的对比,提高了计算机设备分析待规范代码文件的效率,节省了处理资源。
下面对计算机设备根据缺陷代码的修改命令,对缺陷代码进行规范化处理的过程,提供实施例进行具体说明。
则在一个实施例中,计算机设备获取的各缺陷代码的修改命令中包括缺陷代码的位置信息和修正信息;则计算机设备根据缺陷代码的修改命令,对缺陷代码进行规范化处理,包括:根据修正信息对该位置信息处的缺陷代码进行修正。
仍以上文实施例中所描述的将代码规范性检测的工具嵌入到IDE中为例,即计算机设备在接收到外界触发代码规范性检测的工具后,运行代码规范性检测的工具,代码规范性检测的工具先分析待规范代码文件获取缺陷代码的修改命令,然后根据修改命令将不符合规范的缺陷代码进行修正。
具体地,代码规范性检测的工具在运行后,生成的缺陷代码的修改命令中包括缺陷代码的位置信息和修正信息,以便计算机设备根据修正信息对该位置信息处的缺陷代码进行修正。
例如,提供几种规范化处理后结果的示意图,其中,图7a为修改了不符合规范的数组定义;图7b为删除无意义的空语句;图7c为添加缺失的常量修饰符;图7d为对过长的单行语句进行换行。
本实施例中,计算机设备根据生成的缺陷代码修改命令,自动修改缺陷代码,对不符合规范的代码进行规范化,利用计算机极快的处理速度,替代手工的人力消耗,使代码规范化更加准确和高效。
在另外一个实施例中,上述计算机设备获取待规范代码文件中缺陷代码的修改命令之后,将缺陷代码的修改命令存储至待修改队列中;则计算机设备根据缺陷代码的修改命令,对缺陷代码进行规范化处理,包括:若待规范代码文件中所有的缺陷代码的修改命令全部存储至待修改队列中,运行待修改队列中的修改命令,对所有的缺陷代码进行规范化处理。
其中,在计算机设备对待规范代码文件进行规范性检测时,设定一个待修改队列,并将根据检测到的不符合规范的代码生成的缺陷代码修改命令存储到待修改队列中,且,计算机设备要在将所有抽象语法树节点检测完成后,也就是待规范代码文件中所有的缺陷代码的修改命令全部存储至待修改队列中后,再从待修改队列中读取命令,并执行对缺陷代码的规范化处理。
本实施例中之所以在所有访问节点结束后才执行修改命令,是因为如果在计算机设备遍历中途就执行修改命令修改了抽象语法树节点,这样,会影响抽象语法树结构和节点的顺序,导致读取下一个节点时可能会出现不匹配的异常。因此,本实施例在所有的缺陷代码的修改命令全部存储至待修改队列中后在执行修改命令,避免了这种异常情况。
另外,从对待规范代码文件从检测到修正全过程执行完成后,计算机设备还可以多重复进行几次,直到待修改队列中没有存储缺陷代码的修改命令为止,表示该待规范代码文件完成符合了规范规则。且该重复步骤可以消除规则与规则之间的相互影响,避免在修正过程中引起新缺陷。
应该理解的是,虽然图2-7的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2-7中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,如图8所示,提供了一种代码规范装置,该装置包括:获取模块10、分析模块11和处理模块12,其中,
获取模块10,用于获取待规范代码文件;
分析模块11,用于根据预设的规范规则对待规范代码文件进行分析,获取待规范代码文件中缺陷代码的修改命令;规范规则用于表征所有代码的规范性规则;
处理模块12,用于根据缺陷代码的修改命令,对缺陷代码进行规范化处理。
在一个实施例中,提供了一种代码规范装置,如图9所示,上述分析模块11包括:生成单元111、分析单元112和确定单元113,其中,
生成单元111,用于对待规范代码文件进行语法解析,生成抽象语法树;
分析单元112,用于根据规范规则,分析抽象语法树的各个节点,得到节点规范性分析结果;
确定单元113,用于根据节点规范性分析结果,确定缺陷代码的修改命令。
在一个实施例中,分析单元112具体用于根据规范规则,以预设顺序遍历分析抽象语法树的各个节点,得到抽象语法树中每个节点的节点规范性分析结果;预设顺序至少包括从抽象语法树的根节点到叶节点。
在其中一个实施例中,上述分析单元112还具体用于从规范规则中,确定抽象语法树的当前节点的类型对应的目标规范规则;分析当前节点的属性信息与目标规范规则的对比结果;根据对比结果,确定当前节点的节点规范性分析结果。
在一个实施例中,上述规范规则包括抽象语法树的各节点出现的次数、各节点代表的代码文本的长度、各节点的上一个节点的期望条件和下一个节点的期望条件中的至少一个。
在一个实施例中,上述缺陷代码的修改命令中包括缺陷代码的位置信息和修正信息;则处理模块12用于根据修正信息对位置信息处的缺陷代码进行修正。
在一个实施例中,该装置包括存储模块,用于将缺陷代码的修改命令存储至待修改队列中;上述处理模块12,具体用于若待规范代码文件中所有的缺陷代码的修改命令全部存储至待修改队列中,运行待修改队列中的修改命令,对所有的缺陷代码进行规范化处理。
上述实施例提供的所有代码规范装置,其实现原理和技术效果与上述代码规范方法实施例类似,在此不再赘述。
关于代码规范装置的具体限定可以参见上文中对于代码规范方法的限定,在此不再赘述。上述代码规范装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如上述图1所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种代码规范方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,上述图1中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现以下步骤:
获取待规范代码文件;
根据预设的规范规则对待规范代码文件进行分析,获取待规范代码文件中缺陷代码的修改命令;规范规则用于表征所有代码的规范性规则;
根据缺陷代码的修改命令,对缺陷代码进行规范化处理。
上述实施例提供的一种计算机设备,其实现原理和技术效果与上述方法实施例类似,在此不再赘述。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:
获取待规范代码文件;
根据预设的规范规则对待规范代码文件进行分析,获取待规范代码文件中缺陷代码的修改命令;规范规则用于表征所有代码的规范性规则;
根据缺陷代码的修改命令,对缺陷代码进行规范化处理。
上述实施例提供的一种计算机可读存储介质,其实现原理和技术效果与上述方法实施例类似,在此不再赘述。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
Claims (10)
1.一种代码规范方法,其特征在于,所述方法包括:
获取待规范代码文件;包括:在检测到代码规范性检测的工具的启动入口被触发时,运行所述代码规范性检测的工具,以通过所述代码规范性检测的工具读取集成开发环境中的代码文件,得到所述待规范代码文件;
根据预设的规范规则对所述待规范代码文件进行分析,获取所述待规范代码文件中缺陷代码的修改命令;所述规范规则用于表征所有代码的规范性规则;包括:对所述待规范代码文件进行语法解析,生成抽象语法树;根据所述规范规则,分析所述抽象语法树的各个节点,得到节点规范性分析结果;根据所述节点规范性分析结果,确定所述缺陷代码的修改命令;其中,所述根据所述规范规则,分析所述抽象语法树的各个节点,得到节点规范性分析结果,包括:根据所述规范规则,以预设顺序遍历分析所述抽象语法树的各个节点,得到所述抽象语法树中每个节点的节点规范性分析结果;所述预设顺序至少包括从所述抽象语法树的根节点到叶节点;其中,所述规范规则包括所述抽象语法树的各节点出现的次数、各节点代表的代码文本的长度、各节点的上一个节点的期望条件和下一个节点的期望条件中的至少一个;所述抽象语法树的根节点到叶节点的预设顺序包括:包节点、类节点、成员变量节点、方法节点、局部变量节点、语句节点的顺序;所述以预设顺序遍历分析所述抽象语法树的各个节点,包括:以所述规范规则为参照,依次访问各个节点,或者,以各个节点为参照,依次根据所述规范规则分析各个节点;
根据所述缺陷代码的修改命令,对所述缺陷代码进行规范化处理;
其中,所述缺陷代码的修改命令中包括所述缺陷代码的位置信息和修正信息;所述根据所述缺陷代码的修改命令,对所述缺陷代码进行规范化处理,包括:根据所述修正信息对所述位置信息处的缺陷代码进行修正;所述规范化处理包括将不符合规范的数组定义修改为符合规范的数组定义、删除无意义的空语句、添加缺失的常量修饰符和对长单行语句进行换行的修正处理中的至少一种。
2.根据权利要求1所述的方法,其特征在于,所述根据所述规范规则,以预设顺序遍历分析所述抽象语法树的节点,得到所述抽象语法树每个节点的节点规范性分析结果,包括:
从所述规范规则中,确定所述抽象语法树的当前节点的类型对应的目标规范规则;
分析所述当前节点的属性信息与所述目标规范规则的对比结果;
根据所述对比结果,确定所述当前节点的节点规范性分析结果。
3.根据权利要求1-2任一项所述的方法,其特征在于,在所述获取所述待规范代码文件中缺陷代码的修改命令之后,所述方法包括:
将所述缺陷代码的修改命令存储至待修改队列中;
则所述根据所述缺陷代码的修改命令,对所述缺陷代码进行规范化处理,包括:
若所述待规范代码文件中所有的缺陷代码的修改命令全部存储至所述待修改队列中,运行所述待修改队列中的修改命令,对所有的缺陷代码进行规范化处理。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括:
多次执行对所述缺陷代码进行规范化处理的步骤,直至所述修改队列中没有存储缺陷代码的修改命令为止。
5.根据权利要求1所述的方法,其特征在于,所述规范规则为针对所述代码的通用规则,或,针对部分项目代码的规则。
6.根据权利要求1所述的方法,其特征在于,所述抽象语法树通过编译原理的词法分析和语法分析得到。
7.根据权利要求2所述的方法,其特征在于,所述根据所述对比结果,确定所述当前节点的节点规范性分析结果,包括:
若所述当前节点不符合目标规范规则,则根据所述当前节点所不符合的规范规则和所不符合的原因作为所述当前节点的节点规范性分析结果。
8.一种代码规范装置,其特征在于,所述装置包括:
获取模块,用于获取待规范代码文件;具体用于:在检测到代码规范性检测的工具的启动入口被触发时,运行所述代码规范性检测的工具,以通过所述代码规范性检测的工具读取集成开发环境中的代码文件,得到所述待规范代码文件;
分析模块,用于根据预设的规范规则对所述待规范代码文件进行分析,获取所述待规范代码文件中缺陷代码的修改命令;所述规范规则用于表征所有代码的规范性规则;所述分析模块包括:生成单元,用于对所述待规范代码文件进行语法解析,生成抽象语法树;分析单元,用于根据所述规范规则,分析所述抽象语法树的各个节点,得到节点规范性分析结果;确定单元,用于根据所述节点规范性分析结果,确定所述缺陷代码的修改命令;其中,所述分析单元具体用于:根据所述规范规则,以预设顺序遍历分析所述抽象语法树的各个节点,得到所述抽象语法树中每个节点的节点规范性分析结果;所述预设顺序至少包括从所述抽象语法树的根节点到叶节点;其中,所述规范规则包括所述抽象语法树的各节点出现的次数、各节点代表的代码文本的长度、各节点的上一个节点的期望条件和下一个节点的期望条件中的至少一个;所述抽象语法树的根节点到叶节点的预设顺序包括:包节点、类节点、成员变量节点、方法节点、局部变量节点、语句节点的顺序;所述分析单元具体用于:以所述规范规则为参照,依次访问各个节点,或者,以各个节点为参照,依次根据所述规范规则分析各个节点;
处理模块,用于根据所述缺陷代码的修改命令,对所述缺陷代码进行规范化处理;
其中,所述缺陷代码的修改命令中包括所述缺陷代码的位置信息和修正信息;所述处理模块,具体用于根据所述修正信息对所述位置信息处的缺陷代码进行修正;
所述规范化处理包括将不符合规范的数组定义修改为符合规范的数组定义、删除无意义的空语句、添加缺失的常量修饰符和对长单行语句进行换行的修正处理中的至少一种。
9.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7中任一项所述方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911324183.1A CN111078568B (zh) | 2019-12-20 | 2019-12-20 | 代码规范方法、装置、计算机设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911324183.1A CN111078568B (zh) | 2019-12-20 | 2019-12-20 | 代码规范方法、装置、计算机设备和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111078568A CN111078568A (zh) | 2020-04-28 |
CN111078568B true CN111078568B (zh) | 2023-10-31 |
Family
ID=70316154
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911324183.1A Active CN111078568B (zh) | 2019-12-20 | 2019-12-20 | 代码规范方法、装置、计算机设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111078568B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111625230A (zh) * | 2020-05-19 | 2020-09-04 | 北京计算机技术及应用研究所 | 一种统一前端JavaScript编码规范的系统 |
CN111881059B (zh) * | 2020-08-10 | 2023-10-27 | 网易(杭州)网络有限公司 | 代码文件的检测方法、装置和电子设备 |
CN112559354A (zh) * | 2020-12-18 | 2021-03-26 | 中国平安财产保险股份有限公司 | 前端代码规范检测方法、装置、计算机设备及存储介质 |
CN112650675A (zh) * | 2020-12-23 | 2021-04-13 | 广州汉全信息科技股份有限公司 | 一种区块链的代码检测方法、装置和计算机设备 |
CN112947985A (zh) * | 2021-01-29 | 2021-06-11 | 北京航空航天大学 | 一种智能检测及修复代码的方法与系统 |
CN112965695A (zh) * | 2021-03-12 | 2021-06-15 | 中国平安财产保险股份有限公司 | 前端代码接入检测方法、装置、设备及存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107015813A (zh) * | 2017-04-19 | 2017-08-04 | 网易(杭州)网络有限公司 | 代码修复的方法、装置及电子设备 |
CN107577465A (zh) * | 2017-09-21 | 2018-01-12 | 国云科技股份有限公司 | 一种网页代码的校正方法 |
CN108459962A (zh) * | 2018-01-23 | 2018-08-28 | 平安普惠企业管理有限公司 | 代码规范性检测方法、装置、终端设备及存储介质 |
CN109491924A (zh) * | 2018-12-21 | 2019-03-19 | 北京达佳互联信息技术有限公司 | 代码检测方法、装置、终端及存储介质 |
CN109871317A (zh) * | 2019-01-11 | 2019-06-11 | 平安普惠企业管理有限公司 | 代码质量分析方法及装置、存储介质及电子设备 |
CN110231937A (zh) * | 2019-05-20 | 2019-09-13 | 平安科技(深圳)有限公司 | 脚本缺陷扫描方法、装置、计算机设备和存储介质 |
-
2019
- 2019-12-20 CN CN201911324183.1A patent/CN111078568B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107015813A (zh) * | 2017-04-19 | 2017-08-04 | 网易(杭州)网络有限公司 | 代码修复的方法、装置及电子设备 |
CN107577465A (zh) * | 2017-09-21 | 2018-01-12 | 国云科技股份有限公司 | 一种网页代码的校正方法 |
CN108459962A (zh) * | 2018-01-23 | 2018-08-28 | 平安普惠企业管理有限公司 | 代码规范性检测方法、装置、终端设备及存储介质 |
CN109491924A (zh) * | 2018-12-21 | 2019-03-19 | 北京达佳互联信息技术有限公司 | 代码检测方法、装置、终端及存储介质 |
CN109871317A (zh) * | 2019-01-11 | 2019-06-11 | 平安普惠企业管理有限公司 | 代码质量分析方法及装置、存储介质及电子设备 |
CN110231937A (zh) * | 2019-05-20 | 2019-09-13 | 平安科技(深圳)有限公司 | 脚本缺陷扫描方法、装置、计算机设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN111078568A (zh) | 2020-04-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111078568B (zh) | 代码规范方法、装置、计算机设备和存储介质 | |
JP6287549B2 (ja) | ソースコードをポーティングする方法及び装置 | |
EP3265916B1 (en) | A method for identifying a cause for a failure of a test | |
US11775414B2 (en) | Automated bug fixing using deep learning | |
US8782609B2 (en) | Test failure bucketing | |
US8589882B2 (en) | Analyzing computer code development actions and process | |
US8954936B2 (en) | Enhancing functional tests coverage using traceability and static analysis | |
CN111382070B (zh) | 兼容性测试方法、装置、存储介质和计算机设备 | |
CN110704297B (zh) | 代码评审方法、装置、计算机设备及存储介质 | |
Le et al. | Patch verification via multiversion interprocedural control flow graphs | |
CN106371997B (zh) | 一种代码检查方法及装置 | |
US20030088810A1 (en) | Methods and apparatus for determining software component sizes associated with errors | |
US8898649B2 (en) | Application program analysis method, analysis system and recording medium for identifying a contributing factor for an invalid operation of an application program | |
CN112988595A (zh) | 动态同步测试方法、装置、设备及存储介质 | |
Dong et al. | Orplocator: Identifying read points of configuration options via static analysis | |
CN114547318A (zh) | 故障信息获取方法、装置、设备和计算机存储介质 | |
CN113094252B (zh) | 测试用例生成方法、装置、计算机设备及存储介质 | |
CN111966578A (zh) | 一种安卓兼容性缺陷修复效果的自动化评估方法 | |
JP6451417B2 (ja) | デバッグ支援装置、デバッグ支援システム、デバッグ支援方法、および、デバッグ支援プログラム | |
CN113051582B (zh) | 一种计算机软件技术开发调试系统 | |
CN112783736B (zh) | 软件组件的运行体时间监测方法、装置及电子设备 | |
CN115422095A (zh) | 一种回归测试用例推荐方法、装置、设备及介质 | |
CN115129598A (zh) | 一种sql语句的风险检测方法、装置、系统及介质 | |
CN114691197A (zh) | 代码分析方法、装置、电子设备和存储介质 | |
CN111796832B (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 |