打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Sonar参数指标全解析I | 扛一肩记忆

从本文开始,会对Sonar平台中出现的具体参数进行详细解析,供大家参考,有不对的地方,请提出来!

由于篇幅较大,分为两部分进行描述!本文为第一部分为基础指标部分。涵盖了以下几个大的方面:

API compatibility, Architecture, Complexity, Design, Documentation, Duplication, General, Management, Rules, Size, Tests, SCM, Scale.

另外,预告下第二部分,是附件部分,包括插件,帮助文档中的度量值等内容!

查看第 II 篇内容:Sonar参数指标全解析-II

您还可以参考Sonar指标图解的相关文章,以便对Sonar参数指标有更进一步直观的了解:

查看第 I 篇介绍:[Sonar图解]-Sonar指标介绍-I

查看第 II 篇介绍:[Sonar图解]-Sonar指标介绍-II

查看第 III 篇介绍:[Sonar图解]-Sonar指标介绍-III

API compatibility

1. API behavior changes---Clirr Plugin

正常接口变化数

2.  API breaks---Clirr Plugin

可能引发错误的接口变化

3.  New API---Clirr Plugin

新增接口数

4.  Total API Changes---Clirr Plugin

接口变化总数

注:以上参数需要依赖于Clirr,暂时仍存在问题

Architecture

5.  Architecture--- Total Quality Plugin

架构质量

计算方式:

ARCH = 100 – TI

TI = Tangle Index

6.  Architecture Tangle Index--- Total Quality Plugin

架构复杂指标

Complexity

7.  Complexity—默认

复杂度

8.  Complexity /class—默认

类复杂度

9.  Complexity /file—默认

文件复杂度

10.  Complexity /method—默认

方法复杂度

11.  Complexity Factor--- Quality Index Plugin

复杂度因素

计算方式:

CF = (5 * Complexity>30) * 100 / (Complexity>1 + Complexity>10 + Complexity>20 + Complexity>30)

12.  Complexity Factor Methods--- Quality Index Plugin

方法复杂度因素

13.  QI Complexity---Quality Index Plugin

复杂度质量指标

计算方式:

(Complexity>30 *10 + Complexity>20 * 5 + Complexity>10 * 3 + Complexity>1) / validLines

Design

14.  Design Classes and Methods Complexity--- Total Quality Plugin

NOM = (1 - (class_complexity - 12) / (acel * 12)) * 50 + (1 - (method_complexity - 2.5) / (acel * 2.5)) * 50

参见19

15.  Design Coupling Between Objects--- Total Quality Plugin

CBO = (1 - (efferent_coupling - 5) / (acel * 5)) * 100  

参见19

16.  Design Depth of Inheritance Tree--- Total Quality Plugin

DIT = (1 - (depth_of_inheritance_tree - 5) / (acel * 5)) * 100 

参见19

17.  Design Lack of Cohesion of Methods--- Total Quality Plugin

LCOM = (1 - (lack_of_cohesion_of_method - 1) / (acel * 1)) * 100 

参见19

18.  Design Response for Class--- Total Quality Plugin

RFC = (1 - (response_for_class - 50) / (acel * 50)) * 100 

参见19

19.  Design Quality--- Total Quality Plugin

设计质量

计算方式:

DES = 0.15*NOM + 0.15*LCOM + 0.25*RFC 0.25*CBO + 0.20*DIT

NOM = (1 - (class_complexity - 12) / (acel * 12)) * 50 + (1 - (method_complexity - 2.5) / (acel * 2.5)) * 50

LCOM = (1 - (lack_of_cohesion_of_method - 1) / (acel * 1)) * 100

RFC = (1 - (response_for_class - 50) / (acel * 50)) * 100

CBO = (1 - (efferent_coupling - 5) / (acel * 5)) * 100

DIT = (1 - (depth_of_inheritance_tree - 5) / (acel * 5)) * 100

Acel参数因子的值可以在Sonar setting页面配置。

每一个度量标准的默认阙值也可以进行配置(例如,50response_for_class的默认阈值)。

20.  LCOM4(Lack of cohesion of methods)

用来说明class内部方法和变量之间的关系, 值越大, 说明内聚性越差. 一般情况下 LCOM4=1是内聚性最佳的. 2说明可以拆成两个类, 以此类推.但是这种测量对门面服务类来说不适用. 有时候很小的类也会根据需要合并在一起, 尽管关联不大

21.  Package tangle index

包复杂指数

此参数为包的复杂等级,最好的值为0%,意味着包之间没有圈依赖;最差的值为100%,意味着包与包之间的关系特别的复杂。该指数的计算公式:

2 * (package_tangles / package_edges_weight) * 100

