什么是代码覆盖率?你如何衡量它?

有人问我这个关于自动化测试代码覆盖率的问题。似乎在自动化工具之外,它更像是艺术而不是科学。是否有任何关于如何使用代码覆盖的实际示例?


当前回答

代码覆盖率测试的目的是找出有多少代码被测试。代码覆盖工具生成一个报告,其中显示了多少应用程序代码已经运行。代码覆盖率以百分比来衡量,越接近100%越好。这是一个白盒测试的例子。下面是一些用于代码覆盖率测试的开源工具:

Simplecov -用于Ruby Coverlet -用于。net Cobertura -用于Java cover .py -用于Python Jest -用于JavaScript

其他回答

对于Perl,有优秀的Devel::Cover模块,我经常在我的模块上使用它。

如果构建和安装由Module:: build管理,你可以简单地运行./ build testcover来获得一个漂亮的HTML站点,它告诉你每个子、行和条件的覆盖率,漂亮的颜色可以很容易地看到哪些代码路径没有被覆盖。

代码覆盖率只是对所测试代码的度量。有多种可以度量的覆盖标准,但通常是程序中的各种路径、条件、函数和语句构成了总覆盖。代码覆盖率度量是执行每种覆盖率标准的测试的百分比。

至于我如何跟踪项目中的单元测试覆盖率,我使用静态代码分析工具来跟踪。

在前面的回答中已经很好地解释了代码覆盖率。所以这更像是对问题第二部分的回答。

我们使用了三个工具来确定代码覆盖率。

JTest - a proprietary tool built over JUnit. (It generates unit tests as well.) Cobertura - an open source code coverage tool that can easily be coupled with JUnit tests to generate reports. Emma - another - this one we've used for a slightly different purpose than unit testing. It has been used to generate coverage reports when the web application is accessed by end-users. This coupled with web testing tools (example: Canoo) can give you very useful coverage reports which tell you how much code is covered during typical end user usage.

我们使用这些工具

检查开发人员已经编写了良好的单元测试 确保在黑盒测试期间遍历所有代码

请记住,拥有“100%代码覆盖率”并不意味着所有内容都被完全测试了——虽然这意味着每一行代码都被测试了,但这并不意味着它们在每种(常见)情况下都被测试了。

我将使用代码覆盖率来突出显示我可能应该为其编写测试的代码。例如,如果任何显示myImportantFunction()的代码覆盖工具在运行我当前的单元测试时没有执行,那么它们可能应该得到改进。

基本上,100%的代码覆盖率并不意味着您的代码是完美的。使用它作为编写更全面(单元)测试的指南。

代码覆盖率测试的目的是找出有多少代码被测试。代码覆盖工具生成一个报告,其中显示了多少应用程序代码已经运行。代码覆盖率以百分比来衡量,越接近100%越好。这是一个白盒测试的例子。下面是一些用于代码覆盖率测试的开源工具:

Simplecov -用于Ruby Coverlet -用于。net Cobertura -用于Java cover .py -用于Python Jest -用于JavaScript