2009-06-23 81 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

相關問題