軟件設計基本概念_第1頁
軟件設計基本概念_第2頁
軟件設計基本概念_第3頁
軟件設計基本概念_第4頁
軟件設計基本概念_第5頁
已閱讀5頁,還剩66頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

軟件設計基本概念當前第1頁\共有71頁\編于星期一\15點軟件設計宣言:MitchKapor“什么是設計?設計是你站在兩個世界——技術世界和人類的目標世界——而你嘗試將這兩個世界結合在一起……”。羅馬建筑批評家Vitruvius提出的觀念:“設計良好的建筑應該展示出堅固、適用和令人賞心悅目”。當前第2頁\共有71頁\編于星期一\15點設計階段:從工程管理的角度,可以將軟件設計分為概要設計階段和詳細設計階段。從技術的角度,傳統(tǒng)的結構化方法將軟件設計劃分為體系結構設計、數據設計、接口設計和過程設計4部分。面向對象方法則將軟件設計劃分為體系結構設計、類設計/數據設計、接口設計和構件級設計4部分。當前第3頁\共有71頁\編于星期一\15點當前第4頁\共有71頁\編于星期一\15點結構化設計和結構化分析的關系:當前第5頁\共有71頁\編于星期一\15點總體設計過程:首先尋找實現目標系統(tǒng)的各種不同的方案;然后分析員從這些供選擇的方案中選取若干個合理的方案,從中選出一個最佳方案向用戶和使用部門負責人推薦;分析員應該進一步為這個最佳方案設計軟件結構,進行必要的數據庫設計,確定測試要求并且制定測試計劃。必要性:總體設計可以站在全局高度上,花較少成本,從較抽象的層次上分析對比多種可能的系統(tǒng)實現方案和軟件結構,從中選出最佳方案和最合理的軟件結構,從而用較低成本開發(fā)出較高質量的軟件系統(tǒng)。當前第6頁\共有71頁\編于星期一\15點5.1設計過程由兩個主要階段組成:系統(tǒng)設計階段,確定系統(tǒng)的具體實現方案設想供選擇的方案選取合理的方案推薦最佳方案結構設計階段,確定軟件結構功能分解設計軟件結構設計數據庫制定測試計劃書寫文檔審查和復審當前第7頁\共有71頁\編于星期一\15點典型的總體設計過程包括下述9個步驟:1.設想供選擇的方案根據需求分析階段得出的數據流圖考慮各種可能的實現方案,力求從中選出最佳方案。2.選取合理的方案從前一步得到的一系列供選擇的方案中選取若干個合理的方案。對每個合理的方案分析員都應該準備下列4份資料:系統(tǒng)流程圖;組成系統(tǒng)的物理元素清單;成本/效益分析;實現這個系統(tǒng)的進度計劃。當前第8頁\共有71頁\編于星期一\15點3.推薦最佳方案分析員應該綜合分析對比各種合理方案的利弊,推薦一個最佳的方案,并且為推薦的方案制定詳細的實現計劃。4.功能分解首先進行結構設計,然后進行過程設計。結構設計確定程序由哪些模塊組成,以及這些模塊之間的關系;過程設計確定每個模塊的處理過程。結構設計是總體設計階段的任務,過程設計是詳細設計階段的任務。當前第9頁\共有71頁\編于星期一\15點5.設計軟件結構通常程序中的一個模塊完成一個適當的子功能。應該把模塊組織成良好的層次系統(tǒng)。軟件結構可以用層次圖或結構圖來描繪。如果數據流圖已經細化到適當的層次,則可以直接從數據流圖映射出軟件結構,這就是面向數據流的設計方法。6.設計數據庫對于需要使用數據庫的那些應用系統(tǒng),軟件工程師應該在需求分析階段所確定的系統(tǒng)數據需求的基礎上,進一步設計數據庫。當前第10頁\共有71頁\編于星期一\15點7.制定測試計劃在軟件開發(fā)的早期階段考慮測試問題,能促使軟件設計人員在設計時注意提高軟件的可測試性。8.書寫文檔應該用正式的文檔記錄總體設計的結果,在這個階段應該完成的文檔通常有下述幾種:

(1)系統(tǒng)說明;(2)用戶手冊;(3)測試計劃;

