企業(yè)綜合績效評價系統(tǒng)_第1頁
企業(yè)綜合績效評價系統(tǒng)_第2頁
企業(yè)綜合績效評價系統(tǒng)_第3頁
企業(yè)綜合績效評價系統(tǒng)_第4頁
企業(yè)綜合績效評價系統(tǒng)_第5頁
已閱讀5頁,還剩66頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

軟件設(shè)計(jì)基本概念軟件設(shè)計(jì)基本概念1軟件設(shè)計(jì)宣言MitchKapor“什么是設(shè)計(jì)?設(shè)計(jì)是你站在兩個世界——技術(shù)世界和人類的目標(biāo)世界——而你嘗試將這兩個世界結(jié)合在一起……”。羅馬建筑批評家Vitruvius提出的觀念“設(shè)計(jì)良好的建筑應(yīng)該展示出堅(jiān)固、適用和令人賞心悅目”。軟件設(shè)計(jì)宣言MitchKapor設(shè)計(jì)階段從工程管理的角度,可以將軟件設(shè)計(jì)分為概要設(shè)計(jì)階段和詳細(xì)設(shè)計(jì)階段。從技術(shù)的角度,傳統(tǒng)的結(jié)構(gòu)化方法將軟件設(shè)計(jì)劃分為體系結(jié)構(gòu)設(shè)計(jì)、數(shù)據(jù)設(shè)計(jì)、接口設(shè)計(jì)和過程設(shè)計(jì)4部分。面向?qū)ο蠓椒▌t將軟件設(shè)計(jì)劃分為體系結(jié)構(gòu)設(shè)計(jì)、類設(shè)計(jì)/數(shù)據(jù)設(shè)計(jì)、接口設(shè)計(jì)和構(gòu)件級設(shè)計(jì)4部分。設(shè)計(jì)階段企業(yè)綜合績效評價系統(tǒng)結(jié)構(gòu)化設(shè)計(jì)和結(jié)構(gòu)化分析的關(guān)系結(jié)構(gòu)化設(shè)計(jì)和結(jié)構(gòu)化分析的關(guān)系總體設(shè)計(jì)過程首先尋找實(shí)現(xiàn)目標(biāo)系統(tǒng)的各種不同的方案;然后分析員從這些供選擇的方案中選取若干個合理的方案,從中選出一個最佳方案向用戶和使用部門負(fù)責(zé)人推薦;分析員應(yīng)該進(jìn)一步為這個最佳方案設(shè)計(jì)軟件結(jié)構(gòu),進(jìn)行必要的數(shù)據(jù)庫設(shè)計(jì),確定測試要求并且制定測試計(jì)劃。必要性總體設(shè)計(jì)可以站在全局高度上,花較少成本,從較抽象的層次上分析對比多種可能的系統(tǒng)實(shí)現(xiàn)方案和軟件結(jié)構(gòu),從中選出最佳方案和最合理的軟件結(jié)構(gòu),從而用較低成本開發(fā)出較高質(zhì)量的軟件系統(tǒng)??傮w設(shè)計(jì)過程首先尋找實(shí)現(xiàn)目標(biāo)系統(tǒng)的各種不同的方案;然后分析員5.1設(shè)計(jì)過程由兩個主要階段組成系統(tǒng)設(shè)計(jì)階段,確定系統(tǒng)的具體實(shí)現(xiàn)方案設(shè)想供選擇的方案選取合理的方案推薦最佳方案結(jié)構(gòu)設(shè)計(jì)階段,確定軟件結(jié)構(gòu)功能分解設(shè)計(jì)軟件結(jié)構(gòu)設(shè)計(jì)數(shù)據(jù)庫制定測試計(jì)劃書寫文檔審查和復(fù)審5.1設(shè)計(jì)過程由兩個主要階段組成制定測試計(jì)劃典型的總體設(shè)計(jì)過程包括下述9個步驟1.設(shè)想供選擇的方案根據(jù)需求分析階段得出的數(shù)據(jù)流圖考慮各種可能的實(shí)現(xiàn)方案,力求從中選出最佳方案。2.選取合理的方案從前一步得到的一系列供選擇的方案中選取若干個合理的方案。對每個合理的方案分析員都應(yīng)該準(zhǔn)備下列4份資料系統(tǒng)流程圖;組成系統(tǒng)的物理元素清單;成本/效益分析;實(shí)現(xiàn)這個系統(tǒng)的進(jìn)度計(jì)劃。典型的總體設(shè)計(jì)過程包括下述9個步驟”——GradyBoach把這些相似的方面集中和概括起來,暫時忽略它們之間的差異,這就是抽象。但是,低內(nèi)聚不要使用。模塊內(nèi)各元素之間沒有實(shí)質(zhì)性聯(lián)系,很可能在一種應(yīng)用場合需要修改這個模塊,在另一種應(yīng)用場合又不允許這種修改,從而陷入困境;”——GradyBoach內(nèi)聚要高,每個模塊完成一個相對獨(dú)立的特定子功能。這時的程序可能是用某種高級語言或機(jī)器指令書寫的。簡單地說,理想內(nèi)聚的模塊只做一件事情。模塊獨(dú)立的概念是模塊化、抽象、信息隱藏和局部化概念的直接結(jié)果。低內(nèi)聚時間內(nèi)聚 3分獨(dú)立的模塊比較容易測試和維護(hù)。時間內(nèi)聚的模塊不太可能重用。對于需要使用數(shù)據(jù)庫的那些應(yīng)用系統(tǒng),軟件工程師應(yīng)該在需求分析階段所確定的系統(tǒng)數(shù)據(jù)需求的基礎(chǔ)上,進(jìn)一步設(shè)計(jì)數(shù)據(jù)庫。打開舊主文件、新主文件、事務(wù)文件和打印文件;寬度軟件結(jié)構(gòu)內(nèi)同一個層次上的模塊總數(shù)的最大值。數(shù)字只能作為參考,根本問題是要保證模塊的獨(dú)立性。比時間內(nèi)聚好,至少操作之間是過程關(guān)聯(lián)的。維護(hù)更容易,對一個模塊的修改不會是另一個模塊產(chǎn)生退化錯誤。3.推薦最佳方案分析員應(yīng)該綜合分析對比各種合理方案的利弊,推薦一個最佳的方案,并且為推薦的方案制定詳細(xì)的實(shí)現(xiàn)計(jì)劃。4.功能分解首先進(jìn)行結(jié)構(gòu)設(shè)計(jì),然后進(jìn)行過程設(shè)計(jì)。結(jié)構(gòu)設(shè)計(jì)確定程序由哪些模塊組成,以及這些模塊之間的關(guān)系;過程設(shè)計(jì)確定每個模塊的處理過程。結(jié)構(gòu)設(shè)計(jì)是總體設(shè)計(jì)階段的任務(wù),過程設(shè)計(jì)是詳細(xì)設(shè)計(jì)階段的任務(wù)。”——GradyBoach3.推5.設(shè)計(jì)軟件結(jié)構(gòu)通常程序中的一個模塊完成一個適當(dāng)?shù)淖庸δ?。?yīng)該把模塊組織成良好的層次系統(tǒng)。軟件結(jié)構(gòu)可以用層次圖或結(jié)構(gòu)圖來描繪。如果數(shù)據(jù)流圖已經(jīng)細(xì)化到適當(dāng)?shù)膶哟危瑒t可以直接從數(shù)據(jù)流圖映射出軟件結(jié)構(gòu),這就是面向數(shù)據(jù)流的設(shè)計(jì)方法。6.設(shè)計(jì)數(shù)據(jù)庫對于需要使用數(shù)據(jù)庫的那些應(yīng)用系統(tǒng),軟件工程師應(yīng)該在需求分析階段所確定的系統(tǒng)數(shù)據(jù)需求的基礎(chǔ)上,進(jìn)一步設(shè)計(jì)數(shù)據(jù)庫。5.設(shè)計(jì)軟件結(jié)構(gòu)7.制定測試計(jì)劃在軟件開發(fā)的早期階段考慮測試問題,能促使軟件設(shè)計(jì)人員在設(shè)計(jì)時注意提高軟件的可測試性。8.書寫文檔應(yīng)該用正式的文檔記錄總體設(shè)計(jì)的結(jié)果,在這個階段應(yīng)該完成的文檔通常有下述幾種(1)系統(tǒng)說明;(2)用戶手冊;(3)測試計(jì)劃;(4)詳細(xì)的實(shí)現(xiàn)計(jì)劃;(5)數(shù)據(jù)庫設(shè)計(jì)結(jié)果。9.審查和復(fù)審最后應(yīng)該對總體設(shè)計(jì)的結(jié)果進(jìn)行嚴(yán)格的技術(shù)審查和管理復(fù)審。7.制定測試計(jì)劃5.2設(shè)計(jì)原理

