是什么代码复盖率和你如何测量?

我是问这个问题对我们实行自动化测试的代码复盖范围。这似乎是,外部的自动化工具,是艺术多于科学。是否有任何现实世界的例子如何使用代码复盖范围吗?

有帮助吗?

解决方案

代码覆盖率是在自动化测试运行时执行代码行/块/弧的度量。

使用专用工具收集代码覆盖率,以检测二进制文件以添加跟踪调用并针对已检测产品运行一整套自动化测试。一个好的工具不仅可以为您提供执行代码的百分比,还可以深入查看数据并查看在特定测试期间执行的代码行。

我们的团队使用 Magellan - 一套内部代码覆盖工具。如果您是.NET商店,Visual Studio已集成了用于收集代码覆盖率的工具。您还可以滚动一些自定义工具,如本文所述。

如果您是C ++商店,英特尔有一些工具,适用于Windows和Linux,但我还没有使用它们。我也听说有GCC的gcov工具,但我对此一无所知,也无法给你一个链接。

关于我们如何使用它 - 代码覆盖率是我们每个里程碑的退出标准之一。我们实际上有三个代码覆盖度量标准 - 来自单元测试(来自开发团队),场景测试(来自测试团队)和组合覆盖的覆盖范围。

BTW,虽然代码覆盖率是衡量您正在进行多少测试的一个很好的指标,但它并不一定是您测试产品的良好指标。您还应该使用其他指标以及代码覆盖率来确保质量。

其他提示

代码覆盖率基本上测试了测试中涵盖了多少代码。因此,如果你有90%的代码覆盖率,那么有10%的代码不在测试范围内。我知道你可能会认为90%的代码都被覆盖了,但你必须从不同的角度来看。什么阻止你获得100%的代码覆盖率?

一个很好的例子是:

if(customer.IsOldCustomer()) 
{
}
else 
{
}

现在,在上面的代码中有两个路径/分支。如果你总是点击<!>“YES <!>”;分支然后你没有覆盖else部分,它将显示在代码覆盖率结果中。这很好,因为现在您知道未涵盖的内容,您可以编写测试来覆盖其他部分。如果没有代码覆盖,那么你只是坐在定时炸弹上爆炸。

NCover 是衡量代码覆盖率的好工具。

请记住,拥有<!>“100%代码覆盖率<!>”;并不意味着所有内容都经过了全面测试 - 虽然这意味着每行代码都经过测试,但并不意味着它们在每种(常见)情况下都经过测试。

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

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

补充以往许多答案中的几点:

代码覆盖率意味着您的测试集覆盖源代码的程度。即,测试用例集涵盖的源代码的程度。

如上面的答案所述,有各种覆盖标准,如路径,条件,功能,陈述等。但是要涵盖的其他标准是

  1. 条件覆盖:要评估的所有布尔表达式的真和假。
  2. 决策覆盖范围:不仅要对布尔表达式进行一次真实和假的评估,而是覆盖所有后续的if-elseif-else体。
  3. 循环覆盖:意味着,每个可能的循环都执行了一次,多次和零次。此外,如果我们假设最大限制,那么,如果可行的话,测试最大限制时间,并且超过最大限制时间。
  4. 进入和退出覆盖范围:测试所有可能的呼叫及其返回值。
  5. 参数值覆盖范围(PVC)。检查是否测试了参数的所有可能值。例如,字符串可以是以下任何一种:a)null,b)空,c)空格(空格,制表符,新行),d)有效字符串,e)无效字符串,f)单字节字符串,g )双字节字符串。未能测试每个可能的参数值可能会留下错误。仅测试其中一个可能会导致100%的代码覆盖率,因为每行都被覆盖,但由于只测试了七个选项中的一个,意味着参数值的覆盖率仅为14.2%。
  6. 继承覆盖:对于面向对象的源,当返回由基类引用的派生对象时,如果返回兄弟对象,则应测试要评估的coverage。
  7. 注意:静态代码分析将查找是否存在任何无法访问的代码或挂起的代码,即任何其他函数调用未涵盖的代码。还有其他静态覆盖。即使静态代码分析报告涵盖100%代码,如果测试了所有可能的代码覆盖率,它也不会提供有关测试集的报告。

代码复盖率已经解释的,以及在以前的答案。所以这更是一个回答第二部分的问题。

我们已经用三种工具来确定代码的复盖范围。

  1. JTest -一个专用工具的建JUnit.(它产生单元的测试。)
  2. Cobertura -一个开放源代码复盖率的工具,可以容易地加JUnit试验产生的报告。
  3. 艾玛 -另一个-这个我们已经使用了一个稍微不同的目的,而不是单元的测试。它已被用来生成复盖的报告时,该网络应用程序访问的最终用户。这再加上网测试工具(例如:Canoo)可以得到你非常有用的复盖范围的报告,告诉你多少代码所涵盖期间典型终端用户使用。

我们使用这些工具

  • 审查开发商已经写好的单元测试
  • 确保所有代码是走在黑盒测试

代码覆盖率只是测试代码的一种度量。可以测量多种覆盖标准,但通常是程序中的各种路径,条件,功能和语句构成总覆盖范围。代码覆盖率指标只是执行每个覆盖标准的测试的百分比。

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

对于Perl,我经常使用的是出色的 Devel :: Cover 模块我的模块。

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

在之前的答案中,代码覆盖率已得到很好的解释。如果您正在使用iOSOSX平台,我只是添加了一些与工具相关的知识,Xcode提供了测试和监控代码覆盖率的工具。

参考链接:

https:// developer .apple.com /库/存档/文档/ DeveloperTools /概念/ testing_with_xcode /章节/ 07-code_coverage.html

https://medium.com/zendesk-engineering/code -coverage和 - xcode的-6b2fb8756a51

两者都是学习和探索Xcode代码覆盖率的有用链接。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top