CN117806704A - 代码复杂度的确定方法、装置、设备和存储介质 - Google Patents
代码复杂度的确定方法、装置、设备和存储介质 Download PDFInfo
- Publication number
- CN117806704A CN117806704A CN202311597346.XA CN202311597346A CN117806704A CN 117806704 A CN117806704 A CN 117806704A CN 202311597346 A CN202311597346 A CN 202311597346A CN 117806704 A CN117806704 A CN 117806704A
- Authority
- CN
- China
- Prior art keywords
- code
- complexity
- target
- determining
- statement
- 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
- 238000000034 method Methods 0.000 title claims abstract description 70
- 238000004590 computer program Methods 0.000 claims description 12
- 238000001914 filtration Methods 0.000 claims description 7
- 238000011156 evaluation Methods 0.000 claims description 2
- 238000012423 maintenance Methods 0.000 abstract description 10
- 238000004891 communication Methods 0.000 description 6
- 238000010586 diagram Methods 0.000 description 6
- 230000006870 function Effects 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012827 research and development Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及计算机技术领域,提供一种代码复杂度的确定方法、装置、设备和存储介质,该方法包括:扫描目标代码,并统计目标代码中包含的逻辑分支数;根据目标代码中包含的逻辑分支数,确定目标代码的复杂度。本发明中首先统计目标代码中包含的逻辑分支数,根据逻辑分支数可以高效地确定代码的复杂度,可以进一步降低代码运维成本。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种代码复杂度的确定方法、装置、设备和存储介质。
背景技术
目前在研发体系没有一种很好的度量方法来度量产品代码的复杂度,从而不清楚代码的质量情况,不能有针对性的进行代码质量优化,导致代码的维护成本较高。
因而,如何对代码复杂度进行有效确定,成为业内亟需解决的技术问题。
发明内容
本发明提供一种代码复杂度的确定方法、装置、设备和存储介质,实现高效地对代码复杂度进行确定。
第一方面,本发明提供一种代码复杂度的确定方法,该方法包括:
扫描目标代码,并统计所述目标代码中包含的逻辑分支数;
根据所述目标代码中包含的逻辑分支数,确定所述目标代码的复杂度。
可选地,所述扫描目标代码,并统计所述目标代码中包含的逻辑分支数,包括:
根据控制语句对应的目标关键词,扫描并识别所述目标代码中的控制语句;
根据识别到的控制语句的数量,确定所述目标代码中包含的逻辑分支数。
可选地,所述扫描目标代码之前,还包括:
获取待进行代码复杂度确定的原始代码;
识别所述原始代码中包含的注释信息;
对所述原始代码中的注释信息进行过滤,得到所述目标代码。
可选地,所述注释信息包括以下至少一项:所述目标代码中处于两个相邻的第一注释符号之间的内容,或所述目标代码中存在第二注释符号的代码行;所述识别所述原始代码中包含的注释信息,包括:
针对所述原始代码中每行代码,判断所述行对应的代码是否为处于所述两个相邻的第一注释符号之间的内容,和/或,所述行对应的代码是否为存在所述第二注释符号的代码行;
在所述行对应的代码为处于所述两个相邻的第一注释符号之间的内容,和/或所述行对应的代码为存在所述第二注释符号的代码行的情况下,则将所述行对应的代码识别为注释信息。
可选地,所述扫描目标代码,并统计所述目标代码中包含的逻辑分支数之前,还包括:
获取代码文件的层级目录;所述层级目录包括至少一个子目录;
从所述层级目录中,提取子目录中的代码,作为所述目标代码。
可选地,在所述子目录的数量为多个的情况下,所述根据所述目标代码中包含的逻辑分支数,确定所述目标代码的复杂度之后,还包括:
根据各个所述子目录对应的目标代码的复杂度,得到所述代码文件的代码复杂度。
可选地,所述控制语句的类型包含以下至少一项:选择结构语句、循环结构语句,所述选择结构语句包括if语句、三元运算符语句、case语句和catch语句中至少一项;所述循环结构语句包括:while循环语句和for循环语句中至少一项。
第二方面,本发明还提供一种代码复杂度的确定装置,该装置包括:
识别模块,用于扫描目标代码,并统计所述目标代码中包含的逻辑分支数;
评估模块,用于根据所述目标代码中包含的逻辑分支数,确定所述目标代码的复杂度。
第三方面,本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述代码复杂度的确定方法。
第四方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述代码复杂度的确定方法。
第五方面,本发明还提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现如上述任一种所述代码复杂度的确定方法。
本发明提供的一种代码复杂度的确定方法、装置、设备和存储介质,通过扫描目标代码,并统计目标代码中包含的逻辑分支数,进而,根据目标代码中包含的逻辑分支数,确定目标代码的复杂度。本发明中首先统计目标代码中包含的逻辑分支数,根据逻辑分支数可以高效地确定代码的复杂度,可以进一步降低代码运维成本。
附图说明
为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明提供的代码复杂度的确定方法的流程示意图之一;
图2是本发明提供的代码层级目录的示意图;
图3是本发明提供的代码复杂度的确定方法的流程示意图之二;
图4是本发明提供的代码复杂度的确定装置的结构示意图;
图5是本发明提供的电子设备的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
下面结合图1-图5描述本发明提供的代码复杂度的确定方法。
图1是本发明提供的代码复杂度的确定方法的流程示意图之一,如图1所示,本发明提供一种代码复杂度的确定方法,该方法包括:
步骤101、扫描目标代码,并统计目标代码中包含的逻辑分支数;
可以理解的是,代码质量的好坏直接影响到代码后续的维护成本,而影响代码质量有两个关键因素:代码可读性与代码可维护性,其中代码复杂度则是这两项因素的重要度量指标。本发明实施例提供一种有效地确定代码复杂的方法,通过本发明提供的代码复杂度的确定方法,可以有效地评估代码的复杂度,从而为后期代码维护提供支持。
首先,扫描目标代码并统计目标代码中包含的逻辑分支数,逻辑分支数例如根据目标代码包含的控制语句的数量得到。
步骤102、根据目标代码中包含的逻辑分支数,确定目标代码的复杂度。
具体地,在得到目标代码中包含的逻辑分支数后,可以进一步根据目标代码中包含的逻辑分支数确定代码的复杂度。
可以理解的是,在流程控制中,流程控制通常包含以下三种:顺序结构、选择结构和循环结构,选择结构和循环结构的出现,也即会导致逻辑分支的数量对应增加。进一步地,在代码中逻辑分支的数量增加,则代码的复杂度会对应增加。
示例性地,目标代码中包含的逻辑分支的数量为6500个,则目标代码的复杂度为6500;
可选地,还可以输出目标代码的总行数,例如目标代码的代码复杂度输出的结果为:目标代码2万行,代码复杂度为6500。
本实施例提供的方法中,通过扫描目标代码,并统计目标代码中包含的逻辑分支数,进而,根据目标代码中包含的逻辑分支数,确定目标代码的复杂度。本发明中首先统计目标代码中包含的逻辑分支数,根据逻辑分支数可以高效地确定代码的复杂度,可以进一步降低代码运维成本。
可选地,扫描目标代码,并统计目标代码中包含的逻辑分支数,包括:
根据控制语句对应的目标关键词,扫描并识别目标代码中的控制语句;
根据识别到的控制语句的数量,确定目标代码中包含的逻辑分支数。
具体地,在一些实施例中,步骤101可以通过如下方式实现:
首先,根据控制语句对应的目标关键词,扫描并识别目标代码中的控制语句;例如,逐行读取目标代码,针对任意一行代码行,若所在行中包含目标关键词,则目标代码中控制语句的数量增加一。可以理解的是,控制语句例如选择结构语句、循环结构语句等等,因为代码中增加控制语句本身目标代码的逻辑分支会增加,从而代码的复杂度会增加。控制语句对应的目标关键词例如“if”“if else”“if elseif...else”“switch”“case”“catch”“try-catch”“while”“do while”“for”等等。其中,需要说明的是,目标关键词与控制语句对应,可以根据控制语句的类别进行自定义。
然后,根据识别到的控制语句的数量,确定目标代码中包含的逻辑分支数;对应地,若目标代码中控制语句的数量增加一,则目标代码中逻辑分支的数量增加一;直至遍历完所述目标代码中的所有代码行,得到目标代码中包含的逻辑分支数。
示例性地,例如目标代码一共2万行,其中,目标关键词“if”出现过100次,“ifelse”出现过100次,“if elseif...else”出现过200次,“switch”出现过500次,“case”出现过300次,“catch”出现过500次,“try-catch”出现过600次,“while”出现过200次,“dowhile”出现过2000次,“for”出现过2000次,则确定目标代码中包含的逻辑分支数的过程示例如下:
识别到的目标关键词的数量为上述所有目标关键词出现次数之和,为:目标代码中共识别到6500个目标关键词;
对应地,目标代码中包含的逻辑分支的数量为6500个。
本实施例提供的方法中,根据控制语句对应的目标关键词,扫描并识别目标代码中的控制语句,然后根据识别到的控制语句的数量,确定目标代码中包含的逻辑分支数。本实施例中通过控制语句的数量确定逻辑分支数量,从而确定目标代码的复杂度,基于此方法得到的代码复杂度准确度较高。
可选地,扫描目标代码之前,还包括:
获取待进行代码复杂度确定的原始代码;
识别原始代码中包含的注释信息;
对原始代码中的注释信息进行过滤,得到目标代码。
具体地,在一些实施例中,步骤101之前还包括:获取目标代码。获取目标代码的过程示例如下:
首先,获取待进行代码复杂度确定的原始代码,原始代码例如是日常业务产生的代码。
然后,识别原始代码中包含的注释信息;可以理解的是,注释信息指的是起到解释作用的信息,可以理解的是,注释的作用之一可以是和伪代码一样的作用,也就是为接下来要实现的功能写出一个指导性的算法思路,与伪代码的区别是没有伪代码详细,但是也指出了完成此功能的大体算法思路;注释的作用之二可以是给看代码的人一个解释性说明,需要说明的是,注意看代码的人包括你自己和其他人,增加注释可以让看代码的人快速的浏览你的代码,而不至于每看一行都要一层一层的方法看下去,才能了解你这个方法到底在干什么。因此,注释信息的增加不会增加代码复杂度。
进一步地,可以对原始代码中的注释信息进行过滤,得到目标代码;其中,注释信息例如为在两个第一注释符号之间的内容,第一注释符号例如为“/”;或者,注释信息为第二注释符号所在的代码行。对原始代码中的注释信息进行过滤的过程可以是逐行读取原始代码,针对每一行代码,识别所在行代码中的注释信息,进而,若识别到注释信息,将所在行从原始代码中过滤,直至遍历读取完原始代码中的所有行,得到目标代码。
本实施例提供的方法中,在确定代码复杂度时,将原始代码中的注释信息识别出,并将识别到的原始代码中的注释信息进行过滤,得到目标代码,进而扫描目标代码确定代码复杂度。本实施例提供的方法确定出的代码复杂度剔除了注释信息的影响因素,确定的代码复杂度的准确度较高。
可选地,注释信息包括以下至少一项:目标代码中处于两个相邻的第一注释符号之间的内容,或目标代码中存在第二注释符号的代码行;识别原始代码中包含的注释信息,包括:
针对原始代码中每行代码,判断行对应的代码是否为处于两个相邻的第一注释符号之间的内容,和/或,行对应的代码是否为存在第二注释符号的代码行;
在行对应的代码为处于两个相邻的第一注释符号之间的内容,和/或行对应的代码为存在第二注释符号的代码行的情况下,则将行对应的代码识别为注释信息。
具体地,在一些实施例中,注释信息包括以下至少一项:目标代码中处于两个第一注释符号之间的内容,其中,第一注释符号例如“/”,也就是说目标代码中处于两个“/”之间的内容为注释信息;或目标代码中存在第二注释符号的代码行,其中,第二注释符号例如为“//”,目标代码中“//”所在的代码行也为注释信息。注释信息示例如下:
注释信息1:
注释信息2:
//获取token做为本次请求的日志id。
进一步地,在了解了注释信息的作用以及注释信息是什么之后,可以理解的是,注释信息不对代码复杂度产生影响。因而,在对代码进行复杂度确定时,需要先对原始代码中的注释信息进行过滤,得到目标代码,从而提高代码复杂度确定的准确性,在对原始代码中的注释信息进行过滤后可以得到目标代码。具体地,识别原始代码中包含的注释信息的过程示例如下:
首先,针对原始代码中每行代码,判断所述行对应的代码是否包含注释信息。具体地,逐行扫描原始代码中每行代码,判断每一行中是否包含注释信息。例如,判断行对应的代码是否为处于两个相邻的第一注释符号之间的内容,和/或,行对应的代码是否为存在第二注释符号的代码行;
进一步地,在行对应的代码为处于两个相邻的第一注释符号之间的内容,和/或行对应的代码为存在第二注释符号的代码行的情况下,则将行对应的代码识别为注释信息。对应地,可以将所述行对应的代码删除。
本实施例提供的方法中,在确定代码复杂度时,将原始代码中的注释信息例如java注释代码识别出,可以避免误判断,从而影响代码复杂度,使得基于本实施例提供的方法确定出的代码复杂度准确度较高。
可选地,扫描目标代码,并统计目标代码中包含的逻辑分支数之前,还包括:
获取代码文件的层级目录;层级目录包括至少一个子目录;
从层级目录中,提取子目录中的代码,作为目标代码。
具体地,在一些实施例中,在步骤101之前还可以获取代码文件的层级目录,层级目录包含代码文件中的各个子目录,每个子目录例如存储不同格式、不同作用的文件。
示例性地,图2是本发明提供的代码层级目录的示意图,代码文件包含子目录A和子目录B,其中,子目录A中的A1例如为配置文件、子目录A中的A2例如为文件夹目录、子目录A中的A3例如为源代码文件。
进一步地,在获取到代码文件的层级目录后,可以按照层级目录的顺序依次提取各个子目录中的代码,进而,将提取到的各个子目录中的代码作为目标代码。之后,可以基于各个子目录对应的目标代码实现各个子目录对应的目标代码代码复杂度的确定,有利于全面整体且高效地确定代码文件的复杂度,便于进行代码维护。
本实施例提供的方法中,通过获取代码文件的层级目录,进而,可以从层级目录中,提取子目录中的代码,作为各个子目录对应的目标代码,便于后续根据各个子目录对应的目标代码实现代码复杂度的确定,实现全面地对代码文件进行代码复杂度的确定。
可选地,在子目录的数量为多个的情况下,根据目标代码中包含的逻辑分支数,确定目标代码的复杂度之后,还包括:
根据各个子目录对应的目标代码的复杂度,得到代码文件的代码复杂度。
具体地,可以理解的是,当所述子目录的数量为多个时,相应地,也可以得到各个子目录对应的目标代码的复杂度。在一些实施例中,可以将各个子目录对应的目标代码的复杂度进行汇总,得到代码文件的代码复杂度。例如,将代码文件中各个子目录对应的目标代码的复杂度进行累加计算,从而得到代码文件的代码复杂度。
示例性地,例如代码文件中包含10个子目录,各个子目录对应的目标代码的复杂度分别为1万、2万、3万、2万、5万、1万、2万、3万、2万、5万,则代码文件对应的复杂度为:
1万+2万+3万+2万+5万+1万+2万+3万+2万+5万=26万;
可选地,在获取到各个子目录对应的目标代码后,还可以将各个各个子目录对应的目标代码复制到指定文件夹或者指定目录下,进而,后续在确定代码文件的复杂度时,可以遍历读取指定文件夹下的所有目标代码,从而实现对代码文件整体的复杂度的确定。
本实施例提供的方法中,在代码文件包含的子目录的数量为多个的情况下,根据各个子目录对应的目标代码的复杂度,得到代码文件的代码复杂度,实现全面地对代码文件进行代码复杂度确定,便于运维人员对代码文件进行维护。
可选地,控制语句的类型包含以下至少一项:选择结构语句、循环结构语句,选择结构语句包括if语句、三元运算符语句、case语句和catch语句中至少一项;循环结构语句包括:while循环语句和for循环语句中至少一项。
具体地,在一些实施例中,所述控制语句的类型包含例如选择结构语句或循环结构语句。其中,选择结构语句指的是根据给定的条件进行判定,用来决定要执行某个程序段,循环结构语句指的是当条件满足时,反复执行同一个语句块,循环结结构的作用就是重复执行一段代码,更具体地,循环结构中包括循环条件和循环次数。选择结构语句和循环结构语句示例如下:
(1)选择结构语句例如包括if语句、三元运算符语句、case语句和catch语句中至少一项:
选择结构常用的就是分支语句,分支语句又包括单分支语句、双分支语句和多分支语句,下表1详细描述分支语句:
表1
三元运算符语句的格式为:表达式1?表达式2:表达式3,其中,表达1可以是比较如>、<、=,但表达式1最后得到的结果是true或false也就是布尔类型;“?”是起一个判断作用,判断表达式1是true还是false;“:”是选择,如果表达式1是true就执行表达式2否则为false执行表达式3。三元运算符语句示例如下:
c=a>b?a:b;
上述三元运算符语句的含义为:
若a>b成立,则c=a;若a>b不成立,则c=b;
可以理解的是,在选择结构中存在多个判断条件的情况下,不仅可以使用if...else if语句,还可以使用switch case语句。一般情况下,当判断条件较多的情况下,使用switch case语句的效率会高于使用if...else if语句。switch...case与if...elseif的根本区别在于,switch...case会生成一个跳转表来指示实际的case分支的地址,而这个跳转表的索引号与switch变量的值是相等的。从而,switch...case不用像if...else if那样遍历条件分支直到命中条件,而只需访问对应索引号的表项从而到达定位分支的目的。
可以理解的是,catch语句,例如try-catch语句,其中可以由几个catch组成,分别处理发生相应异常。可以理解的是,Java里的try-catch语句一般用来处理异常,将可能出现的异常的语句操作放在try里,处理异常的语句放在catch里。如果没有出现异常,则执行try块中所有语句,不执行catch块中语句,如果有finally,最后还需要执行finally里面的语句;如果出现异常,则try块中异常发生后,try块剩下的语句不再执行。将执行catch块中的语句,如果有finally,最后还需要执行finally里面的语句。
(2)进一步地,循环结构语句例如包括:while循环语句和for循环语句中至少一项:
其中,while循环的语法示例如下:
While(条件表达式){
循环体…
}
while循环语句的含义为“当”条件表达式成立时,则执行循环体。
其中,for循环的语法示例如下:
for(初始化;条件表达式;增量)
{循环体语句;}
for循环语句通常用于循环次数已知的情况。
可以理解的是,本实施例中所列的控制语句仅为示例,其他类型涉及逻辑分支的控制语句也可以进行识别并计入代码复杂度,本实施例对控制语句的类型不做限定。
本实施例提供的方法中,控制语句的类型包含选择结构语句和循环结构语句以下至少一项,其中,选择结构语句包括if语句、三元运算符语句、case语句和catch语句中至少一项;循环结构语句包括:while循环语句和for循环语句中至少一项。通过目标关键词识别目标代码中的控制语句从而确定目标代码的复杂度,能够有效评估代码的复杂度。
图3是本发明提供的代码复杂度的确定方法的流程示意图之二,如图3所示,该方法包括:
步骤301、获取代码文件的层级目录;
步骤303、按照层级目录依次扫描各个子目录;
步骤303、判断文件是否以.java结尾;
在文件是以.java结尾的情况下,执行步骤304:
步骤304、复制文件到指定文件夹;
在文件不是以.java结尾的情况下,执行步骤305:
步骤305、判断文件是否扫描完毕;
在文件扫描完毕的情况下,执行步骤306:
步骤306、遍历读取指定文件夹下的文件;
步骤307、逐行读取文件;
步骤308、判断代码是否为注释代码;
在代码为注释代码的情况下,返回执行步骤307;
在代码不是注释代码的情况下,执行步骤309:
步骤309、判断代码是否包含控制语句;
在代码包含控制语句的情况下,执行步骤310:
步骤310、代码复杂度增加1;
在代码不包含控制语句的情况下,返回执行步骤307;
步骤311、输出总行数和代码复杂度。
具体地,在需要对代码文件进行代码复杂度确定时,首先获取代码文件的层级目录,然后,按照层级目录依次扫描各个子目录,可以得到各个子目录对应的代码文件;进而,针对各个子目录中的代码文件,可以判断文件是否以.java结尾,在文件是以.java结尾的情况下,则将该文件(目标代码)复制到指定文件夹中;与之对应地,在文件不是以.java结尾的情况下,则判断文件是否扫描完毕,在文件扫描完毕的情况下,即可以遍历读取指定文件夹下的文件,通过逐行读取文件,过滤各个子目录对应的目标代码中的注释代码,例如逐行判断代码是否为注释代码,在代码为注释代码的情况下,则读取下一行代码,与之对应地,在代码不是注释代码的情况下,则进一步判断所述代码是否包含控制语句,判断所述代码包含控制语句的方法例如通过识别目标关键词进行判断,此处不再赘述;在代码包含控制语句的情况下,则将代码复杂度增加1;相应地,在代码不包含控制语句的情况下,则读取下一行代码;重复执行读取下一行代码的过程后,最终可以得到各个子目录中的代码文件的代码复杂度,最后,将各个子目录中的代码文件的代码复杂度累加,输出代码文件的总行数和代码复杂度。
本实施例提供的方法中,首先获取代码文件的层级目录,然后,按照层级目录依次扫描各个子目录,得到各个子目录对应的代码文件;进而,针对各个子目录中的代码文件,先判断文件是否以.java结尾,在文件是以.java结尾的情况下,则将该文件(目标代码)复制到指定文件夹中;与之对应地,在文件不是以.java结尾的情况下,则判断文件是否扫描完毕,在文件扫描完毕的情况下,通过根据控制语句对应的目标关键词,识别各个子目录中的代码文件中的控制语句,进而,根据识别到的控制语句和各个子目录中的代码文件中包含的注释信息,确定各个子目录中的代码文件的复杂度,最后,将各个子目录中的代码文件的代码复杂度累加,输出代码文件的总行数和代码复杂度。本实施例提供的方法能够高效地确定java代码的复杂度,可以进一步降低代码运维成本。
下面对本发明提供的代码复杂度的确定装置进行描述,下文描述的代码复杂度的确定装置与上文描述的代码复杂度的确定方法可相互对应参照。
图4是本发明提供的代码复杂度的确定装置的结构示意图,如图4所示,该装置包括:
扫描模块410,用于扫描目标代码,并统计目标代码中包含的逻辑分支数;
确定模块420,用于根据目标代码中包含的逻辑分支数,确定目标代码的复杂度。
本实施例提供的装置中,通过扫描目标代码,并统计目标代码中包含的逻辑分支数,进而,根据目标代码中包含的逻辑分支数,确定目标代码的复杂度。本发明中首先统计目标代码中包含的逻辑分支数,根据逻辑分支数可以高效地确定代码的复杂度,可以进一步降低代码运维成本。
可选地,所述扫描模块410,具体用于:
根据控制语句对应的目标关键词,扫描并识别所述目标代码中的控制语句;
根据识别到的控制语句的数量,确定所述目标代码中包含的逻辑分支数。
可选地,所述装置还包括:过滤模块;
所述过滤模块,用于:
获取待进行代码复杂度确定的原始代码;
识别所述原始代码中包含的注释信息;
对所述原始代码中的注释信息进行过滤,得到所述目标代码。
可选地,所述注释信息包括以下至少一项:所述目标代码中处于两个相邻的第一注释符号之间的内容,或所述目标代码中存在第二注释符号的代码行;
所述过滤模块,具体用于:
针对所述原始代码中每行代码,判断所述行对应的代码是否为处于所述两个相邻的第一注释符号之间的内容,和/或,所述行对应的代码是否为存在所述第二注释符号的代码行;
在所述行对应的代码为处于所述两个相邻的第一注释符号之间的内容,和/或所述行对应的代码为存在所述第二注释符号的代码行的情况下,则将所述行对应的代码识别为注释信息。
可选地,所述装置还包括目标代码确定模块;
所述代码确定模块,用于:
获取代码文件的层级目录;所述层级目录包括至少一个子目录;
从所述层级目录中,提取子目录中的代码,作为所述目标代码。
可选地,所述确定模块420,还用于:
在所述子目录的数量为多个的情况下,根据各个所述子目录对应的目标代码的复杂度,得到所述代码文件的代码复杂度。
可选地,所述控制语句的类型包含以下至少一项:选择结构语句、循环结构语句,所述选择结构语句包括if语句、三元运算符语句、case语句和catch语句中至少一项;所述循环结构语句包括:while循环语句和for循环语句中至少一项。
图5示例了一种电子设备的实体结构示意图,如图5所示,该电子设备可以包括:处理器(processor)510、通信接口(Communications Interface)520、存储器(memory)530和通信总线540,其中,处理器510,通信接口520,存储器530通过通信总线540完成相互间的通信。处理器510可以调用存储器530中的逻辑指令,以执行代码复杂度的确定方法,该方法包括:
扫描目标代码,并统计所述目标代码中包含的逻辑分支数;
根据所述目标代码中包含的逻辑分支数,确定所述目标代码的复杂度。
此外,上述的存储器530中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
另一方面,本发明还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,计算机程序可存储在非暂态计算机可读存储介质上,所述计算机程序被处理器执行时,计算机能够执行上述各方法所提供的代码复杂度的确定方法,该方法包括:
扫描目标代码,并统计所述目标代码中包含的逻辑分支数;
根据所述目标代码中包含的逻辑分支数,确定所述目标代码的复杂度。
又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各方法提供的代码复杂度的确定方法,该方法包括:
扫描目标代码,并统计所述目标代码中包含的逻辑分支数;
根据所述目标代码中包含的逻辑分支数,确定所述目标代码的复杂度。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (10)
1.一种代码复杂度的确定方法,其特征在于,包括:
扫描目标代码,并统计所述目标代码中包含的逻辑分支数;
根据所述目标代码中包含的逻辑分支数,确定所述目标代码的复杂度。
2.根据权利要求1所述的代码复杂度的确定方法,其特征在于,所述扫描目标代码,并统计所述目标代码中包含的逻辑分支数,包括:
根据控制语句对应的目标关键词,扫描并识别所述目标代码中的控制语句;
根据识别到的控制语句的数量,确定所述目标代码中包含的逻辑分支数。
3.根据权利要求1所述的代码复杂度的确定方法,其特征在于,所述扫描目标代码之前,还包括:
获取待进行代码复杂度确定的原始代码;
识别所述原始代码中包含的注释信息;
对所述原始代码中的注释信息进行过滤,得到所述目标代码。
4.根据权利要求3所述的代码复杂度的确定方法,其特征在于,所述注释信息包括以下至少一项:所述目标代码中处于两个相邻的第一注释符号之间的内容,或所述目标代码中存在第二注释符号的代码行;所述识别所述原始代码中包含的注释信息,包括:
针对所述原始代码中每行代码,判断所述行对应的代码是否为处于所述两个相邻的第一注释符号之间的内容,和/或,所述行对应的代码是否为存在所述第二注释符号的代码行;
在所述行对应的代码为处于所述两个相邻的第一注释符号之间的内容,和/或所述行对应的代码为存在所述第二注释符号的代码行的情况下,则将所述行对应的代码识别为注释信息。
5.根据权利要求1-4任一项所述的代码复杂度的确定方法,其特征在于,所述扫描目标代码,并统计所述目标代码中包含的逻辑分支数之前,还包括:
获取代码文件的层级目录;所述层级目录包括至少一个子目录;
从所述层级目录中,提取子目录中的代码,作为所述目标代码。
6.根据权利要求5所述的代码复杂度的确定方法,其特征在于,在所述子目录的数量为多个的情况下,所述根据所述目标代码中包含的逻辑分支数,确定所述目标代码的复杂度之后,还包括:
根据各个所述子目录对应的目标代码的复杂度,得到所述代码文件的代码复杂度。
7.根据权利要求1-4任一项所述的代码复杂度的确定方法,其特征在于,控制语句的类型包含以下至少一项:选择结构语句、循环结构语句,所述选择结构语句包括if语句、三元运算符语句、case语句和catch语句中至少一项;所述循环结构语句包括:while循环语句和for循环语句中至少一项。
8.一种代码复杂度的确定装置,其特征在于,包括:
识别模块,用于扫描目标代码,并统计所述目标代码中包含的逻辑分支数;
评估模块,用于根据所述目标代码中包含的逻辑分支数,确定所述目标代码的复杂度。
9.一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至7任一项所述代码复杂度的确定方法。
10.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述代码复杂度的确定方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311597346.XA CN117806704A (zh) | 2023-11-27 | 2023-11-27 | 代码复杂度的确定方法、装置、设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311597346.XA CN117806704A (zh) | 2023-11-27 | 2023-11-27 | 代码复杂度的确定方法、装置、设备和存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117806704A true CN117806704A (zh) | 2024-04-02 |
Family
ID=90425924
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311597346.XA Pending CN117806704A (zh) | 2023-11-27 | 2023-11-27 | 代码复杂度的确定方法、装置、设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117806704A (zh) |
-
2023
- 2023-11-27 CN CN202311597346.XA patent/CN117806704A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109388566B (zh) | 一种代码覆盖率分析方法、装置、设备及存储介质 | |
CN110457302B (zh) | 一种结构化数据智能清洗方法 | |
US9390176B2 (en) | System and method for recursively traversing the internet and other sources to identify, gather, curate, adjudicate, and qualify business identity and related data | |
CN112528602B (zh) | 一种医药文档结构化内容分析方法、系统和存储介质 | |
CN111078513B (zh) | 日志处理方法、装置、设备、存储介质及日志告警系统 | |
CN112328499A (zh) | 一种测试数据生成方法、装置、设备及介质 | |
CA2734207C (en) | Electronic file comparator | |
CN113238937B (zh) | 一种基于代码精简与误报过滤的编译器模糊测试方法 | |
CN107368500A (zh) | 数据抽取方法及系统 | |
CN117806704A (zh) | 代码复杂度的确定方法、装置、设备和存储介质 | |
CN116775488A (zh) | 异常数据确定方法、装置、设备、介质及产品 | |
CN115269444B (zh) | 代码静态检测方法、装置及服务器 | |
CN116055559A (zh) | 数据交换格式的处理方法及装置 | |
CN115796146A (zh) | 一种文件对比方法及装置 | |
CN114090673A (zh) | 一种多数据源的数据处理方法、设备及存储介质 | |
CN116029280A (zh) | 一种文档关键信息抽取方法、装置、计算设备和存储介质 | |
WO2020101478A1 (en) | System and method for managing duplicate entities based on a relationship cardinality in production knowledge base repository | |
CN113037521A (zh) | 识别通讯设备状态的方法、通讯系统及存储介质 | |
CN103605777A (zh) | 数据库索引处理方法和装置 | |
CN113408250B (zh) | 一种项目文件的处理方法和装置 | |
CN116541307B (zh) | 一种对比pom版本的数据处理方法 | |
CN113626385B (zh) | 一种基于文本数据读取的方法和系统 | |
CN114564472B (zh) | 元数据扩充方法以及存储介质、电子设备 | |
CN111953544B (zh) | 一种服务器的故障检测方法、装置、设备及存储介质 | |
CN115048565A (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 |