SonarQube 指標定義

目錄

前言

複雜度(Complexity)

覆蓋率(Coverage)

重複(Duplication)

問題(Issues)

可維護性(Maintainability )

可靠性(Reliability)


前言

       由於團隊開始使用Sonar並且要確定對應的度量指標,因此爲了方便查閱,特把Sonar官方文檔中的指標翻譯成中文。由於本人水平有限,翻譯僅供參考。

複雜度(Complexity)

指標(中文) 指標(英文) 描述
複雜度 Complexity 基於代碼的分支計算出來的複雜度,即圈複雜度。當一個方法的控制流多了一個分支,它的複雜度就會增加1。每個方法的最小複雜度爲1。
理解複雜 Congnitive Complexity 理解代碼的控制流的難易程度。具體參考 https://www.sonarsource.com/resources/white-papers/cognitive-complexity.html

覆蓋率(Coverage)

指標(中文) 指標(英文) 描述
分支覆蓋 Condition coverage 被單元測試覆蓋到的分支數
分支覆蓋率 Condition coverage(%) 在包含一些布爾表達式的每一行代碼中,條件覆蓋率簡單地回答了以下問題:“是否將每個布爾表達式都計算爲true和false?”這是單元測試執行期間遵循的流控制結構中可能的條件的密度。
分支覆蓋率 = (CT + CF)/(2*B)
其中,CT爲至少一次被評估爲true的分支數,CF爲至少一次被評估爲false的分支數,B爲總分支數。
新代碼的分支覆蓋率 Condition coverage on new code 同上,但只針對新代碼和更新的代碼
代碼覆蓋率 Line coverage 代碼行覆蓋率,即被單元測試覆蓋的行數/總代碼行數
公式:LC / EL
其中, LC爲被單元測試覆蓋到的行數;EL爲總代碼行數。
新代碼覆蓋率 Line coverage on new code 新代碼行覆蓋率,公式同上,但只針對新代碼或更新的代碼
覆蓋率 Coverage 總覆蓋率,即分支覆蓋率和代碼行覆蓋率的總和,它旨在提供更加準確的數據去展現源代碼被單元測試覆蓋的程度。
公式:(CT+CF+LC)/(2*B+EL)
新覆蓋率 Coverage on new code 同上,但只針對新代碼和更新的代碼
代碼行 Lines to cover 被單元測試覆蓋的代碼行數
覆蓋的新代碼 Lines to cover on new code 被單元測試覆蓋的代碼行數(只針對新增代碼或更新的代碼)
單元測試忽略數 Skipped unit tests 忽略的單元測試用例數
未覆蓋分支 Uncovered conditions 單元測試未覆蓋的分支數
未覆蓋新分支 Uncovered conditions on new code 單元測試未覆蓋的新增分支數
未覆蓋的代碼 Uncovered lines 單元測試未覆蓋的代碼行數
未覆蓋的新代碼 Uncovered lines on new code 單元測試未覆蓋的新增代碼行數
單元測試持續時間 Unit tests duration 單元測試所持續的時間
單元測試錯誤數 Unit test errors 單元測試執行錯誤數,即運行異常
單元測試失敗數 Unit test failures 單元測試執行失敗數,即運行正常但是得到非預期結果
單元測試成功(%) Unit test success density (%) (單元測試用例數-(單元測試錯誤數+單元測試失敗數))/單元測試用例數*100
單元測試數 Unit tests 單元測試用例數

重複(Duplication)

指標(中文) 指標(英文) 描述
重複塊 Duplicated blocks 重複行塊數。如何定義一個塊是否重複塊:
JAVA類項目:
- 無論標記和行數多少,只要有至少10個連續重複的語句,則定義爲重複塊;

非JAVA類項目:
- 至少有100個連續重複的標記;
- 這些標記要至少分佈在 1)30行代碼中(如是COBOL);2)20行代碼中(如是ABAP);3)10行代碼中(如是其他語言)
新代碼中的重複塊 Duplicated blocks on new code 同上,但只針對新代碼
重複文件 Duplicated files 重複的文件數
重複行 Duplicated lines 重複的代碼行數
重複行(%) Duplicated lines (%) 重複行數/總行數*100
新代碼中的重複行 Duplicated lines on new code 同上,但只針對新代碼
新代碼中的重複行密度(%) Duplicated lines(%)on new code 同上,但只針對新代碼

問題(Issues)

