功能模組

功能模組

功能模組是指數據說明、可執行語句等程式元素的集合,它是指單獨命名的可通過名字來訪問的過程、函式、子程式或宏調用。功能模組化是將程式劃分成若干個功能模組,每個功能模組完成了一個子功能,再把這些功能模組總起來組成一個整體。以滿足所要求的整個系統的功能。

基本介紹

  • 中文名:功能模組
  • 外文名:functional module
  • 類型:模組
  • 特點:有多個問題組合而成
  • 實質:數據說明、可執行語句等元素集合
  • 套用學科:機械工程、儀器科學、計算機科學
模組化依據,模組獨立性,獨立性度量,耦合,內聚,軟體功能模組指標,設計要素,

模組化依據

功能模組化的根據是,如果一個問題有多個問題組合而成,那么這個組合問題的複雜程度將大於分別考慮這個問題時的複雜程度之和。這個結論使得人們樂於利用功能模組化方法將複雜的問題分解成許多容易解決的局部問題。功能模組化方法並不等於無限制地分割軟體,因為隨著功能模組的增多,雖然開發單個功能模組的工作量減少了,但是設計功能模組間接口所需的工作量也將增加,而且會出現意想不到的軟體缺陷。因此,只有選擇合適的功能模組數目才會使整個系統的開發成本最小。
軟體結構圖示軟體結構圖示

模組獨立性

功能模組獨立的概念是功能模組化、抽象、信息隱蔽和局部化概念的直接結果。
抽象是指對事物、狀態或過程之間所存在的某些相似的方面集中和概括起來,而暫時忽略他們之間的差異,即考慮抽象事物的本質特徵而暫時不考慮他們的細節。信息隱蔽是指再設計功能模組時使得一個功能模組內所包含的信息(過程或數據),對於不需要這些信息的功能模組來說是不能訪問的。信息隱蔽原則對於以後在軟體維護期間修改軟體時會帶來極大的好處,因為大量數據和過程是軟體的其他部分所不能覺察的,因而再對某個功能模組修改時就不大會影響到軟體的其他部分,所謂局部化是指把一些關係密切的軟體元素在物理位置上彼此靠近。
功能模組獨立性是通過制定具有單一功能並且和其他功能模組沒有過多聯繫的功能模組來實現的。每個功能模組只涉及該軟體要求的一個具體子功能,而且與軟體結構的其他部分的接口是簡單的。
功能模組獨立性好的軟體接口簡單,易於編制,獨立的功能模組也比較容易測試和維護,限制了功能模組之間由於聯繫緊密而引起的修改副作用。獨立性是保證軟體質量的重要因素。

獨立性度量

功能模組獨立性是由內聚性耦合性兩個定性指標來度量的。內聚性是度量一個功能模組內功能強度的一個相對指標。耦合性則用來度量功能模組之間的相互聯繫的程度。

耦合

耦合是軟體結構中各功能模組之間相互連線的一種度量,耦合強弱取決於功能模組間接口的複雜程度、進入或訪問一個功能模組的點以及通過接口的數據。
耦合有以下幾種,他們之間的耦合度由高到低排列:
☆內容耦合。如一個功能模組直接訪問另一個功能模組的內容,則這兩個功能模組稱為內容耦合。
公共耦合。如一組功能模組都訪問統一全局數據結構,則稱之為公共耦合。
☆外部耦合。如一組功能模組都訪問統一全局數據項,則稱之為外部耦合。
控制耦合。如一功能模組明顯地把開關量、名字等信息送入另一功能模組,控制另一功能模組的功能,則為控制耦合。
標記耦合。如一組功能模組共享了某個記錄,而不是簡單變數,即這些功能模組都需某一數據的子結構時,就需要按該記錄的結構進行操作,並通過參數表來傳遞記錄信息,這樣的耦合稱之為標記耦合。
數據耦合。如一個功能模組訪問另一個功能模組,被訪問的功能模組的輸入和輸出都是數據項參數,則這兩個功能模組為數據耦合。
☆非直接耦合。若兩個功能模組沒有直接關係,他們之間的聯繫完全是通過主程式的控制和調用來實現的,便稱這兩個功能模組為非直接耦合,獨立性最強。
上面只是對耦合機制進行了一個分類。原則上講,功能模組化設計總是希望功能模組之間的耦合表現為非直接耦合方式。但是,由於問題所固有的複雜性和空間方面的考慮,有時則要根據實際情況,全面權衡,選用其它類型的耦合。

內聚

