【问题标题】:Obtaining a Referenced Assembly's Call Count获取引用程序集的调用计数
【发布时间】:2016-01-25 12:24:39
【问题描述】:

我正在编写一份文档,分析大型代码库的质量和可维护性。作为本报告的一部分,我希望包括一个程序集对解决方案中另一个程序集的引用次数的计数。这将使您了解每个程序集与另一个程序集的耦合程度。

Visual Studio 2015 Enterprise(或第 3 方插件)中是否有工具可以给我这个数字?

到目前为止,我已经尝试过 Visual Studio 的 Code Map 工具,但这似乎只是生成带有箭头的可视化,然后我必须手动计数,而且这似乎只是类/结构级别,而不是个人的数量每个类/结构中的引用。

【问题讨论】:

    标签: reference visual-studio-2015 code-analysis assembly-references


    【解决方案1】:

    NDepend (http://www.ndepend.com/) 提供此功能。对于您描述的探索性质量分析类型,它在更一般的术语中也很有帮助。

    【讨论】:

    • 我之前曾在另一项任务中试用过此工具。它似乎确实提供了我使用过的其他代码分析工具所不具备的功能。不幸的是,我的试用期已经过期,如果没有其他解决方案,我可能不得不说服我的直线经理购买。
    • 我刚刚让一位同事下载了试用版并针对解决方案进行了分析。我认为我所追求的具体数字包含在“依赖矩阵”中。蓝色的计数是引用的次数,绿色的计数是相关程序集对其他程序集的引用次数。我将添加我自己的答案,因为我有一个截图要包括在内。感谢您为我指明正确的方向。
    【解决方案2】:

    您可以使用 FxCop / Code Analysis 来做到这一点,这有多个maintainability rules,您最感兴趣的可能是:

    CA1506:避免过度的类耦合
    这条规则衡量等级 通过计算一个类型的唯一类型引用的数量来耦合 或方法包含。

    我相信一个类的阈值是 80,一个方法的阈值是 30。

    设置起来比较简单,基本上只需要在一个项目上配置一下即可:

    打开规则集可以让您选择运行哪些规则(以及它们是警告还是错误),规则有很多很多。

    【讨论】:

    • 这很有用,但我不认为这正是我所追求的。我正在寻找一个程序集对另一个程序集的实际引用数量。据我了解,每个项目返回的 CA1506 警告数将等于包含对其他类型的 80 个或更多不同引用的类型数加上包含对非包含类型的 30 个或更多不同引用的方法数。我对此的理解正确吗?
    • 我一直在调查 FxCopCmd.exe(代码分析工具的独立命令行版本)的使用。它似乎接受一个 XSL 文件作为参数来转换输出以至少获得每个文件名或命名空间的 CA1506 警告数,但它仍然不是我想要的数字。附带说明一下,由于某种原因,该工具会针对每个文件名返回“[Location not stored in Pdb]”,这意味着我什至没有要处理的文件名。
    【解决方案3】:

    为了扩展 Nicole 的答案,我已经测试了 NDepend 的试用版,并且我相信我已经在他们所谓的“依赖矩阵”中找到了我正在寻找的数字。我对它的理解如下。

    绿色数字是当前行中的程序集引用与当前列中的数字相关的程序集的次数。蓝色的数字是当前行中的程序集被与当前列中的数字相关的程序集引用的次数的计数。由于程序集不能对自身进行外部引用,因此对角线上不能出现数字。

    但是我不明白为什么,例如,单元格 0, 4 中的数字是 93,而单元格 4, 0 中的数字是 52;这些数字不应该相等吗?程序集 0 仅被程序集 4 使用的次数与程序集 4 使用程序集 0 的次数相同 - 这些数字怎么可能不同?

    更新:我观看了有关此工具的 PluralSight 视频,发现绿色框中的数字表示引用程序集中有多少方法引用了被引用程序集。相应蓝色框中的数字表示引用程序集中有多少方法正在被引用程序集使用。这些数字都不能准确地表示一个程序集对另一个程序集的调用次数(因为一个方法可能包含多个引用),但我相信它确实提供了足够的粒度,因为方法应该符合 SRP,因此方法中的所有引用都应该与单一行为有关。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多