这两天刚刚开始研究覆盖率,可能有错误请指正。

现状调研

插桩模式

除了 java 有 agent 这种运行时插桩的方式以外,大多数语言的覆盖率是需要在编译期打进去的,例如 gcc,或者 go 的 test coverage

具体方式

那么对于编译期进行打包的话,像 jacoco 需要在 maven 的 pom 文件里面增加 plugin 或者 ant 的 build 文件里面添加一些关于覆盖率的插件,c/c++/go 这些则是在编译命令后面添加一些指令,编译器在编译时就完成了覆盖率相关的工作。而 java 添加插件的方式也可以在 mvn 的命令里面动态的添加进来,例如

mvn clean install xx.jar -Dfile = <文件路径> -DgroupId = <组ID> -DartifactId = <文物ID> -Dversion = <版本> -Dpackaging = <包装> 

现状总结

大多数语言的编译期覆盖率打包,都要在编译命令中添加一些覆盖率相关的指令实现覆盖率打包

如何与 CI/CD 结合

如何让用户不用在自己的项目内去配置覆盖率相关的内容,而通过流水线上的一个插件,无侵入的实现自动覆盖率打包。

实现思路

去解析不同语言、不同插件的编译命令,然后在适当的位置插入我们的覆盖率打包指令实现一套通用的覆盖率打包方案。

是否有更好的实现方案?


↙↙↙阅读原文可查看相关链接,并与作者交流