"聊点干货"

覆盖率技术基础

截止到 Go1.15.2 以前,关于覆盖率技术底层实现,以下知识点您应该知道:

依托于 go 语言官方强大的工具链,大家可以非常方便的做单测覆盖率收集与统计。但是集测/E2E 就不是那么方便了。不过好在我们现在有了https://github.com/qiniu/goc

集测覆盖率收集利器 - Goc 原理

关于单测这块,深入 go 源码,我们会发现go test -cover命令会自动生成一个_testmain.go 文件。这个文件会 Import 各个插过桩的包,这样就可以直接读取插桩变量,从而计算测试覆盖率。实际上goc也是类似的原理 (PS: 关于为何不直接用go test -c -cover 方案,可以参考这里 我们是如何做 go 语言系统测试覆盖率收集的?

不过集测时,被测对象通常是完整产品,涉及到多个 long running 的后端服务。所以 goc 在设计上会自动化会给每个服务注入 HTTP API,同时通过服务注册中心goc server来管理所有被测服务。如此的话,就可以在运行时,通过命令goc profile实时获取整个集群的覆盖率结果,当真非常方便。

整体架构参见:

代码覆盖率的最佳实践

技术需要为企业价值服务,不然就是在耍流氓。可以看到,目前玩覆盖率的,主要有以下几个方向:

而相较于落地方向,作为广大研发同学,下面这些最佳实践可能对您更有价值:

谷歌有篇博客 (见参考资料) 提到,其经验表明,重视代码覆盖率的团队通常会更加容易培养卓越工程师文化,因为这些团队在设计产品之初就会考虑可测性问题,以便能更轻松的实现测试目标。而这些措施反过来会促使工程师编写更高质量的代码,更注重模块化。

最后,欢迎加入七牛云 Goc 交流群,我们一起聊聊 goc,聊聊研发效能那些事。

更多工程效能、测开技术讨论可以关注公账号: 大卡尔

参考资料


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