【问题标题】:Is there any tool that can analyze the dependencies between variables in c# programs?有没有什么工具可以分析c#程序中变量之间的依赖关系?
【发布时间】:2011-01-13 23:52:03
【问题描述】:

我们可以使用许多工具来显示模块、源代码文件、类或函数等之间的依赖关系。但似乎没有工具可以分析变量之间的依赖关系。给定变量的依赖图将有助于理解和重构代码。

例如,如果变量b只用于计算变量c的值,如下:

b = a;
....
c = b + 2;

也许我们可以删除变量 b 以使代码更具可读性:

....
c = a + 2;

如果代码非常复杂或有很多难闻的气味,这种重构可能会很困难。

有没有什么工具可以分析c#或其他编程语言中变量之间的依赖关系?

【问题讨论】:

  • “变量”是指具体的“局部变量”,还是指局部、形参、数组元素、字段和取消引用的指针?您是否关心 lambda 的外部变量?拉姆达参数? lambdas 中的本地人?在迭代器块中提升本地人?分析任意变量之间的关系可能非常复杂,比仅使用局部变量要复杂得多,尤其是当您考虑通过“ref”参数进行变量别名时。
  • Eric Lippert:可以分析的“变量”类型越多,代码的重构工作就越容易。当我尝试重构遗留代码时,我发现通常存在许多复杂的依赖关系。

标签: c# variables refactoring dependencies static-analysis


【解决方案1】:

请参阅有关DMS Software Reengineering Toolkit 如何进行(控制和)数据流分析的讨论。这本质上是对信息流的经典编译器分析,其中包括所谓的 def-use 链。使用链显示程序的其他部分如何使用值(特定分配)。

这些信息流被计算为数据结构,因此它们很容易看到。 (该网页确实显示了图片,但它们是转储到 dot 的图表结果。将其变成一个工具需要更多的努力。

我们用它构建了程序切片器,在 UI 中显示这些信息。它们尚未商业化。

我认为,Grammatech 为 C 和 Ada 制作了这样的程序切片器。

【讨论】:

    【解决方案2】:

    Resharper 是分析 c# 代码的好工具。至少它会向您显示未使用的变量和您分配值但从未使用过的变量。

    如果您考虑对代码进行认真的重构,您可以编写单元测试以更加确定不会破坏某些内容。

    【讨论】:

      【解决方案3】:

      微软研究院的Phoenix Project 启用了一些非常有趣的工具。我看过的一个演示显示了数据依赖项的突出显示。因此,您可以在示例中将鼠标悬停在“c”上,所有有助于该计算的表达式都会被突出显示。它更像是一个 phoenix 的演示,而不是一个成熟的开发工具,但看到它可以完成非常酷。 Phoenix 是free download,因此您可以查看包含哪些示例应用程序。

      【讨论】:

        猜你喜欢
        • 2016-01-14
        • 2010-10-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-07
        • 1970-01-01
        • 1970-01-01
        • 2011-04-05
        相关资源
        最近更新 更多