【质量文化第五弹】正确理解单测覆盖率数据

211 阅读2分钟

项目一般在单元测试或集成测试阶段统计代码覆盖率,统计代码覆盖率的根本目的是找出潜在的遗漏用例,并有针对性的进行补充。本文旨在纠正研发工程师对覆盖率数据的一些误解,以期大家都能写出高质量高场景覆盖率的单元测试。

以下对覆盖数据进行一些解读:

- 行 vs 可执行代码行

行覆盖率中的"行"是指可执行代码行,而不是源文件中所有的行。特别的:注释,该行只包含标点符号,Import, 声明, 定义时的方法(函数)名;被拆分为多行代码块中的非首行;都会被覆盖率工具忽略

image.png

- 可执行行 vs 语句

由于覆盖率工具最小维度是行,代码执行到本行,即表示命中覆盖。但有些语言支持多个语句放在同一行,或者支持三目运算符的语言,需要确保流程控制的每个边界情况(即分支)都被执行(覆盖)

image.png

- 可执行覆盖 vs 用例集覆盖

一个谬论:我们知道,拥有未覆盖的代码意味着我们的测试可能遗漏了重要的场景,但反过来并不成立。实际上,经过充分测试的代码 ≠ 高覆盖率。

对于100%命中覆盖的行, 需要考虑是扩展用例集覆盖(有效等价类,无效等价类, 边界)

image.png

以下都为100%代码行覆盖率的单测用例。若只关注行覆盖 ,则导致部分场景未被覆盖到 bug流露到生产环境。

image.png

总结

让单测用例尽可能全面,但不要考虑行覆盖率。这意味着编写尽可能多的测试用例,而不仅仅实现最大行覆盖率的最小测试用例集。即:

image.png


以上是我在公司宣传的质量内建系列的第五期内容。

后续的每一期内容我都会及时发布在掘金的工程师质量文化专栏,欢迎大家关注,共同进步。 若需要原始海报资料,可以在文章下边评论留言,或是私信我获取。

最后,照例给大家看下我们在公司张贴的海报吧~

正确理解覆盖率数据.png