美文网首页
Jacoco 0.8.5 增量代码覆盖率生成

Jacoco 0.8.5 增量代码覆盖率生成

作者: 苏小小北 | 来源:发表于2022-07-28 11:39 被阅读0次

    增量代码覆盖率的生成

    • 获取修改代码内容

    利用git工具(org.eclipse.jgit库)对比测试分支与master分支,获取新增和修改的代码。使用DiffCommand方法比较两个版本的代码差异,按照Java代码格式进行代码文件过滤,路径一般是src/main/java,从源代码文件中,过滤掉非java文件。

    • 生成增量代码报告

    JaCoCo工具是通过字节码操作框架asm(org.objectweb.asm)库对编译后的class进行遍历计算生成覆盖率报告的。

    计算方式是:

    加载所有的exec文件数据,遍历class文件,找出匹配的ExecutionData,再利用asm框架,分析计算得到覆盖率数据。阅读JaCoCo源码(0.8.5版本)后,重写ClassProbesVisitor和MethodCoverageCalculator。

    1. 重写ClassProbesVisitor的addMethodCoverage方法
    private void addMethodCoverage(final String name, final String desc,
            final String signature, final InstructionsBuilder icc,
            final MethodNode methodNode) {
        ...
        if (mc.containsCode()) {
            // 判断是否在修改代码中
            ...
            if (contains) {
                // 属于增量代码
                coverage.addMethod(mc);
            }
        }
    }
    
    1. 重写MethodCoverageCalculator的calculate方法
    void calculate(final MethodCoverageImpl coverage) {
        ...
        for (final Entry<AbstractInsnNode, Instruction> entry : instructions
                .entrySet()) {
            if (!ignored.contains(entry.getKey())) {
                final Instruction instruction = entry.getValue();
                if (inModifiedLines) {
                    // 属于增量代码,计算分析覆盖率
                    coverage.increment(instruction.getInstructionCounter(),
                            instruction.getBranchCounter(), instruction.getLine());
                }
            }
        }
        ...
    }
    

    除了增量代码覆盖率,还可以细分到代码分支、需求级别覆盖率,更多见https://zhuanlan.zhihu.com/p/429813264

    相关文章

      网友评论

          本文标题:Jacoco 0.8.5 增量代码覆盖率生成

          本文链接:https://www.haomeiwen.com/subject/vhazirtx.html