代码行VS指令在测量代码质量时

时间:2018-03-30 08:58:11

标签: java sonarqube jacoco loc

我有一个由众多模块组成的项目。我为单元测试覆盖率运行JaCoCo,为代码质量运行Sonar

由于技术原因,我无法将JaCoCo报告用于我的某个模块(GWT会删除target文件夹,但我还无法解决此问题。)

假设我有8个模块,从1到8。 其中一个仅适用于域对象,因此我不想用我的测试来覆盖它。另一个专用于自动生成的类。

JaCoCo运行5个模块,Sonar运行6个模块。

JaCoCo显示的总指示是145k。

声纳显示总共75k LOC。

他们相当不一样吗?我错过了什么 ? JaCoCo是否考虑了整个项目,无论我喂他什么报告?什么可以解释这种测量差距?

1 个答案:

答案 0 :(得分:3)

  

Aren他们一模一样吗?

完全没有。

来自http://www.jacoco.org/jacoco/trunk/doc/counters.html

  

JaCoCo计算的最小单位是单个Java 字节代码指令。

比较"说明"使用"代码行"就像苹果和橘子的比较 - 它们不代表同样的东西。单行代码通常包含许多字节码指令。

例如

System.out.println("Hello, World!");

是单行,但使用javap (Java Class File Disassembler)可以看到3字节码指令:

     0: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;
     3: ldc           #3                  // String Hello, World!
     5: invokevirtual #4                  // Method java/io/PrintStream.println:(Ljava/lang/String;)V
BTW JaCoCo也统计线条。但是在将这个与SonarQube中的LoC进行比较时,请考虑到计算算法是不同的 - JaCoCo通过分析编码器在字节码中记录的信息来计算这个数字,而SonarQube通过分析源代码来计算这个数字。