模塊化模塊是由邊界元素限定的相鄰程序元素的序列,而且有一個總體標(biāo)識符代表它。模塊化就是把程序劃分成獨(dú)立命名且可獨(dú)立訪問的模塊,每個模塊完成一個子功能,把這些模塊集成起來構(gòu)成一個整體,可以完成指定的功能滿足用戶的需求。5.2設(shè)計(jì)原理

模塊化模塊是由邊界元素限定的相鄰程序元素為什么要模塊化?模塊化是為了使一個復(fù)雜的大型程序能被人的智力所管理,軟件應(yīng)該具備的惟一屬性。如果一個大型程序僅由一個模塊組成,它將很難被人所理解。

為什么要模塊化?模塊化的根據(jù)如果C(P1)>C(P2),顯然E(P1)>E(P2)根據(jù)人類解決一般問題的經(jīng)驗(yàn),C(P1+P2)>C(P1)+C(P2)綜上所述,得到下面的不等式E(P1+P2)>E(P1)+E(P2)模塊化的根據(jù)每個程序都相應(yīng)地有一個最適當(dāng)?shù)哪K數(shù)目M,使得系統(tǒng)的開發(fā)成本最小。

模塊化和軟件成本每個程序都相應(yīng)地有一個最適當(dāng)?shù)哪K數(shù)目M,使得系統(tǒng)的開發(fā)成本維護(hù)更容易,對一個模塊的修改不會是另一個模塊產(chǎn)生退化錯誤。把模塊A中的判定移到模塊M中;例解一元二次方程的函數(shù)module_4();過大的模塊往往是由于分解不充分,但是進(jìn)一步分解必須符合問題結(jié)構(gòu),一般說來,分解后不應(yīng)該降低模塊獨(dú)立性。模塊內(nèi)各元素之間沒有實(shí)質(zhì)性聯(lián)系,很可能在一種應(yīng)用場合需要修改這個模塊,在另一種應(yīng)用場合又不允許這種修改,從而陷入困境;從技術(shù)的角度,傳統(tǒng)的結(jié)構(gòu)化方法將軟件設(shè)計(jì)劃分為體系結(jié)構(gòu)設(shè)計(jì)、數(shù)據(jù)設(shè)計(jì)、接口設(shè)計(jì)和過程設(shè)計(jì)4部分。從工程管理的角度,可以將軟件設(shè)計(jì)分為概要設(shè)計(jì)階段和詳細(xì)設(shè)計(jì)階段。被調(diào)用的模塊可使用的數(shù)據(jù)多于它確實(shí)需要的數(shù)據(jù),這將導(dǎo)致對數(shù)據(jù)的訪問失去控制,從而給計(jì)算機(jī)犯罪提供了機(jī)會。B[3]=5;如果出現(xiàn)下列情況之一,兩個模塊間就發(fā)生了內(nèi)容耦合可重入函數(shù)也可以這樣理解,重入即表示重復(fù)進(jìn)入,首先它意味著這個函數(shù)可以被中斷,其次意味著它除了使用自己棧上的變量以外不依賴于任何環(huán)境(包括static),這樣的函數(shù)就是purecode(純代碼)可重入,可以允許有該函數(shù)的多個副本在運(yùn)行,由于它們使用的是分離的棧,所以不會互相干擾。被調(diào)用的模塊需知道調(diào)用模塊的內(nèi)部結(jié)構(gòu)和邏輯,降低了重用的可能性。最高程度的耦合是內(nèi)容耦合。模塊內(nèi)操作之間的關(guān)系很弱,與其他模塊的操作卻有很強(qiáng)的關(guān)聯(lián)。模塊內(nèi)各元素之間沒有實(shí)質(zhì)性聯(lián)系,很可能在一種應(yīng)用場合需要修改這個模塊,在另一種應(yīng)用場合又不允許這種修改,從而陷入困境;邏輯內(nèi)聚 1分如果在一個模塊中對一個全局變量的聲明進(jìn)行修改,必須修改能夠訪問該全局變量的每一個模塊。數(shù)字只能作為參考,根本問題是要保證模塊的獨(dú)立性。(3)時間內(nèi)聚(temporalcohesion)模塊化的作用采用模塊化原理可以使軟件結(jié)構(gòu)清晰,不僅容易設(shè)計(jì)也容易閱讀和理解。模塊化使軟件容易測試和調(diào)試,因而有助于提高軟件的可靠性。模塊化能夠提高軟件的可修改性。模塊化也有助于軟件開發(fā)工程的組織管理。維護(hù)更容易,對一個模塊的修改不會是另一個模塊產(chǎn)生退化錯誤。模抽象抽象現(xiàn)實(shí)世界中一定事物、狀態(tài)或過程之間總存在著某些相似的方面(共性)。把這些相似的方面集中和概括起來,暫時忽略它們之間的差異,這就是抽象。抽象就是抽出事物本質(zhì)特性而暫時不考慮細(xì)節(jié)?!俺橄笫侨祟愄幚韽?fù)雜問題的基本方法之一?!薄狦radyBoach抽象抽象現(xiàn)實(shí)世界中一定事物、狀態(tài)或過程之間總存在著某些相似的一般抽象過程處理復(fù)雜系統(tǒng)的惟一有效的方法是用層次的方式構(gòu)造和分析它。一個復(fù)雜的動態(tài)系統(tǒng)首先可以用一些高級的抽象概念構(gòu)造和理解,這些高級概念又可以用一些較低級的概念構(gòu)造和理解,如此進(jìn)行下去,直至最低層次的具體元素。例過程抽象、數(shù)據(jù)抽象開(行為抽象)+門(數(shù)據(jù)抽象)一般抽象過程開(行為抽象)+門(數(shù)據(jù)抽象)形體衣著性格抽象抽象例子外表形體衣著性格抽象抽象例子外表軟件工程抽象過程軟件工程過程的每一步都是對軟件解法的抽象層次的一次精化。在可行性研究階段,軟件作為系統(tǒng)的一個完整部件;在需求分析期間,軟件解法是使用在問題環(huán)境內(nèi)熟悉的方式描述的;當(dāng)由總體設(shè)計(jì)向詳細(xì)設(shè)計(jì)過渡時,抽象的程度也就隨之減少了;最后,當(dāng)源程序?qū)懗鰜硪院?,也就達(dá)到了抽象的最低層。軟件工程抽象過程逐步求精逐步求精為了能集中精力解決主要問題而盡量推遲對問題細(xì)節(jié)的考慮。逐步求精是人類解決復(fù)雜問題時采用的基本方法,也是許多軟件工程技術(shù)的基礎(chǔ)。Miller法則一個人在任何時候都只能把注意力集中在(7±2)個知識塊上。逐步求精逐步求精為了能集中精力解決主要問題而盡量推遲對問題細(xì)逐步求精外表形體衣著性格頭發(fā)臉形領(lǐng)帶抽象逐步求精的例子逐步求精外表形體衣著性格頭發(fā)臉形領(lǐng)帶抽象逐步求精的例子例用篩選法求100以內(nèi)的素?cái)?shù)。所謂的篩選法,就是從2到100中去掉2,3,5,7的倍數(shù),剩下的就是100以內(nèi)的素?cái)?shù)。首先按程序功能寫出一個框架main(){建立2到100的數(shù)組A[],其中A[i]=i;..........................1建立2到10的素?cái)?shù)表B[],存放2到10以內(nèi)的素?cái)?shù);......2若A[i]=i是B[]中任一數(shù)的倍數(shù),則剔除A[i];............3輸出A[]中所有沒有被剔除的數(shù);…..………………....4}例用篩選法求100以內(nèi)的素?cái)?shù)。所謂的篩選法,就是從2到100上述框架中每一個加工語句都可進(jìn)一步細(xì)化main(){/*建立2到100的數(shù)組A[],其中A[i]=i*/………..………1for(i=2;i<=100;i++)A[i]=i;

/*建立2到10的素?cái)?shù)表B[],存放2到10以內(nèi)的素?cái)?shù)*/….2B[1]=2;B[2]=3;B[3]=5;B[4]=7;

/*若A[i]=i是B[]中任一數(shù)的倍數(shù),則剔除A[i]*/.…..….3for(j=1;j<=4;j++)檢查A[]所有數(shù)能否被B[j]整除并將其從A[]剔除;.....3.1/*輸出A[]中所有沒有被剔除的數(shù)*/…….4for(i=2;i<=100;i++)若A[i]沒有被剔除,則輸出之……..…..4.1}繼續(xù)對3.1和4.1細(xì)化,直到每個語句都能用程序設(shè)計(jì)語言來表示上述框架中每一個加工語句都可進(jìn)一步細(xì)化逐步求精的作用它能幫助軟件工程師把精力集中在與當(dāng)前開發(fā)階段最相關(guān)的那些方面上,而忽略那些對整體解決方案來說雖然是必要的,然而目前還不需要考慮的細(xì)節(jié)。逐步求精方法確保每個問題都將被解決,而且每個問題都將在適當(dāng)?shù)臅r候被解決,但是,在任何時候一個人都不需要同時處理7個以上知識塊。逐步求精的作用Wirth本人對逐步求精策略的概括說明我們對付復(fù)雜問題的最重要的辦法是抽象,因此,對一個復(fù)雜的問題不應(yīng)該立刻用計(jì)算機(jī)指令、數(shù)字和邏輯符號來表示,而應(yīng)該用較自然的抽象語句來表示,從而得出抽象程序。抽象程序?qū)Τ橄蟮臄?shù)據(jù)進(jìn)行某些特定的運(yùn)算并用某些合適的記號(可能是自然語言)來表示。對抽象程序做進(jìn)一步的分解,并進(jìn)入下一個抽象層次,這樣的精細(xì)化過程一直進(jìn)行下去,直到程序能被計(jì)算機(jī)接受為止。這時的程序可能是用某種高級語言或機(jī)器指令書寫的。Wirth本人對逐步求精策略的概括說明信息隱藏和局部化

