代码覆盖率和分析之间的区别

Posted

技术标签:

【中文标题】代码覆盖率和分析之间的区别【英文标题】:difference between code coverage and profiling 【发布时间】:2011-03-29 05:50:05 【问题描述】:

代码代码覆盖率和分析之间有什么区别。

哪个是代码覆盖率最好的开源工具。

【问题讨论】:

您使用什么语言和平台? 我正在寻找 Java 和 J2EE。我认为差异应该与语言和平台无关。当然,工具必须特定于语言和平台。 【参考方案1】:

代码覆盖率是对已运行代码量的评估。这用于查看您的测试对代码的执行情况。

Profiling 用于查看代码的各个部分的执行情况。

工具取决于您使用的语言和平台。我猜你正在使用Java,所以推荐CodeCover。虽然您可能会发现NoUnit 更易于使用。

【讨论】:

【参考方案2】:

覆盖对于查看代码的哪些部分没有运行很重要。 根据我的经验,它必须在多个用例中累积,因为软件的任何一次运行都只会使用部分代码。

分析在不同的时间意味着不同的东西。有时这意味着衡量绩效。有时这意味着诊断内存泄漏。有时这意味着了解多线程或其他低级活动。

如果目标是通过发现所谓的“瓶颈”并修复它们来提高软件性能,不要只满足于任何分析器,甚至不一定是高度推荐或受人尊敬的分析器。 使用能够获取正确信息并以正确方式呈现给您的信息至关重要,因为对此存在很多混淆。 More on that subject.

添加: 对于一个覆盖工具,我一直都是自己做的。在几乎每个例程和基本块中,我都会插入这样的调用:Utils.CovTest("file name, routine name, comment that tells what's being done here")。 该例程记录了它被调用的事实,并且当程序完成时,所有这些 cmets 都将附加到一个文本文件中。 然后是一个后处理步骤,从完整列表中“减去”该文件(由类似 grep 的程序获取)。 结果是一个列表没有测试,需要额外的测试用例。

当不进行覆盖测试时,Utils.CovTest 什么都不做。无论如何,我把它排除在最里面的循环之外,所以它不会对性能产生太大影响。 在 C 和 C++ 中,我使用一个宏来实现,该宏在正常使用期间会扩展为空。

【讨论】:

以上是关于代码覆盖率和分析之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

代码覆盖率VS测试覆盖率

数据覆盖率多少才能进行数据分析对吗

Line 和 Branch 覆盖之间的差异

jacoco 分支覆盖和声纳条件覆盖有啥区别?

动态生成代码的代码覆盖率、分析和分析

单元测试和代码覆盖率工具的使用