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

C# 如何确定项目/解决方案中最常用的代码?,c#,visual-studio,testing,integration-testing,C#,Visual Studio,Testing,Integration Testing,如果我有一个包含多个c#项目的现有解决方案,是否有任何静态分析工具可以帮助我确定哪些代码区域最常用 我想使用这些信息来确定哪些区域应该首先提高测试覆盖率 我已经看过一些静态分析工具,但它们似乎主要关注复杂性、编码约定、代码复制等方面 或者,如果没有任何可用的分析工具可以做到这一点,您对如何确定我应该首先专注于测试的代码有什么建议吗 谢谢 编辑:我只是想澄清一下,我想要的不是代码覆盖率。我想简要介绍一下我的应用程序中最常用的部分,这样我就可以集中精力提高这些领域的覆盖率。我试图避免只为还没有测试的

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

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

我已经看过一些静态分析工具,但它们似乎主要关注复杂性、编码约定、代码复制等方面

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

谢谢

编辑:我只是想澄清一下,我想要的不是代码覆盖率。我想简要介绍一下我的应用程序中最常用的部分,这样我就可以集中精力提高这些领域的覆盖率。我试图避免只为还没有测试的区域编写测试,因为它们可能是不经常执行的边缘案例。

似乎就是您想要的

是一个受欢迎的.NET代码覆盖工具,如果您负担得起的话。

如果您想了解所使用的内容:

如果您想了解它的使用频率:

即使是试图弄清楚运行时发生了什么的静态分析工具,通常也不会试图估计代码执行的频率。这个题目已经够难的了

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


请参阅。

您所要求的是根本不可能准确完成的。执行某项操作的次数可以而且通常将取决于在运行时输入的数据。当静态确定时,您可以从静态分析工具中得到的最好结果是直接回答,否则就是O(N)型分析 即使是后者也很难在总体上取得正确的结果。例如,它需要知道(庞大且不断扩展的).NET库中基本上每个函数的复杂性。其中有些甚至难以描述。


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

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


它最初的目的是在发布之前分析应用程序(通过测量方法的执行时间等来检测瓶颈),因此我不确定它是否适合生产环境中的应用程序。至少它会为了分析的目的而更改您的代码,这可能是不需要的。你应该看看这个。

如果覆盖率不是你想要的,那么你可以使用两种方法:

  • 根据建议,使用探查器并运行预测性测试场景
  • 使用性能计数器,这将导致更持久的解决方案。这些方法很难实现,但有助于通过分析计数器报告来诊断性能增量。实现它们的一种方法是包装边界并从包装中管理计数器。要注意,与现有项目相比,集成到新项目中要容易得多
  • “探查器”是你要找的;你选择哪一个取决于你自己

    我使用了惠普的诊断服务器来完成这项工作,尽管这需要花费很多钱。它会告诉我什么方法被调用了多少次,以及在这些方法中花费的平均时间和最坏情况时间


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

    在回答您的编辑时,您确定建议的代码覆盖率工具不会同时进行评测吗?当通过检测获得时,提供分析信息和提供覆盖率信息一样容易,因此这些工具可以同时完成这两个任务。只是说,我不熟悉它们……在我看来,某个方法被引用的次数与该方法中错误的严重程度无关。如果一个方法只被引用和调用一次,例如在启动过程中,错误地执行该方法可能会使您的应用程序崩溃,而错误的方法调用1000次可能仍会使您的系统处于稳定状态。@Pascal:(嗨!)我们分别提供测试覆盖率和分析工具,尽管插装与您观察到的非常相似,但至少在执行计数方面是如此。显示要求有很大不同(请参阅我的答案并查看显示示例),配置文件的开销更高。这也是我的第一个想法。探查器将告诉您函数被调用的次数(相对)以及在每个函数中花费的时间。