指標(中文) 指標(英文) 描述
阻斷違規 Blocker violations 阻斷違規數
確認問題 Confirmed issues 確認問題數
嚴重違規 Critical violations 嚴重違規數
誤判問題 false positive violations 誤判問題數
提示違規 Info violationd 提示違規數
違規 violations 違規數
主要違規 major violations 主要違規數
次要違規 minor violations 次要違規數
新阻斷違規 New blocker violations 新阻斷違規數
新嚴重違規 New critical violations 新嚴重違規數
新提示違規 New info violations 新提示違規數
新違規 New violations 新違規數
新主要違規 New major violations 新主要違規數
新次要違規 New minor violations 新次要違規數
開啓問題 Open issues 狀態爲開啓的問題數
重開問題 Reopen issues 狀態爲重開的問題數
不修復的問題 Unfixed issues 狀態爲不修復的問題數

可維護性(Maintainability )

指標(中文) 指標(英文) 描述
技術債務 Technical Debt 修復所有可維護性問題所需的工作量,單位爲分鐘。當該值以天爲單位展示時默認爲8小時/天。
新代碼的技術債務 Technical Debt on new code 同上,但只針對新代碼。
壞味道 Code Smells 壞味道數
SQALE評級(可維護率) - 根據項目技術債務比率而給與的項目評級。默認的可維護性等級爲:
A = 0 - 0.05,即在0到5%之間
B = 0.06 - 0.1,即在6%到10%之間
C = 0.11 - 0.2,即在11%到20%之間
D = 0.21 - 0.5,即在21%到50%之間
E = 0.51 - 1,即超過50%
達到可維護性爲A級所需的工作 - 能達到上述評級爲A所需的工作量
新代碼可維護率 Maintainability Rating on new code  同上,但只針對新代碼。
新增壞味道 New code smell 新增壞味道數
技術債務比率 Technical Debt Ratio 開發成本與修復成本的比率。
該比率=修復成本/開發成本,也=修復成本/(代碼行數*每行代碼開發成本)
每行代碼開發成本爲0.06天
新技術債務比率 Technical Debt Ratio on new code 在泄漏期間修改代碼的開發成本與由此修改引入的問題成本之比。

可靠性(Reliability)

指標(中文) 指標(英文) 描述
新增漏洞 New Vulnerabilities 新增安全漏洞數
安全比率 Security Rating A = 0 安全漏洞
B = 至少1個Minor漏洞
C = 至少1個Major漏洞
D = 至少1個Critical漏洞
E = 至少1個Blocker漏洞
新代碼安全率 Security Rating on new code 同上,但只針對新代碼。
安全修復工作 Security remediation effort 修復所有安全漏洞所需的工作量,單位爲分鐘。當該值以天爲單位展示時默認爲8小時/天。
新代碼的安全修復工作 Security remediation effort on new code 同上,但只針對新代碼。
漏洞 Vulnerabilities 安全漏洞數

大小(Documentation)

指標(中文) 指標(英文) 描述
Classes 類數目
註釋行數 Comment lines

該指標包含註釋或已註釋代碼的行數。不重要的註釋行(即空註釋行、只包含特殊字符的註釋行等)不會增加註釋行數量。
以下代碼片段例子包含了9個註釋行數:

 

/**                                                    +0 => empty comment line
 *                                                     +0 => empty comment line
 * This is my documentation            +1 => significant comment
 * although I don't                            +1 => significant comment
 * have much                                   +1 => significant comment
 * to say                                           +1 => significant comment
 *                                                      +0 => empty comment line
 ***************************                 +0 => non-significant comment
 *                                                      +0 => empty comment line
 * blabla...                                         +1 => significant comment
 */                                                     +0 => empty comment line
/**                                                     +0 => empty comment line
 * public String foo() {                       +1 => commented-out code
 *   System.out.println(message);     +1 => commented-out code
 *   return message;                         +1 => commented-out code
 * }                                                    +1 => commented-out code
 */                                                     +0 => empty comment line

註釋(%) Comments(%) 註釋行數/(註釋行數+代碼行數)
目錄 Directories 目錄數
文件 Files 文件數
方法 Functions 方法數
行數 Lines 物理行數,包含回車。
代碼行數 Lines of code 代碼行數,包含至少一個非空格、非tab和非註釋的字母的代碼行數
新增代碼行數 Lines of new code 新增代碼行數,包含至少一個非空格、非tab和非註釋的字母的代碼行數
項目 Projects 項目數
語句 Statements 語句數
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章