SonarQube Community Edition 7.7重复率计算与文档公式不符咨询
关于SonarQube 7.7社区版重复率计算逻辑的解惑
嗨,我帮你梳理下这个问题——你遇到的重复率数值差异,核心是对公式里的lines理解错了,官方文档里的这个参数并不是项目的总代码行数,而是有特定范围的。
关键误解点:公式里的lines是「可被重复检测的代码行」
SonarQube计算重复率时,分母lines只统计符合检测规则的有效代码行,会自动排除以下内容:
- 注释、空行、纯空白字符行
- 自动生成的代码(比如框架生成的模板代码、构建脚本自动输出的部分)
- 你在项目配置里主动排除的第三方库代码、未开启检测的测试代码
- 部分语言的固定语法行(比如Java的
package声明、import语句,Python的from...import行等)
你的例子为什么会有差异?
你用41834作为分母计算出2.3%,但Sonar显示1.4%,大概率是因为:
- 你用的
41834是项目总行数,而Sonar实际参与计算的lines(可检测行)远大于这个数(比如假设是68357,那957/68357*100≈1.4%,就和显示结果一致了) - 另外,Sonar的重复行统计是基于连续重复代码块的,7.7版本社区版默认阈值是至少10行连续重复的有效代码才会被标记,零散的单一行重复不会被计入
duplicated_lines,这也可能导致你手动统计的重复行数和Sonar的统计有偏差。
如何验证正确的计算逻辑?
你可以在项目的「Measures」页面,找到「Duplication」分类下的详细统计:
- 查看「Lines」对应的数值(这就是公式里的分母)
- 用这个数值和「Duplicated Lines」相除再乘100,就能得到Sonar显示的重复率了。
内容的提问来源于stack exchange,提问作者Ryan
相关产品推荐
相关产品推荐

