天天看點

Sonar關鍵名額計算ArchitectureComplexityDuplicationGeneralRulesTests

Architecture

1.      Architecture---Total Quality Plugin    架構品質

ARCH = 100 – TI(複雜度名額)

Complexity

2.      Complexity--- Quality Index Plugin  圈複雜度

也被稱為McCabe度量。它簡單歸結為一個方法中’if’,‘for’,’while’等塊的數目。當一個方法的控制流分割,圈計數器加1. 除不被認為是方法的通路器外,每個方法預設有最小的值1,是以不會增加複雜度。對于以下的每一個java關鍵字/語句,圈複雜度均會加1。注意else, default及finally不會增加CCN的值。另一方面,一個含switch語句及很大塊case語句的簡單方法可以擁有一個令人驚訝的高的CCN值(同時,當将switch塊轉化為等效的if語句時,它具有相同的CCN值)。

3.     Averagecomplexity by method  方法的平均圈複雜度

4.     Complexitydistribution by method  方法複雜度的分布

5.     Averagecomplexity by class  類的平均圈複雜度

6.     Complexitydistribution by class  類複雜度的分布

7.     Averagecomplexity by file  檔案平均複雜度

8.      ComplexityFactor--- Quality Index Plugin  複雜度因素

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

9.      QIComplexity---Quality Index Plugin  複雜度品質名額

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

Design

10.  DesignClasses and Methods Complexity--- Total Quality Plugin 類和方法複雜度

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

11.  DesignCoupling Between Objects--- Total Quality Plugin  對象間耦合度

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

12.    Design Depth of Inheritance Tree--- TotalQuality Plugin  繼承樹深度

繼承樹深度(DIT)度量為每個類提供一個從對象層次結構開始的繼承等級度量。在Java中,所有的類繼承于Object,DIT最小值是1.

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

13.  DesignLack of Cohesion of Methods--- Total Quality Plugin  方法内聚度

用來說明class内部方法和變量之間的關系,值越大, 說明内聚性越差. 一般情況下 LCOM4=1是内聚性最佳的,2說明可以拆成兩個類,依次類推。

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

14.   Design Response for Class--- Total QualityPlugin  類的響應集合

類的響應集合是 在響應被類的某個對象接收到的一條資訊時,可能被執行的方法集合。RFC是這個方法集合裡面方法的數量。

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

15.   Design Quality--- Total Quality Plugin  設計品質

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

16.   Package tangle index  包複雜指數

此參數為包的複雜等級,最好的值為0%,意味着包之間沒有圈依賴;最差的值為100%,意味着包與包之間的關系特别的複雜。

PCI = 2 * (package_tangles / package_edges_weight) * 100

Documentation

17.   Physicalline  實體行數

回車數目

18.  Linesof code 有效代碼行數

Lines of code  = physical lines - blank lines - comment lines- header file comments - commented-out lines of code

19.   Comment lines  注釋行數

Javadoc、多行注釋、單行注釋的總數。不包括空注釋行、頭檔案中的注釋(主要用于定義許可證)以及commented-out行。

20.   Commented-out LOC  注釋代碼行數

注釋掉的代碼行數。Javadoc塊不會被掃描。

21.   Comments (%)  注釋率

Comments = comment lines / (lines of code + comments lines) * 100%

22.   Public documented API (%)  添加注釋的公有API百分比

(public API -undocumented public API) / public API * 100%

23.   Public undocumented API  未添加注釋API數

Duplication

24.   DRYness –-- Total Quality Plugin 重複度

DRYNESS = 100 - Duplicated lines density

25.    Duplicated blocks  重複塊數

26.    Duplicated files  重複檔案數

27.   Duplicated lines  重複行數

28.   Duplicated lines (%)  重複行占總行數的百分比

29.   Useless Duplicated Lines---Useless CodeTracker 無用的重複行數

目前的Sonar告訴你有50重複的行數,但是不能告訴你是有兩塊25行的代碼重複(這樣你可以節省25行代碼)還是有5塊10行(這樣你可以節省40行代碼)的代碼重複;通過這個插件,你可以擷取到額外的資訊。

General

30.  AnalysabilityValue--- SIG Maintainability Model  可了解性

31.   Changeability Value--- SIG MaintainabilityModel 可擴充性

32.   Stability Value--- SIG Maintainability Model 穩定性

33.   Testability Value--- SIG Maintainability Model可測試性

SoftwareImprovement Group(SIG) 是一個可維護性模型,通過Analysability ,Changeability ,Stability ,Testability 4個代表軟體可維護性四維的先進名額,可以得到可維護性排名。

這個模型需要兩步: 計算基數的名額,然後結合他們計算出更高層面上的數值。每一個名額被分成5級别排名:從--(很糟糕)到++(非常好)

第一步得到基數的名額。

Volume: 基于代碼的行數

Rank LOC
-- > 1310000
- > 655000
> 246000
+ > 66000
++ > 0

Duplications: 基于代碼重複的密度

Rank Duplication
-- > 20%
- > 10%
> 5%
+ > 3%
++ > 0%

Unit tests:  基于單元測試覆寫率

Rank Coverage
++ > 95%
+ > 80%
> 60%
- > 20%
-- > 0%

Complexity: 基于方法的圈複雜度

(1)    根據圈複雜度的範圍确定在方法代碼行中的百分比。

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

(2)    根據分布,我們使用下面的表格來計算等級:

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

Unit size: 基于方法代碼的行數

(1)    根據行數的範圍确定方法代碼行數的百分比。

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

(2)    根據分布,使用下面的表格來計算等級:

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

