如何确定项目/解决方案中最常使用的代码?

时间:2009-10-16 15:19:53

标签: c# visual-studio testing integration-testing

如果我有一个包含多个c#项目的现有解决方案,是否有任何静态分析工具可以帮助我确定哪些代码区域最常用?

我想使用这些信息来确定哪些区域应该首先增加测试覆盖率。

我已经研究过一些静态分析工具,但它们似乎主要集中在复杂性,编码约定,代码复制等方面。

或者,如果没有可用的分析工具可以做到这一点,您对如何确定我应该首先关注哪些代码进行测试有什么建议吗?

谢谢!

编辑:为了澄清,我正在寻找的不是代码覆盖率。我想了解我最常使用的应用程序的哪些部分,以便我可以反过来专注于改善这些领域的覆盖范围。我试图避免只为那些还没有的区域编写测试,因为它们可能是不经常执行的边缘情况。

7 个答案:

答案 0 :(得分:2)

即使是试图弄清楚在运行时发生的事情的静态分析工具通常也不会尝试估计一段代码的执行频率。这个主题很难实现!

动态分析工具(例如分析工具,依赖于代码的透明检测或使用采样)可以在一次或几次“典型”执行后告诉您(您提供您判断的典型条目),执行此函数或该函数的频率。

请参阅Profiling (computer programming) on Wikipedia

答案 1 :(得分:2)

如果我理解正确的问题,那么您正在寻找一个分析器。试试EQATEC Profiler。它是免费的。

最初打算在发货之前对应用程序进行分析(通过测量方法的执行时间来检测瓶颈等),因此我不确定它是否适合在高效环境中使用。至少它会更改您的代码以进行性能分析,这可能是不需要的。你应该看看这个。

答案 2 :(得分:1)

Code coverage似乎就是您想要的。

NCover是一种流行的.NET代码覆盖工具,如果你负担得起的话。

答案 3 :(得分:1)

如果您只想查看使用的SD C# Test Coverage Tool

如果您想查看使用频率SD C# Profiler Tool

答案 4 :(得分:1)

你要求的是根本无法准确做到的。执行某些操作的次数通常取决于在运行时输入的数据。

  1. 静态分析工具的最佳效果
  2. 否则是O(N)风格分析
即使是后者也很难整体上做得很好。例如,它需要知道(庞大且不断扩展的).NET库中基本上每个函数的复杂性。其中一些甚至很难描述。

例如,分配一块内存需要多长时间?好吧,通常它通常几乎是恒定的时间 - 但是分配总是可能触发垃圾收集周期,在这种情况下,所花费的时间将(大致)与自上次分配以来分配的仍在使用的对象数量成比例GC循环......

答案 5 :(得分:1)

“Profiler”是您正在寻找的;您选择的是由您自己决定的。

我已经使用惠普的诊断服务器来做到这一点,虽然它需要花钱。它会告诉我哪些方法被称为多少次,以及在其中花费的平均时间和最差时间。

作为重要的安全提示,运行探查器会降低代码的执行速度;它不适合长期安装到生产环境中。

答案 6 :(得分:0)

如果覆盖范围不是您所寻找的,那么您可以使用两件事:

  1. 建议使用分析器并运行预测测试方案。
  2. 使用性能计数器,这将以更永久的解决方案结束。这些很难实现,但通过分析计数器报告有助于诊断性能增量。实现它们的一种方法是包装边界并从那些包装中管理计数器。要小心,在新项目中集成比在现有项目中更容易。