信息隱藏應(yīng)該這樣設(shè)計(jì)和確定模塊,使得一個模塊內(nèi)包含的信息(過程和數(shù)據(jù))對于不需要這些信息的模塊來說,是不能訪問的。局部化局部化的概念和信息隱藏概念是密切相關(guān)的。所謂局部化是指把一些關(guān)系密切的軟件元素物理地放得彼此靠近。顯然,局部化有助于實(shí)現(xiàn)信息隱藏。信息隱藏和局部化

信息隱藏應(yīng)該這樣設(shè)計(jì)和確定模塊,使得一個模信息隱藏和局部化的作用“隱藏”意味著有效的模塊化可以通過定義一組獨(dú)立的模塊而實(shí)現(xiàn),這些獨(dú)立的模塊彼此間僅僅交換那些為了完成系統(tǒng)功能而必須交換的信息。使用信息隱藏原理作為模塊化系統(tǒng)設(shè)計(jì)的標(biāo)準(zhǔn)就會帶來極大好處。因?yàn)榻^大多數(shù)數(shù)據(jù)和過程對于軟件的其他部分而言是隱藏的,在修改期間由于疏忽而引入的錯誤就很少可能傳播到軟件的其他部分。信息隱藏和局部化的作用最后,當(dāng)源程序?qū)懗鰜硪院螅簿瓦_(dá)到了抽象的最低層。例解一元二次方程的函數(shù)數(shù)字只能作為參考,根本問題是要保證模塊的獨(dú)立性。應(yīng)該仔細(xì)設(shè)計(jì)模塊接口,使得信息傳遞簡單并且和模塊的功能一致。如果兩個模塊中的每一個都能獨(dú)立地工作而不需要另一個模塊的存在,那么它們完全獨(dú)立。一般說來,一個系統(tǒng)內(nèi)可以只包含數(shù)據(jù)耦合。2設(shè)計(jì)原理

