




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
歡迎大家歡迎大家第2頁第4章軟件總體設(shè)計本章內(nèi)容結(jié)構(gòu)本章引言學習目標教學內(nèi)容本章小結(jié)思考和練習課堂討論第2頁第4章軟件總體設(shè)計本章內(nèi)容結(jié)構(gòu)本章引言本章引言經(jīng)過需求分析階段的工作,建立了由數(shù)據(jù)流圖、數(shù)據(jù)字典和一組算法描述所定義的系統(tǒng)邏輯模型,系統(tǒng)必須“做什么”已經(jīng)清楚了,下一步將進入軟件設(shè)計階段,即著手實現(xiàn)系統(tǒng)需求,要把“做什么”的邏輯模型變換為“怎樣做”的物理模型。同時要把設(shè)計結(jié)果反映在“軟件設(shè)計規(guī)格說明書”文檔中。因此軟件設(shè)計是把軟件需求轉(zhuǎn)換為軟件表的過程??傮w設(shè)計是進入軟件設(shè)計的第一個階段,只描述軟件的總的體系結(jié)構(gòu),第二個階段是詳細設(shè)計,即對結(jié)構(gòu)進一步細化。本章主要介紹軟件總體設(shè)計,第5章介紹軟件的詳細設(shè)計。第3頁本章引言經(jīng)過需求分析階段的工作,建立了由數(shù)據(jù)流圖、數(shù)據(jù)字典和第4頁學習目標理解軟件總體設(shè)計的目標和任務(wù)理解軟件結(jié)構(gòu)設(shè)計的準則理解并掌握軟件設(shè)計的概念和原理理解并掌握數(shù)據(jù)庫設(shè)計方法熟悉軟件設(shè)計的各類圖形工具熟練掌握結(jié)構(gòu)化設(shè)計方法熟悉總體設(shè)計說明書的主要內(nèi)容及撰寫方法第4頁學習目標理解軟件總體設(shè)計的目標和任務(wù)第5頁教學內(nèi)容4.1軟件總體設(shè)計的目標和任務(wù)4.2軟件結(jié)構(gòu)設(shè)計準則4.3軟件設(shè)計的概念和原理4.4數(shù)據(jù)庫設(shè)計4.5軟件結(jié)構(gòu)設(shè)計的圖形工具4.6結(jié)構(gòu)化設(shè)計方法4.7總體設(shè)計說明書4.8本章小結(jié)和習題第5頁教學內(nèi)容4.1軟件總體設(shè)計的目標和任務(wù)第6頁4.1軟件總體設(shè)計的目標和任務(wù)總體設(shè)計階段的基本目標就是回答“概括地說,系統(tǒng)應(yīng)該如何實現(xiàn)?”這個問題??傮w設(shè)計的另一項任務(wù)是設(shè)計軟件的總體結(jié)構(gòu),即確定系統(tǒng)中的每個程序是由哪些模塊組成的,每個模塊的功能以及模塊和模塊之間的接口、調(diào)用關(guān)系等。第6頁4.1軟件總體設(shè)計的目標和任務(wù)總體設(shè)計階段的基本4.1總體設(shè)計的過程:系統(tǒng)設(shè)計:確定系統(tǒng)的具體實現(xiàn)方案。結(jié)構(gòu)設(shè)計:確定軟件結(jié)構(gòu)。設(shè)想供選擇的方案選取合理的方案推薦最佳方案功能分解設(shè)計軟件結(jié)構(gòu)數(shù)據(jù)庫設(shè)計制訂測試計劃書寫文檔數(shù)據(jù)流圖
系統(tǒng)流程圖組成系統(tǒng)的物理元素清單成本/效益分析實現(xiàn)系統(tǒng)的進度計劃
系統(tǒng)說明用戶手冊測試計劃詳細的實現(xiàn)計劃數(shù)據(jù)庫設(shè)計結(jié)果
審查和復審概括為兩個主要階段詳細過程如下:第7頁4.1總體設(shè)計的過程:系統(tǒng)設(shè)計:確定系統(tǒng)的具體實現(xiàn)方案。4.1軟件總體設(shè)計的目標和任務(wù)典型的總體設(shè)計過程包括以下9個步驟:1.設(shè)想供選擇的方案根據(jù)需求分析階段得出的數(shù)據(jù)流圖,考慮各種可能的實現(xiàn)方案,力求從中選出最佳方案。2.選取合理的方案從前一步得到的一系列供選擇的方案中選取若干個合理的方案。3.推薦最佳方案分析員應(yīng)該綜合分析對比各種合理方案的利弊,推薦一個最佳的方案,并且為推薦的方案制定詳細的實現(xiàn)計劃。第8頁4.1軟件總體設(shè)計的目標和任務(wù)典型的總體設(shè)計過程包括以4.1軟件總體設(shè)計的目標和任務(wù)4.功能分解首先進行結(jié)構(gòu)設(shè)計,然后進行過程設(shè)計。結(jié)構(gòu)設(shè)計確定程序由哪些模塊組成,以及這些模塊之間的關(guān)系;過程設(shè)計確定每個模塊的詳細設(shè)計處理過程。結(jié)構(gòu)設(shè)計是總體設(shè)計階段的任務(wù),過程設(shè)計是詳細設(shè)計階段的任務(wù)。5.設(shè)計軟件結(jié)構(gòu)通常程序中的一個模塊完成一個適當?shù)淖庸δ?。?yīng)當把模塊組織成良好的層次系統(tǒng)。軟件結(jié)構(gòu)可以用層次圖或結(jié)構(gòu)圖來描述。如果數(shù)據(jù)流圖已經(jīng)細化到適當?shù)膶哟?,則可以直接從數(shù)據(jù)流圖映射出軟件結(jié)構(gòu),這就是面向數(shù)據(jù)流的設(shè)計方法。第9頁4.1軟件總體設(shè)計的目標和任務(wù)4.功能分解第9頁4.1軟件總體設(shè)計的目標和任務(wù)6.設(shè)計數(shù)據(jù)庫對于需要使用數(shù)據(jù)庫的應(yīng)用系統(tǒng),軟件工程師應(yīng)該在需求分析階段所確定的系統(tǒng)數(shù)據(jù)需求的基礎(chǔ)上,進一步涉及數(shù)據(jù)庫。7.制定測試計劃在軟件開發(fā)的早期階段考慮測試問題,能促使軟件設(shè)計人員在設(shè)計時注意提高軟件的可測試性。8.書寫文檔應(yīng)該用正式的文檔記錄總體設(shè)計的結(jié)果。9.審查和復審最后應(yīng)該對總體設(shè)計的結(jié)果進行嚴格的技術(shù)審查和管理復審。第10頁4.1軟件總體設(shè)計的目標和任務(wù)6.設(shè)計數(shù)據(jù)庫第10頁第11頁4.2軟件結(jié)構(gòu)設(shè)計準則軟件總體設(shè)計的任務(wù)是軟件體系結(jié)構(gòu)設(shè)計和軟件模塊設(shè)計。4.2.1軟件體系結(jié)構(gòu)設(shè)計準則4.2.2軟件模塊設(shè)計準則第11頁4.2軟件結(jié)構(gòu)設(shè)計準則軟件總體設(shè)計的任務(wù)是軟件體第12頁4.2.1軟件體系結(jié)構(gòu)設(shè)計準則軟件體系結(jié)構(gòu)是軟件系統(tǒng)中最本質(zhì)的東西。一個軟件體系結(jié)構(gòu)的設(shè)計準則如下。①體系結(jié)構(gòu)是對復雜事物的一種抽象。良好的體系結(jié)構(gòu)是普通適用的,它能夠描述各種風格的軟件系統(tǒng)結(jié)構(gòu),可以高效地處理多種多樣的個體需求。②體系結(jié)構(gòu)在一定的時間內(nèi)保持穩(wěn)定。確保接口一致,既能確保某一體系結(jié)構(gòu)配置描述內(nèi)相關(guān)接口描述的一致,又能確保建立關(guān)聯(lián)的兩個構(gòu)件接口描述的一致性。③良好的體系結(jié)構(gòu)意味著普通、高效和穩(wěn)定。第12頁4.2.1軟件體系結(jié)構(gòu)設(shè)計準則軟件體系結(jié)構(gòu)是軟件第13頁4.2.2軟件模塊設(shè)計準則1.降低模塊之間的耦合性,提高模塊的內(nèi)聚性;2.模塊結(jié)構(gòu)的深度、寬度、扇出和扇入應(yīng)適當;3.模塊的作用范圍應(yīng)該在控制范圍內(nèi);4.模塊接口設(shè)計要簡單,以便降低復雜程度和冗余度;5.設(shè)計功能可預(yù)測并能得到驗證的模塊;6.適當劃分模塊規(guī)模,以保持其獨立性。以上介紹的軟件結(jié)構(gòu)設(shè)計準則是人們經(jīng)過長期的軟件開發(fā)實踐總結(jié)出來的,但是這些準則不是設(shè)計的目標,也不是在設(shè)計時必須普遍遵循的原理。因此在實際應(yīng)用時,應(yīng)根據(jù)系統(tǒng)的大小、難易程度加以靈活應(yīng)用。第13頁4.2.2軟件模塊設(shè)計準則1.降低模塊之間的耦合4.2.2軟件模塊設(shè)計準則1.降低模塊之間的耦合性,提高模塊的內(nèi)聚性.通過模塊分解或合并,降低耦合提高內(nèi)聚。ABCABCDEFABCDEF圖4.2模塊的分解和合并第14頁4.2.2軟件模塊設(shè)計準則1.降低模塊之間的耦合性,提高4.2.2軟件模塊設(shè)計準則2.模塊結(jié)構(gòu)的深度、寬度、扇出和扇入應(yīng)適當。深度:軟件結(jié)構(gòu)中模塊的層數(shù),它表示控制的層數(shù),在一定意義能粗略地反映系統(tǒng)的規(guī)模和復雜程度。
寬度:同一層次上模塊的最大個數(shù)。扇出:是一個模塊直接調(diào)用的模塊數(shù)目。經(jīng)驗證明,好的系統(tǒng)結(jié)構(gòu)的平均扇出數(shù)一般是3-4,不能超過5-9。扇入:有多少個上級模塊直接調(diào)用它。一般設(shè)計的比較好的軟件結(jié)構(gòu),頂層扇出高,中層扇出較少,底層模塊有高扇入。第15頁4.2.2軟件模塊設(shè)計準則2.模塊結(jié)構(gòu)的深度、寬度、扇出4.2.2軟件模塊設(shè)計準則深度=5寬度=9扇入=2扇出=1第16頁4.2.2軟件模塊設(shè)計準則深度=5寬度=9扇入=2扇出=4.2.2軟件模塊設(shè)計準則PPP1P2扇出過大QQQ1Q2Q3扇入過大第17頁4.2.2軟件模塊設(shè)計準則PPP1P2扇出過大QQQ1Q4.2.2軟件模塊設(shè)計準則3.模塊的作用范圍應(yīng)該在控制范圍之內(nèi)。模塊的作用范圍:指受該模塊內(nèi)一個判斷影響的所有模塊的集合;模塊的控制范圍:指模塊本身以及其所有直接或者間接從屬于它的模塊集合;在設(shè)計的好的軟件結(jié)構(gòu)中,所有受判斷影響的模塊都從屬于作出判斷的那個模塊,最好局限于做出判定的那個模塊本身及它的直屬下級模塊。
第18頁4.2.2軟件模塊設(shè)計準則3.模塊的作用范圍應(yīng)該在控制范4.2.2軟件模塊設(shè)計準則MAGBCDEFA的作用范圍A的控制范圍第19頁4.2.2軟件模塊設(shè)計準則MAGBCDEFA的作用范圍A4.2.2軟件模塊設(shè)計準則MAGBCDEFMAGBCDEF解決方案:把模塊A中的判定移到模塊M中。A的判定上移把模塊G移到模塊A下面,作為他的下級模塊。第20頁4.2.2軟件模塊設(shè)計準則MAGBCDEFMAGBCDE4.2.2軟件模塊設(shè)計準則4.模塊接口設(shè)計要簡單,以便降低復雜程度和冗余度。模塊接口復雜是軟件發(fā)生錯誤的一個主要原因,應(yīng)該仔細設(shè)計模塊接口,使得信息傳遞簡單并且和模塊的功能一致。例:解一元二次方程的函數(shù)QUAD_ROOT(TBL,X)其中數(shù)組TBL傳送方程的系數(shù)數(shù)組X返回求得的根QUAD_ROOT(A,B,C,ROOT1,ROOT2)第21頁4.2.2軟件模塊設(shè)計準則4.模塊接口設(shè)計要簡單,以便降4.2.2軟件模塊設(shè)計準則5.設(shè)計功能可預(yù)測并能得到驗證的模塊。模塊的功能應(yīng)該能夠預(yù)測,但也要防止模塊功能過分局限。功能可預(yù)測:如果一個模塊可以當作一個黑盒子,只要輸入的數(shù)據(jù)相同就產(chǎn)生同樣的輸出,這個模塊的功能就是可以預(yù)測的。第22頁4.2.2軟件模塊設(shè)計準則5.設(shè)計功能可預(yù)測并能得到驗證4.2.2軟件模塊設(shè)計準則6.適當劃分模塊規(guī)模,以保持其獨立性。經(jīng)驗表明,一個模塊的規(guī)模不應(yīng)過大,最好能寫在一頁紙內(nèi)。通常規(guī)定50-100行語句,最多不超過500行。過大的模塊往往是由于分解不充分,但是進一步分解必須符合問題結(jié)構(gòu),一般說來,分解后不應(yīng)該降低模塊獨立性。過小的模塊開銷大于有效操作,而且模塊數(shù)目過多將使系統(tǒng)接口復雜。第23頁4.2.2軟件模塊設(shè)計準則6.適當劃分模塊規(guī)模,以保持其第24頁4.3軟件設(shè)計的概念和原理4.3.1模塊和模塊化4.3.2抽象4.3.3信息隱蔽和局部化4.3.4模塊獨立性及其度量第24頁4.3軟件設(shè)計的概念和原理4.3.1模塊和模4.3.1模塊和模塊化
模塊是軟件結(jié)構(gòu)的基礎(chǔ),是軟件元素,是能夠單獨命名、獨立完成一定功能的程序語句的集合。
模塊化是指解決一個復雜問題時自頂向下逐層把軟件系統(tǒng)劃分成若干模塊的過程。模塊數(shù)目和成本的關(guān)系
M每個程序都對應(yīng)地有一個最適當?shù)哪K數(shù)M,使得系統(tǒng)的開發(fā)成本最小。第25頁4.3.1模塊和模塊化模塊是軟件結(jié)構(gòu)的基礎(chǔ),是軟件元4.3.1模塊和模塊化為什么要模塊化?模塊化是為了使一個復雜的大型程序能被人的智力所管理;如果一個大型程序僅由一個模塊組成,它將很難被人所理解。第26頁4.3.1模塊和模塊化為什么要模塊化?第26頁模塊化降低軟件復雜度的簡單證明:
令:C(X)表示問題X的復雜度函數(shù);
E(X)解決問題X所需工作量的復雜度函數(shù);第27頁模塊化降低軟件復雜度的簡單證明:令:C(X)表示問題X4.3.1模塊和模塊化模塊化的根據(jù):如果C(P1)>C(P2),顯然E(P1)>E(P2);根據(jù)人類解決一般問題的經(jīng)驗,C(P1+P2)>C(P1)+C(P2)綜上所述,得到下面的不等式E(P1+P2)>E(P1)+E(P2)第28頁4.3.1模塊和模塊化模塊化的根據(jù):第28頁4.3.1模塊和模塊化模塊化的作用:采用模塊化原理可以使軟件結(jié)構(gòu)清晰,不僅容易設(shè)計也容易閱讀和理解;模塊化使軟件容易測試和調(diào)試,因而有助于提高軟件的可靠性;模塊化能夠提高軟件的可修改性;模塊化也有助于軟件開發(fā)工程的組織管理。第29頁4.3.1模塊和模塊化模塊化的作用:第29頁4.3.2抽象抽象是人類認識自然界中的復雜事物和復雜現(xiàn)象過程中使用的一種思維工具。抽象:現(xiàn)實世界中一定事物、狀態(tài)或過程之間總存在某些相似的或者共性的方面,把這些相似的方面集中或概括起來,暫時忽略它們之間的次要因素,這就是抽象。在模塊化問題求解時,可以在不同層次上進行抽象。第30頁4.3.2抽象抽象是人類認識自然界中的復雜事物和復雜現(xiàn)象4.3.2抽象一般抽象過程:處理復雜系統(tǒng)的唯一有效的方法是用層次的方式構(gòu)造和分析它。一個復雜的動態(tài)系統(tǒng)首先可以用一些高級的抽象概念構(gòu)造和理解,這些高級概念又可以用一些較低級的概念構(gòu)造和理解,如此進行下去,指導最低層次的具體元素。例如:過程抽象、數(shù)據(jù)抽象和控制抽象。第31頁4.3.2抽象一般抽象過程:第31頁4.3.2抽象軟件工程的抽象過程:軟件工程過程的每一步都是對軟件解法的抽象層次的一次精化。在可行性研究階段,軟件作為系統(tǒng)的一個完整部件。在需求分析期間,軟件解法是使用在問題環(huán)境內(nèi)熟悉的方式描述的;當由總體設(shè)計向詳細設(shè)計過渡時,抽象的程度也隨之減少了;最后,當源程序?qū)懗鰜硪院?,也就達到了抽象的最底層。第32頁4.3.2抽象軟件工程的抽象過程:第32頁4.3.3信息隱蔽和局部化信息隱蔽:應(yīng)該這樣設(shè)計和確定模塊,使得一個模塊內(nèi)包含的信息(過程和數(shù)據(jù))對于不需要這些信息的模塊來說,是不能訪問的。局部化:和信息隱蔽的概念密切相關(guān),它是指把一些關(guān)系密切的軟件元素物理地放的彼此靠近。顯然,局部化有助于實現(xiàn)信息隱藏。第33頁4.3.3信息隱蔽和局部化信息隱蔽:應(yīng)該這樣設(shè)計和確定4.3.3信息隱蔽和局部化信息隱蔽和局部化的作用:“隱藏”意味著有效的模塊化可以通過定義一組獨立的模塊而實現(xiàn),這些獨立的模塊彼此間僅僅交換那些為了完成系統(tǒng)功能而必須交換的信息。使用信息隱蔽原理作為模塊化系統(tǒng)設(shè)計的標準就會帶來極大好處。因為絕大多數(shù)數(shù)據(jù)和過程對于軟件的其他部分而言是隱蔽的,在修改期間由于疏忽而引入的錯誤就很少可能傳播到軟件的其他部分。第34頁4.3.3信息隱蔽和局部化信息隱蔽和局部化的作用:第34.3.4模塊獨立性及其度量
模塊的獨立性是一個好的軟件設(shè)計的關(guān)鍵。
模塊的獨立性要求:每個模塊完成一個相對獨立的特定子功能,并且和其他模塊之間的關(guān)系很簡單。第35頁4.3.4模塊獨立性及其度量模塊的獨立性是一個好的軟4.3.4模塊獨立性及其度量
模塊獨立的重要性:有效模塊化的軟件比較容易開發(fā)出來。這是由于能夠分割功能而且接口可以簡化,當許多人分工合作開發(fā)同一個軟件時,這個優(yōu)點尤其重要。獨立的模塊比較容易測試和維護。這是因為相對說來,修改設(shè)計和程序需要的工作量比較小,錯誤傳播范圍小,需要擴充功能時能夠“插入”模塊。第36頁4.3.4模塊獨立性及其度量模塊獨立的重要性:第364.3.4模塊獨立性及其度量
模塊的獨立性可以從兩個方面來度量:耦合衡量不同模塊彼此間相互依賴的緊密程度。耦合要低,即每個模塊和其他模塊之間的關(guān)系要簡單。內(nèi)聚衡量一個模塊內(nèi)部各個元素之間彼此結(jié)合的緊密程度的度量。內(nèi)聚要高,每個模塊完成一個相對獨立的特定子功能。第37頁4.3.4模塊獨立性及其度量模塊的獨立性可以從兩個方4.3.4模塊獨立性及其度量
耦合:是對一個軟件結(jié)構(gòu)內(nèi)不同模塊之間互聯(lián)程度的度量。要求:在軟件設(shè)計中應(yīng)該追求盡可能松散耦合的系統(tǒng)??梢匝芯俊y試或維護任何一個模塊,而不需要對系統(tǒng)的其他模塊有很多了解;模塊間聯(lián)系簡單,發(fā)生在一處的錯誤傳播到整個系統(tǒng)的可能性就很??;模塊間的耦合程度強烈影響系統(tǒng)的可理解性、可測試性、可靠性和可維護性。第38頁4.3.4模塊獨立性及其度量耦合:是對一個軟件結(jié)構(gòu)內(nèi)4.3.4模塊獨立性及其度量
耦合程度的度量:(1)無直接耦合如果兩個模塊中的每一個都能獨立地工作而不需要另一個模塊的存在,那么它們完全獨立。在一個軟件系統(tǒng)中不可能所有模塊之間都沒有任何連接。(2)數(shù)據(jù)耦合如果兩個模塊彼此間通過參數(shù)交換信息,而且交換的信息僅僅是數(shù)據(jù),那么這種耦合稱為數(shù)據(jù)耦合。AB通過變元傳遞數(shù)據(jù)第39頁4.3.4模塊獨立性及其度量耦合程度的度量:AB通過4.3.4模塊獨立性及其度量
評價:系統(tǒng)中至少必須存在這種耦合。一般說來,一個系統(tǒng)內(nèi)可以只包含數(shù)據(jù)耦合。數(shù)據(jù)耦合是理想的目標。維護更容易,對一個模塊的修改不會使另一個模塊產(chǎn)生退化錯誤。第40頁4.3.4模塊獨立性及其度量評價:第40頁4.3.4模塊獨立性及其度量
(3)標記耦合當把整個數(shù)據(jù)結(jié)構(gòu)作為參數(shù)傳遞而被調(diào)用的模塊只需要使用其中一部分元素時,就出現(xiàn)了特征耦合。評價:被調(diào)用的模塊可使用的數(shù)據(jù)多于它確實需要的數(shù)據(jù),這將導致對數(shù)據(jù)的訪問失去控制。無論何時把指針作為參數(shù)進行傳遞,都應(yīng)該仔細檢查該耦合。第41頁4.3.4模塊獨立性及其度量(3)標記耦合第41頁4.3.4模塊獨立性及其度量
(4)控制耦合如果兩個模塊彼此間傳遞的信息中有控制信息,這種耦合稱為控制耦合。評價:控制耦合往往是多余的,把模塊適當分解之后通??梢杂脭?shù)據(jù)耦合代替它。被調(diào)用的模塊需知道調(diào)用模塊的內(nèi)部結(jié)構(gòu)和邏輯,降低了重用的可能性。第42頁4.3.4模塊獨立性及其度量(4)控制耦合評價:第44.3.4模塊獨立性及其度量
(5)公共環(huán)境耦合當兩個或多個模塊通過一個公共數(shù)據(jù)環(huán)境相互作用時,它們之間的耦合稱為公共環(huán)境耦合。公共環(huán)境可以是全程變量、共享的通信區(qū)、內(nèi)存的公共覆蓋區(qū)、任何存儲介質(zhì)上的文件、物理設(shè)備等。第43頁4.3.4模塊獨立性及其度量(5)公共環(huán)境耦合第434.3.4模塊獨立性及其度量
公共環(huán)境耦合的類型:一個模塊往公共環(huán)境送數(shù)據(jù),另一個模塊從公共環(huán)境取數(shù)據(jù)。數(shù)據(jù)耦合的一種形式,是比較松散的耦合。(a)松散的公共環(huán)境耦合(b)緊密的公共環(huán)境耦合兩個模塊都既往公共環(huán)境送數(shù)據(jù)又從里面取數(shù)據(jù),這種耦合比較緊密,介于數(shù)據(jù)耦合和控制耦合之間。第44頁4.3.4模塊獨立性及其度量公共環(huán)境耦合的類型:(a模塊A模塊B模塊C模塊D模塊L模塊N全局性數(shù)據(jù)結(jié)構(gòu)公共耦合全局性簡單變量如圖假定模塊C、D、N均可訪問公用區(qū)中某一數(shù)據(jù)結(jié)構(gòu),模塊C首先從中讀出數(shù)據(jù),然后啟動模塊D,對數(shù)據(jù)進行計算和更新,如果模塊D有錯誤,計算和更新的數(shù)據(jù)也隨之出錯,則當模塊N在以后的某個時候讀取上述數(shù)據(jù)時,就會得出錯誤的結(jié)果。雖然在調(diào)用N時出錯,但根源在D,這就給調(diào)試和錯誤的診斷帶來困難。第45頁模塊A模塊B模塊C模塊D模塊L模塊N全局性數(shù)據(jù)結(jié)構(gòu)全局性4.3.4模塊獨立性及其度量
評價:與結(jié)構(gòu)化編程矛盾,生產(chǎn)的代碼可讀性差。如果在一個模塊中對一個全局變量的聲明進行修改,必須修改能夠訪問該全局變量的每一個模塊。公共環(huán)境耦合的模塊難于重用,必須提供一個全局變量的清單。即使模塊本身不改變,它和產(chǎn)品中其他模塊之間公共環(huán)境耦合的實例數(shù)也會變化非常大。潛在危險很大。模塊暴露出比需要更多的數(shù)據(jù),難以控制數(shù)據(jù)存取。有些情況下公共環(huán)境耦合更好。第46頁4.3.4模塊獨立性及其度量評價:第46頁4.3.4模塊獨立性及其度量
(6)內(nèi)容耦合最高程度的耦合是內(nèi)容耦合。如果出現(xiàn)下列情況之一,兩個模塊之間就發(fā)生了內(nèi)容耦合:一個模塊訪問另一個模塊的內(nèi)部數(shù)據(jù);一個模塊不通過正常入口轉(zhuǎn)到另一個模塊的內(nèi)部;兩個模塊有一部分程序代碼重疊;一個模塊有多個入口。(a)進入另一個模塊內(nèi)部(b)模塊代碼重疊(c)多個入口模塊第47頁4.3.4模塊獨立性及其度量(6)內(nèi)容耦合(a)進入4.3.4模塊獨立性及其度量
耦合是影響軟件復雜程度的一個重要因素。應(yīng)該采用下述設(shè)計原則:盡量使用數(shù)據(jù)耦合,少用控制耦合和標記耦合,限制公共環(huán)境耦合的范圍,完全不用內(nèi)容耦合。第48頁4.3.4模塊獨立性及其度量耦合是影響軟件復雜程度的4.3.4模塊獨立性及其度量
內(nèi)聚:標志一個模塊內(nèi)各個元素彼此結(jié)合的緊密程度,它是信息隱藏和局部化概念的自然擴展。簡單地說,理想內(nèi)聚的模塊只做一件事。要求:設(shè)計時應(yīng)該力求做到高內(nèi)聚,通常中等成都的內(nèi)聚也可以采用的,而且效果和高內(nèi)聚相差不多;但是,低內(nèi)聚不要使用。內(nèi)聚和耦合是密切相關(guān)的,模塊內(nèi)的高內(nèi)聚往往意味著模塊間的松耦合。實踐表明內(nèi)聚更重要,應(yīng)該把更多注意力集中到提高模塊的內(nèi)聚程度上。第49頁4.3.4模塊獨立性及其度量內(nèi)聚:標志一個模塊內(nèi)各個4.3.4模塊獨立性及其度量
(1)偶然內(nèi)聚如果一個模塊完成一組任務(wù),這些任務(wù)彼此間即使有關(guān)系,關(guān)系也是很松散的,就叫偶然內(nèi)聚。評價:模塊內(nèi)各元素之間沒有實質(zhì)性聯(lián)系,很可能在一種應(yīng)用場合需要修改這個模塊,在另一種應(yīng)用場合又不允許這種修改,從而陷入困境??衫斫庑圆?,可維護性產(chǎn)生退化。模塊是不可重用的。解決方案:將模塊分成更小的模塊,每個小模塊執(zhí)行一個操作。第50頁4.3.4模塊獨立性及其度量(1)偶然內(nèi)聚第50頁4.3.4模塊獨立性及其度量
(2)邏輯內(nèi)聚如果一個模塊完成的任務(wù)在邏輯上屬于相同或類似的一類,則稱為邏輯內(nèi)聚。評價:接口難以理解,造成整體上不易理解。完成多個操作的代碼互相糾纏在一起,即使局部功能的修改有時也會影響全局,導致嚴重的維護問題。難以重用。解決方案:模塊分解。第51頁4.3.4模塊獨立性及其度量(2)邏輯內(nèi)聚第51頁4.3.4模塊獨立性及其度量
(3)時間內(nèi)聚如果一個模塊包含的任務(wù)必須在同一段時間內(nèi)執(zhí)行,就叫時間內(nèi)聚,如初始化模塊。評價:時間關(guān)系在一定程度上反映了程序某些實質(zhì),所以時間內(nèi)聚比邏輯內(nèi)聚好一些。模塊內(nèi)操作之間的關(guān)系很弱,與其他模塊的操作卻有很強的關(guān)聯(lián)時間內(nèi)聚的模塊不太可能重用。模塊是不可重用的。第52頁4.3.4模塊獨立性及其度量(3)時間內(nèi)聚第52頁4.3.4模塊獨立性及其度量
(4)通信內(nèi)聚如果模塊中所有元素都使用同一個輸入數(shù)據(jù)和(或)產(chǎn)生同一個輸出數(shù)據(jù),則稱為通信內(nèi)聚,即在同一個數(shù)據(jù)結(jié)構(gòu)上操作。評價:模塊中各操作緊密相連,比過程內(nèi)聚更好。不能重用。解決方案:將模塊分成多個模塊,每個模塊執(zhí)行一個操作。第53頁4.3.4模塊獨立性及其度量(4)通信內(nèi)聚第53頁4.3.4模塊獨立性及其度量
(5)順序內(nèi)聚如果一個模塊內(nèi)的處理元素和同一個功能密切相關(guān),而且這些處理必須順序執(zhí)行,則稱為順序內(nèi)聚。評價:根據(jù)數(shù)據(jù)流圖劃分模塊時,通常得到順序內(nèi)聚的模塊,這種模塊彼此間的連接往往比較簡單。第54頁4.3.4模塊獨立性及其度量(5)順序內(nèi)聚第54頁4.3.4模塊獨立性及其度量
(6)功能內(nèi)聚如果模塊內(nèi)所有處理元素屬于一個整體,完成一個單一的功能,則稱為功能內(nèi)聚。功能內(nèi)聚是最高程度的內(nèi)聚。評價:模塊可重用,應(yīng)盡可能重用??筛綦x錯誤,維護更容易。擴充產(chǎn)品功能時更容易。第55頁4.3.4模塊獨立性及其度量(6)功能內(nèi)聚第55頁4.3.4模塊獨立性及其度量
結(jié)論:在設(shè)計軟件時,盡可能做到高內(nèi)聚。偶然內(nèi)聚、邏輯內(nèi)聚和時間內(nèi)聚屬于低內(nèi)聚,通信內(nèi)聚屬于中內(nèi)聚,順序內(nèi)聚和功能內(nèi)聚屬于高內(nèi)聚。第56頁4.3.4模塊獨立性及其度量結(jié)論:第56頁第57頁4.4數(shù)據(jù)庫設(shè)計全局E-R模型是與數(shù)據(jù)模型和計算機軟硬件環(huán)境無關(guān)的,法在計算機中直接使用,需要轉(zhuǎn)化為特定DBMS所支持的數(shù)據(jù)模型。目前的環(huán)境下,進入設(shè)計階段后,一般需要將該E-R模型進行轉(zhuǎn)化為關(guān)系模型并進行優(yōu)化,然后再繼續(xù)轉(zhuǎn)化為特定DBMS的邏輯模式。本節(jié)討論設(shè)計階段數(shù)據(jù)庫E-R模型向關(guān)系模型特定邏輯模式的轉(zhuǎn)化問題。4.4.1數(shù)據(jù)庫系統(tǒng)的三級模式概念4.4.2數(shù)據(jù)庫邏輯設(shè)計原則4.4.3關(guān)系數(shù)據(jù)庫規(guī)范化第57頁4.4數(shù)據(jù)庫設(shè)計全局E-R模型是與數(shù)據(jù)模型和計第58頁4.4.1數(shù)據(jù)庫系統(tǒng)的三級模式概念數(shù)據(jù)庫系統(tǒng)的三級模式結(jié)構(gòu)是指數(shù)據(jù)庫系統(tǒng)是由外模式、模式和內(nèi)模式3級構(gòu)成,如圖4.3所示。第58頁4.4.1數(shù)據(jù)庫系統(tǒng)的三級模式概念數(shù)據(jù)庫系統(tǒng)的三級第59頁4.4.2數(shù)據(jù)庫邏輯設(shè)計原則概念結(jié)構(gòu)是獨立于任何一種數(shù)據(jù)模型的信息結(jié)構(gòu)。從理論上講,數(shù)據(jù)庫邏輯設(shè)計應(yīng)該選擇最適合于相應(yīng)概念結(jié)構(gòu)的數(shù)據(jù)模型,然后對支持該數(shù)據(jù)模型的各種DBMS進行比較后,選擇最合適的DBMS,但是實際情況是設(shè)計人員選擇的余地很小。目前DBMS產(chǎn)品一般支持關(guān)系、網(wǎng)狀、層次3種模型中的一種,對于特定模型,各機器系統(tǒng)又有自己的一些限制,提供不同的環(huán)境與工具。因此邏輯結(jié)構(gòu)的設(shè)計一般分3步進行,如圖4.4所示。第59頁4.4.2數(shù)據(jù)庫邏輯設(shè)計原則概念結(jié)構(gòu)是獨立于任何一第60頁4.4.2數(shù)據(jù)庫邏輯設(shè)計原則因為目前的數(shù)據(jù)庫應(yīng)用系統(tǒng)大多采用關(guān)系數(shù)據(jù)模型的RDBMS產(chǎn)品,所以這里只介紹E-R模型向關(guān)系數(shù)據(jù)模型的轉(zhuǎn)換方法。E-R模型向關(guān)系模型的轉(zhuǎn)換要解決的問題是如何將實體型和實體之間的聯(lián)系轉(zhuǎn)換為關(guān)系模式,如何確定這些關(guān)系模式的屬性和碼。針對E-R圖中的實體、聯(lián)系和屬性,這種轉(zhuǎn)換一般遵循如下原則。①每個實體轉(zhuǎn)換為一個關(guān)系模式,實體的屬性就是關(guān)系的屬性,實體的碼就是關(guān)系的碼。②對于實體之間的聯(lián)系,則根據(jù)其聯(lián)系類型,分別按照以下情況轉(zhuǎn)換:a.1:1聯(lián)系:將該聯(lián)系可以轉(zhuǎn)換并歸并到任何一個實體端轉(zhuǎn)換后的關(guān)系模式中,同時將另一個實體的碼和聯(lián)系的屬性一并加入到聯(lián)系所在的實體端所對應(yīng)的關(guān)系模式;第60頁4.4.2數(shù)據(jù)庫邏輯設(shè)計原則因為目前的數(shù)據(jù)庫應(yīng)用系第61頁4.4.2數(shù)據(jù)庫邏輯設(shè)計原則E-R模型向關(guān)系模型的轉(zhuǎn)換一般遵循如下原則(續(xù))。b.1:n聯(lián)系:將1端實體的碼和聯(lián)系的屬性都轉(zhuǎn)換歸并到多端實體轉(zhuǎn)換后的關(guān)系模式中,轉(zhuǎn)換以后關(guān)系模式的碼為多端實體的碼;c.m:n聯(lián)系:將聯(lián)系轉(zhuǎn)換為一個單獨的關(guān)系模式,與該聯(lián)系相連的實體的碼及聯(lián)系本身的屬性均轉(zhuǎn)換為關(guān)系的屬性,各實體的碼組成該關(guān)系模式的碼或關(guān)系碼的一部分;d.3個或3個以上實體之間的一個多元聯(lián)系可以轉(zhuǎn)換為一個關(guān)系模式,與該多元聯(lián)系相連的各實體的碼及聯(lián)系本身的屬性均轉(zhuǎn)換為關(guān)系的屬性,各實體的碼組成該關(guān)系模式的碼或關(guān)系碼的一部分;e.具有相同碼的關(guān)系模式可合并。第61頁4.4.2數(shù)據(jù)庫邏輯設(shè)計原則E-R模型向關(guān)系模型第62頁4.4.3關(guān)系數(shù)據(jù)庫規(guī)范化規(guī)范化方法是專門針對關(guān)系模型建立的一種數(shù)據(jù)庫設(shè)計方法。關(guān)系數(shù)據(jù)庫中的規(guī)范化問題是指關(guān)系數(shù)據(jù)庫中的關(guān)系必須滿足一定的規(guī)范化要求,對于不同的規(guī)范化程度可用范式來衡量。關(guān)系數(shù)據(jù)庫規(guī)范化理論主要解決的是如何構(gòu)造合適的數(shù)據(jù)邏輯結(jié)構(gòu)的問題。范式是符合某一種級別的關(guān)系模式的集合,是衡量關(guān)系模式規(guī)范化程度的標準,達到標準的關(guān)系才是規(guī)范化的。目前主要有6種范式:第一范式、第二范式、第三范式、BC范式、第四范式和第五范式。滿足最低要求的叫第一范式,簡稱為1NF。其余以此類推。顯然各種范式之間存在關(guān)系:1NF?2NF?3NF?BCNF?4NF?5NF。通常把某一關(guān)系模式R滿足第n范式簡記為R∈nNF。最重要的是3NF和BCNF,它們是進行規(guī)范化的主要目標。一個低一級范式的關(guān)系模式,通過模式分解可以轉(zhuǎn)換為若干個高一級范式的關(guān)系模式的集合,這個過程稱為規(guī)范化。第62頁4.4.3關(guān)系數(shù)據(jù)庫規(guī)范化規(guī)范化方法是專門針對關(guān)系第63頁4.4.3關(guān)系數(shù)據(jù)庫規(guī)范化規(guī)范化的基本思想是逐步消除數(shù)據(jù)依賴中不合適的部分,使模式中的各關(guān)系模式達到某種程度的“分離”。第63頁4.4.3關(guān)系數(shù)據(jù)庫規(guī)范化規(guī)范化的基本思想是逐步消4.5
軟件結(jié)構(gòu)設(shè)計的圖形工具在總體設(shè)計階段可能會用到以下幾種圖形工具:軟件結(jié)構(gòu)圖層次圖HIPO圖第64頁4.5軟件結(jié)構(gòu)設(shè)計的圖形工具在總體設(shè)計階段可能會用4.5.1軟件結(jié)構(gòu)圖軟件結(jié)構(gòu)圖的主要內(nèi)容有:
模塊:用方框表示,方框中寫上模塊的名字,模塊名最好能反映模塊功能;模塊的調(diào)用關(guān)系:兩個模塊之間用單向箭頭或直線連接起來表示它們的調(diào)用關(guān)系;
輔助符號:弧形箭頭表示循環(huán)調(diào)用;菱形表示選擇或者條件調(diào)用;
第65頁4.5.1軟件結(jié)構(gòu)圖軟件結(jié)構(gòu)圖的主要內(nèi)容有:第65頁4.5.1軟件結(jié)構(gòu)圖軟件結(jié)構(gòu)圖是軟件系統(tǒng)的模塊層次結(jié)構(gòu),用來表達軟件的組成模塊及其調(diào)用關(guān)系。Yourdon等人提出結(jié)構(gòu)圖(StructureChart,SC)是進行軟件結(jié)構(gòu)設(shè)計的有力工具?;痉枺悍娇颍捍硪粋€模塊;方框之間的直線:表示模塊的調(diào)用關(guān)系。第66頁4.5.1軟件結(jié)構(gòu)圖軟件結(jié)構(gòu)圖是軟件系統(tǒng)的模塊層次結(jié)構(gòu),用4.5.1軟件結(jié)構(gòu)圖軟件結(jié)構(gòu)圖示例
第67頁4.5.1軟件結(jié)構(gòu)圖軟件結(jié)構(gòu)圖示例第67頁4.5.1軟件結(jié)構(gòu)圖MT1T2循環(huán)調(diào)用和選擇調(diào)用的表示
附加符號:循環(huán)調(diào)用:模塊A循環(huán)調(diào)用模塊B、C、D;選擇調(diào)用:判定為真時調(diào)用模塊T1,為假時調(diào)用模塊T2。第68頁4.5.1軟件結(jié)構(gòu)圖MT1T2循環(huán)調(diào)用和選擇調(diào)用的表示附4.5.2層次圖層次圖用來描繪軟件的層次結(jié)構(gòu),很適合在自頂向下設(shè)計軟件的過程中使用。層次圖和層次方框圖的區(qū)別:第69頁4.5.2層次圖層次圖用來描繪軟件的層次結(jié)構(gòu),很適合在自頂4.5.2層次圖文字處理系統(tǒng)輸入輸出檢索編輯排版存儲修改添加插入刪除文字處理系統(tǒng)的層次圖
第70頁4.5.2層次圖文字處理系統(tǒng)輸入輸出檢索編輯排版存儲修改添4.5.3HIPO圖HIPO圖是美國IBM公司發(fā)明的層次圖+輸入/處理/輸出圖的英文縮寫。為了能使HIPO圖具有可追蹤性,在H圖(層次圖)里除了最頂層的方框之外,每個方框都加上了編號。和H圖中每個方框相對應(yīng),應(yīng)該有一張IPO圖,描繪這個方框代表的模塊的處理過程。模塊在H圖中的編號便于追蹤了解這個模塊在軟件結(jié)構(gòu)中的位置。第71頁4.5.3HIPO圖HIPO圖是美國IBM公司發(fā)明的層次圖4.5.3HIPO圖帶編號的文字處理系統(tǒng)層次圖(H圖)
文字處理系統(tǒng)輸入1.0輸出2.0檢索5.0編輯3.0排版4.0存儲6.0修改3.1添加3.2插入3.3刪除3.4第72頁4.5.3HIPO圖帶編號的文字處理系統(tǒng)層次圖(H圖)文4.6結(jié)構(gòu)化設(shè)計方法結(jié)構(gòu)化設(shè)計方法是一種把在數(shù)據(jù)流圖映射為軟件結(jié)構(gòu)圖,信息流的類型決定了映射的方法。信息流有兩種類型:變換流事務(wù)流
第73頁4.6結(jié)構(gòu)化設(shè)計方法結(jié)構(gòu)化設(shè)計方法是一種把在數(shù)據(jù)流圖4.6.1數(shù)據(jù)流圖及其類型12345物理輸入邏輯輸出物理輸出輸入流變換中心輸出流56圖4.10變換型數(shù)據(jù)流圖變換型數(shù)據(jù)流圖基本呈線性形狀的結(jié)構(gòu),由輸入、變換、輸出三部分組成,變換是系統(tǒng)地變換中心。邏輯輸入第74頁4.6.1數(shù)據(jù)流圖及其類型12345物理輸入邏輯輸出物理4.6.1數(shù)據(jù)流圖及其類型T事務(wù)處理中心事務(wù)圖4.11事務(wù)型數(shù)據(jù)流圖在事務(wù)型數(shù)據(jù)流圖,數(shù)據(jù)項沿著輸入同路到達一個處理T,T根據(jù)輸入數(shù)據(jù)的類型在若干動作序列中選出一個來執(zhí)行。處理T稱為事務(wù)中心。第75頁4.6.1數(shù)據(jù)流圖及其類型T事務(wù)處理中心事務(wù)圖4.114.6.2結(jié)構(gòu)化設(shè)計方法的步驟1.復審數(shù)據(jù)流圖,必要時可進行修改或精化;對需求分析階段得出的數(shù)據(jù)流圖認真復查,并且在必要時進行精化。不僅要確保數(shù)據(jù)流圖給出了目標系統(tǒng)的正確的邏輯模型,而且應(yīng)該使數(shù)據(jù)流圖中每個處理都代表一個規(guī)模適中相對獨立的子功能。第76頁4.6.2結(jié)構(gòu)化設(shè)計方法的步驟1.復審數(shù)據(jù)流圖,必要時可4.6.2結(jié)構(gòu)化設(shè)計方法的步驟2.確定數(shù)據(jù)流圖類型;如果是變換型,確定邏輯輸入和邏輯輸出的邊界,找出變換中心,映射為變換結(jié)構(gòu)的頂層和第一層;如果是事務(wù)型,確定事務(wù)中心和活動路徑,映射為事務(wù)結(jié)構(gòu)的頂層和第一層,建立軟件結(jié)構(gòu)的基本框架;第77頁4.6.2結(jié)構(gòu)化設(shè)計方法的步驟2.確定數(shù)據(jù)流圖類型;第74.6.2結(jié)構(gòu)化設(shè)計方法的步驟3.分解上層模塊,設(shè)計中下層模塊結(jié)構(gòu);4.根據(jù)軟件結(jié)構(gòu)設(shè)計準則對軟件結(jié)構(gòu)求精并改進;5.導出接口描述和全程數(shù)據(jù)結(jié)構(gòu);6.復審。如果有錯,轉(zhuǎn)入修改完善,否則進入下一階段詳細設(shè)計。
第78頁4.6.2結(jié)構(gòu)化設(shè)計方法的步驟3.分解上層模塊,設(shè)計中下4.6.3變換型分析設(shè)計1.確定邏輯輸入和邏輯輸出的邊界,找出變換中心2.設(shè)計軟件結(jié)構(gòu)的頂層和第一層位于軟件結(jié)構(gòu)最頂層的主模塊協(xié)調(diào)下述從屬的控制功能:輸入模塊:協(xié)調(diào)對所有輸入數(shù)據(jù)的接受;變換中心:管理對內(nèi)部形式的數(shù)據(jù)的所有操作;輸出模塊:協(xié)調(diào)輸出信息的產(chǎn)生過程。第79頁4.6.3變換型分析設(shè)計1.確定邏輯輸入和邏輯輸出的邊界4.6.3變換型分析設(shè)計第80頁4.6.3變換型分析設(shè)計第80頁4.6.3
變換型分析設(shè)計3.設(shè)計中下層模塊處理映射成軟件結(jié)構(gòu)中一個適當?shù)哪K。完成中下層模塊的設(shè)計:從變換中心的邊界開始沿著輸入通路向外移動,把輸入通路中每個處理映射成軟件結(jié)構(gòu)中“輸入”模塊下的一個低層模塊;然后沿著輸出通路向外移動,把輸出通路中的每個處理映射成直接或者間接接受“輸出”模塊控制的一個低層模塊;最后把變換中心內(nèi)的每個處理映射成“變換”模塊控制的一個模塊。第81頁4.6.3變換型分析設(shè)計3.設(shè)計中下層模塊第81頁4.6.3變換型分析設(shè)計第82頁4.6.3變換型分析設(shè)計第82頁4.6.3變換型分析設(shè)計f2f3f8f7f5f6f4輸入f1ABEDCF變換中心輸出具有邊界的變換型數(shù)據(jù)流圖
第83頁4.6.3變換型分析設(shè)計f2f3f8f7f5f6f4輸入4.6.3變換型分析設(shè)計f8f8f7f3f7f7f6f5f6f4f4f7f3f2f1f1f3f2f2f3主模塊getf3將f3變換成f7putf7putf8BCDEFgetf2getf1Af5從上頁圖導出的初始結(jié)構(gòu)圖第84頁4.6.3變換型分析設(shè)計f8f8f7f3f7f7f6f54.6.3變換型分析設(shè)計4.對初始結(jié)構(gòu)圖優(yōu)化為了產(chǎn)生合理的分解,得到盡可能高的內(nèi)聚、盡可能松散的耦合,為了得到一個易于實現(xiàn)、易于測試和易于維護的軟件結(jié)構(gòu),應(yīng)該對初步分割得到的模塊進行再分解或合并。第85頁4.6.3變換型分析設(shè)計4.對初始結(jié)構(gòu)圖優(yōu)化第85頁4.6.4事務(wù)型分析設(shè)計步驟如下:1.在數(shù)據(jù)流圖上確定事務(wù)中心、輸入流和活動路徑2.設(shè)計事務(wù)結(jié)構(gòu)的頂層和第一層由事務(wù)流映射成的軟件結(jié)構(gòu)包括一個接收分支和一個發(fā)送分支。第86頁4.6.4事務(wù)型分析設(shè)計步驟如下:第86頁4.6.4事務(wù)型分析設(shè)計3.設(shè)計事務(wù)結(jié)構(gòu)的中下層
從事務(wù)中心的邊界開始,把沿著接收流通路的處理映射成模塊;發(fā)送分支的結(jié)構(gòu)包含一個調(diào)度模塊,它控制下層的所有活動模塊;然后把數(shù)據(jù)流圖中的每個活動流通路映射成與它的流特征相對應(yīng)的結(jié)構(gòu)。4.對初始的事務(wù)結(jié)構(gòu)優(yōu)化工作同變換結(jié)構(gòu)第87頁4.6.4事務(wù)型分析設(shè)計3.設(shè)計事務(wù)結(jié)構(gòu)的中下層第84.6.4事務(wù)型分析設(shè)計第88頁4.6.4事務(wù)型分析設(shè)計第88頁4.6.5綜合分析設(shè)計實際中,一些大型軟件系統(tǒng)數(shù)據(jù)流圖往往既不是單純的變換型,也不是單純的事務(wù)型,而是變換型結(jié)構(gòu)和事務(wù)型結(jié)構(gòu)的混合結(jié)構(gòu)。對于這種既有變換型又有事務(wù)型,兩種類型混合在一起的綜合型數(shù)據(jù)流圖的轉(zhuǎn)換,通常采用變換分析為主、事務(wù)分析為輔的方式進行軟件結(jié)構(gòu)設(shè)計。①首先確定數(shù)據(jù)流圖整體上的類型。②然后利用變換型數(shù)據(jù)流圖的分析方法,先找出主加工,把軟件系統(tǒng)分為輸入、變換、輸出三部分,由此設(shè)計出軟件系統(tǒng)的頂層和第一層。③最后根據(jù)數(shù)據(jù)流圖各個部分的結(jié)構(gòu)特點,適當?shù)剡\用“變換分析”或“事務(wù)分析”就可得出初始軟件結(jié)構(gòu)圖的某個方案。第89頁4.6.5綜合分析設(shè)計實際中,一些大型軟件系統(tǒng)數(shù)據(jù)流圖往4.6.5綜合分析設(shè)計例.開發(fā)一個帶有微處理器的汽車數(shù)字儀表板控制系統(tǒng),1.功能描述:(1)通過模數(shù)轉(zhuǎn)換實現(xiàn)傳感器和微處理機接口;(2)在發(fā)光二極管面板上顯示數(shù)據(jù);(3)指示每小時英里數(shù)(mph),行駛的里程,每加侖油行駛的英里數(shù)(mpg)等等;(4)指示加速或減速;(5)超速警告:如果車速超過55英里/小時,則發(fā)出超速警告鈴聲。第90頁4.6.5綜合分析設(shè)計例.開發(fā)一個帶有微處理器的汽車數(shù)2.設(shè)計步驟第1步復查基本系統(tǒng)模型。第2步復查并精化數(shù)據(jù)流圖。第3步確定數(shù)據(jù)流圖的類型。輸入有兩條通路進入系統(tǒng),然后沿著5條通路離開,沒有明顯的事務(wù)中心。因此它屬于變換型結(jié)構(gòu)的數(shù)據(jù)流圖。第四步確定輸入、變換和輸出邊界。輸入流、輸出流的邊界的確定具有一定的任意性,因為不同的人對系統(tǒng)的理解不同。第91頁2.設(shè)計步驟第1步復查基本系統(tǒng)模型。第91頁讀旋轉(zhuǎn)信號收集和求平均轉(zhuǎn)換成轉(zhuǎn)/分(rpm)計算里程確定加速/減速產(chǎn)生加速/減速顯示產(chǎn)生里程顯示計算mph和超速值計算燃料消耗發(fā)出鈴聲產(chǎn)生mph顯示產(chǎn)生mpg顯示讀和校核計算gph旋轉(zhuǎn)信號信號/秒SPS△SPSSPSrpmrpm箭頭指示上箭頭⊕⊕水平線下箭頭英里超速值顯示鈴聲mphmphmpggph燃料流燃料流傳感器信號Mpg顯示第92頁讀旋轉(zhuǎn)信號收集和求平均轉(zhuǎn)換成轉(zhuǎn)/分(rpm)計算里程確定加讀旋轉(zhuǎn)信號收集和求平均轉(zhuǎn)換成轉(zhuǎn)/分(rpm)計算里程確定加速/減速產(chǎn)生加速/減速顯示產(chǎn)生里程顯示計算mph和超速值計算燃料消耗發(fā)出鈴聲產(chǎn)生mph顯示產(chǎn)生mpg顯示讀和校核計算gph旋轉(zhuǎn)信號信號/秒SPS△SPSSPSrpmrpm箭頭指示上箭頭⊕⊕水平線下箭頭英里超速值顯示鈴聲mphmphmpggph燃料流燃料流傳感器信號Mpg顯示第93頁讀旋轉(zhuǎn)信號收集和求平均轉(zhuǎn)換成轉(zhuǎn)/分(rpm)計算里程確定加第5步設(shè)計系統(tǒng)的上層模塊結(jié)構(gòu)。上層的模塊結(jié)構(gòu)有兩層,頂層是系統(tǒng)模塊,第一層由輸入模塊、變換模塊和輸出模塊三個模塊組成。圖
數(shù)字儀表板系統(tǒng)的第一級分解第94頁第5步設(shè)計系統(tǒng)的上層模塊結(jié)構(gòu)。上層的模塊結(jié)構(gòu)有兩層,頂層是第6步分解上層模塊,設(shè)計下層模塊。輸入部分下層模塊的設(shè)計,從變換中心的輸入流邊界開始沿著輸入通路向外移動,把輸入通路中每個處理映射成軟件結(jié)構(gòu)中輸入模塊控制下的一個低層模塊。輸出部分的下層模塊設(shè)計從變換中心輸出流邊界開始然后沿輸出通路向外移動,把輸出通路中每個處理映射成系統(tǒng)結(jié)構(gòu)中輸出模塊控制的一個低層模塊;第95頁第6步分解上層模塊,設(shè)計下層模塊。輸入部分下層模塊的設(shè)計,圖
未經(jīng)精化的輸入結(jié)構(gòu)讀旋轉(zhuǎn)信號收集和求平均轉(zhuǎn)換成轉(zhuǎn)/分(rpm)讀和校核計算gph旋轉(zhuǎn)信號信號/秒SPS△SPSSPSrpm燃料流燃料流傳感器信號第96頁圖未經(jīng)精化的輸入結(jié)構(gòu)讀旋轉(zhuǎn)信號收集和求平均轉(zhuǎn)換成轉(zhuǎn)/分圖
未經(jīng)精化的輸出結(jié)構(gòu)第97頁圖未經(jīng)精化的輸出結(jié)構(gòu)第97頁變換部分的映射是把變換中心內(nèi)的每個處理,映射成系統(tǒng)結(jié)構(gòu)中變換模塊控制下的若干個模塊。圖
未經(jīng)精化的變換結(jié)構(gòu)第98頁變換部分的映射是把變換中心內(nèi)的每個處理,映射成系統(tǒng)結(jié)構(gòu)中變換第七步精化模塊結(jié)構(gòu)在二級分解后,得到系統(tǒng)的初步結(jié)構(gòu)圖,根據(jù)模塊獨立性原理和啟發(fā)規(guī)則進行精化,通過分析對本例中的一些模塊做如下修改:在輸入結(jié)構(gòu)中,模塊“轉(zhuǎn)換成rpm”和“收集sps”可以合并;在輸出結(jié)構(gòu)中,模塊“確定加速/減速”可以放在模塊“計算mph”下面,以減少耦合;在變換結(jié)構(gòu)中,模塊“加速/減速顯示”可以相應(yīng)地放在模塊“顯示mph”的下面。第99頁第七步精化模塊結(jié)構(gòu)在二級分解后,得到系統(tǒng)的初步結(jié)構(gòu)圖,根據(jù)圖
精化后的數(shù)字儀表板系統(tǒng)的軟件結(jié)構(gòu)第100頁圖精化后的數(shù)字儀表板系統(tǒng)的軟件結(jié)構(gòu)第100頁變換分析是軟件系統(tǒng)結(jié)構(gòu)設(shè)計的主要方法。一般,一個大型的軟件系統(tǒng)數(shù)據(jù)流圖往往是變換型結(jié)構(gòu)和事務(wù)型結(jié)構(gòu)的混合結(jié)構(gòu)。此時一般以“變換分析”為主,“事務(wù)分析”為輔進行軟件結(jié)構(gòu)設(shè)計:先找出主加工,設(shè)計出結(jié)構(gòu)圖的上層,然后根據(jù)數(shù)據(jù)流圖各部分的結(jié)構(gòu)特點適當?shù)剡\用“變換分析”或“事務(wù)分析”就可得出初始結(jié)構(gòu)圖的某個方案??偨Y(jié):第101頁變換分析是軟件系統(tǒng)結(jié)構(gòu)設(shè)計的主要方法。一般,一個大型的軟件系4.6.6設(shè)計優(yōu)化設(shè)計優(yōu)化應(yīng)在滿足信息要求的情況下,力求做到在有效結(jié)構(gòu)之下,使模塊最少,接口最簡單,一般設(shè)計優(yōu)化應(yīng)考慮以下幾個方面:(1)在不考慮時間因素的前提下開發(fā)并精化軟件結(jié)構(gòu);(2)在詳細設(shè)計階段選出最耗費時間的那些模塊,仔細地設(shè)計它們的處理過程(算法),以求提高效率;第102頁4.6.6設(shè)計優(yōu)化設(shè)計優(yōu)化應(yīng)在滿足信息要求的情況下,力求(3)使用高級程序設(shè)計語言編寫程序;(4)在軟件中孤立出那些大量占用處理機資源的模塊;(5)必要時重新設(shè)計或用依賴于機器的語言重寫上述大量占用資源的模塊的代碼,以求提高效率。上述優(yōu)化方法遵守了一句格言:“先使它能工作,然后再使它快起來?!钡?03頁(3)使用高級程序設(shè)計語言編寫程序;第103頁第104頁4.7總體設(shè)計說明書總體設(shè)計說明書主要包括以下內(nèi)容。1.引言:編寫目的、項目背景、定義、參考資料;2.任務(wù)概述:目標、運行環(huán)境、需求概述、條件與限制;3.總體設(shè)計:
處理流程、總體結(jié)構(gòu)和模塊外部設(shè)計(給出軟件系統(tǒng)的結(jié)構(gòu)圖)、功能分配(表明各項功能與程序的關(guān)系)4.接口設(shè)計:外部接口(用戶界面、軟件與硬件接口)、內(nèi)部接口(模塊之間的接口);5.數(shù)據(jù)結(jié)構(gòu)設(shè)計:邏輯結(jié)構(gòu)設(shè)計、物理結(jié)構(gòu)設(shè)計、數(shù)據(jù)結(jié)構(gòu)與程序的關(guān)系;第104頁4.7總體設(shè)計說明書總體設(shè)計說明書主要包括以下第105頁4.7總體設(shè)計說明書(續(xù))總體設(shè)計說明書主要包括以下內(nèi)容。6.運行設(shè)計:運行模塊的組合、運行控制、運行時間;7.出錯處理設(shè)計:出錯輸出信息、出錯處理對策(如設(shè)置后備、性能降級、恢復及再啟動等);8.安全保密設(shè)計9.維護設(shè)計:說明為方便維護工作的設(shè)施,如維護模塊等。第105頁4.7總體設(shè)計說明書(續(xù))總體設(shè)計說明書主要包第106頁本章小結(jié)軟件總體設(shè)計的基本目的是用比較抽象概括的方式確定系統(tǒng)如何完成預(yù)定的任務(wù)。總體設(shè)計階段主要由兩個小階段組成,首先進行系統(tǒng)設(shè)計,從數(shù)據(jù)流圖出發(fā)設(shè)想完成系統(tǒng)功能的若干種推薦方案,然后比較分析這些方案,最后和用戶共同選定一個最佳方案;然后進行軟件結(jié)構(gòu)設(shè)計,結(jié)構(gòu)化設(shè)計方法把軟件結(jié)構(gòu)主要劃分為變換型和事務(wù)型兩大類,并且提出與之相應(yīng)的變換型設(shè)計和事務(wù)型設(shè)計兩種方法,以及綜合型數(shù)據(jù)流圖的設(shè)計方法。系統(tǒng)流程圖用來表達分析員對現(xiàn)有系統(tǒng)的認識和描繪他對未來物理系統(tǒng)的設(shè)想。第106頁本章小結(jié)軟件總體設(shè)計的基本目的是用比較抽象概括的方第107頁本章小結(jié)(續(xù))軟件結(jié)構(gòu)的模塊化設(shè)計遵循抽象、信息隱蔽、分解、逐步求精和模塊獨立性等一系列指導準則。模塊獨立性是一個良好設(shè)計的關(guān)鍵,評價標準主要是模塊的耦合和內(nèi)聚。數(shù)據(jù)庫設(shè)計是指在一個給定的應(yīng)用環(huán)境下,確定一個最優(yōu)數(shù)據(jù)模型和處理模式,主要包括數(shù)據(jù)庫邏輯結(jié)構(gòu)設(shè)計、物理結(jié)構(gòu)設(shè)計和數(shù)據(jù)規(guī)范化??傮w設(shè)計階段產(chǎn)生的文檔是總體設(shè)計說明書,它既是詳細設(shè)計、編碼的基礎(chǔ),也是進行測試的依據(jù)之一。第107頁本章小結(jié)(續(xù))軟件結(jié)構(gòu)的模塊化設(shè)計遵循抽象、信息隱習題總體設(shè)計階段的主要目的和任務(wù)是什么?為每種類型的模塊耦合和模塊內(nèi)聚各舉一個具體例子。模塊的耦合性和軟件的可移植性有什么關(guān)系?說明理由。如果區(qū)分數(shù)據(jù)流圖的類型?試述“變換型數(shù)據(jù)流圖”和“事務(wù)型數(shù)據(jù)流圖”的設(shè)計步驟。畫出習題3中的第8題的軟件結(jié)構(gòu)圖。試將下面的變換型數(shù)據(jù)流圖轉(zhuǎn)換成軟件結(jié)構(gòu)圖。第108頁習題第108頁習題工資管理系統(tǒng)中的一個子系統(tǒng)有如下功能:由基本工資計算應(yīng)扣除(例如水電氣費等)的部分;根據(jù)職工的出勤情況計算獎金部分;根據(jù)輸入的扣除額及獎金計算工資總額部分;由工資總額計算應(yīng)扣除稅金部分;根據(jù)計算總額部分和計算稅金部分傳遞來的有關(guān)職工工資詳細信息生成工資表。試根據(jù)需求畫出該問題的數(shù)據(jù)流圖,并將其轉(zhuǎn)換為軟件結(jié)構(gòu)圖。8.比較軟件結(jié)構(gòu)圖和層次圖的異同。第109頁習題第109頁課堂討論根據(jù)前面章節(jié)選擇的軟件開發(fā)項目,根據(jù)本章內(nèi)容繼續(xù)完成總體設(shè)計的相關(guān)內(nèi)容;第110頁Question?課堂討論根據(jù)前面章節(jié)選擇的軟件開發(fā)項目,根據(jù)本章內(nèi)容繼續(xù)完成歡迎大家歡迎大家第112頁第4章軟件總體設(shè)計本章內(nèi)容結(jié)構(gòu)本章引言學習目標教學內(nèi)容本章小結(jié)思考和練習課堂討論第2頁第4章軟件總體設(shè)計本章內(nèi)容結(jié)構(gòu)本章引言本章引言經(jīng)過需求分析階段的工作,建立了由數(shù)據(jù)流圖、數(shù)據(jù)字典和一組算法描述所定義的系統(tǒng)邏輯模型,系統(tǒng)必須“做什么”已經(jīng)清楚了,下一步將進入軟件設(shè)計階段,即著手實現(xiàn)系統(tǒng)需求,要把“做什么”的邏輯模型變換為“怎樣做”的物理模型。同時要把設(shè)計結(jié)果反映在“軟件設(shè)計規(guī)格說明書”文檔中。因此軟件設(shè)計是把軟件需求轉(zhuǎn)換為軟件表的過程。總體設(shè)計是進入軟件設(shè)計的第一個階段,只描述軟件的總的體系結(jié)構(gòu),第二個階段是詳細設(shè)計,即對結(jié)構(gòu)進一步細化。本章主要介紹軟件總體設(shè)計,第5章介紹軟件的詳細設(shè)計。第113頁本章引言經(jīng)過需求分析階段的工作,建立了由數(shù)據(jù)流圖、數(shù)據(jù)字典和第114頁學習目標理解軟件總體設(shè)計的目標和任務(wù)理解軟件結(jié)構(gòu)設(shè)計的準則理解并掌握軟件設(shè)計的概念和原理理解并掌握數(shù)據(jù)庫設(shè)計方法熟悉軟件設(shè)計的各類圖形工具熟練掌握結(jié)構(gòu)化設(shè)計方法熟悉總體設(shè)計說明書的主要內(nèi)容及撰寫方法第4頁學習目標理解軟件總體設(shè)計的目標和任務(wù)第115頁教學內(nèi)容4.1軟件總體設(shè)計的目標和任務(wù)4.2軟件結(jié)構(gòu)設(shè)計準則4.3軟件設(shè)計的概念和原理4.4數(shù)據(jù)庫設(shè)計4.5軟件結(jié)構(gòu)設(shè)計的圖形工具4.6結(jié)構(gòu)化設(shè)計方法4.7總體設(shè)計說明書4.8本章小結(jié)和習題第5頁教學內(nèi)容4.1軟件總體設(shè)計的目標和任務(wù)第116頁4.1軟件總體設(shè)計的目標和任務(wù)總體設(shè)計階段的基本目標就是回答“概括地說,系統(tǒng)應(yīng)該如何實現(xiàn)?”這個問題??傮w設(shè)計的另一項任務(wù)是設(shè)計軟件的總體結(jié)構(gòu),即確定系統(tǒng)中的每個程序是由哪些模塊組成的,每個模塊的功能以及模塊和模塊之間的接口、調(diào)用關(guān)系等。第6頁4.1軟件總體設(shè)計的目標和任務(wù)總體設(shè)計階段的基本4.1總體設(shè)計的過程:系統(tǒng)設(shè)計:確定系統(tǒng)的具體實現(xiàn)方案。結(jié)構(gòu)設(shè)計:確定軟件結(jié)構(gòu)。設(shè)想供選擇的方案選取合理的方案推薦最佳方案功能分解設(shè)計軟件結(jié)構(gòu)數(shù)據(jù)庫設(shè)計制訂測試計劃書寫文檔數(shù)據(jù)流圖
系統(tǒng)流程圖組成系統(tǒng)的物理元素清單成本/效益分析實現(xiàn)系統(tǒng)的進度計劃
系統(tǒng)說明用戶手冊測試計劃詳細的實現(xiàn)計劃數(shù)據(jù)庫設(shè)計結(jié)果
審查和復審概括為兩個主要階段詳細過程如下:第117頁4.1總體設(shè)計的過程:系統(tǒng)設(shè)計:確定系統(tǒng)的具體實現(xiàn)方案。4.1軟件總體設(shè)計的目標和任務(wù)典型的總體設(shè)計過程包括以下9個步驟:1.設(shè)想供選擇的方案根據(jù)需求分析階段得出的數(shù)據(jù)流圖,考慮各種可能的實現(xiàn)方案,力求從中選出最佳方案。2.選取合理的方案從前一步得到的一系列供選擇的方案中選取若干個合理的方案。3.推薦最佳方案分析員應(yīng)該綜合分析對比各種合理方案的利弊,推薦一個最佳的方案,并且為推薦的方案制定詳細的實現(xiàn)計劃。第118頁4.1軟件總體設(shè)計的目標和任務(wù)典型的總體設(shè)計過程包括以4.1軟件總體設(shè)計的目標和任務(wù)4.功能分解首先進行結(jié)構(gòu)設(shè)計,然后進行過程設(shè)計。結(jié)構(gòu)設(shè)計確定程序由哪些模塊組成,以及這些模塊之間的關(guān)系;過程設(shè)計確定每個模塊的詳細設(shè)計處理過程。結(jié)構(gòu)設(shè)計是總體設(shè)計階段的任務(wù),過程設(shè)計是詳細設(shè)計階段的任務(wù)。5.設(shè)計軟件結(jié)構(gòu)通常程序中的一個模塊完成一個適當?shù)淖庸δ?。?yīng)當把模塊組織成良好的層次系統(tǒng)。軟件結(jié)構(gòu)可以用層次圖或結(jié)構(gòu)圖來描述。如果數(shù)據(jù)流圖已經(jīng)細化到適當?shù)膶哟危瑒t可以直接從數(shù)據(jù)流圖映射出軟件結(jié)構(gòu),這就是面向數(shù)據(jù)流的設(shè)計方法。第119頁4.1軟件總體設(shè)計的目標和任務(wù)4.功能分解第9頁4.1軟件總體設(shè)計的目標和任務(wù)6.設(shè)計數(shù)據(jù)庫對于需要使用數(shù)據(jù)庫的應(yīng)用系統(tǒng),軟件工程師應(yīng)該在需求分析階段所確定的系統(tǒng)數(shù)據(jù)需求的基礎(chǔ)上,進一步涉及數(shù)據(jù)庫。7.制定測試計劃在軟件開發(fā)的早期階段考慮測試問題,能促使軟件設(shè)計人員在設(shè)計時注意提高軟件的可測試性。8.書寫文檔應(yīng)該用正式的文檔記錄總體設(shè)計的結(jié)果。9.審查和復審最后應(yīng)該對總體設(shè)計的結(jié)果進行嚴格的技術(shù)審查和管理復審。第120頁4.1軟件總體設(shè)計的目標和任務(wù)6.設(shè)計數(shù)據(jù)庫第10頁第121頁4.2軟件結(jié)構(gòu)設(shè)計準則軟件總體設(shè)計的任務(wù)是軟件體系結(jié)構(gòu)設(shè)計和軟件模塊設(shè)計。4.2.1軟件體系結(jié)構(gòu)設(shè)計準則4.2.2軟件模塊設(shè)計準則第11頁4.2軟件結(jié)構(gòu)設(shè)計準則軟件總體設(shè)計的任務(wù)是軟件體第122頁4.2.1軟件體系結(jié)構(gòu)設(shè)計準則軟件體系結(jié)構(gòu)是軟件系統(tǒng)中最本質(zhì)的東西。一個軟件體系結(jié)構(gòu)的設(shè)計準則如下。①體系結(jié)構(gòu)是對復雜事物的一種抽象。良好的體系結(jié)構(gòu)是普通適用的,它能夠描述各種風格的軟件系統(tǒng)結(jié)構(gòu),可以高效地處理多種多樣的個體需求。②體系結(jié)構(gòu)在一定的時間內(nèi)保持穩(wěn)定。確保接口一致,既能確保某一體系結(jié)構(gòu)配置描述內(nèi)相關(guān)接口描述的一致,又能確保建立關(guān)聯(lián)的兩個構(gòu)件接口描述的一致性。③良好的體系結(jié)構(gòu)意味著普通、高效和穩(wěn)定。第12頁4.2.1軟件體系結(jié)構(gòu)設(shè)計準則軟件體系結(jié)構(gòu)是軟件第123頁4.2.2軟件模塊設(shè)計準則1.降低模塊之間的耦合性,提高模塊的內(nèi)聚性;2.模塊結(jié)構(gòu)的深度、寬度、扇出和扇入應(yīng)適當;3.模塊的作用范圍應(yīng)該在控制范圍內(nèi);4.模塊接口設(shè)計要簡單,以便降低復雜程度和冗余度;5.設(shè)計功能可預(yù)測并能得到驗證的模塊;6.適當劃分模塊規(guī)模,以保持其獨立性。以上介紹的軟件結(jié)構(gòu)設(shè)計準則是人們經(jīng)過長期的軟件開發(fā)實踐總結(jié)出來的,但是這些準則不是設(shè)計的目標,也不是在設(shè)計時必須普遍遵循的原理。因此在實際應(yīng)用時,應(yīng)根據(jù)系統(tǒng)的大小、難易程度加以靈活應(yīng)用。第13頁4.2.2軟件模塊設(shè)計準則1.降低模塊之間的耦合4.2.2軟件模塊設(shè)計準則1.降低模塊之間的耦合性,提高模塊的內(nèi)聚性.通過模塊分解或合并,降低耦合提高內(nèi)聚。ABCABCDEFABCDEF圖4.2模塊的分解和合并第124頁4.2.2軟件模塊設(shè)計準則1.降低模塊之間的耦合性,提高4.2.2軟件模塊設(shè)計準則2.模塊結(jié)構(gòu)的深度、寬度、扇出和扇入應(yīng)適當。深度:軟件結(jié)構(gòu)中模塊的層數(shù),它表示控制的層數(shù),在一定意義能粗略地反映系統(tǒng)的規(guī)模和復雜程度。
寬度:同一層次上模塊的最大個數(shù)。扇出:是一個模塊直接調(diào)用的模塊數(shù)目。經(jīng)驗證明,好的系統(tǒng)結(jié)構(gòu)的平均扇出數(shù)一般是3-4,不能超過5-9。扇入:有多少個上級模塊直接調(diào)用它。一般設(shè)計的比較好的軟件結(jié)構(gòu),頂層扇出高,中層扇出較少,底層模塊有高扇入。第125頁4.2.2軟件模塊設(shè)計準則2.模塊結(jié)構(gòu)的深度、寬度、扇出4.2.2軟件模塊設(shè)計準則深度=5寬度=9扇入=2扇出=1第126頁4.2.2軟件模塊設(shè)計準則深度=5寬度=9扇入=2扇出=4.2.2軟件模塊設(shè)計準則PPP1P2扇出過大QQQ1Q2Q3扇入過大第127頁4.2.2軟件模塊設(shè)計準則PPP1P2扇出過大QQQ1Q4.2.2軟件模塊設(shè)計準則3.模塊的作用范圍應(yīng)該在控制范圍之內(nèi)。模塊的作用范圍:指受該模塊內(nèi)一個判斷影響的所有模塊的集合;模塊的控制范圍:指模塊本身以及其所有直接或者間接從屬于它的模塊集合;在設(shè)計的好的軟件結(jié)構(gòu)中,所有受判斷影響的模塊都從屬于作出判斷的那個模塊,最好局限于做出判定的那個模塊本身及它的直屬下級模塊。
第128頁4.2.2軟件模塊設(shè)計準則3.模塊的作用范圍應(yīng)該在控制范4.2.2軟件模塊設(shè)計準則MAGBCDEFA的作用范圍A的控制范圍第129頁4.2.2軟件模塊設(shè)計準則MAGBCDEFA的作用范圍A4.2.2軟件模塊設(shè)計準則MAGBCDEFMAGBCDEF解決方案:把模塊A中的判定移到模塊M中。A的判定上移把模塊G移到模塊A下面,作為他的下級模塊。第130頁4.2.2軟件模塊設(shè)計準則MAGBCDEFMAGBCDE4.2.2軟件模塊設(shè)計準則4.模塊接口設(shè)計要簡單,以便降低復雜程度和冗余度。模塊接口復雜是軟件發(fā)生錯誤的一個主要原因,應(yīng)該仔細設(shè)計模塊接口,使得信息傳遞簡單并且和模塊的功能一致。例:解一元二次方程的函數(shù)QUAD_ROOT(TBL,X)其中數(shù)組TBL傳送方程的系數(shù)數(shù)組X返回求得的根QUAD_ROOT(A,B,C,ROOT1,ROOT2)第131頁4.2.2軟件模塊設(shè)計準則4.模塊接口設(shè)計要簡單,以便降4.2.2軟件模塊設(shè)計準則5.設(shè)計功能可預(yù)測并能得到驗證的模塊。模塊的功能應(yīng)該能夠預(yù)測,但也要防止模塊功能過分局限。功能可預(yù)測:如果一個模塊可以當作一個黑盒子,只要輸入的數(shù)據(jù)相同就產(chǎn)生同樣的輸出,這個模塊的功能就是可以預(yù)測的。第132頁4.2.2軟件模塊設(shè)計準則5.設(shè)計功能可預(yù)測并能得到驗證4.2.2軟件模塊設(shè)計準則6.適當劃分模塊規(guī)模,以保持其獨立性。經(jīng)驗表明,一個模塊的規(guī)模不應(yīng)過大,最好能寫在一頁紙內(nèi)。通常規(guī)定50-100行語句,最多不超過500行。過大的模塊往往是由于分解不充分,但是進一步分解必須符合問題結(jié)構(gòu),一般說來,分解后不應(yīng)該降低模塊獨立性。過小的模塊開銷大于有效操作,而且模塊數(shù)目過多將使系統(tǒng)接口復雜。第133頁4.2.2軟件模塊設(shè)計準則6.適當劃分模塊規(guī)模,以保持其第134頁4.3軟件設(shè)計的概念和原理4.3.1模塊和模塊化4.3.2抽象4.3.3信息隱蔽和局部化4.3.4模塊獨立性及其度量第24頁4.3軟件設(shè)計的概念和原理4.3.1模塊和模4.3.1模塊和模塊化
模塊是軟件結(jié)構(gòu)的基礎(chǔ),是軟件元素,是能夠單獨命名、獨立完成一定功能的程序語句的集合。
模塊化是指解決一個復雜問題時自頂向下逐層把軟件系統(tǒng)劃分成若干模塊的過程。模塊數(shù)目和成本的關(guān)系
M每個程序都對應(yīng)地有一個最適當?shù)哪K數(shù)M,使得系統(tǒng)的開發(fā)成本最小。第135頁4.3.1模塊和模塊化模塊是軟件結(jié)構(gòu)的基礎(chǔ),是軟件元4.3.1模塊和模塊化為什么要模塊化?模塊化是為了使一個復雜的大型程序能被人的智力所管理;如果一個大型程序僅由一個模塊組成,它將很難被人所理解。第136頁4.3.1模塊和模塊化為什么要模塊化?第26頁模塊化降低軟件復雜度的簡單證明:
令:C(X)表示問題X的復雜度函數(shù);
E(X)解決問題X所需工作量的復雜度函數(shù);第137頁模塊化降低軟件復雜度的簡單證明:令:C(X)表示問題X4.3.1模塊和模塊化模塊化的根據(jù):如果C(P1)>C(P2),顯然E(P1)>E(P2);根據(jù)人類解決一般問題的經(jīng)驗,C(P1+P2)>C(P1)+C(P2)綜上所述,得到下面的不等式E(P1+P2)>E(P1)+E(P2)第138頁4.3.1模塊和模塊化模塊化的根據(jù):第28頁4.3.1模塊和模塊化模塊化的作用:采用模塊化原理可以使軟件結(jié)構(gòu)清晰,不僅容易設(shè)計也容易閱讀和理解;模塊化使軟件容易測試和調(diào)試,因而有助于提高軟件的可靠性;模塊化能夠提高軟件的可修改性;模塊化也有助于軟件開發(fā)工程的組織管理。第139頁4.3.1模塊和模塊化模塊化的作用:第29頁4.3.2抽象抽象是人類認識自然界中的復雜事物和復雜現(xiàn)象過程中使用的一種思維工具。抽象:現(xiàn)實世界中一定事物、狀態(tài)或過程之間總存在某些相似的或者共性的方面,把這些相似的方面集中或概括起來,暫時忽略它們之間的次要因素,這就是抽象。在模塊化問題求解時,可以在不同層次上進行抽象。第140頁4.3.2抽象抽象是人類認識自然界中的復雜事物和復雜現(xiàn)象4.3.2抽象一般抽象過程:處理復雜系統(tǒng)的唯一有效的方法是用層次的方式構(gòu)造和分析它。一個復雜的動態(tài)系統(tǒng)首先可以用一些高級的抽象概念構(gòu)造和理解,這些高級概念又可以用一些較低級的概念構(gòu)造和理解,如此進行下去,指導最低層次的具體元素。例如:過程抽象、數(shù)據(jù)抽象和控制抽象。第141頁4.3.2抽象一般抽象過程:第31頁4.3.2抽象軟件工程的抽象過程:軟件工程過程的每一步都是對軟件解法的抽象層次的一次精化。在可行性研究階段,軟件作為系統(tǒng)的一個完整部件。在需求分析期間,軟件解法是使用在問題環(huán)境內(nèi)熟悉的方式描述的;當由總體設(shè)計向詳細設(shè)計過渡時,抽象的程度也隨之減少了;最后,當源程序?qū)懗鰜硪院?,也就達到了抽象的最底層。第142頁4.3.2抽象軟件工程的抽象過程:第32頁4.3.3信息隱蔽和局部化信息隱蔽:應(yīng)該這樣設(shè)計和確定模塊,使得一個模塊內(nèi)包含的信息(過程和數(shù)據(jù))對于不需要這些信息的模塊來說,是不能訪問的。局部化:和信息隱蔽的概念密切相關(guān),它是指把一些關(guān)系密切的軟件元素物理地放的彼此靠近。顯然,局部化有助于實現(xiàn)信息隱藏。第143頁4.3.3信息隱蔽和局部化信息隱蔽:應(yīng)該這樣設(shè)計和確定4.3.3信息隱蔽和局部化信息隱蔽和局部化的作用:“隱藏”意味著有效的模塊化可以通過定義一組獨立的模塊而實現(xiàn),這些獨立的模塊彼此間僅僅交換那些為了完成系統(tǒng)功能而必須交換的信息。使用信息隱蔽原理作為模塊化系統(tǒng)設(shè)計的標準就會帶來極大好處。因為絕大多數(shù)數(shù)據(jù)和過程對于軟件的其他部分而言是隱蔽的,在修改期間由于疏忽而引入的錯誤就很少可能傳播到軟件的其他部分。第144頁4.3.3信息隱蔽和局部化信息隱蔽和局部化的作用:第34.3.4模塊獨立性及其度量
模塊的獨立性是一個好的軟件設(shè)計的關(guān)鍵。
模塊的獨立性要求:每個模塊完成一個相對獨立的特定子功能,并且和其他模塊之間的關(guān)系很簡單。第145頁4.3.4模塊獨立性及其度量模塊的獨立性是一個好的軟4.3.4模塊獨立性及其度量
模塊獨立的重要性:有效模塊化的軟件比較容易開發(fā)出來。這是由于能夠分割功能而且接口可以簡化,當許多人分工合作開發(fā)同一個軟件時,這個優(yōu)點尤其重要。獨立的模塊比較容易測試和維護。這是因為相對說來,修改設(shè)計和程序需要的工作量比較小,錯誤傳播范圍小,需要擴充功能時能夠“插入”模塊。第146頁4.3.4模塊獨立性及其度量模塊獨立的重要性:第364.3.4模塊獨立性及其度量
模塊的獨立性可以從兩個方面來度量:耦合衡量不同模塊彼此間相互依賴的緊密程度。耦合要低,即每個模塊和其他模塊之間的關(guān)系要簡單。內(nèi)聚衡量一個模塊內(nèi)部各個元素之間彼此結(jié)合的緊密程度的度量。內(nèi)聚要高,每個模塊完成一個相對獨立的特定子功能。第147頁4.3.4模塊獨立性及其度量模塊的獨立性可以從兩個方4.3.4模塊獨立性及其度量
耦合:是對一個軟件結(jié)構(gòu)內(nèi)不同模塊之間互聯(lián)程度的度量。要求:在軟件設(shè)計中應(yīng)該追求盡可能松散耦合的系統(tǒng)??梢匝芯俊y試或維護任何一個模塊,而不需要對系統(tǒng)的其他模塊有很多了解;模塊間聯(lián)系簡單,發(fā)生在一處的錯誤傳播到整個系統(tǒng)的可能性就很?。荒K間的耦合程度強烈影響系統(tǒng)的可理解性、可測試性、可靠性和可維護性。第148頁4.3.4模塊獨立性及其度量耦合:是對一個軟件結(jié)構(gòu)內(nèi)4.3.4模塊獨立性及其度量
耦合程度的度量:(1)無直接耦合如果兩個模塊中的每一個都能獨立地工作而不需要另一個模塊的存在,那么它們完全獨立。在一個軟件系統(tǒng)中不可能所有模塊之間都沒有任何連接。(2)數(shù)據(jù)耦合如果兩個模塊彼此間通過參數(shù)交換信息,而且交換的信息僅僅是數(shù)據(jù),那么這種耦合稱為數(shù)據(jù)耦合。AB通過變元傳遞數(shù)據(jù)第149頁4.3.4模塊獨立性及其度量耦合程度的度量:AB通過4.3.4模塊獨立性及其度量
評價:系統(tǒng)中至少必須存在這種耦合。一般說來,一個系統(tǒng)內(nèi)可以只包含數(shù)據(jù)耦合。數(shù)據(jù)耦合是理想的目標。維護更容易,對一個模塊的修改不會使另一個模塊產(chǎn)生退化錯誤。第150頁4.3.4模塊獨立性及其度量評價:第40頁4.3.4模塊獨立性及其度量
(3)標記耦合當把整個數(shù)據(jù)結(jié)構(gòu)作為參數(shù)傳遞而被調(diào)用的模塊只需要使用其中一部分元素時,就出現(xiàn)了特征耦合。評價:被調(diào)用的模塊可使用的數(shù)據(jù)多于它確實需要的數(shù)據(jù),這將導致對數(shù)據(jù)的訪問失去控制。無論何時把指針作為參數(shù)進行傳遞,都應(yīng)該仔細檢查該耦合。第151頁4.3.4模塊獨立性及其度量(3)標記耦合第41頁4.3.4模塊獨立性及其度量
(4)控制耦合如果兩個模塊彼此間傳遞的信息中有控制信息,這種耦合稱為控制耦合。評價:控制耦合往往是多余的,把模塊適當分解之后通??梢杂脭?shù)據(jù)耦合代替它。被調(diào)用的模塊需知道調(diào)用模塊的內(nèi)部結(jié)構(gòu)和邏輯,降低了重用的可能性。第152頁4.3.4模塊
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025建筑安全員《C證》考試題庫
- 單位窗簾定制合同范本
- 醫(yī)院資產(chǎn)回購合同范本
- 2025浙江省安全員知識題庫及答案
- 農(nóng)民代種合同范本
- 2025廣東省安全員-A證考試題庫附答案
- 勞務(wù)合同范本香港簽訂
- 三年級口算題目集1000道
- 三年級口算題目練習冊1000道
- 云南 合同范本
- 年產(chǎn)60萬噸摻混肥項目可行性研究報告申請立項
- 2025年2月《公共安全視頻圖像信息系統(tǒng)管理條例》學習解讀課件
- 2025年江蘇省中職《英語》學業(yè)水平考試高頻必練考試題庫400題(含答案)
- 2025年濟寧職業(yè)技術(shù)學院高職單招語文2018-2024歷年參考題庫頻考點含答案解析
- 高三一?!吧媾c強弱關(guān)系思辨”審題立意及范文
- 2025年湖南工程職業(yè)技術(shù)學院高職單招職業(yè)適應(yīng)性測試近5年??及鎱⒖碱}庫含答案解析
- 小學數(shù)學教學中小組合作學習課件
- 2024年晉中職業(yè)技術(shù)學院單招職業(yè)技能測試題庫附答案
- 2025年重癥醫(yī)學科(ICU)護理工作計劃
- 酒精安全使用培訓課件
- 四川省名校2025屆高三第二次模擬考試英語試卷含解析
評論
0/150
提交評論