軟件工程 第5章總體設計
《軟件工程 第5章總體設計》由會員分享,可在線閱讀,更多相關(guān)《軟件工程 第5章總體設計(110頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、第第5章章 總體設計總體設計5.1 設計過程設計過程5.2 設計原理設計原理5.3 啟發(fā)規(guī)則啟發(fā)規(guī)則5.4 描繪軟件結(jié)構(gòu)的圖形工具描繪軟件結(jié)構(gòu)的圖形工具5.5 面向數(shù)據(jù)流的設計方法面向數(shù)據(jù)流的設計方法軟件設計宣言:軟件設計宣言:Mitch Kaporn“什么是設計?設計是你站在兩個世界什么是設計?設計是你站在兩個世界技技術(shù)世界和人類的目標世界術(shù)世界和人類的目標世界而你嘗試將這兩而你嘗試將這兩個世界結(jié)合在一起個世界結(jié)合在一起”。羅馬建筑批評家羅馬建筑批評家Vitruvius提出的觀念:提出的觀念:n“設計良好的建筑應該展示出堅固、適用和令設計良好的建筑應該展示出堅固、適用和令人賞心悅目人賞心悅目
2、”。設計階段:設計階段:n從工程管理的角度,可以將軟件設計分為概要從工程管理的角度,可以將軟件設計分為概要設計階段和詳細設計階段。設計階段和詳細設計階段。n從技術(shù)的角度,傳統(tǒng)的結(jié)構(gòu)化方法將軟件設計從技術(shù)的角度,傳統(tǒng)的結(jié)構(gòu)化方法將軟件設計劃分為體系結(jié)構(gòu)設計、數(shù)據(jù)設計、接口設計和劃分為體系結(jié)構(gòu)設計、數(shù)據(jù)設計、接口設計和過程設計過程設計4部分。部分。n面向?qū)ο蠓椒▌t將軟件設計劃分為體系結(jié)構(gòu)設面向?qū)ο蠓椒▌t將軟件設計劃分為體系結(jié)構(gòu)設計、類設計計、類設計/數(shù)據(jù)設計、接口設計和構(gòu)件級設數(shù)據(jù)設計、接口設計和構(gòu)件級設計計4部分。部分。 結(jié)構(gòu)化設計和結(jié)構(gòu)化分析的關(guān)系:結(jié)構(gòu)化設計和結(jié)構(gòu)化分析的關(guān)系:5.1 設計過
3、程設計過程由兩個主要階段組成:由兩個主要階段組成:n系統(tǒng)設計階段,確定系統(tǒng)的具體實現(xiàn)方案系統(tǒng)設計階段,確定系統(tǒng)的具體實現(xiàn)方案q設想供選擇的方案設想供選擇的方案q選取合理的方案選取合理的方案q推薦最佳方案推薦最佳方案n結(jié)構(gòu)設計階段,確定軟件結(jié)構(gòu)結(jié)構(gòu)設計階段,確定軟件結(jié)構(gòu)q功能分解功能分解q設計軟件結(jié)構(gòu)設計軟件結(jié)構(gòu)q設計數(shù)據(jù)庫設計數(shù)據(jù)庫q制定測試計劃制定測試計劃q書寫文檔書寫文檔q審查和復審審查和復審典型的總體設計過程包括下述典型的總體設計過程包括下述9個步驟:個步驟:1. 設想供選擇的方案設想供選擇的方案n根據(jù)需求分析階段得出的數(shù)據(jù)流圖考慮各種可根據(jù)需求分析階段得出的數(shù)據(jù)流圖考慮各種可能的實現(xiàn)方
4、案,力求從中選出最佳方案。能的實現(xiàn)方案,力求從中選出最佳方案。2. 選取合理的方案選取合理的方案n從前一步得到的一系列供選擇的方案中選取若從前一步得到的一系列供選擇的方案中選取若干個合理的方案。對每個合理的方案分析員都干個合理的方案。對每個合理的方案分析員都應該準備下列應該準備下列4份資料:份資料:q系統(tǒng)流程圖;系統(tǒng)流程圖;q組成系統(tǒng)的物理元素清單;組成系統(tǒng)的物理元素清單;q成本成本/效益分析;效益分析;q實現(xiàn)這個系統(tǒng)的進度計劃。實現(xiàn)這個系統(tǒng)的進度計劃。3. 推薦最佳方案推薦最佳方案n分析員應該綜合分析對比各種合理方案的利弊,分析員應該綜合分析對比各種合理方案的利弊,推薦一個最佳的方案,并且為
5、推薦的方案制定推薦一個最佳的方案,并且為推薦的方案制定詳細的實現(xiàn)計劃。詳細的實現(xiàn)計劃。4. 功能分解功能分解n首先進行結(jié)構(gòu)設計,然后進行過程設計。首先進行結(jié)構(gòu)設計,然后進行過程設計。n結(jié)構(gòu)設計確定程序由哪些模塊組成,以及這些結(jié)構(gòu)設計確定程序由哪些模塊組成,以及這些模塊之間的關(guān)系;過程設計確定每個模塊的處模塊之間的關(guān)系;過程設計確定每個模塊的處理過程。理過程。n結(jié)構(gòu)設計是總體設計階段的任務,過程設計是結(jié)構(gòu)設計是總體設計階段的任務,過程設計是詳細設計階段的任務。詳細設計階段的任務。5. 設計軟件結(jié)構(gòu)設計軟件結(jié)構(gòu)n通常程序中的一個模塊完成一個適當?shù)淖庸δ堋Mǔ3绦蛑械囊粋€模塊完成一個適當?shù)淖庸δ?。?/p>
6、該把模塊組織成良好的層次系統(tǒng)。軟件結(jié)構(gòu)應該把模塊組織成良好的層次系統(tǒng)。軟件結(jié)構(gòu)可以用層次圖或結(jié)構(gòu)圖來描繪??梢杂脤哟螆D或結(jié)構(gòu)圖來描繪。n如果數(shù)據(jù)流圖已經(jīng)細化到適當?shù)膶哟?,則可以如果數(shù)據(jù)流圖已經(jīng)細化到適當?shù)膶哟危瑒t可以直接從數(shù)據(jù)流圖映射出軟件結(jié)構(gòu),這就是面向直接從數(shù)據(jù)流圖映射出軟件結(jié)構(gòu),這就是面向數(shù)據(jù)流的設計方法。數(shù)據(jù)流的設計方法。6. 設計數(shù)據(jù)庫設計數(shù)據(jù)庫n對于需要使用數(shù)據(jù)庫的那些應用系統(tǒng),軟件工對于需要使用數(shù)據(jù)庫的那些應用系統(tǒng),軟件工程師應該在需求分析階段所確定的系統(tǒng)數(shù)據(jù)需程師應該在需求分析階段所確定的系統(tǒng)數(shù)據(jù)需求的基礎(chǔ)上,進一步設計數(shù)據(jù)庫。求的基礎(chǔ)上,進一步設計數(shù)據(jù)庫。7. 制定測試計劃制
7、定測試計劃n在軟件開發(fā)的早期階段考慮測試問題,能促使軟件設在軟件開發(fā)的早期階段考慮測試問題,能促使軟件設計人員在設計時注意提高軟件的可測試性。計人員在設計時注意提高軟件的可測試性。8. 書寫文檔書寫文檔n應該用正式的文檔記錄總體設計的結(jié)果,在這個階段應該用正式的文檔記錄總體設計的結(jié)果,在這個階段應該完成的文檔通常有下述幾種:應該完成的文檔通常有下述幾種: (1) 系統(tǒng)說明;系統(tǒng)說明; (2) 用戶手冊;用戶手冊;(3) 測試計劃;測試計劃; (4) 詳細的實現(xiàn)計劃;詳細的實現(xiàn)計劃;(5) 數(shù)據(jù)庫設計結(jié)果。數(shù)據(jù)庫設計結(jié)果。9. 審查和復審審查和復審n最后應該對總體設計的結(jié)果進行嚴格的技術(shù)審查和管
8、最后應該對總體設計的結(jié)果進行嚴格的技術(shù)審查和管理復審。理復審。 5.2 設計原理設計原理5.2.1 模塊化模塊化n模塊:模塊:是由邊界元素限定的相鄰程序元素的序是由邊界元素限定的相鄰程序元素的序列,而且有一個總體標識符代表它。列,而且有一個總體標識符代表它。n模塊化:模塊化:就是把程序劃分成獨立命名且可獨立就是把程序劃分成獨立命名且可獨立訪問的模塊,每個模塊完成一個子功能,把這訪問的模塊,每個模塊完成一個子功能,把這些模塊集成起來構(gòu)成一個整體,可以完成指定些模塊集成起來構(gòu)成一個整體,可以完成指定的功能滿足用戶的需求。的功能滿足用戶的需求。 為什么要模塊化?為什么要模塊化?n模塊化是為了使一個復
9、雜的大型程序能被人的模塊化是為了使一個復雜的大型程序能被人的智力所管理,軟件應該具備的惟一屬性。智力所管理,軟件應該具備的惟一屬性。n如果一個大型程序僅由一個模塊組成,它將很如果一個大型程序僅由一個模塊組成,它將很難被人所理解。難被人所理解。 模塊化的根據(jù):模塊化的根據(jù): n如果如果C(P1)C(P2),顯然,顯然E(P1)E(P2)n根據(jù)人類解決一般問題的經(jīng)驗,根據(jù)人類解決一般問題的經(jīng)驗,C(P1+P2)C(P1)+C(P2)n綜上所述,得到下面的不等式綜上所述,得到下面的不等式E(P1+P2)E(P1)+E(P2)n每個程序都相每個程序都相應地有一個最應地有一個最適當?shù)哪K數(shù)適當?shù)哪K數(shù)目
10、目M,使得系,使得系統(tǒng)的開發(fā)成本統(tǒng)的開發(fā)成本最小。最小。 模塊化和軟件成本模塊化和軟件成本模塊化的作用:模塊化的作用:n采用模塊化原理可以使軟件結(jié)構(gòu)清晰,不僅容采用模塊化原理可以使軟件結(jié)構(gòu)清晰,不僅容易設計也容易閱讀和理解。易設計也容易閱讀和理解。n模塊化使軟件容易測試和調(diào)試,因而有助于提模塊化使軟件容易測試和調(diào)試,因而有助于提高軟件的可靠性。高軟件的可靠性。n模塊化能夠提高軟件的可修改性。模塊化能夠提高軟件的可修改性。n模塊化也有助于軟件開發(fā)工程的組織管理。模塊化也有助于軟件開發(fā)工程的組織管理。 5.2.2 抽象抽象n抽象:抽象:現(xiàn)實世界中一定事物、狀態(tài)或過程之間現(xiàn)實世界中一定事物、狀態(tài)或過
11、程之間總存在著某些相似的方面總存在著某些相似的方面(共性共性)。把這些相似。把這些相似的方面集中和概括起來,暫時忽略它們之間的的方面集中和概括起來,暫時忽略它們之間的差異,這就是抽象。差異,這就是抽象。n抽象就是抽出事物本質(zhì)特性而暫時不考慮細節(jié)。抽象就是抽出事物本質(zhì)特性而暫時不考慮細節(jié)。n“抽象是人類處理復雜問題的基本方法之抽象是人類處理復雜問題的基本方法之一。一。” Grady Boach一般抽象過程:一般抽象過程:n處理復雜系統(tǒng)的惟一有效的方法是用層次的方處理復雜系統(tǒng)的惟一有效的方法是用層次的方式構(gòu)造和分析它。式構(gòu)造和分析它。軟件工程抽象過程:軟件工程抽象過程:n軟件工程過程的每一步都是對
12、軟件解法的抽象軟件工程過程的每一步都是對軟件解法的抽象層次的一次精化。層次的一次精化。n在可行性研究階段,軟件作為系統(tǒng)的一個完整在可行性研究階段,軟件作為系統(tǒng)的一個完整部件;部件;n在需求分析期間,軟件解法是使用在問題環(huán)境在需求分析期間,軟件解法是使用在問題環(huán)境內(nèi)熟悉的方式描述的;內(nèi)熟悉的方式描述的;n當由總體設計向詳細設計過渡時,抽象的程度當由總體設計向詳細設計過渡時,抽象的程度也就隨之減少了;也就隨之減少了;n最后,當源程序?qū)懗鰜硪院?,也就達到了抽象最后,當源程序?qū)懗鰜硪院螅簿瓦_到了抽象的最低層。的最低層。 5.2.3 逐步求精逐步求精n逐步求精:逐步求精:為了能集中精力解決主要問題而盡
13、為了能集中精力解決主要問題而盡量推遲對問題細節(jié)的考慮。逐步求精是人類解量推遲對問題細節(jié)的考慮。逐步求精是人類解決復雜問題時采用的基本方法,也是許多軟件決復雜問題時采用的基本方法,也是許多軟件工程技術(shù)的基礎(chǔ)。工程技術(shù)的基礎(chǔ)。nMiller法則:一個人在任何時候都只能把注意法則:一個人在任何時候都只能把注意力集中在(力集中在(72)個知識塊上。)個知識塊上。 例:例:用篩選法求用篩選法求100以內(nèi)的素數(shù)。所謂的篩選法,就是以內(nèi)的素數(shù)。所謂的篩選法,就是從從2到到100中去掉中去掉2,3,5,7的倍數(shù),剩下的就是的倍數(shù),剩下的就是100以內(nèi)的素數(shù)。以內(nèi)的素數(shù)。n首先按程序功能寫出一個框架首先按程序功
14、能寫出一個框架main() 建立建立2到到100的數(shù)組的數(shù)組A ,其中,其中Aii;.1 建立建立2到到10的素數(shù)表的素數(shù)表B ,存放,存放2到到10以內(nèi)的素數(shù);以內(nèi)的素數(shù);.2 若若Aii是是 B 中任一數(shù)的倍數(shù),則剔除中任一數(shù)的倍數(shù),則剔除Ai;.3 輸出輸出A 中所有沒有被剔除的數(shù);中所有沒有被剔除的數(shù);.4 n上述框架中每一個加工語句都可進一步細化上述框架中每一個加工語句都可進一步細化nmain() /*建立建立2到到100的數(shù)組的數(shù)組A ,其中,其中Aii*/ .1 for (i = 2;i = 100;i+)Ai = i; /* 建立建立2到到10的素數(shù)表的素數(shù)表B ,存放,存放2
15、到到10以內(nèi)的素數(shù)以內(nèi)的素數(shù)*/ .2 B1 =2; B2 = 3; B3 = 5; B4 = 7; /*若若Aii是是B 中任一數(shù)的倍數(shù),則剔除中任一數(shù)的倍數(shù),則剔除Ai*/ .3 for (j = 1; j = 4; j+) 檢查檢查A所有數(shù)能否被所有數(shù)能否被Bj整除并將其從整除并將其從A剔除;剔除;.3.1 /*輸出輸出A 中所有沒有被剔除的數(shù)中所有沒有被剔除的數(shù)*/ .4 for (i = 2; i 25) module_3(); else module_4();評價:評價:n與結(jié)構(gòu)化編程矛盾,生成的代碼完全不可讀。與結(jié)構(gòu)化編程矛盾,生成的代碼完全不可讀。n如果在一個模塊中對一個全局變
16、量的聲明進行修改,如果在一個模塊中對一個全局變量的聲明進行修改,必須修改能夠訪問該全局變量的每一個模塊。必須修改能夠訪問該全局變量的每一個模塊。n公共環(huán)境耦合的模塊難于重用,必須提供一個全局變公共環(huán)境耦合的模塊難于重用,必須提供一個全局變量的清單。量的清單。n即使模塊本身不改變,它和產(chǎn)品中其他模塊之間公共即使模塊本身不改變,它和產(chǎn)品中其他模塊之間公共環(huán)境耦合的實例數(shù)也會變化非常大。環(huán)境耦合的實例數(shù)也會變化非常大。n潛在危險很大。模塊暴露出必需要更多的數(shù)據(jù),難以潛在危險很大。模塊暴露出必需要更多的數(shù)據(jù),難以控制數(shù)據(jù)存取,而且會導致計算機犯罪??刂茢?shù)據(jù)存取,而且會導致計算機犯罪。n有些情況下公共環(huán)
17、境耦合更好。有些情況下公共環(huán)境耦合更好。 (6) 內(nèi)容耦合內(nèi)容耦合(content coupling)n最高程度的耦合是內(nèi)容耦合。如果出現(xiàn)下列最高程度的耦合是內(nèi)容耦合。如果出現(xiàn)下列情況之一,兩個模塊間就發(fā)生了內(nèi)容耦合:情況之一,兩個模塊間就發(fā)生了內(nèi)容耦合:q一個模塊訪問另一個模塊的內(nèi)部數(shù)據(jù);一個模塊訪問另一個模塊的內(nèi)部數(shù)據(jù);q一個模塊不通過正常入口轉(zhuǎn)到另一個模塊的內(nèi)部;一個模塊不通過正常入口轉(zhuǎn)到另一個模塊的內(nèi)部;q兩個模塊有一部分程序代碼重疊;兩個模塊有一部分程序代碼重疊;q一個模塊有多個入口。一個模塊有多個入口。 n耦合是影響軟件復雜程度的一個重要因素。耦合是影響軟件復雜程度的一個重要因素。
18、n應該采取下述設計原則:應該采取下述設計原則: 盡量使用數(shù)據(jù)耦合,盡量使用數(shù)據(jù)耦合, 少用控制耦合和特征耦合,少用控制耦合和特征耦合, 限制公共環(huán)境耦合的范圍,限制公共環(huán)境耦合的范圍, 完全不用內(nèi)容耦合。完全不用內(nèi)容耦合。 2. 內(nèi)聚內(nèi)聚n內(nèi)聚:內(nèi)聚:標志一個模塊內(nèi)各個元素彼此結(jié)合的緊標志一個模塊內(nèi)各個元素彼此結(jié)合的緊密程度,它是信息隱藏和局部化概念的自然擴密程度,它是信息隱藏和局部化概念的自然擴展。簡單地說,理想內(nèi)聚的模塊只做一件事情。展。簡單地說,理想內(nèi)聚的模塊只做一件事情。n要求:要求:設計時應該力求做到高內(nèi)聚,通常中等設計時應該力求做到高內(nèi)聚,通常中等程度的內(nèi)聚也是可以采用的,而且效果
19、和高內(nèi)程度的內(nèi)聚也是可以采用的,而且效果和高內(nèi)聚相差不多;但是,低內(nèi)聚不要使用。聚相差不多;但是,低內(nèi)聚不要使用。n內(nèi)聚和耦合是密切相關(guān)的,模塊內(nèi)的高內(nèi)聚往內(nèi)聚和耦合是密切相關(guān)的,模塊內(nèi)的高內(nèi)聚往往意味著模塊間的松耦合。實踐表明內(nèi)聚更重往意味著模塊間的松耦合。實踐表明內(nèi)聚更重要,應該把更多注意力集中到提高模塊的內(nèi)聚要,應該把更多注意力集中到提高模塊的內(nèi)聚程度上。程度上。 內(nèi)聚程度的度量:內(nèi)聚程度的度量:(1) 偶然內(nèi)聚偶然內(nèi)聚(coincidental cohesion)n如果一個模塊完成一組任務,這些任務彼此間如果一個模塊完成一組任務,這些任務彼此間即使有關(guān)系,關(guān)系也是很松散的,就叫做偶然即
20、使有關(guān)系,關(guān)系也是很松散的,就叫做偶然內(nèi)聚。內(nèi)聚。MA=B+CGET CHERIF R=5 THEN S=1評價:評價:n模塊內(nèi)各元素之間沒有實質(zhì)性聯(lián)系,很可能在模塊內(nèi)各元素之間沒有實質(zhì)性聯(lián)系,很可能在一種應用場合需要修改這個模塊,在另一種應一種應用場合需要修改這個模塊,在另一種應用場合又不允許這種修改,從而陷入困境;用場合又不允許這種修改,從而陷入困境;n可理解性差,可維護性產(chǎn)生退化;可理解性差,可維護性產(chǎn)生退化;n模塊是不可重用的。模塊是不可重用的。解決方案:解決方案:n將模塊分成更小的模塊,每個小模塊執(zhí)行一個將模塊分成更小的模塊,每個小模塊執(zhí)行一個操作。操作。(2) 邏輯內(nèi)聚邏輯內(nèi)聚(l
21、ogical cohesion)n如果一個模塊完成的任務在邏輯上屬于相同如果一個模塊完成的任務在邏輯上屬于相同或相似的一類,則稱為邏輯內(nèi)聚。或相似的一類,則稱為邏輯內(nèi)聚。new_operationfunction_code=7;new_operation(function_code,dummy1,dummy2,dummy3);/dummy1、dummy2和和dummy3是偽變量,是偽變量,/如果如果function_code=7則不使用它們則不使用它們評價:評價:n接口難以理解,造成整體上不易理解;接口難以理解,造成整體上不易理解;n完成多個操作的代碼互相糾纏在一起,即使局完成多個操作的代碼互
22、相糾纏在一起,即使局部功能的修改有時也會影響全局,導致嚴重的部功能的修改有時也會影響全局,導致嚴重的維護問題;維護問題;n難以重用。難以重用。解決方案:解決方案:n模塊分解。模塊分解。 (3) 時間內(nèi)聚時間內(nèi)聚(temporal cohesion)n如果一個模塊包含的任務必須在同一段時間如果一個模塊包含的任務必須在同一段時間內(nèi)執(zhí)行,就叫時間內(nèi)聚。內(nèi)執(zhí)行,就叫時間內(nèi)聚。執(zhí)行初始化執(zhí)行初始化打開舊主文件、新主文件、事務文件和打印文件;打開舊主文件、新主文件、事務文件和打印文件;初始化銷售地區(qū)表;初始化銷售地區(qū)表;讀第一條事務記錄和第一條舊主文件記錄;讀第一條事務記錄和第一條舊主文件記錄;評價:評價
23、:n時間關(guān)系在一定程度上反映了程序某些實質(zhì),時間關(guān)系在一定程度上反映了程序某些實質(zhì),所以時間內(nèi)聚比邏輯內(nèi)聚好一些。所以時間內(nèi)聚比邏輯內(nèi)聚好一些。n模塊內(nèi)操作之間的關(guān)系很弱,與其他模塊的操模塊內(nèi)操作之間的關(guān)系很弱,與其他模塊的操作卻有很強的關(guān)聯(lián)。作卻有很強的關(guān)聯(lián)。n時間內(nèi)聚的模塊不太可能重用。時間內(nèi)聚的模塊不太可能重用。 (4) 過程內(nèi)聚過程內(nèi)聚(procedural cohesion)n如果一個模塊內(nèi)的處理元素是相關(guān)的,而且必如果一個模塊內(nèi)的處理元素是相關(guān)的,而且必須以特定次序執(zhí)行,則稱為過程內(nèi)聚。須以特定次序執(zhí)行,則稱為過程內(nèi)聚。n使用程序流程圖作為工具設計軟件使用程序流程圖作為工具設計軟件
24、時,常常通時,常常通過研究流程圖確定模塊的劃分,這樣得到的往過研究流程圖確定模塊的劃分,這樣得到的往往是過程內(nèi)聚的模塊。往是過程內(nèi)聚的模塊。 評價:評價:n比時間內(nèi)聚好,至少操作之間是過程關(guān)聯(lián)的。比時間內(nèi)聚好,至少操作之間是過程關(guān)聯(lián)的。n仍是弱連接,不太可能重用模塊。仍是弱連接,不太可能重用模塊。解決方案:解決方案:n分割為單獨的模塊,每個模塊執(zhí)行一個操作。分割為單獨的模塊,每個模塊執(zhí)行一個操作。(5) 通信內(nèi)聚通信內(nèi)聚(communicational cohesion)n如果模塊中所有元素都使用同一個輸入數(shù)據(jù)如果模塊中所有元素都使用同一個輸入數(shù)據(jù)和和(或或)產(chǎn)生同一個輸出數(shù)據(jù),則稱為通信內(nèi)產(chǎn)
25、生同一個輸出數(shù)據(jù),則稱為通信內(nèi)聚。即在同一個數(shù)據(jù)結(jié)構(gòu)上操作。聚。即在同一個數(shù)據(jù)結(jié)構(gòu)上操作。評價:評價:n模塊中各操作緊密相連,比過程內(nèi)聚更好。模塊中各操作緊密相連,比過程內(nèi)聚更好。n不能重用。不能重用。解決方案:解決方案:n分成多個模塊,每個模塊執(zhí)行一個操作。分成多個模塊,每個模塊執(zhí)行一個操作。(6) 順序內(nèi)聚順序內(nèi)聚(sequential cohesion)n如果一個模塊內(nèi)的處理元素和同一個功能密如果一個模塊內(nèi)的處理元素和同一個功能密切相關(guān),而且這些處理必須順序執(zhí)行,則稱切相關(guān),而且這些處理必須順序執(zhí)行,則稱為順序內(nèi)聚。為順序內(nèi)聚。評價:評價:n根據(jù)根據(jù)數(shù)據(jù)流圖劃分模塊時數(shù)據(jù)流圖劃分模塊時,
26、通常得到順序內(nèi),通常得到順序內(nèi)聚的模塊,這種模塊彼此間的連接往往比較聚的模塊,這種模塊彼此間的連接往往比較簡單。簡單。 (7) 功能內(nèi)聚功能內(nèi)聚(functional cohesion)n如果模塊內(nèi)所有處理元素屬于一個整體,完如果模塊內(nèi)所有處理元素屬于一個整體,完成一個單一的功能,則稱為功能內(nèi)聚。功能成一個單一的功能,則稱為功能內(nèi)聚。功能內(nèi)聚是最高程度的內(nèi)聚。內(nèi)聚是最高程度的內(nèi)聚。評價:評價:n模塊可重用,應盡可能重用;模塊可重用,應盡可能重用;n可隔離錯誤,維護更容易;可隔離錯誤,維護更容易;n擴充產(chǎn)品功能時更容易。擴充產(chǎn)品功能時更容易。七種內(nèi)聚的優(yōu)劣評分結(jié)果:七種內(nèi)聚的優(yōu)劣評分結(jié)果:n高內(nèi)
27、聚:功能內(nèi)聚高內(nèi)聚:功能內(nèi)聚 10分分 順序內(nèi)聚順序內(nèi)聚 9分分n中內(nèi)聚:通信內(nèi)聚中內(nèi)聚:通信內(nèi)聚 7分分 過程內(nèi)聚過程內(nèi)聚 5分分n低內(nèi)聚:時間內(nèi)聚低內(nèi)聚:時間內(nèi)聚 3分分 邏輯內(nèi)聚邏輯內(nèi)聚 1分分 偶然內(nèi)聚偶然內(nèi)聚 0分分n設計時力爭做到高內(nèi)聚,并且能夠辨認出低內(nèi)設計時力爭做到高內(nèi)聚,并且能夠辨認出低內(nèi)聚的模塊。聚的模塊。 5.3 啟發(fā)規(guī)則啟發(fā)規(guī)則1. 改進軟件結(jié)構(gòu)提高模塊獨立性改進軟件結(jié)構(gòu)提高模塊獨立性n通過模塊分解或合并,降低耦合提高內(nèi)聚。通過模塊分解或合并,降低耦合提高內(nèi)聚。n兩個方面:兩個方面: q模塊功能完善化。一個完整的模塊包含:模塊功能完善化。一個完整的模塊包含:n執(zhí)行規(guī)定的
28、功能的部分執(zhí)行規(guī)定的功能的部分n出錯處理的部分出錯處理的部分n返回一個返回一個“結(jié)束標志結(jié)束標志”q消除重復功能,改善軟件結(jié)構(gòu)。消除重復功能,改善軟件結(jié)構(gòu)。n完全相似完全相似n局部相似局部相似2. 模塊規(guī)模應該適中模塊規(guī)模應該適中n經(jīng)驗表明,一個模塊的規(guī)模不應過大,最好能經(jīng)驗表明,一個模塊的規(guī)模不應過大,最好能寫在一頁紙內(nèi)。通常規(guī)定寫在一頁紙內(nèi)。通常規(guī)定50100行語句,最多行語句,最多不超過不超過500行。數(shù)字只能作為參考,根本問題行。數(shù)字只能作為參考,根本問題是要保證模塊的獨立性。是要保證模塊的獨立性。n過大的模塊往往是由于分解不充分,但是進一過大的模塊往往是由于分解不充分,但是進一步分解
29、必須符合問題結(jié)構(gòu),一般說來,分解后步分解必須符合問題結(jié)構(gòu),一般說來,分解后不應該降低模塊獨立性。不應該降低模塊獨立性。n過小的模塊開銷大于有效操作,而且模塊數(shù)目過小的模塊開銷大于有效操作,而且模塊數(shù)目過多將使系統(tǒng)接口復雜。過多將使系統(tǒng)接口復雜。3. 深度、寬度、扇出和扇入都應適當深度、寬度、扇出和扇入都應適當n深度:深度:軟件結(jié)構(gòu)中控制的層數(shù),它往往能粗略軟件結(jié)構(gòu)中控制的層數(shù),它往往能粗略地標志一個系統(tǒng)的大小和復雜程度。地標志一個系統(tǒng)的大小和復雜程度。n寬度:寬度:軟件結(jié)構(gòu)內(nèi)同一個層次上的模塊總數(shù)的軟件結(jié)構(gòu)內(nèi)同一個層次上的模塊總數(shù)的最大值。最大值。n扇出:扇出:一個模塊直接控制一個模塊直接控制
30、(調(diào)用調(diào)用)的模塊數(shù)目。的模塊數(shù)目。n扇入:扇入:有多少個上級模塊直接調(diào)用它。有多少個上級模塊直接調(diào)用它。4. 模塊的作用域應該在控制域之內(nèi)模塊的作用域應該在控制域之內(nèi)n模塊的作用域:模塊的作用域:定義為受該模塊內(nèi)一個判定影定義為受該模塊內(nèi)一個判定影響的所有模塊的集合。響的所有模塊的集合。n模塊的控制域:模塊的控制域:是這個模塊本身以及所有直接是這個模塊本身以及所有直接或間接從屬于它的模塊的集合?;蜷g接從屬于它的模塊的集合。 n在一個設計得很好的系統(tǒng)中,所有受判定影響在一個設計得很好的系統(tǒng)中,所有受判定影響的模塊應該都從屬于做出判定的那個模塊,最的模塊應該都從屬于做出判定的那個模塊,最好局限于
31、做出判定的那個模塊本身及它的直屬好局限于做出判定的那個模塊本身及它的直屬下級模塊。下級模塊。解決方案:解決方案:n把模塊把模塊A中的判定移到模塊中的判定移到模塊M中;中;n把模塊把模塊G移到模塊移到模塊A下面,作為他的下級模塊。下面,作為他的下級模塊。 5. 力爭降低模塊接口的復雜程度力爭降低模塊接口的復雜程度n模塊接口復雜是軟件發(fā)生錯誤的一個主要原因。模塊接口復雜是軟件發(fā)生錯誤的一個主要原因。應該仔細設計模塊接口,使得信息傳遞簡單并應該仔細設計模塊接口,使得信息傳遞簡單并且和模塊的功能一致。且和模塊的功能一致。例:解一元二次方程的函數(shù)例:解一元二次方程的函數(shù)nQUAD_ROOT(TBL,X)
32、q其中數(shù)組其中數(shù)組TBL傳送方程的系數(shù)傳送方程的系數(shù)q數(shù)組數(shù)組X送回求得的根送回求得的根nQUAD_ROOT(A,B,C,ROOT1,ROOT2)6. 設計單入口單出口的模塊設計單入口單出口的模塊n警告軟件工程師不要使模塊間出現(xiàn)內(nèi)容耦合。警告軟件工程師不要使模塊間出現(xiàn)內(nèi)容耦合。當從頂部進入模塊并且從底部退出來時,軟件當從頂部進入模塊并且從底部退出來時,軟件是比較容易理解的,因此也是比較容易維護的。是比較容易理解的,因此也是比較容易維護的。7. 模塊功能應該可以預測模塊功能應該可以預測n模塊的功能應該能夠預測,但也要防止模塊功模塊的功能應該能夠預測,但也要防止模塊功能過分局限。能過分局限。n功能
33、可預測:功能可預測:如果一個模塊可以當做一個黑盒如果一個模塊可以當做一個黑盒子,只要輸入的數(shù)據(jù)相同就產(chǎn)生同樣的輸出,子,只要輸入的數(shù)據(jù)相同就產(chǎn)生同樣的輸出,這個模塊的功能就是可以預測的。這個模塊的功能就是可以預測的。5.4 描繪軟件結(jié)構(gòu)的圖形工具描繪軟件結(jié)構(gòu)的圖形工具5.4.1 層次圖和層次圖和HIPO圖圖1. 層次圖層次圖(H圖圖)n層次圖用來描繪軟件的層次結(jié)構(gòu)。很適于在自頂向?qū)哟螆D用來描繪軟件的層次結(jié)構(gòu)。很適于在自頂向下設計軟件的過程中使用。下設計軟件的過程中使用。層次圖和層次方框圖的區(qū)別:層次圖和層次方框圖的區(qū)別:層次圖層次圖層次方框圖層次方框圖作用作用描繪軟件結(jié)構(gòu)描繪軟件結(jié)構(gòu)描繪數(shù)據(jù)結(jié)
34、構(gòu)描繪數(shù)據(jù)結(jié)構(gòu)矩形框矩形框模塊模塊數(shù)據(jù)元素數(shù)據(jù)元素連線連線調(diào)用關(guān)系調(diào)用關(guān)系組成關(guān)系組成關(guān)系正文加工系統(tǒng)的層次圖正文加工系統(tǒng)的層次圖 2. HIPO圖圖nHIPO圖是美國圖是美國IBM公司發(fā)明的公司發(fā)明的“層次圖層次圖+輸入輸入/處理處理/輸出圖輸出圖”的英文縮寫。的英文縮寫。n為了能使為了能使HIPO圖具有可追蹤性,在圖具有可追蹤性,在H圖圖(層次層次圖圖)里除了最頂層的方框之外,每個方框都加里除了最頂層的方框之外,每個方框都加了編號。了編號。n和和H圖中每個方框相對應,應該有一張圖中每個方框相對應,應該有一張IPO圖圖描繪這個方框代表的模塊的處理過程。模塊在描繪這個方框代表的模塊的處理過程。
35、模塊在H圖中的編號便于追蹤了解這個模塊在軟件結(jié)圖中的編號便于追蹤了解這個模塊在軟件結(jié)構(gòu)中的位置。構(gòu)中的位置。5.4.2 結(jié)構(gòu)圖結(jié)構(gòu)圖nYourdon提出的結(jié)構(gòu)圖是進行軟件結(jié)構(gòu)設計的提出的結(jié)構(gòu)圖是進行軟件結(jié)構(gòu)設計的另一個有力工具。結(jié)構(gòu)圖和層次圖類似,也是另一個有力工具。結(jié)構(gòu)圖和層次圖類似,也是描繪軟件結(jié)構(gòu)的圖形工具。描繪軟件結(jié)構(gòu)的圖形工具?;痉枺夯痉枺簄方框代表一個模塊;方框代表一個模塊;n方框之間的直線表示模塊的調(diào)用關(guān)系;方框之間的直線表示模塊的調(diào)用關(guān)系;n尾部是空心圓箭頭表示傳遞的是數(shù)據(jù);尾部是空心圓箭頭表示傳遞的是數(shù)據(jù);n尾部實心圓箭頭表示傳遞的是控制信息。尾部實心圓箭頭表示傳遞的
36、是控制信息。 附加符號:附加符號:n選擇調(diào)用:判定為選擇調(diào)用:判定為真時調(diào)用真時調(diào)用A,為假,為假時調(diào)用時調(diào)用B。n循環(huán)調(diào)用:模塊循環(huán)調(diào)用:模塊M循環(huán)調(diào)用模塊循環(huán)調(diào)用模塊A、B、C。注意:注意:n層次圖和結(jié)構(gòu)圖并不嚴格表示模塊的調(diào)用次序,層次圖和結(jié)構(gòu)圖并不嚴格表示模塊的調(diào)用次序,多數(shù)人習慣按調(diào)用次序從左到右畫模塊;多數(shù)人習慣按調(diào)用次序從左到右畫模塊;n層次圖和結(jié)構(gòu)圖并不指明何時調(diào)用下層模塊;層次圖和結(jié)構(gòu)圖并不指明何時調(diào)用下層模塊;n層次圖和結(jié)構(gòu)圖只表明一個模塊調(diào)用那些模塊,層次圖和結(jié)構(gòu)圖只表明一個模塊調(diào)用那些模塊,沒有表示模塊內(nèi)還有沒有其他成分;沒有表示模塊內(nèi)還有沒有其他成分;n通常用層次圖作
37、為描繪軟件結(jié)構(gòu)的文檔;通常用層次圖作為描繪軟件結(jié)構(gòu)的文檔;n由層次圖導出結(jié)構(gòu)圖的過程,可以作為檢查設由層次圖導出結(jié)構(gòu)圖的過程,可以作為檢查設計正確性和評價模塊獨立性的好方法。計正確性和評價模塊獨立性的好方法。5.5 面向數(shù)據(jù)流的設計方法面向數(shù)據(jù)流的設計方法n面向數(shù)據(jù)流的設計方法定義了一些不同的面向數(shù)據(jù)流的設計方法定義了一些不同的“映映射射”,利用這些映射可以把數(shù)據(jù)流圖變換成軟,利用這些映射可以把數(shù)據(jù)流圖變換成軟件結(jié)構(gòu)。件結(jié)構(gòu)。n因為任何軟件系統(tǒng)都可以用數(shù)據(jù)流圖表示,所因為任何軟件系統(tǒng)都可以用數(shù)據(jù)流圖表示,所以面向數(shù)據(jù)流的設計方法理論上可以設計任何以面向數(shù)據(jù)流的設計方法理論上可以設計任何軟件的結(jié)
38、構(gòu)。通常所說的結(jié)構(gòu)化設計方法軟件的結(jié)構(gòu)。通常所說的結(jié)構(gòu)化設計方法(簡簡稱稱SD方法方法),也就是基于數(shù)據(jù)流的設計方法。,也就是基于數(shù)據(jù)流的設計方法。 5.5.1 概念概念n面向數(shù)據(jù)流的設計方法把信息流映射成軟件結(jié)面向數(shù)據(jù)流的設計方法把信息流映射成軟件結(jié)構(gòu),信息流的類型決定了映射的方法。構(gòu),信息流的類型決定了映射的方法。n信息流有兩種類型:信息流有兩種類型:q變換流變換流q事務流事務流1. 變換流變換流n信息沿輸入通路進入系統(tǒng),同時由外部形式變信息沿輸入通路進入系統(tǒng),同時由外部形式變換成內(nèi)部形式,進入系統(tǒng)的信息通過變換中心,換成內(nèi)部形式,進入系統(tǒng)的信息通過變換中心,經(jīng)加工處理以后再沿輸出通路變換
39、成外部形式經(jīng)加工處理以后再沿輸出通路變換成外部形式離開軟件系統(tǒng)。離開軟件系統(tǒng)。2. 事務流事務流n數(shù)據(jù)沿輸入通路到達一個處理數(shù)據(jù)沿輸入通路到達一個處理T,T根據(jù)輸入根據(jù)輸入數(shù)據(jù)的類型在若干個動作序列中選出一個來執(zhí)數(shù)據(jù)的類型在若干個動作序列中選出一個來執(zhí)行。處理行。處理T稱為事務中心,它完成下述任務:稱為事務中心,它完成下述任務:q接收輸入數(shù)據(jù);接收輸入數(shù)據(jù);q分析每個事務以分析每個事務以 確定它的類型;確定它的類型;q根據(jù)事務類型根據(jù)事務類型 選取一條活動通路。選取一條活動通路。 3. 設計過程設計過程 5.5.2 變換分析變換分析n變換分析是一系列設計步驟的總稱,經(jīng)過這些變換分析是一系列設計
40、步驟的總稱,經(jīng)過這些步驟把具有變換流特點的數(shù)據(jù)流圖按預先確定步驟把具有變換流特點的數(shù)據(jù)流圖按預先確定的模式映射成軟件結(jié)構(gòu)。的模式映射成軟件結(jié)構(gòu)。設計步驟:設計步驟:(1) 復查基本系統(tǒng)模型復查基本系統(tǒng)模型n確保系統(tǒng)的輸入數(shù)據(jù)和輸出數(shù)據(jù)符合實際。確保系統(tǒng)的輸入數(shù)據(jù)和輸出數(shù)據(jù)符合實際。(2) 復查并精化數(shù)據(jù)流圖復查并精化數(shù)據(jù)流圖n對需求分析階段得出的數(shù)據(jù)流圖認真復查,并對需求分析階段得出的數(shù)據(jù)流圖認真復查,并且在必要時進行精化。且在必要時進行精化。n不僅要確保數(shù)據(jù)流圖給出了目標系統(tǒng)的正確的不僅要確保數(shù)據(jù)流圖給出了目標系統(tǒng)的正確的邏輯模型,而且應該使數(shù)據(jù)流圖中每個處理都邏輯模型,而且應該使數(shù)據(jù)流圖中
41、每個處理都代表一個規(guī)模適中相對獨立的子功能。代表一個規(guī)模適中相對獨立的子功能。 (3) 確定數(shù)據(jù)流圖具有變換特性還是事務特性確定數(shù)據(jù)流圖具有變換特性還是事務特性n一個系統(tǒng)中的所有信息流都可以認為是變換一個系統(tǒng)中的所有信息流都可以認為是變換流,但是,當遇到有明顯事務特性的信息流流,但是,當遇到有明顯事務特性的信息流時,建議采用事務分析方法進行設計。確定時,建議采用事務分析方法進行設計。確定數(shù)據(jù)流的全局特性和局部特性。數(shù)據(jù)流的全局特性和局部特性。(4) 確定輸入流和輸出流的邊界,從而孤立出變確定輸入流和輸出流的邊界,從而孤立出變換中心換中心n輸入流和輸出流的邊界和對它們的解釋有關(guān),輸入流和輸出流的
42、邊界和對它們的解釋有關(guān),不同設計人員可能會在流內(nèi)選取稍微不同的不同設計人員可能會在流內(nèi)選取稍微不同的點作為邊界的位置。點作為邊界的位置。(5) 完成完成“第一級分解第一級分解”。n位于軟件結(jié)構(gòu)最頂層的控制模塊位于軟件結(jié)構(gòu)最頂層的控制模塊Cm協(xié)調(diào)下協(xié)調(diào)下述從屬的控制功能:述從屬的控制功能:q輸入信息處理控制模塊輸入信息處理控制模塊Ca,協(xié)調(diào)對所有輸入數(shù)據(jù)的協(xié)調(diào)對所有輸入數(shù)據(jù)的接收;接收;q變換中心控制模塊變換中心控制模塊Ct,管理對內(nèi)部形式的數(shù)據(jù)的所管理對內(nèi)部形式的數(shù)據(jù)的所有操作;有操作;q輸出信息處理控制模塊輸出信息處理控制模塊Ce,協(xié)調(diào)輸出信息的產(chǎn)生,協(xié)調(diào)輸出信息的產(chǎn)生過程。過程。 第一級分
43、解方法第一級分解方法(6) 完成完成“第二級分解第二級分解”n處理映射成軟件結(jié)構(gòu)中一個適當?shù)哪K。完處理映射成軟件結(jié)構(gòu)中一個適當?shù)哪K。完成第二級分解的方法是:成第二級分解的方法是:q從變換中心的邊界開始沿著輸入通路向外移動,從變換中心的邊界開始沿著輸入通路向外移動,把輸入通路中每個處理映射成軟件結(jié)構(gòu)中把輸入通路中每個處理映射成軟件結(jié)構(gòu)中Ca控制控制下的一個低層模塊;下的一個低層模塊;q然后沿輸出通路向外移動,把輸出通路中每個處然后沿輸出通路向外移動,把輸出通路中每個處理映射成直接或間接受模塊理映射成直接或間接受模塊Ce控制的一個低層??刂频囊粋€低層模塊;塊;q最后把變換中心內(nèi)的每個處理映射成
44、受最后把變換中心內(nèi)的每個處理映射成受Ct控制的控制的一個模塊。一個模塊。第二級分解方法第二級分解方法(7) 使用設計度量和啟發(fā)式規(guī)則對第一次分割得使用設計度量和啟發(fā)式規(guī)則對第一次分割得到的軟件結(jié)構(gòu)進一步精化到的軟件結(jié)構(gòu)進一步精化n為了產(chǎn)生合理的分解,得到盡可能高的內(nèi)聚、為了產(chǎn)生合理的分解,得到盡可能高的內(nèi)聚、盡可能松散的耦合,為了得到一個易于實現(xiàn)、盡可能松散的耦合,為了得到一個易于實現(xiàn)、易于測試和易于維護的軟件結(jié)構(gòu),應該對初易于測試和易于維護的軟件結(jié)構(gòu),應該對初步分割得到的模塊進行再分解或合并。步分割得到的模塊進行再分解或合并。5.5.3 事務分析事務分析n雖然在任何情況下都可以使用變換分析方
45、法設雖然在任何情況下都可以使用變換分析方法設計軟件結(jié)構(gòu),但是在數(shù)據(jù)流具有明顯的事務特計軟件結(jié)構(gòu),但是在數(shù)據(jù)流具有明顯的事務特點時,也就是有一個明顯的點時,也就是有一個明顯的“發(fā)射中心發(fā)射中心”(事事務中心務中心)時,還是以采用事務分析方法為宜。時,還是以采用事務分析方法為宜。 n事務分析的設計步驟和變換分析的設計步驟大事務分析的設計步驟和變換分析的設計步驟大部分相同或類似,主要差別僅在于由數(shù)據(jù)流圖部分相同或類似,主要差別僅在于由數(shù)據(jù)流圖到軟件結(jié)構(gòu)的映射方法不同:到軟件結(jié)構(gòu)的映射方法不同:q由事務流映射成的軟件結(jié)構(gòu)包括一個接收分支和由事務流映射成的軟件結(jié)構(gòu)包括一個接收分支和一個發(fā)送分支;一個發(fā)送
46、分支;q映射出接收分支結(jié)構(gòu)的方法和變換分析映射出輸映射出接收分支結(jié)構(gòu)的方法和變換分析映射出輸入結(jié)構(gòu)的方法很相像,即從事務中心的邊界開始,入結(jié)構(gòu)的方法很相像,即從事務中心的邊界開始,把沿著接收流通路的處理映射成模塊;把沿著接收流通路的處理映射成模塊;q發(fā)送分支的結(jié)構(gòu)包含一個調(diào)度模塊,它控制下層發(fā)送分支的結(jié)構(gòu)包含一個調(diào)度模塊,它控制下層的所有活動模塊;然后把數(shù)據(jù)流圖中的每個活動的所有活動模塊;然后把數(shù)據(jù)流圖中的每個活動流通路映射成與它的流特征相對應的結(jié)構(gòu)。流通路映射成與它的流特征相對應的結(jié)構(gòu)。 例例1:n設計一個產(chǎn)品,它將一個文件名作為輸入,并設計一個產(chǎn)品,它將一個文件名作為輸入,并返回文件中的字
47、數(shù)。返回文件中的字數(shù)。第一級分解第一級分解第二級分解第二級分解精化精化例例2:汽車數(shù)字儀表板汽車數(shù)字儀表板n通過模數(shù)轉(zhuǎn)換實現(xiàn)傳感器和微處理機接口;通過模數(shù)轉(zhuǎn)換實現(xiàn)傳感器和微處理機接口;n在發(fā)光二極管面板上顯示數(shù)據(jù);在發(fā)光二極管面板上顯示數(shù)據(jù);n指示每小時英里數(shù)指示每小時英里數(shù)(mph),行駛的里程,每加,行駛的里程,每加侖油行駛的英里數(shù)侖油行駛的英里數(shù)(mpg)等等;等等;n指示加速或減速;指示加速或減速;n超速警告:如果車速超過超速警告:如果車速超過55英里英里/小時,則發(fā)小時,則發(fā)出超速警告鈴聲。出超速警告鈴聲。第一級分解第一級分解第二級分解第二級分解精化精化例例3:自動柜員機自動柜員機n
48、顧客插入磁卡,輸入密碼,然后執(zhí)行動作,包顧客插入磁卡,輸入密碼,然后執(zhí)行動作,包括向支票、存折或信用卡賬戶存款,提款或查括向支票、存折或信用卡賬戶存款,提款或查詢余額等。詢余額等。n設計上分成兩部分:分析器和調(diào)度器。分析器設計上分成兩部分:分析器和調(diào)度器。分析器確定事務類型并將信息送到分配器,由調(diào)度器確定事務類型并將信息送到分配器,由調(diào)度器進行事務處理。進行事務處理。例例4:一個公司的銷售管理系統(tǒng)一個公司的銷售管理系統(tǒng)總結(jié):總結(jié):n一般說來,如果數(shù)據(jù)流不具有顯著的事務特點,一般說來,如果數(shù)據(jù)流不具有顯著的事務特點,最好使用變換分析;反之,如果具有明顯的事最好使用變換分析;反之,如果具有明顯的事
49、務中心,則應該采用事務分析技術(shù)。務中心,則應該采用事務分析技術(shù)。n機械地遵循變換分析或事務分析的映射規(guī)則,機械地遵循變換分析或事務分析的映射規(guī)則,可能會得到一些不必要的控制模塊,如果它們可能會得到一些不必要的控制模塊,如果它們確實用處不大,那么可以而且應該把它們合并。確實用處不大,那么可以而且應該把它們合并。n如果一個控制模塊功能過分復雜,則應該分解如果一個控制模塊功能過分復雜,則應該分解為兩個或多個控制模塊,或者增加中間層次的為兩個或多個控制模塊,或者增加中間層次的控制模塊??刂颇K。 5.5.4 設計優(yōu)化設計優(yōu)化n設計優(yōu)化應該力求做到在有效的模塊化的前提設計優(yōu)化應該力求做到在有效的模塊化的
50、前提下使用最少量的模塊,以及在能夠滿足信息要下使用最少量的模塊,以及在能夠滿足信息要求的前提下使用最簡單的數(shù)據(jù)結(jié)構(gòu)。求的前提下使用最簡單的數(shù)據(jù)結(jié)構(gòu)。n對于時間是決定性因素的應用場合,可能有必對于時間是決定性因素的應用場合,可能有必要在詳細設計階段,也可能在編寫程序的過程要在詳細設計階段,也可能在編寫程序的過程中進行優(yōu)化。中進行優(yōu)化。n軟件開發(fā)人員應該認識到,程序中相對說比較軟件開發(fā)人員應該認識到,程序中相對說比較小的部分小的部分(典型地,典型地,10%20%),通常占用全,通常占用全部處理時間的大部分部處理時間的大部分(50%80%)。對時間起決定性作用的軟件進行優(yōu)化:對時間起決定性作用的軟件進行優(yōu)化:n在不考慮時間因素的前提下開發(fā)并精化軟件結(jié)在不考慮時間因素的前提下開發(fā)并精化軟件結(jié)構(gòu);構(gòu);n在詳細設計階段選出最耗費時間的那些模塊,在詳細設計階段選出最耗費時間的那些模塊,仔細地設計它們的處理過程,以求提高效率;仔細地設計它們的處理過程,以求提高效率;n使用高級程序設計語言編寫程序;使用高級程序設計語言編寫程序;n在軟件中孤立出那些大量占用處理機資源的模在軟件中孤立出那些大量占用處理機資源的模塊;塊;n必要時重新設計或用依賴于機器的語言重寫上必要時重新設計或用依賴于機器的語言重寫上述大量占用資源的模塊的代碼,以求提高效率。述大量占用資源的模塊的代碼,以求提高效率。
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。