一、IDEA圈复杂度插件(MetricsReload)下载与使用\
圈复杂度
圈复杂度(Cyclomatic Complexity)是衡量计算机程序复杂程度的一种措施。它根据程序从开始到结束的线性独立路径的数量计算得来的。
- 从1开始,一直往下通过程序
- 一但遇到以下关键字,或者其它同类的词,就加1:if,while,repeat,for,and,or
- 给case语句中的每一种情况都加1
认知复杂度解释
基本原则 认知复杂度的评估分数,是基下⾯三条基本规则:
- 忽略简写:把多句代码缩写为⼀句可读的代码(语法糖),不改变理解难度;
- 打断线性的代码逻辑:出现⼀个打断逻辑线性执⾏的语句,难度+1;
- 当打断逻辑的是⼀个嵌套时,难度+1;
以下四种不同类型,均会使认知复杂度得分加⼀:
A. Nesting:把⼀段代码逻辑嵌套在另⼀段逻辑中;
B. Structural:被嵌套的控制流结构;
C. Fundamental:不受嵌套影响的语句;
D. Hybrid:⼀些控制流结构,但不包含在嵌套中;
下载
在 Plugins 搜索 MetricsReload 并下载,重启IDEA
使用
- 右键 - Analyze - Calculate Metrics
- 选择分析对象和方法
- 结果
参数介绍:
ev(G) 基本复杂度是用来衡量程序非结构化程度的,非结构成分降低了程序的质量,增加了代码的维护难度,使程序难于理解。因此,基本复杂度高意味着非结构化程度高,难以模块化和维护。实际上,消除了一个错误有时会引起其他的错误。
iv(G) 模块设计复杂度是用来衡量模块判定结构,即模块和其他模块的调用关系。软件模块设计复杂度高意味模块耦合度高,这将导致模块难于隔离、维护和复用。模块设计复杂度是从模块流程图中移去那些不包含调用子模块的判定和循环结构后得出的圈复杂度,因此模块设计复杂度不能大于圈复杂度,通常是远小于圈复杂度。
v(G) 是用来衡量一个模块判定结构的复杂程度,数量上表现为独立路径的条数,即合理的预防错误所需测试的最少路径条数,圈复杂度大说明程序代码可能质量低且难于测试和维护,经验表明,程序的可能错误和高的圈复杂度有着很大关系