代码质量分析指标说明

1、认知复杂度(Cognitve Complexity)

  认知复杂度是衡量一个方法的控制流程有多困难去理解,具有高认知复杂度的方法将难以维护。sonar要求复杂度要在15以下。

    认知复杂度的计算:

        (1)&&、||    条件判断符号 +1

        (2)if、else if、else、switch    分支语句+1

        (3)for、while、do while    循环语句+1

        (4)catch    捕获异常语句+1

        (5)break、continue    中断语句+1

        (6)如果if、for、while、do while、catch存在嵌套时,里层的语句相对于外层+1。

2、圈复杂度(Cyclomatic Complexity)

  圈复杂度是调用方法时取得的线性独立路径的总数,基于if,switch,while和类似的分支语句的数量. 如果一个方法没有这样的语句存在,就表示方法中只有一条可行路线,这样的情况下圈  复杂度的值为1.  

  圈复杂度告诉你两件重要事. 首先,它指出一个方法的综合复杂度. 值越低越好,如果数值较高,就说明方法可能覆盖了过多不同情况的处理(例如,尝试做太多容错处理),说明方法需要分解成更简单的只满足一种情况的单一职责方法(这样会更容易维护).

  其次,为了确保每种情况都被完全地测试,你必须为每条路线创建唯一的测试用例. 圈复杂度告诉你需要写多少个测试用例来确保所有可能的情况都已经被覆盖.

  如果一个代码段的圈复杂度值多于测试用例的数量,你就会发现有些情况没有被处理,而且可能藏匿着bug.

3、继承深度(Depth of Inheritance)

  继承深度是表示一个类的继承的级数,起始值为1(所有类都是继承自Object).

  该值是越低越好; 如果继承深度在3或4以上,你的代码可能超出设计标准(over-engineered),说明代码是难以维护的.

  数值越高,就越多子类需要修改 -- 消耗时间和金钱,也潜在地引入bug -- 如果你对基类做出重大变更的话.

4、类耦合度(Class Coupling)

  通过参数、局部变量、返回类型、方法调用、泛型或模板实例化、基类、接口实现、在外部类型上定义的字段以及属性修饰来衡量与唯一类的耦合程度。该计算不包括基元类型和内置类型,例如 int32、字符串和对象。良好的软件设计要求类型和方法应具有较高的内聚力和较低的耦合。耦合较高表示设计难以重用和维护,这是因为它与其他类型之间存在许多依存关系。

  该值是越低越好; 值越高,就代表类绑定了越多类,也意味着存在越多依赖关系在它的中间.

  随着类的耦合度的增加,它就会变得难以分离出来用在另一个项目中. 简单来讲,类的耦合度越高,它的重用性就越低.

5、代码行数(Lines of Code)

  指明代码中的大概行数。该计数基于 IL 代码,因此并不是源代码文件中的确切行数。该计算不包括空白、注释、括号以及成员、类型和命名空间的声明。计数过高可能表示某个类型或方法正在尝试执行过多的工作,应予以拆分。还可能表示该类型或方法难以维护。

6、可维护指数(Maintainability Index)

  一个介于 0 和 100 之间的指数值,表示维护代码的相对容易度。值越大表示可维护性越好。该计算基于 Halstead Volume、圈复杂度和代码的行数。按颜色标记的等级可用于迅速发现代码中的故障点。绿色等级介于 20 和 100 之间,表示代码的可维护性良好。黄色等级介于 10 和 19 之间,表示代码的可维护性中等。红色等级是介于 0 和 9 之间的等级,表示可维护性低。

7、SonarQube中的质量指标

  设计指标比较多,具体可以参考以下链接:

  sonar 中质量指标(度量)

  官方指标说明

 

参考:https://blog.csdn.net/tzydzj/article/details/109155393

 

   https://blog.csdn.net/zh_geo/article/details/52954145

   https://baike.baidu.com/item/%E4%BB%A3%E7%A0%81%E5%BA%A6%E9%87%8F

posted @ 2021-03-09 14:52  葱爆肥牛  阅读(756)  评论(0编辑  收藏  举报