模塊化過大的模塊往往是由于分解不充分,但是進(jìn)一步分解必須符合問題結(jié)構(gòu),一般說來,分解后不應(yīng)該降低模塊獨(dú)立性。消除重復(fù)功能,改善軟件結(jié)構(gòu)。IFR=5THENS=1把模塊G移到模塊A下面,作為他的下級模塊。公共環(huán)境可以是全程變量、共享的通信區(qū)、內(nèi)存的公共覆蓋區(qū)、任何存儲介質(zhì)上的文件、物理設(shè)備等等。信息隱藏應(yīng)該這樣設(shè)計(jì)和確定模塊,使得一個模塊內(nèi)包含的信息(過程和數(shù)據(jù))對于不需要這些信息的模塊來說,是不能訪問的。把模塊A中的判定移到模塊M中;“隱藏”意味著有效的模塊化可以通過定義一組獨(dú)立的模塊而實(shí)現(xiàn),這些獨(dú)立的模塊彼此間僅僅交換那些為了完成系統(tǒng)功能而必須交換的信息。for(j=1;兩個模塊都既往公共環(huán)境送數(shù)據(jù)又從里面取數(shù)據(jù),這種耦合比較緊密,介于數(shù)據(jù)耦合和控制耦合之間。深度軟件結(jié)構(gòu)中控制的層數(shù),它往往能粗略地標(biāo)志一個系統(tǒng)的大小和復(fù)雜程度。有效的模塊化(即具有獨(dú)立的模塊)的軟件比較容易開發(fā)出來。分析員應(yīng)該綜合分析對比各種合理方案的利弊,推薦一個最佳的方案,并且為推薦的方案制定詳細(xì)的實(shí)現(xiàn)計(jì)劃。把模塊G移到模塊A下面,作為他的下級模塊。模塊獨(dú)立模塊獨(dú)立模塊獨(dú)立的概念是模塊化、抽象、信息隱藏和局部化概念的直接結(jié)果。希望這樣設(shè)計(jì)軟件結(jié)構(gòu),使得每個模塊完成一個相對獨(dú)立的特定子功能,并且和其他模塊之間的關(guān)系很簡單。最后,當(dāng)源程序?qū)懗鰜硪院?,也就達(dá)到了抽象的最低層。模塊獨(dú)立模模塊獨(dú)立的重要性有效的模塊化(即具有獨(dú)立的模塊)的軟件比較容易開發(fā)出來。這是由于能夠分割功能而且接口可以簡化,當(dāng)許多人分工合作開發(fā)同一個軟件時,這個優(yōu)點(diǎn)尤其重要。獨(dú)立的模塊比較容易測試和維護(hù)。這是因?yàn)橄鄬φf來,修改設(shè)計(jì)和程序需要的工作量比較小,錯誤傳播范圍小,需要擴(kuò)充功能時能夠“插入”模塊。模塊獨(dú)立的重要性模塊獨(dú)立程度的兩個定性標(biāo)準(zhǔn)度量耦合衡量不同模塊彼此間互相依賴(連接)的緊密程度。耦合要低,即每個模塊和其他模塊之間的關(guān)系要簡單;內(nèi)聚衡量一個模塊內(nèi)部各個元素彼此結(jié)合的緊密程度。內(nèi)聚要高,每個模塊完成一個相對獨(dú)立的特定子功能。模塊獨(dú)立程度的兩個定性標(biāo)準(zhǔn)度量1.耦合耦合是對一個軟件結(jié)構(gòu)內(nèi)不同模塊之間互連程度的度量。要求在軟件設(shè)計(jì)中應(yīng)該追求盡可能松散耦合的系統(tǒng)??梢匝芯?、測試或維護(hù)任何一個模塊,而不需要對系統(tǒng)的其他模塊有很多了解;模塊間聯(lián)系簡單,發(fā)生在一處的錯誤傳播到整個系統(tǒng)的可能性就很??;模塊間的耦合程度強(qiáng)烈影響系統(tǒng)的可理解性、可測試性、可靠性和可維護(hù)性。1.耦合耦合程度的度量(1)非直接耦合/完全獨(dú)立(nodirectcoupling)如果兩個模塊中的每一個都能獨(dú)立地工作而不需要另一個模塊的存在,那么它們完全獨(dú)立。在一個軟件系統(tǒng)中不可能所有模塊之間都沒有任何連接。耦合程度的度量(2)數(shù)據(jù)耦合(datacoupling)如果兩個模塊彼此間通過參數(shù)交換信息,而且交換的信息僅僅是數(shù)據(jù),那么這種耦合稱為數(shù)據(jù)耦合。(2)數(shù)據(jù)耦合(datacoupling)評價系統(tǒng)中至少必須存在這種耦合。一般說來,一個系統(tǒng)內(nèi)可以只包含數(shù)據(jù)耦合。數(shù)據(jù)耦合是理想的目標(biāo)。維護(hù)更容易,對一個模塊的修改不會是另一個模塊產(chǎn)生退化錯誤。評價(3)控制耦合(controlcoupling)如果兩個模塊彼此間傳遞的信息中有控制信息,這種耦合稱為控制耦合。(3)控制耦合(controlcoupling)評價控制耦合往往是多余的,把模塊適當(dāng)分解之后通??梢杂脭?shù)據(jù)耦合代替它。被調(diào)用的模塊需知道調(diào)用模塊的內(nèi)部結(jié)構(gòu)和邏輯,降低了重用的可能性。評價(4)特征耦合(stampcoupling)當(dāng)把整個數(shù)據(jù)結(jié)構(gòu)作為參數(shù)傳遞而被調(diào)用的模塊只需要使用其中一部分?jǐn)?shù)據(jù)元素時,就出現(xiàn)了特征耦合。評價被調(diào)用的模塊可使用的數(shù)據(jù)多于它確實(shí)需要的數(shù)據(jù),這將導(dǎo)致對數(shù)據(jù)的訪問失去控制,從而給計(jì)算機(jī)犯罪提供了機(jī)會。無論何時把指針作為參數(shù)進(jìn)行傳遞,都應(yīng)該仔細(xì)檢查該耦合。(4)特征耦合(stampcoupling)(5)公共環(huán)境耦合(commoncoupling)當(dāng)兩個或多個模塊通過一個公共數(shù)據(jù)環(huán)境相互作用時,它們之間的耦合稱為公共環(huán)境耦合。公共環(huán)境可以是全程變量、共享的通信區(qū)、內(nèi)存的公共覆蓋區(qū)、任何存儲介質(zhì)上的文件、物理設(shè)備等等。(5)公共環(huán)境耦合(commoncoupling)模塊化使軟件容易測試和調(diào)試,因而有助于提高軟件的可靠性。系統(tǒng)中至少必須存在這種耦合。偶然內(nèi)聚 0分當(dāng)兩個或多個模塊通過一個公共數(shù)據(jù)環(huán)境相互作用時,它們之間的耦合稱為公共環(huán)境耦合。如果一個大型程序僅由一個模塊組成,它將很難被人所理解。例解一元二次方程的函數(shù)組成系統(tǒng)的物理元素清單;但是,低內(nèi)聚不要使用。內(nèi)聚要高,每個模塊完成一個相對獨(dú)立的特定子功能。如果模塊內(nèi)所有處理元素屬于一個整體,完成一個單一的功能,則稱為功能內(nèi)聚。少用控制耦合和特征耦合,Wirth本人對逐步求精策略的概括說明module_3();(1)非直接耦合/完全獨(dú)立(nodirectcoupling)B[2]=3;如果兩個模塊中的每一個都能獨(dú)立地工作而不需要另一個模塊的存在,那么它們完全獨(dú)立。(3)控制耦合(controlcoupling)如果模塊內(nèi)所有處理元素屬于一個整體,完成一個單一的功能,則稱為功能內(nèi)聚。公共環(huán)境耦合的類型一個模塊往公共環(huán)境送數(shù)據(jù),另一個模塊從公共環(huán)境取數(shù)據(jù)。數(shù)據(jù)耦合的一種形式,是比較松散的耦合。兩個模塊都既往公共環(huán)境送數(shù)據(jù)又從里面取數(shù)據(jù),這種耦合比較緊密,介于數(shù)據(jù)耦合和控制耦合之間。模塊化使軟件容易測試和調(diào)試,因而有助于提高軟件的可靠性。公共例while(global_variable==0){if(argument_xyz>25)module_3();elsemodule_4();}例評價與結(jié)構(gòu)化編程矛盾,生成的代碼完全不可讀。如果在一個模塊中對一個全局變量的聲明進(jìn)行修改,必須修改能夠訪問該全局變量的每一個模塊。公共環(huán)境耦合的模塊難于重用,必須提供一個全局變量的清單。即使模塊本身不改變,它和產(chǎn)品中其他模塊之間公共環(huán)境耦合的實(shí)例數(shù)也會變化非常大。潛在危險(xiǎn)很大。模塊暴露出必需要更多的數(shù)據(jù),難以控制數(shù)據(jù)存取,而且會導(dǎo)致計(jì)算機(jī)犯罪。有些情況下公共環(huán)境耦合更好。評價函數(shù)可重入的概念可重入函數(shù)也可以這樣理解,重入即表示重復(fù)進(jìn)入,首先它意味著這個函數(shù)可以被中斷,其次意味著它除了使用自己棧上的變量以外不依賴于任何環(huán)境(包括static),這樣的函數(shù)就是purecode(純代碼)可重入,可以允許有該函數(shù)的多個副本在運(yùn)行,由于它們使用的是分離的棧,所以不會互相干擾。如果確實(shí)需要訪問全局變量(包括static),一定要注意實(shí)施互斥手段??芍厝牒瘮?shù)在并行運(yùn)行環(huán)境中非常重要,但是一般要為訪問全局變量付出一些性能代價函數(shù)可重入的概念可重入函數(shù)也可以這樣理解,重入即表示重復(fù)進(jìn)入(6)內(nèi)容耦合(contentcoupling)最高程度的耦合是內(nèi)容耦合。如果出現(xiàn)下列情況之一,兩個模塊間就發(fā)生了內(nèi)容耦合一個模塊訪問另一個模塊的內(nèi)部數(shù)據(jù);一個模塊不通過正常入口轉(zhuǎn)到另一個模塊的內(nèi)部;兩個模塊有一部分程序代碼重疊;一個模塊有多個入口。(6)內(nèi)容耦合(contentcoupling)耦合是影響軟件復(fù)雜程度的一個重要因素。應(yīng)該采取下述設(shè)計(jì)原則盡量使用數(shù)據(jù)耦合,少用控制耦合和特征耦合,限制公共環(huán)境耦合的范圍,

