模塊內(nèi)聚和耦合的基礎(chǔ)知識(shí)是軟件評(píng)測(cè)師考試的重要考點(diǎn),經(jīng)常出現(xiàn)在上午場(chǎng)的客觀選擇題當(dāng)中。模塊獨(dú)立是指模塊只完成系統(tǒng)要求的獨(dú)立的子功能,并且與其他模塊的接口簡(jiǎn)單,符合信息隱蔽和信息局部化原則,模塊間關(guān)聯(lián)和依賴(lài)程度盡可能小。衡量模塊獨(dú)立性的標(biāo)準(zhǔn)是耦合度和內(nèi)聚度。內(nèi)聚度是衡量同一個(gè)模塊內(nèi)部的各個(gè)元素彼此結(jié)合的緊密程度。耦合度是衡量不同模塊彼此間相互依賴(lài)的緊密程度。下面就該知識(shí)點(diǎn)并結(jié)合例題進(jìn)行總結(jié)學(xué)習(xí)。
一、模塊內(nèi)聚
(1)概述:內(nèi)聚是一個(gè)模塊內(nèi)部各個(gè)元素彼此結(jié)合的緊密程度的度量。一個(gè)內(nèi)聚程度高的模塊(在理想情況下)應(yīng)當(dāng)只做一件事。
(2)分類(lèi):一般模塊的內(nèi)聚性分為7種類(lèi)型,如下圖所示:
1)偶然(巧合)內(nèi)聚:模塊完成的動(dòng)作之間沒(méi)有任何關(guān)系,或者僅僅是一種非常松散的關(guān)系。
2)邏輯內(nèi)聚:指模塊內(nèi)執(zhí)行若干個(gè)邏輯上相似的功能,通過(guò)參數(shù)確定該模塊完成哪一個(gè)功能。
3)瞬時(shí)(時(shí)間)內(nèi)聚:模塊內(nèi)部的各個(gè)組成部分所包含的處理動(dòng)作必須在同一時(shí)間間隔內(nèi)執(zhí)行,例如初始化模塊。
4)過(guò)程內(nèi)聚:指一個(gè)模塊完成多個(gè)任務(wù),這些任務(wù)必須按指定的過(guò)程執(zhí)行。
5)通信(信息)內(nèi)聚:指模塊內(nèi)的所有處理元素都在同一個(gè)數(shù)據(jù)結(jié)構(gòu)上操作,或者各處理使用相同的輸入數(shù)據(jù)或者產(chǎn)生相同的輸出數(shù)據(jù)。
6)順序內(nèi)聚:指一個(gè)模塊中的各個(gè)處理元素都密切相關(guān)于同一功能且必須順序執(zhí)行,前一功能元素的輸出就是下一功能元素的輸入。
7)功能內(nèi)聚:指模塊內(nèi)的所有元素共同作用完成一個(gè)功能,缺一不可,這是最強(qiáng)的內(nèi)聚。
二、模塊耦合
(1)概述:耦合是模塊之間的相對(duì)獨(dú)立性(互相連接的緊密程度)的度量。耦合取決于各個(gè)模塊之間接口的復(fù)雜程度、調(diào)用模塊的方式以及通過(guò)接口的信息類(lèi)型等。
(2)分類(lèi):一般來(lái)說(shuō),模塊之間的耦合有7種類(lèi)型,如下圖所示:
1)非直接耦合(無(wú)直接耦合):兩個(gè)模塊之間沒(méi)有直接關(guān)系,它們之間的聯(lián)系完全是通過(guò)主模塊的控制和調(diào)用來(lái)實(shí)現(xiàn)的,它們之間不傳遞任何信息,因此模塊間的耦合性最弱,模塊獨(dú)立性最高。
2)、數(shù)據(jù)耦合:指兩個(gè)模塊之間有調(diào)用關(guān)系,傳遞的是簡(jiǎn)單的數(shù)據(jù)值(不是控制參數(shù),公共數(shù)據(jù)結(jié)構(gòu)或外部變量),相當(dāng)于高級(jí)語(yǔ)言中的值傳遞。
3)標(biāo)記耦合:指兩個(gè)模塊之間通過(guò)參數(shù)表(數(shù)據(jù)結(jié)構(gòu))傳遞記錄信息。
4)控制耦合:指一個(gè)模塊調(diào)用另一個(gè)模塊時(shí),傳遞的是控制變量,被調(diào)用模塊通過(guò)該控制變量的值有選擇地執(zhí)行模塊內(nèi)的某一功能。因此,被調(diào)用模塊內(nèi)應(yīng)具有多個(gè)功能,那個(gè)功能起作用受調(diào)用模塊控制。也就是說(shuō)一個(gè)模塊通過(guò)傳送開(kāi)關(guān)、標(biāo)志、名字等控制信息,明顯地控制選擇另一模塊的功能。
5)外部耦合:模塊間通過(guò)軟件之外的環(huán)境聯(lián)結(jié)( 如I/O將模塊耦合到特定的設(shè)備、格式、通信協(xié)議上)時(shí)稱(chēng)為外部耦合。
6)公共耦合:指通過(guò)一個(gè)公共數(shù)據(jù)環(huán)境相互作用的那些模塊間的耦合。
7)內(nèi)容耦合:一個(gè)模塊直接訪問(wèn)另一個(gè)模塊的內(nèi)部數(shù)據(jù),或者通過(guò)非正常入口轉(zhuǎn)入另一個(gè)模塊內(nèi)部,或者兩個(gè)模塊有一部分程序代碼重疊,又或者一個(gè)模塊有多種入口。這種模塊之間的耦合稱(chēng)之為內(nèi)容耦合。