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 语句数

你可能感兴趣的:(Sonar,代码质量)