完全不用內(nèi)容耦合。耦合是影響軟件復(fù)雜程度的一個重要因素。2.內(nèi)聚內(nèi)聚標(biāo)志一個模塊內(nèi)各個元素彼此結(jié)合的緊密程度,它是信息隱藏和局部化概念的自然擴(kuò)展。簡單地說,理想內(nèi)聚的模塊只做一件事情。要求設(shè)計(jì)時應(yīng)該力求做到高內(nèi)聚,通常中等程度的內(nèi)聚也是可以采用的,而且效果和高內(nèi)聚相差不多;但是,低內(nèi)聚不要使用。內(nèi)聚和耦合是密切相關(guān)的,模塊內(nèi)的高內(nèi)聚往往意味著模塊間的松耦合。實(shí)踐表明內(nèi)聚更重要,應(yīng)該把更多注意力集中到提高模塊的內(nèi)聚程度上。2.內(nèi)聚內(nèi)聚程度的度量(1)偶然內(nèi)聚(coincidentalcohesion)如果一個模塊完成一組任務(wù),這些任務(wù)彼此間即使有關(guān)系,關(guān)系也是很松散的,就叫做偶然內(nèi)聚。MA=B+CGETCHERIFR=5THENS=1內(nèi)聚程度的度量MA=B+C評價模塊內(nèi)各元素之間沒有實(shí)質(zhì)性聯(lián)系,很可能在一種應(yīng)用場合需要修改這個模塊,在另一種應(yīng)用場合又不允許這種修改,從而陷入困境;可理解性差,可維護(hù)性產(chǎn)生退化;模塊是不可重用的。解決方案將模塊分成更小的模塊,每個小模塊執(zhí)行一個操作。評價(2)邏輯內(nèi)聚(logicalcohesion)如果一個模塊完成的任務(wù)在邏輯上屬于相同或相似的一類,則稱為邏輯內(nèi)聚。(2)邏輯內(nèi)聚(logicalcohesion)評價接口難以理解,造成整體上不易理解;完成多個操作的代碼互相糾纏在一起,即使局部功能的修改有時也會影響全局,導(dǎo)致嚴(yán)重的維護(hù)問題;難以重用。解決方案模塊分解。評價企業(yè)綜合績效評價系統(tǒng)(3)時間內(nèi)聚(temporalcohesion)如果一個模塊包含的任務(wù)必須在同一段時間內(nèi)執(zhí)行,就叫時間內(nèi)聚。執(zhí)行初始化打開舊主文件、新主文件、事務(wù)文件和打印文件;初始化銷售地區(qū)表;讀第一條事務(wù)記錄和第一條舊主文件記錄;(3)時間內(nèi)聚(temporalcohesion)執(zhí)行初評價時間關(guān)系在一定程度上反映了程序某些實(shí)質(zhì),所以時間內(nèi)聚比邏輯內(nèi)聚好一些。模塊內(nèi)操作之間的關(guān)系很弱,與其他模塊的操作卻有很強(qiáng)的關(guān)聯(lián)。時間內(nèi)聚的模塊不太可能重用。評價(4)過程內(nèi)聚(proceduralcohesion)如果一個模塊內(nèi)的處理元素是相關(guān)的,而且必須以特定次序執(zhí)行,則稱為過程內(nèi)聚。使用程序流程圖作為工具設(shè)計(jì)軟件時,常常通過研究流程圖確定模塊的劃分,這樣得到的往往是過程內(nèi)聚的模塊。(4)過程內(nèi)聚(proceduralcohesion)企業(yè)綜合績效評價系統(tǒng)評價比時間內(nèi)聚好,至少操作之間是過程關(guān)聯(lián)的。仍是弱連接,不太可能重用模塊。解決方案分割為單獨(dú)的模塊,每個模塊執(zhí)行一個操作。評價(5)通信內(nèi)聚(communicationalcohesion)如果模塊中所有元素都使用同一個輸入數(shù)據(jù)和(或)產(chǎn)生同一個輸出數(shù)據(jù),則稱為通信內(nèi)聚。即在同一個數(shù)據(jù)結(jié)構(gòu)上操作。評價模塊中各操作緊密相連,比過程內(nèi)聚更好。不能重用。解決方案分成多個模塊,每個模塊執(zhí)行一個操作。(5)通信內(nèi)聚(communicationalcohes企業(yè)綜合績效評價系統(tǒng)(6)順序內(nèi)聚(sequentialcohesion)如果一個模塊內(nèi)的處理元素和同一個功能密切相關(guān),而且這些處理必須順序執(zhí)行,則稱為順序內(nèi)聚。評價根據(jù)數(shù)據(jù)流圖劃分模塊時,通常得到順序內(nèi)聚的模塊,這種模塊彼此間的連接往往比較簡單。(6)順序內(nèi)聚(sequentialcohesion)(7)功能內(nèi)聚(functionalcohesion)如果模塊內(nèi)所有處理元素屬于一個整體,完成一個單一的功能,則稱為功能內(nèi)聚。功能內(nèi)聚是最高程度的內(nèi)聚。評價模塊可重用,應(yīng)盡可能重用;可隔離錯誤,維護(hù)更容

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論