代码之家  ›  专栏  ›  技术社区  ›  Yassine Badache buddha

衡量代码质量时的代码行与指令行

  •  5
  • Yassine Badache buddha  · 技术社区  · 6 年前

    我有一个由许多模块组成的项目。我两者都在运行 JaCoCo 对于单元测试覆盖率和 Sonar 对于代码质量。

    出于技术原因,我不能将JaCoCo报告用于我的一个模块(GWT会擦除 target 文件夹和我还无法通过此问题)。

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

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

    JaCoCo显示的总指令数为145k。

    声纳显示总共有75k LOC。


    不是吗 相当地 同样的?我错过什么了吗?无论我给他提供什么报告,JaCoCo都会考虑整个项目吗?有什么可能解释这种测量差距?

    1 回复  |  直到 6 年前
        1
  •  10
  •   Godin    6 年前

    他们不是很一样吗?

    一点也不。

    从…起 http://www.jacoco.org/jacoco/trunk/doc/counters.html :

    JaCoCo计数的最小单位是单个Java 字节代码 说明书

    “指令”和“代码行”的比较就像苹果和桔子的比较——它们并不代表同一件事。单行代码通常包含许多字节码指令。

    例如

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

    是一行,但有3个字节码指令,可以使用 javap (Java Class File Disassembler) :

         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通过分析源代码来计算这个数字。

    推荐文章