浅谈代码覆盖率局限性

2021-09-29 10:09发布

就代码覆盖率来说,最为大家诟病的一点就是:100%的代码覆盖率并不能说明系统质量没有问题。

因为代码的执行顺序和函数的参数值,都可能是千变万化的。一种情况被覆盖到,不代表所有情况都会被覆盖到。

做过测试的同学都知道,我们所用到的等价类、边界值、因果图等方法,就是为了使用不同的测试数据来对某个功能点进行验证,这里说到的「已经被测试行为覆盖的代码」特指:至少被执行一次的测试行为,并不能展示出来那些「未考虑的异常数据」以及「未处理的异常情况」。

如果一个被测函数里面只有一行代码,只要这个函数被调用过了,那么衡量这一行代码质量的所有覆盖率指标都会是 100%,但是这个函数是否真正实现了应该需要实现的功能呢?答案肯定是否定的。

如下图所展示的代码,这是一个解析配置文件的方法,try-catch前面的代码行都是「绿色」的(被测试覆盖的),我们能认为这一片绿色的代码质量是100%没问题吗?

当然不能!!!因为,这也许是被执行了一次的测试行为,通俗点说,只能代表「测试曾经执行过这里」,并不能代表「完整的测试执行了这片代码」。