(4)詳細的實現計劃;(5)數據庫設計結果。9.審查和復審最后應該對總體設計的結果進行嚴格的技術審查和管理復審。當前第11頁\共有71頁\編于星期一\15點5.2設計原理

5.2.1模塊化模塊:是由邊界元素限定的相鄰程序元素的序列,而且有一個總體標識符代表它。模塊化:就是把程序劃分成獨立命名且可獨立訪問的模塊,每個模塊完成一個子功能,把這些模塊集成起來構成一個整體,可以完成指定的功能滿足用戶的需求。當前第12頁\共有71頁\編于星期一\15點為什么要模塊化?模塊化是為了使一個復雜的大型程序能被人的智力所管理,軟件應該具備的惟一屬性。如果一個大型程序僅由一個模塊組成,它將很難被人所理解。

當前第13頁\共有71頁\編于星期一\15點模塊化的根據:

如果C(P1)>C(P2),顯然E(P1)>E(P2)根據人類解決一般問題的經驗,C(P1+P2)>C(P1)+C(P2)綜上所述,得到下面的不等式E(P1+P2)>E(P1)+E(P2)當前第14頁\共有71頁\編于星期一\15點每個程序都相應地有一個最適當的模塊數目M,使得系統(tǒng)的開發(fā)成本最小。

模塊化和軟件成本當前第15頁\共有71頁\編于星期一\15點模塊化的作用:采用模塊化原理可以使軟件結構清晰,不僅容易設計也容易閱讀和理解。模塊化使軟件容易測試和調試,因而有助于提高軟件的可靠性。模塊化能夠提高軟件的可修改性。模塊化也有助于軟件開發(fā)工程的組織管理。當前第16頁\共有71頁\編于星期一\15點5.2.2抽象抽象:現實世界中一定事物、狀態(tài)或過程之間總存在著某些相似的方面(共性)。把這些相似的方面集中和概括起來,暫時忽略它們之間的差異,這就是抽象。抽象就是抽出事物本質特性而暫時不考慮細節(jié)?!俺橄笫侨祟愄幚韽碗s問題的基本方法之一。”——GradyBoach當前第17頁\共有71頁\編于星期一\15點一般抽象過程:處理復雜系統(tǒng)的惟一有效的方法是用層次的方式構造和分析它。一個復雜的動態(tài)系統(tǒng)首先可以用一些高級的抽象概念構造和理解,這些高級概念又可以用一些較低級的概念構造和理解,如此進行下去,直至最低層次的具體元素。

例:過程抽象、數據抽象開(行為抽象)+門(數據抽象)當前第18頁\共有71頁\編于星期一\15點19

形體衣著性格抽象抽象例子外表當前第19頁\共有71頁\編于星期一\15點軟件工程抽象過程:軟件工程過程的每一步都是對軟件解法的抽象層次的一次精化。在可行性研究階段,軟件作為系統(tǒng)的一個完整部件;在需求分析期間,軟件解法是使用在問題環(huán)境內熟悉的方式描述的;當由總體設計向詳細設計過渡時,抽象的程度也就隨之減少了;最后,當源程序寫出來以后,也就達到了抽象的最低層。

當前第20頁\共有71頁\編于星期一\15點5.2.3逐步求精逐步求精:為了能集中精力解決主要問題而盡量推遲對問題細節(jié)的考慮。逐步求精是人類解決復雜問題時采用的基本方法,也是許多軟件工程技術的基礎。Miller法則:一個人在任何時候都只能把注意力集中在(7±2)個知識塊上。當前第21頁\共有71頁\編于星期一\15點22

