我最近使用了NDepend,它生成了关于我的.net程序集和相关pdbs的很好的报告。
我在报告中发现的最有趣的事情是抽象性与不稳定图。我想要真正详细地了解这一点,我阅读了他们的文档和在线指标,但这只能在一定程度上有所帮助。
首先,我希望了解如何正确评估图形,以及如何稳定地控制抽象性。
here上有一篇很好的文章谈到了这一点,但除此之外,我还需要的是“我如何控制这一点?用稳定性控制抽象性”。

发布于 2009-08-19 11:12:01
抽象性是衡量软件系统刚性的一个指标。抽象性越高,刚性越低(或灵活性越大),反之亦然。如果系统的组件依赖于抽象类或接口,那么这样的系统比直接依赖具体类更容易扩展和更改。
稳定性是对更改容忍度的度量,就像软件系统在不破坏更改的情况下允许更改的程度一样。这是通过分析系统组件的相互依赖性来确定的。
Robert C.Martin的article on OO metrics以更定量的术语描述了这些概念。
文章摘录:
一个类别的责任、独立性和稳定性可以通过计算与该类别交互的依赖项来衡量。已经确定了三个指标:
Ca :传入耦合:此类别外依赖于此类别中的类的类数。
Ce :传出耦合:此类别内依赖于此类别外的类的类数。
I :不稳定性:(Ce÷(Ca+Ce)):此指标的范围为0,1。I=0表示最大稳定类别。I=1表示最不稳定的类别。
A :抽象性:(类别中的抽象类数量÷类别中的类总数)。这个度量范围是0,1.0表示具体,1表示完全抽象。
在任何软件系统中,尤其是大型软件系统中,平衡都是至关重要的。在这种情况下,系统应该在抽象性和稳定性之间取得平衡,才能做到“好”。A-I图上的位置显示了这一点。请阅读这篇文章以获得解释。
发布于 2015-08-12 17:12:29
抽象性和不稳定性可以单独用来评估你的代码。您事先就知道某个模块应该是多么抽象或稳定。例如,您希望表示层是适度抽象和高度稳定的,因为较低的模块依赖于它。另一方面,您希望基础架构层是高度具体的(低抽象性)和高度不稳定的,因为它应该实现上层所要求的。
一旦明确了这一点,你就可以将抽象性和不稳定性结合到一个图中,这就是不稳定性-抽象性图。您希望您的代码表现出尽可能多的抽象性,因为它是稳定的,以便平衡需求以支持未来的需求变化。
但不管怎样,在试图理解它们一起工作之前,您应该单独对不稳定性和抽象性指标有很强的理解。您可以在本文中找到一些关于不稳定意味着什么的示例:How to Use Module Coupling and Instability Metrics to Guide Refactoring
有一篇相关文章派生了一个测量应用程序中所有模块的不稳定性的CQLinq查询:How to Measure Module Coupling and Instability Using NDepend
https://stackoverflow.com/questions/1031135
复制相似问题