Answers:
代码覆盖率是对在运行自动测试时执行了多少行代码/块/弧的度量。
通过使用专用工具来检测二进制文件以添加跟踪调用并针对被检测产品运行全套自动化测试,来收集代码覆盖率。一个好的工具不仅可以为您提供已执行代码的百分比,还可以让您深入研究数据并准确查看在特定测试期间执行了哪些代码行。
我们的团队使用Magellan(一套内部代码覆盖工具)。如果您是.NET商店,则Visual Studio具有集成的工具来收集代码覆盖率。您还可以滚动一些自定义工具,如本文所述。
如果您是C ++商店,英特尔有一些可以在Windows和Linux上运行的工具,尽管我没有使用过。我也听说过有GCC的gcov工具,但是我对此一无所知,也无法给您链接。
关于我们如何使用它-代码覆盖率是每个里程碑的退出标准之一。实际上,我们有三个代码覆盖率指标-单元测试(来自开发团队)的覆盖率,场景测试(来自测试团队的覆盖率)和组合覆盖率。
顺便说一句,虽然代码覆盖率是您进行多少测试的一个很好的指标,但不一定是您对产品测试的好程度的一个好的指标。您还应该使用其他指标以及代码覆盖率来确保质量。
代码覆盖率基本上可以测试测试覆盖了多少代码。因此,如果您具有90%的代码覆盖率,则意味着测试中没有覆盖10%的代码。我知道您可能会认为90%的代码已被覆盖,但是您必须从另一个角度来看。是什么阻止您获得100%的代码覆盖率?
一个很好的例子是:
if(customer.IsOldCustomer())
{
}
else
{
}
现在,在上面的代码中有两个路径/分支。如果您始终单击“是”分支,则您没有覆盖else部分,它将显示在“代码覆盖率”结果中。这是件好事,因为现在您知道未涵盖的内容,并且可以编写测试来涵盖其他部分。如果没有代码覆盖,那么您只是坐在定时炸弹上爆炸。
NCover是衡量代码覆盖率的好工具。
只需记住,拥有“ 100%代码覆盖率”并不意味着所有内容都经过了完全测试-尽管这意味着每一行代码都经过了测试,但这并不意味着它们在每种(常见)情况下都经过了测试。
我将使用代码覆盖率来突出显示可能应该为其编写测试的代码。例如,如果运行我当前的单元测试时未执行任何代码覆盖工具显示myImportantFunction(),则可能应该对其进行改进。
基本上,100%的代码覆盖率并不意味着您的代码是完美的。用它作为编写更全面(单元)测试的指南。
x
并返回了该函数,并且x/x
使用my_func(2)运行了测试,则覆盖率将达到100%(因为该函数的代码将已运行),但是当参数为0时,您将错过一个巨大的问题。也就是说,即使覆盖率达到100%,您也没有测试所有必要的方案。
补充一些以前的答案:
代码覆盖率意味着测试集覆盖源代码的程度。即,测试用例集涵盖的源代码范围是多少。
如以上答案中所述,存在各种覆盖标准,例如路径,条件,函数,语句等。但是要覆盖的其他标准是
注意:静态代码分析将查找是否存在任何无法访问的代码或挂起的代码,即任何其他函数调用未涵盖的代码。还有其他静态覆盖。即使静态代码分析报告覆盖了100%的代码,但是如果测试了所有可能的代码覆盖率,它也不会提供有关测试集的报告。
在先前的答案中已经很好地解释了代码覆盖率。因此,这更是对问题第二部分的答案。
我们使用了三种工具来确定代码覆盖率。
我们使用这些工具来
对于Perl,有出色的Devel :: Cover模块,我经常在模块上使用。
如果构建和安装是由Module :: Build管理的,则只需运行./Build testcover
即可获得一个漂亮的HTML站点,该站点可告诉您每个子,行和条件的覆盖范围,并带有漂亮的颜色,可以轻松查看未涵盖哪个代码路径。
在前面的答案中,代码覆盖率得到了很好的解释。我只是添加如果是在工作与工具的一些知识iOS
和OSX
平台,Xcode提供的设施进行测试和监控代码覆盖率。
参考链接:
https://medium.com/zendesk-engineering/code-coverage-and-xcode-6b2fb8756a51
两者都是有用的链接,它们有助于学习和探索Xcode的代码覆盖范围。
对于PHP,您应该看看Sebastian Bergmann的Github
提供用于PHP代码覆盖率信息的收集,处理和呈现功能。