代码的圈复杂度确定方法、电子设备及存储介质技术

技术编号:36951368 阅读:26 留言:0更新日期:2023-03-22 19:12
本申请公开了一种代码的圈复杂度确定方法、电子设备及存储介质,代码的圈复杂度确定方法包括:解析目标代码文件,得到对应的语法树;若语法树中存在类声明节点,则获取类声明节点的类体;若在类体中存在方法声明节点,则判断方法声明节点是否对应有块语句列表,其中块语句列表基于方法声明节点中的块语句形成;响应于块语句列表存在,则确定初始圈复杂度;基于块语句列表和初始圈复杂度,确定方法声明节点对应的最终圈复杂度。通过上述方式,本申请提供的代码圈复杂度的确定方法可以实现自动查找方法声明节点的最终圈复杂度。动查找方法声明节点的最终圈复杂度。动查找方法声明节点的最终圈复杂度。

【技术实现步骤摘要】
代码的圈复杂度确定方法、电子设备及存储介质


[0001]本申请涉及计算机
,特别是代码的圈复杂度确定方法、电子设备及存储介质。

技术介绍

[0002]在按照项目需求进行项目开发过程中,由于不同的开发者对业务逻辑的理解不同,不同开发者编写的代码也不同,且开发者在开发代码过程总通常会使用逻辑复杂的方法。但是,方法越复杂,就意味着该方法的圈复杂度越高、函数越难理解和维护。为了后续的代码维护工作,通常需要人工选出圈复杂度高的方法,以对这些方法对应的代码进行优化。

技术实现思路

