Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Architecture 什么是抽象性与不稳定性图?_Architecture_Code Metrics_Ooad_Ndepend - Fatal编程技术网

Architecture 什么是抽象性与不稳定性图?

Architecture 什么是抽象性与不稳定性图?,architecture,code-metrics,ooad,ndepend,Architecture,Code Metrics,Ooad,Ndepend,我最近使用了NDepend,它对我的.net程序集和相关PDB生成了一个很好的报告 我在报告中发现的最有趣的事情是抽象性与不稳定性图。我想真正详细地了解这一点,我阅读了他们的文档和在线metrices,但这只能在一定程度上有所帮助 首先,我希望了解如何正确地评估图形,以及控制抽象性和稳定性的技术 有一篇很好的文章谈到了这一点,但除此之外,我需要的是“我如何控制这一点?”?[以稳定控制抽象性]' 抽象性是对软件系统刚性的度量。抽象性越高,刚性越低(或灵活性越高),反之亦然。如果系统的组件依赖于抽象

我最近使用了NDepend,它对我的.net程序集和相关PDB生成了一个很好的报告

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

首先,我希望了解如何正确地评估图形,以及控制抽象性和稳定性的技术

有一篇很好的文章谈到了这一点,但除此之外,我需要的是“我如何控制这一点?”?[以稳定控制抽象性]'


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

稳定性是一种对变化的容忍度的度量,也就是软件系统在不破坏它的情况下允许对其进行变化的程度。这是通过分析系统组件的相互依赖性来确定的

Robert C.Martin的《面向对象度量论》更定量地描述了这些概念

文章节选:

一个类别的责任、独立性和稳定性可以通过计算 与该类别交互的依赖项。已经确定了三个指标:

Ca:传入耦合:此类别之外依赖于此类别内的类别的类别数。

Ce:传出耦合:此类别内依赖于此类别外的类别的类别数。

I:不稳定性:(Ce÷(Ca+Ce)):此度量的范围为[0,1]。I=0表示最大稳定类别。I=1表示最大不稳定类别。

A:抽象性:(#类别中的抽象类÷类别中的类总数)。该度量范围为[0,1]。0表示具体,1表示完全抽象。


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

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

一旦清楚了这一点,您就可以将抽象性和不稳定性结合到一个图中,这就是不稳定性抽象性图。您希望您的代码表现出尽可能多的抽象性和稳定性,以便平衡支持未来需求变化的需求

但无论如何,在试图理解它们一起工作之前,您应该对不稳定性和抽象性度量有很强的理解。您可以在本文中找到一些关于不稳定性意味着什么的示例:

有一篇相关文章派生了一个CQLinq查询,该查询测量应用程序中所有模块的不稳定性: