Yas*_*che 4 java loc jacoco sonarqube
我有一个由众多模块组成的项目。我正在运行JaCoCo以进行单元测试覆盖率和Sonar以确保代码质量。
由于技术原因,我无法为我的模块之一使用 JaCoCo 报告(GWT 删除了 target文件夹这个问题)。
假设我有 8 个模块,从 1 到 8。其中一个仅用于域对象,所以我不想用我的测试覆盖它。另一个也是如此,专用于自动生成的类。
JaCoCo 在 5 个模块上运行,Sonar 在 6 个模块上运行。
JaCoCo 显示的总指令数为 145k。
声纳显示总共 75k LOC。
他们不是完全一样吗?我错过了什么 ?无论我给他提供什么报告,JaCoCo 是否都考虑了整个项目?什么可以解释这种测量差距?
他们不是完全一样吗?
一点也不。
从http://www.jacoco.org/jacoco/trunk/doc/counters.html:
JaCoCo 计数的最小单位是单个 Java字节码指令。
“指令”与“代码行”的比较就像苹果和橘子的比较——它们代表的不是同一个东西。单行代码通常包含许多字节码指令。
例如
System.out.println("Hello, World!");
Run Code Online (Sandbox Code Playgroud)
是一行,但是可以看到使用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
Run Code Online (Sandbox Code Playgroud)
顺便说一句,JaCoCo 也计算行数。但是在将这个与 SonarQube 中的 LoC 进行比较时,请考虑到计算算法是不同的 - JaCoCo 通过分析编译器记录在字节码中的信息来计算这个数字,而 SonarQube 通过分析源代码来计算这个数字。
| 归档时间: |
|
| 查看次数: |
1738 次 |
| 最近记录: |