2009-06-23 79 views
18

我最近使用了NDepend,它在我的.net程序集和相关的pdbs上生成了一个很好的报告。什么是抽象与不稳定图?

我在报告中发现的最有趣的事情是抽象与不稳定图形。我想详细了解这一点,我阅读他们的文档和在线矩阵,但这只能在一定程度上有所帮助。

主要我想了解如何正确评估图形和技术来控制抽象性与稳定性。

有一篇非常好的文章here谈到这个,但除此之外,我需要的是'我如何控制这个? [稳定控制抽象]”

alt text

回答

25

抽象性是一个软件系统的刚性的量度。抽象性越高,刚性越低(或灵活性越高),反之亦然。如果系统的组件依赖于抽象类或接口,这样的系统比直接依赖具体类更容易扩展和更改。

稳定性是衡量容差的一种度量方式,因为软件系统可以在不改变它的情况下对其进行更改。这是通过分析系统组件的相互依赖关系来确定的。

Robert C. Martin的article关于OO度量以更定量的方式描述了这些概念。从文章

摘录:

的责任,独立和类别的稳定性可以通过计算 依赖与该类别的交互进行测量。已经确定了三个度量标准:

Ca:传入耦合:此类别之外的类别数量取决于此类别中的类别。

CE:传出联轴器:的此类别内的类,该类别以外取决于类的数量。

I:不稳定性:(铈÷(CA + Ce)的):这项指标具有范围[0,1]。 I = 0表示最大稳定类别。 I = 1表示最不稳定的类别。

答:摘要:(#类中的抽象类÷类中类的总数#)。这个度量范围是[0,1]。 0表示具体,1表示完全抽象。

在任何特别大的软件系统中,平衡是至关重要的。在这种情况下,系统应该将抽象性与稳定性平衡起来,以便“好”。 A-I图上的位置显示了这一点。请阅读文章中的解释。

0

抽象性和不稳定性都可以单独用来评估你的代码。你事先知道一些模块应该是抽象的还是稳定的。例如,您希望表示层适度抽象且高度稳定,因为较低的模块依赖于它。另一方面,您希望基础架构层具有高度的具体性(低抽象性)并且非常不稳定,因为它应该实现上层要求的。

一旦明确,您可以将抽象性和不稳定性组合成一个图,那就是不稳定性 - 抽象性图。你希望你的代码表现出尽可能多的抽象性,因为它是稳定的,以平衡支持将来需求变化的需求。

但无论如何,在尝试理解不稳定性和抽象度指标之前,您应该对它们一起理解。你可以找到这篇文章有什么不稳定意味着一些例子:How to Use Module Coupling and Instability Metrics to Guide Refactoring

有一篇相关的文章获得测量应用中的所有模块的不稳定性CQLinq查询:How to Measure Module Coupling and Instability Using NDepend

相关问题