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

Testing 什么是代码覆盖率?如何衡量它?,testing,computer-science,code-coverage,Testing,Computer Science,Code Coverage,什么是代码覆盖率?如何衡量它 有人问我这个关于我们自动化测试代码覆盖率的问题。似乎除了自动化工具之外,它更多的是艺术而不是科学。有没有关于如何使用代码覆盖率的真实示例?代码覆盖率只是测试代码的一种度量。可以测量各种覆盖率标准,但通常是程序中的各种路径、条件、函数和语句构成了总覆盖率。代码覆盖率指标只是执行每个覆盖率标准的测试的百分比 至于如何跟踪项目中的单元测试覆盖率,我使用静态代码分析工具进行跟踪。代码覆盖率是衡量在自动测试运行时执行代码的行数/块数/弧数 代码覆盖率是通过使用专门的工具来检测

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


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

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


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

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

代码覆盖率是通过使用专门的工具来检测二进制文件以添加跟踪调用并对检测的产品运行全套自动化测试来收集的。一个好的工具不仅可以提供执行代码的百分比,还可以让您深入数据,准确地查看在特定测试期间执行了哪些代码行

我们的团队使用一套内部代码覆盖工具。如果您是.NET商店,VisualStudio有集成的工具来收集代码覆盖率。您还可以滚动一些自定义工具,如描述

如果你是一个C++商店,英特尔有一些运行Windows和Linux的,虽然我没有使用它们。我也听说GCC有gcov工具,但我对它一无所知,也不能给你一个链接

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


顺便说一句,虽然代码覆盖率是衡量您进行了多少测试的一个很好的指标,但它并不一定是衡量您测试产品的一个很好的指标。除了代码覆盖率,您还应该使用其他指标来确保质量。

代码覆盖率基本上告诉您测试覆盖了多少代码。例如,如果您有90%的代码覆盖率,这意味着测试中没有覆盖10%的代码

我知道你可能会想,如果90%的代码都被覆盖了,这就足够了,但你必须从不同的角度来看待。是什么阻止你获得100%的代码覆盖率

一个很好的例子是:

if(customer.IsOldCustomer())
{
}
其他的
{
}
现在,在上面的代码中,有两个路径/分支。如果您总是点击“YES”分支,那么您没有覆盖“else”部分,它将显示在代码覆盖率结果中。这很好,因为现在您知道了没有涵盖的内容,您可以编写一个测试来涵盖“else”部分。如果没有代码覆盖,你就只是坐在一颗定时炸弹上,等待爆炸

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

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

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


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

在前面的答案中对代码覆盖率进行了很好的解释。这是对问题第二部分的回答

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

  • -在JUnit上构建的专有工具。(它还生成单元测试。)
  • -一个开源代码覆盖工具,可轻松与JUnit测试结合以生成报告
  • -另一个-这一个我们用于与单元测试稍有不同的目的。它已用于在最终用户访问web应用程序时生成覆盖率报告。这与web测试工具(例如:Canoo)相结合,可以为您提供非常有用的覆盖率报告,告诉您在典型的最终用户使用过程中覆盖了多少代码
  • 我们使用这些工具来

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

    对于Perl,我经常在模块上使用优秀的模块


    如果构建和安装由Module::build管理,您只需运行
    /build testcover
    ,即可获得一个漂亮的HTML站点,该站点会告诉您每个子项、行和条件的覆盖率,并使用漂亮的颜色,以便轻松查看未覆盖的代码路径。

    补充了前面许多答案的几点:

    代码覆盖率意味着测试集覆盖源代码的程度。i、 e.测试用例集在多大程度上涵盖了源代码

    如上所述,有各种覆盖标准,如路径、条件、函数、语句等,但需要覆盖的其他标准包括

  • 条件覆盖率:要计算的所有布尔表达式的true和false
  • 决策覆盖率:不仅要对布尔表达式求值一次true和false,还要覆盖所有后续if-elseif-else体
  • 循环覆盖率:是指每个可能的循环都执行过一次、多次和零次。此外,如果我们假设最大极限,那么,如果可行,测试最大极限次数,比最大极限次数多一次
  • 入口和出口覆盖率:测试所有可能的调用及其返回值
  • 参数值覆盖率(PVC)。T