[0003]本申请提供一种代码的圈复杂度确定方法、电子设备及存储介质,可以实现自动化确定代码中方法声明节点的圈复杂度。
[0004]为了解决上述技术问题,本申请采用的一个技术方案是:提供一种代码的圈复杂度确定方法,该方法包括:解析目标代码文件,得到对应的语法树;若语法树中存在类声明节点,则获取类声明节点的类体;若在类体中存在方法声明节点,则判断方法声明节点是否对应有块语句列表;块语句列表基于方法声明节点中的块语句形成;响应于块语句列表存在,则确定初始圈复杂度;基于块语句列表和初始圈复杂度,确定方法声明节点对应的最终圈复杂度。
[0005]其中,解析目标代码文件,得到对应的语法树之前,还包括:获取原始代码文件夹,其中原始代码文件夹包含多个代码文件;从多个代码文件中确定出目标代码文件。
[0006]其中,基于块语句列表和初始圈复杂度,确定方法声明节点对应的最终圈复杂度,包括:遍历块语句列表对应的块语句;在遍历过程中,若当前块语句为第一预设语句,按照第一预设规则调整初始圈复杂度;若当前块语句为第二预设语句,按照第二预设规则调整初始圈复杂度,直到遍历结束,得到最终圈复杂度。
[0007]其中,若当前块语句为第一预设语句,按照第一预设规则调整初始圈复杂度,包括:若当前块语句为第一预设语句,在初始圈复杂度上进行累加操作。
[0008]其中,第一预设语句至少包括条件判断语句、条件循环语句、重复语句、循环语句、和语句以及或语句中一者。
[0009]其中,若当前块语句为第二预设语句,按照第二预设规则调整初始圈复杂度,包括:若当前块语句为第二预设语句,则获取当前块语句对应的标签;根据标签的数量调整初始圈复杂度。
[0010]其中,第二预设语句为选择语句。
[0011]其中,确定方法声明节点对应的最终圈复杂度之后,包括:在最终圈复杂度超过阈值时,显示方法声明节点以及最终圈复杂度,以提示用户对方法声明节点对应的方法进行修改。
[0012]为了解决上述技术问题,本申请采用的另一技术方案是:提供一种电子设备,该电子设备包括存储器和处理器,其中,存储器用于存储计算机程序,处理器用于执行计算机程序以实现上述代码的圈复杂度确定方法。
[0013]为了解决上述技术问题,本申请采用的另一技术方案是:提供一种计算机可读储存介质,该计算机可读储存介质中存储有计算机程序,计算机程序在被处理器执行时,用于执行上述代码的圈复杂度确定方法。
[0014]本申请的有益效果是:区别于现有技术,本申请提供的代码的圈复杂度确定方法,通过解析目标代码文件,得到对应的语法树,接着判断语法树是否存在类声明节点,若存在则获取类声明节点的类体,进而判断类体是否存在方法声明节点,若存在则判断方法声明节点是否对应有块语句列表,其中块语句列表基于方法声明节点中的块语句形成,响应于块语句列表存在,则确定初始圈复杂度,最后基于块语句列表和初始圈复杂度,确定方法声明节点对应的最终圈复杂度。通过上述方式,可以实现自动化查找出代码文件中方法声明节点对应的圈复杂度,提高确定代码的圈复杂度的效率。
附图说明
[0015]为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。其中:
[0016]图1是本申请提供的代码的圈复杂度确定方法第一实施例的流程示意图;
[0017]图2是本申请提供的步骤15一实施例的流程示意图;
[0018]图3是本申请提供的代码的圈复杂度确定方法第二实施例的流程示意图;
[0019]图4是本申请提供的代码的圈复杂度确定方法第三实施例的流程示意图;
[0020]图5是本申请提供的电子设备一实施例的结构示意图;
[0021]图6是本申请提供的计算机可读储存介质一实施例的结构示意图。
具体实施方式
[0022]下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
[0023]参阅图1,图1是本申请提供的代码的圈复杂度确定方法第一实施例的流程示意图,该方法包括:
[0024]步骤11:解析目标代码文件,得到对应的语法树。
[0025]在一些实施例中,基于项目源码管理仓库(如gitlab),利用git clone指令(或自动化脚本)获取项目源代码,接着遍历与项目源代码对应的文件夹,以从文件夹中确定目标代码文件。其中,目标代码文件可以是后缀为.java的文件。
[0026]另外,可以将遍历项目源代码的文件夹获取的文件保存至文件列表,如java文件列表。
[0027]在一些实施例中,可以将目标代码文件解析成语法树,如将Java文件解析成抽象语法树(Abstract Syntax Tree,AST),抽象语法树是对Java语言的一种抽象,语法树中每个节点都能对应到一种Java语法,也就是说一个Java文件就是由若干个节点构成。
[0028]步骤12:若语法树中存在类声明节点,则获取类声明节点的类体。
[0029]其中,类声明节点在代码中用class declaration表示,类声明节点的类体在代码中用class body表示。
[0030]在一些实施例中,需要判断获取的语法树中是否存在类声明节点,若存在则获取该类声明节点的类体,否则重新确定下一目标代码文件,并对新的目标代码文件进行分析。
[0031]步骤13:若在类体中存在方法声明节点,则判断方法声明节点是否对应有块语句列表,其中块语句列表基于方法声明节点中的块语句形成。
[0032]其中,方法声明节点在代码中用method declaration表示,块语句在代码中用block statement表示。
[0033]在一些实施例中,确定存在类体时,可以遍历语法树中的方法声明节点,以确定是否存在包含块语句列表的方法声明节点。
[0034]块语句是将语句分组在一起的一种方法,因此块语句在句法上的作用相当于单个语句。
[0035]步骤14:响本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种代码的圈复杂度确定方法,其特征在于,所述方法包括:解析目标代码文件,得到对应的语法树;若所述语法树中存在类声明节点,则获取所述类声明节点的类体;若在所述类体中存在方法声明节点,则判断所述方法声明节点是否对应有块语句列表;所述块语句列表基于所述方法声明节点中的块语句形成;响应于所述块语句列表存在,则确定初始圈复杂度;基于所述块语句列表和所述初始圈复杂度,确定所述方法声明节点对应的最终圈复杂度。2.根据权利要求1所述的方法,其特征在于,所述解析所述目标代码文件,得到对应的语法树之前,还包括:获取原始代码文件夹;所述原始代码文件夹包含多个代码文件;从所述多个代码文件中确定出所述目标代码文件。3.根据权利要求1所述的方法,其特征在于,所述基于所述块语句列表和所述初始圈复杂度,确定所述方法声明节点对应的最终圈复杂度,包括:遍历所述块语句列表对应的所述块语句;在遍历过程中,若当前块语句为第一预设语句,按照第一预设规则调整所述初始圈复杂度;若当前块语句为第二预设语句,按照第二预设规则调整所述初始圈复杂度,直到遍历结束,得到所述最终圈复杂度。4.根据权利要求3所述的方法,其特征在于,所述若当前块语句为第一预设语句,按照第一预设规则调整所述初始圈复杂度,包括:若当前块语句为...

【专利技术属性】
技术研发人员:周小亮
申请(专利权)人:平安银行股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1