內聚是從功能角度來度量功能模組內的聯繫,一個好的內聚功能模組應當恰好做一件事。它描述的是功能模組內的功能聯繫。
內聚有如下的種類,其內聚度由弱到強排列:
☆偶然內聚。一功能模組中的代碼無法定義其不同功能的調用。但它使該功能模組能執行不同的功能,這種功能模組稱為巧合強度功能模組。
邏輯內聚。這種功能模組把幾種相關的功能組合在一起,每次被調用時,有傳送給功能模組參數來確定該功能模組應完成那一種功能。
☆時間內聚。這種功能模組順序完成一類相關功能,比如初始化功能模組,它順序為變數置初值。
過程內聚。如果一個功能模組內的處理元素是相關的,而且必須以特定次序執行則稱為過程內聚。
☆通信內聚。這種功能模組除了具有過程內聚的特點外,還有另外一種關係,則它的所有功能都通過使用公共數據而發生關係。
順序內聚。如果一個功能模組內的處理元素和同一個功能密切相關,而且這些處理必須順序執行,通常一個處理元素的輸出數據作為下一個處理元素的輸入數據,則稱為順序內聚。
功能內聚。如果一個功能模組包括並僅包括未完成某一具體任務所必需的所有成分,或者說功能模組中所有成分結合起來是為了完成一個具體的任務,此功能模組稱為功能強度模組。

軟體功能模組指標

系統中的各功能模組在納入時間、激活機制和控制方式等方面可以不相同。
1)納入時間
納入時間是指一個功能模組被歸併到軟體的源語言描述之中的時間。比如宏功能模組是由編譯器把它作為程式的一部分直接插入到引用位置上去的。而普通的子程式則是通過產生目標代碼與連線代碼而納入到軟體中的。
2)激活機制
功能模組的激活機制通常有兩種:一個是通過引用來調用功能模組,另一個是通過中斷來調用一個功能模組。在實時系統中,通常使用後者。比如,使用一個外部時間來引起處理過程的中斷,然後使控制轉到另一個功能模組。
3)控制方式
一般功能模組具有單一入口和單一出口,並作為程式的一部分順序地執行,有時,也需要更為複雜的控制方式,如可重入功能模組。這種功能模組不以任何方式修改它自己或它所訪問的局部地址,從而這樣的功能模組就可以同時被幾個任務使用。
4)結構分類
軟體結構中,功能模組可以分為以下幾類:
順序功能模組:它在沒有明顯中斷情況下被套用軟體調用和執行。
增量功能模組:它在調用結束之前可以被應用程式中斷,然後在中斷點重新啟動。
並行功能模組:它在並行多處理機環境中與別的功能模組同時執行。

設計要素

1.提高功能模組獨立性
在得到軟體結構之後,就應首先著眼於改善功能模組的獨立性,考驗是否應該把一些功能模組提取或合併,力求降低耦合提高內聚。例如,多個功能模組共有的一個子功能可以獨立成一個功能模組,由這些功能模組調用,有時可以通過分解或合併功能模組以減少控制信息的傳遞及對全局數據的引用,並且降低接口的複雜度。
2.功能模組規模適度
經驗表明,當功能模組過大時,功能模組的可理解性就會迅速下降。但是對過大的功能模組分解時,也不應降低功能模組的獨立性。因為當對一個大的功能模組分解時,有可能增加功能模組之間的依賴。
3.深度、寬度、扇出扇入要適當
如果深度過大則說明有的控制模組可能簡單了。如果寬度過大則說明系統的控制過於集中。而扇出過大則意味著功能模組過於複雜,需要控制和協調過多的下級模組,這時應適當地增加中間層次,扇出太小則可以把下級模組進一步分解成若干個子功能模組,或者合併到上級功能模組中去。一個功能模組的扇入是表明有多少個上級功能模組直接調用它,扇入越大則共享該模組的上級模組數目越多,這是有好處的。
4.要使模組的作用範圍保持在該模組的控制範圍內
功能模組的作用範圍是指受該功能模組內一個判定影響的所有功能模組的集合。功能模組的控制範圍是指這個功能模組本身以及所有直接或間接從屬於它的功能模組的集合。在一個設計得很好的系統中,所有受判定影響的功能模組應該都從屬於作出判定的那個功能模組,最好局限於做出判定的那個功能模組本身及它的直接下級模組。對於那些不滿足這一條件的軟體結構修改的辦法是:將判定點上移或者將那些在作用範圍內但是不在控制範圍內的功能模組移植到控制範圍內。
5.應減少功能模組的接口的複雜性和冗餘度,並改善一致性
功能模組接口複雜是軟體發生錯誤的一個主要原因。應該仔細設計模組接口,使得信息傳遞簡單並且和模組的功能一致。
6.設計成單入口、單出口的功能模組,避免病態連線
要防止內容耦合性,如果功能模組都是從頂部入口、從底部出口的話,這樣的軟體也更易於理解和易於維護。病態連線關係是指從中部進入或訪問一個模組。
7.模組的功能可預測
如果一個功能模組可以當做一個黑箱,即只要輸入的數據相同就產生同樣的輸出,這個模組的功能就是可以預測的。而那些具有內部記憶的功能模組則可能是不可預知的,因為它可能記載了某個內部標誌並且利用這個標誌去選擇處理方案。由於這個標誌對上級功能模組來說是看不見的,因而可能引起混亂。
8.組裝軟體根據設計的約束和移植的需要
組裝是指用來把軟體組合起來,以便把軟體放入特定的處理環境或送往其他的地方。有時,設計約束要求一個程式要在記憶體中覆蓋自己。如果有這種要求的話,原設計結構就可能必須重新組織以便按照重複的次數、存取的頻率以及各次調用之間的間隔來把功能模組組合起來。

相關詞條

熱門詞條

聯絡我們