逐步求精外表形體衣著性格頭發(fā)臉形領帶抽象逐步求精的例子當前第22頁\共有71頁\編于星期一\15點例:用篩選法求100以內的素數。所謂的篩選法,就是從2到100中去掉2,3,5,7的倍數,剩下的就是100以內的素數。首先按程序功能寫出一個框架main(){

建立2到100的數組A[],其中A[i]=i;..........................1

建立2到10的素數表B[],存放2到10以內的素數;......2

若A[i]=i是B[]中任一數的倍數,則剔除A[i];............3

輸出A[]中所有沒有被剔除的數;…..………………....4}當前第23頁\共有71頁\編于星期一\15點上述框架中每一個加工語句都可進一步細化main(){

/*建立2到100的數組A[],其中A[i]=i*/………..………1for(i=2;i<=100;i++)A[i]=i;

/*建立2到10的素數表B[],存放2到10以內的素數*/….2B[1]=2;B[2]=3;B[3]=5;B[4]=7;

/*若A[i]=i是B[]中任一數的倍數,則剔除A[i]*/.…..….3for(j=1;j<=4;j++)檢查A[]所有數能否被B[j]整除并將其從A[]剔除;.....3.1

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

信息隱藏:應該這樣設計和確定模塊,使得一個模塊內包含的信息(過程和數據)對于不需要這些信息的模塊來說,是不能訪問的。局部化:局部化的概念和信息隱藏概念是密切相關的。所謂局部化是指把一些關系密切的軟件元素物理地放得彼此靠近。顯然,局部化有助于實現信息隱藏。當前第27頁\共有71頁\編于星期一\15點信息隱藏和局部化的作用:“隱藏”意味著有效的模塊化可以通過定義一組獨立的模塊而實現,這些獨立的模塊彼此間僅僅交換那些為了完成系統(tǒng)功能而必須交換的信息。使用信息隱藏原理作為模塊化系統(tǒng)設計的標準就會帶來極大好處。因為絕大多數數據和過程對于軟件的其他部分而言是隱藏的,在修改期間由于疏忽而引入的錯誤就很少可能傳播到軟件的其他部分。當前第28頁\共有71頁\編于星期一\15點5.2.5模塊獨立模塊獨立:模塊獨立的概念是模塊化、抽象、信息隱藏和局部化概念的直接結果。希望這樣設計軟件結構,使得每個模塊完成一個相對獨立的特定子功能,并且和其他模塊之間的關系很簡單。當前第29頁\共有71頁\編于星期一\15點模塊獨立的重要性:有效的模塊化(即具有獨立的模塊)的軟件比較容易開發(fā)出來。這是由于能夠分割功能而且接口可以簡化,當許多人分工合作開發(fā)同一個軟件時,這個優(yōu)點尤其重要。獨立的模塊比較容易測試和維護。這是因為相對說來,修改設計和程序需要的工作量比較小,錯誤傳播范圍小,需要擴充功能時能夠“插入”模塊。當前第30頁\共有71頁\編于星期一\15點模塊獨立程度的兩個定性標準度量:耦合衡量不同模塊彼此間互相依賴(連接)的緊密程度。耦合要低,即每個模塊和其他模塊之間的關系要簡單;內聚衡量一個模塊內部各個元素彼此結合的緊密程度。內聚要高,每個模塊完成一個相對獨立的特定子功能。當前第31頁\共有71頁\編于星期一\15點1.耦合耦合:是對一個軟件結構內不同模塊之間互連程度的度量。要求:在軟件設計中應該追求盡可能松散耦合的系統(tǒng)??梢匝芯?、測試或維護任何一個模塊,而不需要對系統(tǒng)的其他模塊有很多了解;模塊間聯系簡單,發(fā)生在一處的錯誤傳播到整個系統(tǒng)的可能性就很??;模塊間的耦合程度強烈影響系統(tǒng)的可理解性、可測試性、可靠性和可維護性。當前第32頁\共有71頁\編于星期一\15點耦合程度的度量:(1)非直接耦合/完全獨立(nodirectcoupling)如果兩個模塊中的每一個都能獨立地工作而不需要另一個模塊的存在,那么它們完全獨立。在一個軟件系統(tǒng)中不可能所有模塊之間都沒有任何連接。當前第33頁\共有71頁\編于星期一\15點(2)數據耦合(datacoupling)如果兩個模塊彼此間通過參數交換信息,而且交換的信息僅僅是數據,那么這種耦合稱為數據耦合。當前第34頁\共有71頁\編于星期一\15點評價:系統(tǒng)中至少必須存在這種耦合。一般說來,一個系統(tǒng)內可以只包含數據耦合。數據耦合是理想的目標。維護更容易,對一個模塊的修改不會是另一個模塊產生退化錯誤。當前第35頁\共有71頁\編于星期一\15點(3)控制耦合(controlcoupling)如果兩個模塊彼此間傳遞的信息中有控制信息,這種耦合稱為控制耦合。當前第36頁\共有71頁\編于星期一\15點評價:控制耦合往往是多余的,把模塊適當分解之后通??梢杂脭祿詈洗嫠1徽{用的模塊需知道調用模塊的內部結構和邏輯,降低了重用的可能性。當前第37頁\共有71頁\編于星期一\15點(4)特征耦合(stampcoupling)當把整個數據結構作為參數傳遞而被調用的模塊只需要使用其中一部分數據元素時,就出現了特征耦合。評價:被調用的模塊可使用的數據多于它確實需要的數據,這將導致對數據的訪問失去控制,從而給計算機犯罪提供了機會。無論何時把指針作為參數進行傳遞,都應該仔細檢查該耦合。當前第38頁\共有71頁\編于星期一\15點(5)公共環(huán)境耦合(commoncoupling)當兩個或多個模塊通過一個公共數據環(huán)境相互作用時,它們之間的耦合稱為公共環(huán)境耦合。公共環(huán)境可以是全程變量、共享的通信區(qū)、內存的公共覆蓋區(qū)、任何存儲介質上的文件、物理設備等等。當前第39頁\共有71頁\編于星期一\15點公共環(huán)境耦合的類型:

一個模塊往公共環(huán)境送數據,另一個模塊從公共環(huán)境取數據。數據耦合的一種形式,是比較松散的耦合。兩個模塊都既往公共環(huán)境送數據又從里面取數據,這種耦合比較緊密,介于數據耦合和控制耦合之間。當前第40頁\共有71頁\編于星期一\15點例:while(global_variable==0){if(argument_xyz>25)module_3();elsemodule_4();}當前第41頁\共有71頁\編于星期一\15點評價:與結構化編程矛盾,生成的代碼完全不可讀。如果在一個模塊中對一個全局變量的聲明進行修改,必須修改能夠訪問該全局變量的每一個模塊。公共環(huán)境耦合的模塊難于重用,必須提供一個全局變量的清單。即使模塊本身不改變,它和產品中其他模塊之間公共環(huán)境耦合的實例數也會變化非常大。潛在危險很大。模塊暴露出必需要更多的數據,難以控制數據存取,而且會導致計算機犯罪。有些情況下公共環(huán)境耦合更好。當前第42頁\共有71頁\編于星期一\15點函數可重入的概念可重入函數也可以這樣理解,重入即表示重復進入,首先它意味著這個函數可以被中斷,其次意味著它除了使用自己棧上的變量以外不依賴于任何環(huán)境(包括static),這樣的函數就是purecode(純代碼)可重入,可以允許有該函數的多個副本在運行,由于它們使用的是分離的棧,所以不會互相干擾。如果確實需要訪問全局變量(包括static),一定要注意實施互斥手段。可重入函數在并行運行環(huán)境中非常重要,但是一般要為訪問全局變量付出一些性能代價當前第43頁\共有71頁\編于星期一\15點(6)內容耦合(contentcoupling)最高程度的耦合是內容耦合。如果出現下列情況之一,兩個模塊間就發(fā)生了內容耦合:一個模塊訪問另一個模塊的內部數據;一個模塊不通過正常入口轉到另一個模塊的內部;兩個模塊有一部分程序代碼重疊;一個模塊有多個入口。當前第44頁\共有71頁\編于星期一\15點耦合是影響軟件復雜程度的一個重要因素。應該采取下述設計原則:

盡量使用數據耦合,少用控制耦合和特征耦合,限制公共環(huán)境耦合的范圍,

完全不用內容耦合。

當前第45頁\共有71頁\編于星期一\15點2.內聚內聚:標志一個模塊內各個元素彼此結合的緊密程度,它是信息隱藏和局部化概念的自然擴展。簡單地說,理想內聚的模塊只做一件事情。要求:設計時應該力求做到高內聚,通常中等程度的內聚也是可以采用的,而且效果和高內聚相差不多;但是,低內聚不要使用。內聚和耦合是密切相關的,模塊內的高內聚往往意味著模塊間的松耦合。實踐表明內聚更重要,應該把更多注意力集中到提高模塊的內聚程度上。當前第46頁\共有71頁\編于星期一\15點內聚程度的度量:(1)偶然內聚(coincidentalcohesion)如果一個模塊完成一組任務,這些任務彼此間即使有關系,關系也是很松散的,就叫做偶然內聚。MA=B+CGETCHERIFR=5THENS=1當前第47頁\共有71頁\編于星期一\15點評價:模塊內各元素之間沒有實質性聯系,很可能在一種應用場合需要修改這個模塊,在另一種應用場合又不允許這種修改,從而陷入困境;可理解性差,可維護性產生退化;模塊是不可重用的。解決方案:將模塊分成更小的模塊,每個小模塊執(zhí)行一個操作。當前第48頁\共有71頁\編于星期一\15點(2)邏輯內聚(logicalcohesion)如果一個模塊完成的任務在邏輯上屬于相同或相似的一類,則稱為邏輯內聚。當前第49頁\共有71頁\編于星期一\15點評價:接口難以理解,造成整體上不易理解;完成多個操作的代碼互相糾纏在一起,即使局部功能的修改有時也會影響全局,導致嚴重的維護問題;難以重用。解決方案:模塊分解。當前第50頁\共有71頁\編于星期一\15點當前第51頁\共有71頁\編于星期一\15點(3)時間內聚(temporalcohesion)如果一個模塊包含的任務必須在同一段時間內執(zhí)行,就叫時間內聚。執(zhí)行初始化打開舊主文件、新主文件、事務文件和打印文件;初始化銷售地區(qū)表;讀第一條事務記錄和第一條舊主文件記錄;當前第52頁\共有71頁\編于星期一\15點評價:時間關系在一定程度上反映了程序某些實質,所以時間內聚比邏輯內聚好一些。模塊內操作之間的關系很弱,與其他模塊的操作卻有很強的關聯。時間內聚的模塊不太可能重用。當前第53頁\共有71頁\編于星期一\15點(4)過程內聚(proceduralcohesion)如果一個模塊內的處理元素是相關的,而且必須以特定次序執(zhí)行,則稱為過程內聚。使用程序流程圖作為工具設計軟件時,常常通過研究流程圖確定模塊的劃分,這樣得到的往往是過程內聚的模塊。當前第54頁\共有71頁\編于星期一\15點當前第55頁\共有71頁\編于星期一\15點評價:比時間內聚好,至少操作之間是過程關聯的。仍是弱連接,不太可能重用模塊。解決方案:分割為單獨的模塊,每個模塊執(zhí)行一個操作。當前第56頁\共有71頁\編于星期一\15點(5)通信內聚(communicationalcohesion)如果模塊中所有元素都使用同一個輸入數據和(或)產生同一個輸出數據,則稱為通信內聚。即在同一個數據結構上操作。評價:模塊中各操作緊密相連,比過程內聚更好。不能重用。解決方案:分成多個模塊,每個模塊執(zhí)行一個操作。當前第57頁\共有71頁\編于星期一\15點當前第58頁\共有71頁\編于星期一\15點(6)順序內聚(sequentialcohesion)如果一個模塊內的處理元素和同一個功能密切相關,而且這些處理必須順序執(zhí)行,則稱為順序內聚。評價:根據數據流圖劃分模塊時,通常得到順序內聚的模塊,這種模塊彼此間的連接往往比較簡單。當前第59頁\共有71頁\編于星期一\15點(7)功能內聚(functionalcohesion)如果模塊內所有處理元素屬于一個整體,完成一個單一的功能,則稱為功能內聚。功能內聚是最高程度的內聚。評價:模塊可重用,應盡可能重用;可隔離錯誤,維護更容易;擴充產品功能時更容易。當前第60頁\共有71頁\編于星期一\15點七種內聚的優(yōu)劣評分結果:高內聚:功能內聚10分順序內聚 9分 中內聚:通信內聚 7分 過程內聚 5分低內聚:時間內聚 3分邏輯內聚 1分偶然內聚 0分設計時力爭做到高內聚,并且能夠辨認出低內聚的模塊。當前第61頁\共有71頁\編于星期一\15點5.3啟發(fā)規(guī)則

溫馨提示

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

評論

0/150

提交評論