軟件設計的質量在很大程度上受到系統封裝關系的影響
模塊間松耦合而模塊內部又保持高度一致性是高質量設計軟件的關鍵之一
所以
評定軟件設計的水平的手段之一就是考察它的模塊間的關系
對系統的可重用性和可維護性水平的客觀評價是一個評價軟件結構的重要組成部分
我在本文介紹的度量標准可以幫助你客觀評定你的軟件設計的質量
盡管度量標准可以對我們的軟件設計質量起著指導和反饋的作用
但是你要牢記我在本文提出的度量標准並不是軟件設計的唯一依據
設計質量分數的高低未必一定對應於真實軟件設計質量的高低
但是不太可能出現那種設計水平很高
但是在我們這種度量標准下
分數卻很低的情況
我們提出軟件設計質量度量標准的目的在於幫助設計者正確評估他們自己的設計
更重要的是幫助你檢測設計的水平是否達到預期目標
測試穩定性 穩定性指的是修改軟件中某個模塊而不影響其它模塊的困難程度
讓我們看看模塊間的依賴關系是如何影響到穩定性的
一個模塊在軟件中重用的次數越多
那麼就越依賴於它
模塊的輸入依賴性越強(較多的其它模塊依賴本模塊)
則它的穩定性得分也就越高(即難以修改)
換句話來說
其它模塊越依賴於本模塊
那麼修改本模塊而不影響其它模塊也就越困難
模塊的輸入依賴性和輸出依賴性是評測模塊穩定性和不穩定性的重要方面
模塊的輸出依賴性強
輸入依賴性弱
則穩定性低(即容易修改)
這是因為對變化不會擴展到很多其它方面
另一方面
模塊的輸入量越多
它就越難以修改
則越穩定
穩定性可以通過計算輸入量和輸出量來計算
輸入耦合度代表依賴本模塊的其它模塊數
輸出耦合度代表本模塊所依賴的其它模塊數
不穩定度可以通過輸出耦合度與總的耦合度的比例來得到
計算公式如下
I = Ce/(Ce + Ca)
I 代表該模塊的不穩定度
Ca代表該模塊的輸入耦合度
即輸入依賴度
Ce代表本模塊的輸出耦合度
即輸出依賴度
如果I的值接近於零
那麼模塊的輸入依賴性就遠遠大於輸出依賴性
模塊也就越穩定
模塊越穩定也就越難以修改
因為某個變化會衍生出許多新的變化
波及到依賴它的其它模塊上了
對I值接近於一的模塊來說
它的輸出依賴性遠遠大於輸入依賴性
模塊很不穩定
由於受本模塊影響的模塊不多
所以不穩定的模塊容易修改
看到這些
你也許會感到很困惑
到底我應該讓模塊的穩定性高一些好
還是低一些?
由於組成一個軟件的一整套模塊中
有些模塊有輸入依賴性(被其它模塊引用)
而有些模塊有輸出依賴性(引用其它模塊)
我們在設計模塊不應該追求完全的穩定性或者不穩定性
而是具體考慮某個模塊需要的是穩定性還是不穩定性並盡可能實現
輸入依賴度比較強的模塊必須擁有較高的抗可變性
展現較高程度上的穩定性
在面向對象的開發方法中
抽象性通過分離功能和功能的實現方法來提高穩定性
對Java來說
抽象類和界面(interface)顯然就是抽象性的表現形式
因此
越需要穩定的模塊應該有越高的抽象層次
與此對應
越不穩定的模塊也就越具體
測量抽象性 你可以通過計算模塊內抽象類(或者界面)的數目與所有類的數目的比例來測出該模塊的抽象程度
抽象度可以用下面的公式計算
A=Na/Nc
A 代表模塊的抽象程度
Na代表模塊中抽象類或者界面的數目
Nc代表模塊中具體類的數目
抽象度等於零表示該模塊是一個完全抽象的模塊
而抽象度等於一代表它是完全具體的模塊
評估度量標准 比較抽象度和穩定度
你可以發現一些更有趣的結論
完全不穩定的抽象模塊也是完全抽象的
並且輸入依賴度為零
相反
完全穩定
輸入依賴度較大的模塊意味它有較多的頻繁使用的具體類
這是因為抽象性把變換和實現分隔開來
變動頻繁使用的具體類會衍生出許多新的變化
這些變化可能會波及整個軟件
所以
你應該在具體類中盡量降低模塊的輸入依賴性
換句話來說
設計模塊時要確保抽象性和輸入依賴性
具體性與輸出依賴性成比例
評估設計質量的有效輔助工具 本評估方法可以幫助你提高軟件強壯性
盡管好的度量方法並不能保證高質量的設計自然就會產生
但是它確實可以幫助你加強信心
在正確靈活的使用下
本方法是評估軟件設計質量的寶貴手段
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26090.html