22.  RFC(Response for Class)

         通过检查一个方法被调用的情况来反映一个class的复杂程度. 也可以简单的理解为一个类所包含的方法多寡.

23.  Suspect LCOM4 density

LCOM4密度值

Documentation

24.  Comment lines

Javadoc、多行注释、单行注释的总数。空注释行、头文件中的注释(主要用于定义许可证)以及commented-out行均不会包括在内。

25.  Commented-out LOC

注释掉的代码行数。Javadoc块不会被扫描

26.  Comments (%)

注释行数/(注释行数+有效代码行数)

27.  Public documented API (%)

添加注释的公有API占总的公有API的百分比

28.  Public undocumented API

公有API未添加注释个数

Duplication

29.  DRYness –-- Total Quality Plugin

DRYNESS = 100 - Duplicated lines density

30.  Duplicated blocks

重复块数

31.  Duplicated files

重复文件数

32.  Duplicated lines

重复行数

33.  Duplicated lines (%)

重复行占总行数的百分比

34.  Useless Duplicated Lines---Useless Code Tracker

无用的重复行数;当前的Sonar告诉你有50重复的行数,但是不能告诉你是有两块25行的代码重复(这样你可以节省25行代码)还是有5块10行(这样你可以节省40行代码)的代码重复;通过这个插件,你可以获取到额外的信息。

General

35.  Analysability Value--- SIG Maintainability Model

可理解性

请查看37指标后的详细介绍

36.  Changeability Value--- SIG Maintainability Model

可扩展性

37.  Stability Value--- SIG Maintainability Model

稳定性

38.  Testability Value--- SIG Maintainability Model

可测试性

可维护性可通过7个质量特性来衡量:

可理解性

可测试性

可修改性

可靠性

可移植性

可使用性

效率

这个插件标示了一个Software Improvement Group(SIG)可维护性模型

这个模型需要两步: 计算基数的指标,然后结合他们计算出更高层面上的数值。

每一个指标被分成5级别排名:从--(很糟糕)到++(非常好)

第一步加上基数的指标。

Volume: 基于代码的行数

RankLOC
--> 1310000
-> 655000
0> 246000
+> 66000
++> 0

Duplications: 基于代码重复的密度

RankDuplication
--> 20%
-> 10%
0> 5%
+> 3%
++> 0%

Unit tests: 基于单元测试覆盖率

RankCoverage
++> 95%
+> 80%
0> 60%
-> 20%
--> 0%

Complexity:基于方法的圈复杂度

第一步根据圈复杂度的范围确定在方法代码行中的百分比。

Eval Complexity
Very high> 50
High> 20
Medium> 10
Low> 0

然后根据分布,我们使用下面的表格来计算等级:

Rank Medium High Very High
++< 25%< 0%< 0%
+< 30%< 5%< 0%
0< 40%< 10%< 0%
-< 50%< 15%< 5%

否则等级是--

Unit size: 基于方法代码的行数

第一步根据行数的范围确定方法代码行数的百分比。

Eval LOCs
Very high> 100
High> 50
Medium> 10
Low> 0

然后根据分布,使用下面的表格来计算等级:

Rank Medium High Very High
++< 25%< 0%< 0%
+< 30%< 5%< 0%
0< 40%< 10%< 0%
-< 50%< 15%< 5%

否则等级为--

第二步是通过一个简单的平均,将他们结合起来,使用以下映射表来确定最终等级.

Volume

Complexity

Duplications

Unit size

Unit tests

analysability

changeability

stability

testability

因此4个代表软件可维护性四维的先进指标。

可选项,通过将4个指标简单的结合在一块,可以得到可维护性排名。

需要注意的是,图表的颜色代表实际结合后的值,从红色=--到绿色=++.

39.  Profile version未知

未知

40.  Quality Index--- Quality Index Plugin

计算方式:

QI = 10 - 4.5 * coding - 2 * complexity - 2 * coverage -1.5 * style

41.  SIG MM-- SIG Maintainability Model

SIG可维护性模型,参考37

42.  Technical Debt ($)---Technical Debt Plugin

清除所有技术债务需要的花费

43.  Technical Debt in days---Technical Debt Plugin

需要多少人日去解决技术债务

44.  Technical Debt ratio---Technical Debt Plugin

技术债务占整个项目的比例

45.  Total Quality--- Total Quality Plugin

总体质量

计算方式:

TQ= 0.25*ARCH + 0.25*DES + 0.25*CODE + 0.25*TS

Management

46.  Burned budget

燃尽预算

47.  Business value

商业价值

48.  Team size

团队规模

注:以上变量为手动输入变量,另外这里可以添加一些自定义的变量

Rules

49.  Blocker violations

阻碍性违规

50.  Code Quality--- Total Quality Plugin

代码质量

计算方式:

Code = 0.15*DOC + 0.45*RULES + 0.40*DRYNESS

DOC = Documented API density

RULES = Rules compliance index

DRYNESS = 100 - Duplicated lines density

51.  Critical violations

严重违规

52.  Dead Code--- Useless Code Tracker

无作用程序代码

53.  Info violations

建议级别违规

54.  Major violations

重要违规

55.  Minor violations

次要违规

56.  Potential Dead Code--- Useless Code Tracker

当前代码中未使用的protected方法数目;

此参数可通过 PMD : UnusedProtectedMethod 或者 SQUID : UnusedProtectedMethod 获取到。

计算他们行数的和值。

57.  QI Coding Violations---Quality Index Plugin

代码违规质量指标(PMD规则指数)

计算方式:

(Blocker * 10 + Critical * 5 + Major * 3 + Minor + Info) / validLines

58.  QI Coding Weighted Violations---Quality Index Plugin

代码违规权重指标

59.  QI Style Violations---Quality Index Plugin

风格违规质量指标(CheckStyle规则指数)

计算方式:

Style = (Errors*10 + Warnings) / ValidLines * 10

QI = 10 - 4.5 * coding - 2 * complexity - 2 * coverage -1.5 * style

60.  QI Style Weighted Violations---Quality Index Plugin

风格违规权重质量指标

61.  Rules compliance

遵守规则率

62.  Security rules compliance--- Security Rules Plugin

Security规则遵守率

63.  Security violations--- Security Rules Plugin

符合Security规则数目

64.  Violations

违规总数

65.  Weighted Security Violations--- Security Rules Plugin

Security规则权重值(总数)

Size

66.  Accessors

Getter及setter方法的数量

  1. // Getters
  2.   
  3. public String getName(){   
  4.   
  5. return this.name;   
  6.   
  7. }   
  8.   
  9. public boolean isParent(){   
  10.   
  11. return this.isParent;   
  12.   
  13. }   
  14.   
  15. // Setters   
  16.   
  17. public void setName(String name){   
  18.   
  19. this.name = name;   
  20.   
  21. }   
  22.   
  23. public void setIsParent(boolean isParent){   
  24.   
  25. this.isParent = isParent;   
  26.   
  27. }  

67.  Artifact Size (Kb)--- Artifact Size Plugin

记录最终产品大小

68.  Classes

类总数

69.  Files

文件数

70.  Lines

文件中行数

71.  Lines of code

代码行数

72.  Methods

方法数目

73.  Packages

包数目

74.  Public API

公共类、公共方法(不包括访问器)以及公共属性(不包括public final static类型的)的数目。

75.  Statements

Java语言规范中没有块定义的语句数目;此数目在遇到含有if, else, while, do, for, switch, break, continue, return, throw, synchronized, catch, finally等关键字的语句时增加。例如:

  1. //   
  2.   
  3. i = 0;   
  4.   
  5. if (ok)   
  6.   
  7. if (exit) {   
  8.   
  9. if (3 == 4);   
  10.   
  11. if (4 == 4) { ; }   
  12.   
  13. } else {   
  14.   
  15. try{}   
  16.   
  17. while(true){}   
  18.   
  19. for(...){}   
  20.   
  21. ...  

语句数目不会随着以下情况增加,类、方法、字段、注释定义、包以及import定义。

76.  Total Useless Code-- Useless Code Tracker

可以删除的代码行数

Tests

77.  Coverage

覆盖率

78.  Line coverage

行覆盖率

79.  QI Test Coverage---Quality Index Plugin

测试覆盖率质量指标

80.  Skipped unit tests

忽略的单元测试数

81.  Testing Quality--- Total Quality Plugin

测试质量

计算方式:

Test = 0.80*COV + 0.20*SUC

COV = Code coverage

SUC = Unit Tests success density

82.  Uncovered lines

未覆盖行数

83.  Unit test errors

单元测试出错数

84.  Unit test failures

单元测试失败数

85.  Unit test success (%)

单元测试成功率

86.  Unit tests

单元测试个数

87.  Unit tests duration

单元测试需要的时间

SCM

88.  Commits

SVN库总的提交数

89.  Last commit

最近的一次提交时间

SQALE

90.  SQALE Rating

SQALE(Software Quality Assessment based on Lifecycle Expectations)评级;

基于生命周期期望的软件质量模型

91.  SQALE Remediation Cost

SQALE整治成本

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
代码检查工具sonarqube介绍
Jenkins使用经验谈4(创建Job)转
[翻译]Visual Studio2008的新功能:代码度量
Jenkins Docker持续集成
按键精灵遍历所有父子窗口句柄,带注释[更新]
[做题要思考的问题]信息学竞赛之设计获胜策略
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服