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 單元測試需要的時間