代码覆盖率和分析之间的区别
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++ 中,我使用一个宏来实现,该宏在正常使用期间会扩展为空。
【讨论】:
以上是关于代码覆盖率和分析之间的区别的主要内容,如果未能解决你的问题,请参考以下文章