模塊獨立性是軟件質量的關鍵,它指軟件系統中的每個模塊只涉及軟件要求的具體子功能,而和系統中其他模塊接口是簡單的。這樣做不僅僅便於軟件測試和維護,還使模塊化程度較高的軟件易於開發,尤其當一組開發人員共同開發一個軟件時,模塊化能夠分割功能,而且接口可以簡化。
模塊的獨立性可以用兩個定性標準度量:耦合和內聚
耦合是模塊之間相互連接的緊密程度的度量。模塊之間的連接越緊密,聯繫越多,耦 合性就越高,而其模塊獨立性就越弱。內聚是一個模塊內部各個元素彼此結合的緊密程度 的度量。一個模塊內部各個元素之間的聯系越緊密,內聚性就越高,相對於其他模塊之間 的耦合性就會降低,而模塊獨立性就越強。因此,模塊獨立性較強的模塊應該是高內聚低 耦合的模塊。
1、耦合
耦合的強弱取決於各個模塊之間接口的複雜程度、調用模塊的方式以及哪 些信息通過接口。一般模塊之間的連接方式有 7 種,構成的耦合也有 7 種類型。
1》非直接耦合
如果兩個模塊之間沒有直接關係,它們之間的聯系完全是通過主模塊的控制和調用實現的,這就是非直接耦合。這種耦合的模塊獨立性最強。但是,在一個軟件系統中不可能所有的模塊之間都無任何連接。
2) 數據耦合
如果兩個模塊彼此間通過數據參數(不是控制參數、公共數據結構或外部變量)交換信 息,這種耦合稱爲數據耦合。由於限制了只通過參數表傳遞數據,所以按數據耦合開發的程序界面簡單、安全可靠。數據耦合是鬆散的耦合,模塊之間的獨立性比較強,在系統中 必須有這類耦合。
3) 標記耦合
如果模塊之間通過參數表傳遞記錄信息,就是標記耦合。由於模塊傳遞的不是簡單變量,而是某一數據結構的子結構,所以在設計中應避免這種耦合。
4) 控制耦合
如果模塊傳遞的信息中有控制信息,就稱作控制耦合。這種耦合的實質是在單一接口上選擇多功能模塊中的某項功能。因此,對被控制模塊的任何修改,都會影響控制模塊。 控制耦合屬於中等程度的耦合,它增加了系統的複雜程度。
5) 公共耦合
如果一組模塊通過同一個公共數據環境相互作用,則它們之間的耦合稱爲公共耦合。
公共的數據環境可以是全局數據結構、共享的通信區、內存的公共覆蓋區、任何存儲介質
上的文件、物理設備等。
6) 內容耦合
如果發生下列情形之一,兩個模塊之間就發生了內容耦合。
一個模塊直接訪問另一個模塊的內部數據。
一個模塊不能通過正常入口轉到另一模塊的內部。
兩個模塊有一部分程序代碼重疊(只可能出現在匯編語言中)。
一個模塊有多個入口。
內容耦合屬於最高程度的耦合,應該儘量避免使用。
7) 外部耦合
如果一組模塊都訪問同一全局簡單變量而不是同一全局數據結構,而且不是通過參數 表傳遞該全局變量的信息,則稱爲外部耦合。
2、內聚
內聚是一個模塊內部各個元素彼此結合的緊密程度的度量。一個內聚程度高的模塊應 當完成軟件過程中的單一任務。它是信息隱蔽概念的一種自然擴展。一般模塊的內聚性也 有 7 種類型。
1) 偶然內聚
如果一個模塊各部分之間沒有關係,或者即使有關係,這種關係也是很鬆散的,則稱 作偶然內聚。它是內聚程度最低的模塊。例如,一些不同的模塊中可能存在同一組語句,程序員爲了節省空間,把它們抽出來組成一個新模塊,這就出現了偶然內聚的塊。很明顯,這種模塊不易修改和維護,通常情況下應避免構造這種模塊。
2) 邏輯內聚
如果一個模塊中包含多個邏輯上相關的功能,每次被調用時,根據傳遞給該模塊的判 定參數來確定模塊應執行的功能,稱作邏輯內聚。它屬於單入口多功能模塊。例如,錯誤 處理模塊根據收到的出錯信號顯示出不同的出錯信息等。邏輯模塊的修改也比較困難,有時對局部功能的改動也會影響到全局。
3) 時間內聚
如果一個模塊所包含的任務必須在同一時間內執行,稱作時間內聚,如初始化模塊和終止模塊。時間內聚比邏輯內聚好一些,它在一定程度上反映了程序的某些實質,但由於它把許多功能、任務組合在一起,給維護和修改帶來了困難。
4) 過程內聚
如果一個模塊內的處理是相關的,而且必須以特定次序執行,則稱爲過程內聚。使用程序流程圖作爲工具設計程序時,常常通過流程圖來確定模塊的劃分,這樣得到的就是過程內聚模塊。它相對時間內聚的程度更強一些,但由於僅僅爲完整功能的一部分,所以內聚程度仍比較低。
5) 通信內聚
如果一個模塊各功能部分都使用了相同的輸入數據,或產生了相同的輸出數據,則稱爲通信內聚。通常,通信內聚模塊是通過數據流圖來定義的。因爲此模塊中包含了許多獨立的功能,所以它的內聚程度高於過程內聚。但由於各功能部分使用了相同的 I/O 緩衝區,從而降低了整個系統的效率。
6) 信息內聚
如果一個模塊能夠完成多個功能,各個功能都在同一數據結構上操作,每一項功能有唯一的入口點,稱作信息內聚。它可以看作是多個功能內聚模塊的組合,並能達到信息的隱蔽,增強了各模塊的獨立性。
7) 功能內聚
如果一個模塊內各個部分都是完成某一具體功能必不可少的組成部分,稱作功能內聚。此模塊間功能明確、耦合簡單,是最高程序的內聚。
設計時力爭做到高內聚,並且能夠辨認出低內聚的模塊,有能力通過修改設計提高模塊的內聚程度,降低模塊間的耦合程
度,從而獲得較高的模塊獨立性。