Product category
軟件功能BECKHOFF模塊指標及提高功能模塊獨立性
BECKHOFF模塊功能模塊化的根據(jù)是,如果一個問題有多個問題組合而成,那么這個組合問題的復(fù)雜程度將大于分別考慮這個問題時的復(fù)雜程度之和。這個結(jié)論使得人們樂于利用功能模塊化方法將復(fù)雜的問題分解成許多容易解決的局部問題。
功能模塊化方法并不等于無限制地分割軟件,因為隨著功能模塊的增多,雖然開發(fā)單個功能模塊的工作量減少了,但是設(shè)計功能模塊間接口所需的工作量也將增加,而且會出現(xiàn)意想不到的軟件缺陷。因此,只有選擇合適的功能模塊數(shù)目才會使整個系統(tǒng)的開發(fā)成本最小。
功能模塊獨立的概念是功能模塊化、抽象、信息隱蔽和局部化概念的直接結(jié)果。
抽象是指對事物、狀態(tài)或過程之間所存在的某些相似的方面集中和概括起來,而暫時忽略他們之間的差異,即考慮抽象事物的本質(zhì)特征而暫時不考慮他們的細節(jié)。信息隱蔽是指再設(shè)計功能模塊時使得一個功能模塊內(nèi)所包含的信息(過程或數(shù)據(jù)),對于不需要這些信息的功能模塊來說是不能訪問的。信息隱蔽原則對于以后在軟件維護期間修改軟件時會帶來極大的好處,因為大量數(shù)據(jù)和過程是軟件的其他部分所不能覺察的,因而再對某個功能模塊修改時就不大會影響到軟件的其他部分,所謂局部化是指把一些關(guān)系密切的軟件元素在物理位置上彼此靠近。
功能模塊獨立性是通過制定具有單一功能并且和其他功能模塊沒有過多聯(lián)系的功能模塊來實現(xiàn)的。每個功能模塊只涉及該軟件要求的一個具體子功能,而且與軟件結(jié)構(gòu)的其他部分的接口是簡單的。
功能模塊獨立性好的軟件接口簡單,易于編制,獨立的功能模塊也比較容易測試和維護,限制了功能模塊之間由于聯(lián)系緊密而引起的修改副作用。獨立性是保證軟件質(zhì)量的重要因素。
功能模塊獨立性是由內(nèi)聚性和耦合性兩個定性指標來度量的。內(nèi)聚性是度量一個功能模塊內(nèi)功能強度的一個相對指標。耦合性則用來度量功能模塊之間的相互聯(lián)系的程度。
各功能模塊之間相互連接的一種度量,耦合強弱取決于功能模塊間接口的復(fù)雜程度、進入或訪問一個功能模塊的點以及通過接口的數(shù)據(jù)。
耦合有以下幾種,他們之間的耦合度由高到低排列:
上面只是對耦合機制進行了一個分類。原則上講,功能模塊化設(shè)計總是希望功能模塊之間的耦合表現(xiàn)為非直接耦合方式。但是,由于問題所固有的復(fù)雜性
如果一個功能模塊包括并僅包括未完成某一具體任務(wù)所必需的所有成分,或者說功能模塊中所有成分結(jié)合起來是為了完成一個具體的任務(wù),此功能模塊稱為功能強度模塊。
系統(tǒng)中的各功能模塊在納入時間、激活機制和控制方式等方面可以不相同。
1)納入時間
納入時間是指一個功能模塊被歸并到軟件的源語言描述之中的時間。比如宏功能模塊是由編譯器把它作為程序的一部分直接插入到引用位置上去的。而普通的子程序則是通過產(chǎn)生目標代碼與連接代碼而納入到軟件中的。
2)激活機制
功能模塊的激活機制通常有兩種:一個是通過引用來調(diào)用功能模塊,另一個是通過中斷來調(diào)用一個功能模塊。在實時系統(tǒng)中,通常使用后者。比如,使用一個外部時間來引起處理過程的中斷,然后使控制轉(zhuǎn)到另一個功能模塊。
3)控制方式
一般功能模塊具有單一入口和單一出口,并作為程序的一部分順序地執(zhí)行,有時,也需要更為復(fù)雜的控制方式,如可重入功能模塊。這種功能模塊不以任何方式修改它自己或它所訪問的局部地址,從而這樣的功能模塊就可以同時被幾個任務(wù)使用。
4)結(jié)構(gòu)分類
1.提高功能模塊獨立性
在得到軟件結(jié)構(gòu)之后,就應(yīng)首先著眼于改善功能模塊的獨立性,考驗是否應(yīng)該把一些功能模塊提取或合并,力求降低耦合提高內(nèi)聚。例如,多個功能模塊共有的一個子功能可以獨立成一個功能模塊,由這些功能模塊調(diào)用,有時可以通過分解或合并功能模塊以減少控制信息的傳遞及對全局數(shù)據(jù)的引用,并且降低接口的復(fù)雜度。
2.功能模塊規(guī)模適度
經(jīng)驗表明,當功能模塊過大時,功能模塊的可理解性就會迅速下降。但是對過大的功能模塊分解時,也不應(yīng)降低功能模塊的獨立性。因為當對一個大的功能模塊分解時,有可能增加功能模塊之間的依賴。
3.深度、寬度、扇出和扇入要適當
如果深度過大則說明有的控制模塊可能簡單了。如果寬度過大則說明系統(tǒng)的控制過于集中。而扇出過大則意味著功能模塊過于復(fù)雜,需要控制和協(xié)調(diào)過多的下級模塊,這時應(yīng)適當?shù)卦黾又虚g層次,扇出太小則可以把下級模塊進一步分解成若干個子功能模塊,或者合并到上級功能模塊中去。一個功能模塊的扇入是表明有多少個上級功能模塊直接調(diào)用它,扇入越大則共享該模塊的上級模塊數(shù)目越多,這是有好處的。
4.要使模塊的作用范圍保持在該模塊的控制范圍內(nèi)
功能模塊的作用范圍是指受該功能模塊內(nèi)一個判定影響的所有功能模塊的集合。功能模塊的控制范圍是指這個功能模塊本身以及所有直接或間接從屬于它的功能模塊的集合。在一個設(shè)計得很好的系統(tǒng)中,所有受判定影響的功能模塊應(yīng)該都從屬于作出判定的那個功能模塊,最好局限于做出判定的那個功能模塊本身及它的直接下級模塊。對于那些不滿足這一條件的軟件結(jié)構(gòu)修改的辦法是:將判定點上移或者將那些在作用范圍內(nèi)但是不在控制范圍內(nèi)的功能模塊移植到控制范圍內(nèi)。
5.應(yīng)減少功能模塊的接口的復(fù)雜性和冗余度,并改善一致性
功能模塊接口復(fù)雜是軟件發(fā)生錯誤的一個主要原因。應(yīng)該仔細設(shè)計模塊接口,使得信息傳遞簡單并且和模塊的功能一致。
6.設(shè)計成單入口、單出口的功能模塊,避免病態(tài)連接
要防止內(nèi)容耦合性,如果功能模塊都是從頂部入口、從底部出口的話,這樣的軟件也更易于理解和易于維護。病態(tài)連接關(guān)系是指從中部進入或訪問一個模塊。
7.模塊的功能可預(yù)測
如果一個功能模塊可以當做一個黑箱,即只要輸入的數(shù)據(jù)相同就產(chǎn)生同樣的輸出,這個模塊的功能就是可以預(yù)測的。而那些具有內(nèi)部記憶的功能模塊則可能是不可預(yù)知的,因為它可能記載了某個內(nèi)部標志并且利用這個標志去選擇處理方案。由于這個標志對上級功能模塊來說是看不見的,因而可能引起混亂。