22

我一直在尝试NDepend,阅读了一些关于它的博文,甚至听过播客。我认为 NDepend 可能是一个非常有用的工具,但我仍然不知道我会在哪里使用它。

你如何使用它?你用它,为什么?为什么不?

我想听听一些现实世界的例子。

4

6 回答 6

29

在过去的几年里,我广泛使用了 NDepend。基本上它是一个依赖分析工具,所以它可以帮助你解决很多依赖相关的问题。

我使用它的主要目的之一是检查我的程序集、类型和方法之间的依赖关系。这有助于我了解类型之间的耦合是否失控,也有助于我发现重构机会。

当着手进行大规模重构时,例如将类型提取到其他程序集中,这可以让您看到什么取决于什么,因此您不必执行旧的“将我的类型移动到另一个程序集,然后尝试编译并查看什么中断” "

NDepend 还具有用于查看此类信息的出色视觉矩阵。

此外,它还具有出色的查询语言 CQL,可让您编写自定义查询。这些可以是简单的事情,例如“显示调用此方法的所有方法”,查询以突出显示死代码,查询循环复杂度、耦合等,等等。

反过来,它可以集成到构建过程中,因此您可以基于 CQL 查询生成警告/失败,例如“如果方法有超过 100 行代码但没有注释,则构建失败”(这是一个示例- 我并不是说这个特定的指标是一件好事)。

它还可以导入代码覆盖率数据并为您提供代码覆盖率很少的区域的可视化表示,并允许您针对代码覆盖率信息运行 CQL 查询(例如,向我展示代码覆盖率低于 70% 的方法)

您还可以加载项目的当前构建和以前的构建,并在它们之间运行查询,例如“显示所有具有 <70% 代码覆盖率的类型” - 这有助于您在现有代码库上引入更严格的规则。

这是一个很棒的工具,学习起来并不难。一开始很吓人,只是因为它给你的信息量很大,但强烈推荐。

于 2010-01-12T15:14:22.623 回答
8

我还发现它对于理解复杂方法调用的结构非常宝贵。例如,我可以使用特定的方法或字段传递地调用所有方法,并且可以查看循环调用是否可能存在问题、不需要的依赖关系或路径是否比必要的更复杂等。

依赖关系图现在也是交互式的,因此我可以删除我目前不感兴趣的方法,并移动其他方法以很好地可视化正在发生的事情。

于 2010-03-18T11:34:52.207 回答
4

我发现可视化程序集版本之间的更改很有用。即使对于给定版本中的更改快照...

我认为它在持续集成环境中大放异彩,您可以在其中设置 CQL 查询来衡量您感兴趣的代码指标(循环复杂性、长方法等),然后您可以随着时间的推移衡量您在这些领域的改进。

于 2010-01-12T15:09:13.483 回答
4

实际上,如果您有例如由不同人/供应商开发的应用程序的另一部分使用的界面,则此工具很有帮助。每次您想更改界面时,您必须找出谁在使用您的界面以避免破坏其代码(程序集不会构建)这适用于更大的项目。

于 2010-01-12T15:16:46.093 回答
2

当您的应用程序具有大量程序集时,此工具很有用。它可以帮助我找出代码依赖关系以及版本之间的变化

于 2010-03-18T11:37:45.230 回答
2

I'm also using NDepend to compare two versions of some assembly. NDepend have this excelent feature. Thats gives me view about changes and work progress in assembly, methods that have been added, methods removed and many more.

于 2011-02-25T10:09:02.760 回答