第二步是通過一個簡單的平均,将他們結合起來,使用以下映射表來确定最終等級.

Volume Complexity Duplications Unit size Unit tests
analysability
changeability
stability
testability

通過将4個名額簡單的結合在一塊,可以得到可維護性排名。需要注意的是,圖表的顔色代表實際結合後的值,從紅色=--到綠色=++。

34.    QualityIndex--- Quality Index Plugin  品質名額

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

35.  TechnicalDebt ($)---Technical Debt Plugin  清除所有技術債務需要的花費

36.  TechnicalDebt in days---Technical Debt Plugin  需要多少人日去解決技術債務

37.  TechnicalDebt ratio---Technical Debt Plugin  技術債務占整個項目的比例

38.  TotalQuality--- Total Quality Plugin  總體品質

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

39.  Lastcommit date  最近一次送出的時間

40.  Revision  資源的最新版本号

41.  Authorsby line  每行代碼最後的送出者

42.  Revisionsby line  每行代碼最新的版本号

Management

43.  Burnedbudget  燃盡預算

44.  Businessvalue  商業價值

45.  Teamsize  團隊規模

Rules

46.  Blockerviolations  阻礙性違規

47.  CodeQuality--- 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

48.  Criticalviolations  嚴重違規

49.  DeadCode--- Useless Code Tracker  無作用程式代碼

50.  Infoviolations  建議級别違規

51.   Major violations  重要違規

52.   Minor violations  次要違規

53.  PotentialDead Code--- Useless Code Tracker  代碼未使用的protected方法數

此參數可通過 PMD :UnusedProtectedMethod 或者 SQUID : UnusedProtectedMethod 擷取到。計算他們行數的和值。

54.  QICoding Violations---Quality Index Plugin 代碼違規品質名額(PMD指數)

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

55.  QICoding Weighted Violations---Quality Index Plugin  代碼違規權重名額

通過每個級别的相關系數,違規權重的總和(Sum(xxxxx_violations *xxxxx_weight))

56.  QIStyle Violations---Quality Index Plugin  風格違規品質名額(CheckStyle規則指數)

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

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

57.  QIStyle Weighted Violations---Quality Index Plugin  風格違規權重品質名額

58.  Rulescompliance  遵守規則率

100 - weighted_violations / Linesof code * 100

59.  Securityrules compliance--- Security Rules Plugin Security規則遵守率

60.   Security violations--- Security Rules Plugin  符合Security規則數目

61.  Violations  違規總數

62.  WeightedSecurity Violations--- Security Rules Plugin Security規則權重值(總數)

63.  Accessors   Getter及setter方法的數量

64.  ArtifactSize (Kb)--- Artifact Size Plugin記錄最終産品大小

65.  Classes  類總數

66.  Files  檔案數

67.  Lines  檔案中行數

68.  Linesof code代碼行數

69.  Methods  方法數目

70.  Packages  包數目

71.  Packageedges weight  包之間的檔案依賴總數

72.  Packagetangle index  包的複雜度名額

給出包的複雜等級,最好的值為0%,意味着沒有一個循環依賴;最壞的值為100%,意味着包與包之間存在大量的循環依賴。

2 * (package_tangles / package_edges_weight)* 100

73.  PublicAPI  公共類、公共方法(不包括通路器)以及公共屬性(不包括publicfinal static類型的)的數目

74.  Filecycles一個包内被檢測到的檔案循環依賴的最小數目

以便于确定所有不需要的依賴。

75.  Suspectfile dependencies可去除的檔案依賴數

以去除包内檔案之間的循環依賴。警告:包内檔案的循環依賴不一定是不好的。

76.  Fileedges weight  包内檔案依賴的總數

77.  Filetangle index  包内檔案複雜度

2 * (file_tangles /file_edges_weight) * 100.

78.  Statements  Java語言規範中沒有塊定義的語句數目

此數目在遇到含有if,else, while, do, for, switch, break, continue, return, throw, synchronized,catch, finally等關鍵字的語句時增加, 語句數目不會随着以下情況增加,類、方法、字段、注釋定義、包以及import定義。

79.  TotalUseless Code-- Useless Code Tracker可以删除的代碼行數

Tests

80.   Coverage 覆寫率

coverage = (CT + CF + LC)/(2*B +EL)

CT -條件至少一次為“true”的分支

CF -條件至少一次為“false”的分支

LC -覆寫的行數(lines_to_cover - uncovered_lines)

B -分支的總數量(2*B = conditions_to_cover)

EL –可執行代碼的總行數 (lines_to_cover)

81.  Linecoverage  行覆寫率

Line coverage = LC / EL

LC – 覆寫的行數 (lines_to_cover - uncovered_lines)

EL – 可執行的代碼行數 (lines_to_cover)

82.  QITest Coverage---Quality Index Plugin  測試覆寫率品質名額

83.  Branchcoverage 分支覆寫率

Branch coverage = (CT + CF) /(2*B)

CT – 條件至少一次為“true”的分支

CF – 條件至少一次為“false”的分支

(CT + CF = conditions_to_cover -uncovered_conditions)

B –分支的總數量 (2*B = conditions_to_cover)

84.  Skippedunit tests  忽略的單元測試數

85.  TestingQuality--- Total Quality Plugin 測試品質

Test = 0.80*COV + 0.20*SUC

COV = Code coverage

SUC = Unit Tests success density

86.   Uncovered lines  未覆寫行數

87.   Unit test errors  單元測試出錯數

88.   Unit test failures  單元測試失敗數

89.   Unit test success (%)  單元測試成功率

90.   Unit tests 單元測試個數

91.   Unit tests duration  單元測試需要的時間