衡量代码质量时的代码行 VS 指令
Lines of Code VS Instructions while measuring code quality
我有一个由许多模块组成的项目。对于代码质量,我 运行 都 JaCoCo for unit tests coverage and Sonar。
出于技术原因,我无法为我的模块之一使用 JaCoCo 报告(GWT 删除了 target
文件夹,我无法解决这个问题)。
假设我有 8 个模块,从 1 到 8。
其中之一仅适用于域对象,因此我不想用我的测试覆盖它。另一个也一样,专用于自动生成 类.
JaCoCo 在 5 个模块上运行,Sonar 在 6 个模块上运行。
JaCoCo 显示的指令总数为 145k。
Sonar 显示总共 75k LOC。
他们很不一样吗?我错过了什么 ?无论我向他提供什么报告,JaCoCo 是否考虑了整个项目?什么可以解释这种测量差距?
Aren't they quite the same ?
完全没有。
来自 http://www.jacoco.org/jacoco/trunk/doc/counters.html :
The smallest unit JaCoCo counts are single Java byte code instructions.
"instructions" 与 "lines of code" 的比较就像苹果和橙子的比较 - 它们不代表相同的东西。单行代码通常包含很多字节码指令。
例如
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
顺便说一句,JaCoCo 也计算行数。但在与 SonarQube 中的 LoC 进行比较时,请注意计算算法不同 - JaCoCo 通过分析编译器在字节码中记录的信息来计算此数字,而 SonarQube 通过分析源代码来计算此数字。
我有一个由许多模块组成的项目。对于代码质量,我 运行 都 JaCoCo for unit tests coverage and Sonar。
出于技术原因,我无法为我的模块之一使用 JaCoCo 报告(GWT 删除了 target
文件夹,我无法解决这个问题)。
假设我有 8 个模块,从 1 到 8。 其中之一仅适用于域对象,因此我不想用我的测试覆盖它。另一个也一样,专用于自动生成 类.
JaCoCo 在 5 个模块上运行,Sonar 在 6 个模块上运行。
JaCoCo 显示的指令总数为 145k。
Sonar 显示总共 75k LOC。
他们很不一样吗?我错过了什么 ?无论我向他提供什么报告,JaCoCo 是否考虑了整个项目?什么可以解释这种测量差距?
Aren't they quite the same ?
完全没有。
来自 http://www.jacoco.org/jacoco/trunk/doc/counters.html :
The smallest unit JaCoCo counts are single Java byte code instructions.
"instructions" 与 "lines of code" 的比较就像苹果和橙子的比较 - 它们不代表相同的东西。单行代码通常包含很多字节码指令。
例如
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
顺便说一句,JaCoCo 也计算行数。但在与 SonarQube 中的 LoC 进行比较时,请注意计算算法不同 - JaCoCo 通过分析编译器在字节码中记录的信息来计算此数字,而 SonarQube 通过分析源代码来计算此数字。