軟件工程05-總體設(shè)計(jì)_第1頁
軟件工程05-總體設(shè)計(jì)_第2頁
軟件工程05-總體設(shè)計(jì)_第3頁
軟件工程05-總體設(shè)計(jì)_第4頁
軟件工程05-總體設(shè)計(jì)_第5頁
已閱讀5頁,還剩109頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、 岐兵 email:可行性研究可行性研究需求分析需求分析概要設(shè)計(jì)概要設(shè)計(jì)詳細(xì)設(shè)計(jì)詳細(xì)設(shè)計(jì)實(shí)實(shí) 現(xiàn)現(xiàn)集成測試集成測試確認(rèn)測試確認(rèn)測試使用與維護(hù)使用與維護(hù)退役退役軟件定義軟件定義軟件開發(fā)軟件開發(fā)軟件使用軟件使用與維護(hù)與維護(hù) 每個步驟都按某種方式進(jìn)行信息變換,最后得到有效的計(jì)算機(jī)軟件n將分析模型轉(zhuǎn)換為軟件設(shè)計(jì)n從工程管理的角度來看,軟件設(shè)計(jì)分兩步完成n從工程管理的角度來看,軟件設(shè)計(jì)分兩步完成 總體設(shè)計(jì)(概要設(shè)計(jì)),將軟件需求轉(zhuǎn)化為數(shù)據(jù)結(jié)構(gòu)和軟件的系統(tǒng)結(jié)構(gòu)。 詳細(xì)設(shè)計(jì),即過程設(shè)計(jì)。通過對結(jié)構(gòu)表示進(jìn)行細(xì)化,得到軟件詳細(xì)的數(shù)據(jù)結(jié)構(gòu)和算法。n第3章:“總體設(shè)計(jì)” 總體設(shè)計(jì)過程 軟件設(shè)計(jì)原理 軟件設(shè)計(jì)中的啟發(fā)

2、規(guī)則 描繪軟件結(jié)構(gòu)的圖形工具 面向數(shù)據(jù)流的設(shè)計(jì)方法n總體設(shè)計(jì)(概要設(shè)計(jì)或初步設(shè)計(jì)) 劃分出組成系統(tǒng)的物理元素n程序、文件、數(shù)據(jù)庫、人工過程和文檔等n并不涉及物理元素內(nèi)部設(shè)計(jì) 總體設(shè)計(jì)階段的一項(xiàng)任務(wù)是設(shè)計(jì)軟件結(jié)構(gòu)n確定系統(tǒng)中每個程序是由哪些模塊組成的n以及這些模塊相互間的關(guān)系n總體設(shè)計(jì)過程總體設(shè)計(jì)過程一般分為兩個階段 系統(tǒng)設(shè)計(jì)階段:確定系統(tǒng)的具體實(shí)現(xiàn)方案 結(jié)構(gòu)設(shè)計(jì)階段:確定軟件的結(jié)構(gòu)n總體設(shè)計(jì)的步驟1 設(shè)想供選擇的方案n提出各種可能的實(shí)現(xiàn)方案n以需求分析階段的數(shù)據(jù)流圖為出發(fā)點(diǎn),畫自動化邊界,形成不同的實(shí)現(xiàn)系統(tǒng)方案n設(shè)想把數(shù)據(jù)流圖中的處理分組的各種可能方法,拋棄在技術(shù)上行不通的分組方法n余下的分組

3、方法代表可能的實(shí)現(xiàn)策略,并且可以啟示供選擇的物理系統(tǒng)n總體設(shè)計(jì)的步驟2 選取合理方案n從前一步得到的一系列供選擇的方案中選取若干個合理的方案n在此基礎(chǔ)上分析員對每種方案準(zhǔn)備四份文檔:n總體設(shè)計(jì)的步驟3 推薦最佳方案n綜合分析對比各種合理方案的利弊,從中選出一種自己認(rèn)為是最理想的方案推薦n用戶和技術(shù)專家應(yīng)認(rèn)真審查所推薦的最佳系統(tǒng)n如果該系統(tǒng)確實(shí)符合用戶的需要,并且是在現(xiàn)有條件下完全能夠?qū)崿F(xiàn)的,則應(yīng)該提請使用部門負(fù)責(zé)人進(jìn)一步審批n在使用部門的負(fù)責(zé)人也接受了分析員所推薦的方案之后,將進(jìn)入總體設(shè)計(jì)過程的下一個重要階段結(jié)構(gòu)設(shè)計(jì) n總體設(shè)計(jì)的步驟4 功能分解目標(biāo)系統(tǒng)的實(shí)現(xiàn)一般要分兩步進(jìn)行:n首先是進(jìn)行結(jié)構(gòu)

4、設(shè)計(jì),確定系統(tǒng)是由哪些模塊組成的,以及這些模塊之間的關(guān)系n其次是過程設(shè)計(jì),確定每個模塊的處理過程 結(jié)構(gòu)設(shè)計(jì)是總體設(shè)計(jì)階段的任務(wù),而過程設(shè)計(jì)是詳細(xì)設(shè)計(jì)階段的任務(wù)。n總體設(shè)計(jì)的步驟4 功能分解n為確定軟件結(jié)構(gòu)n總體設(shè)計(jì)的步驟5 設(shè)計(jì)軟件結(jié)構(gòu)n模塊確定以后,每個模塊的功能也就隨之確定n把這些模塊自頂向下組成一種良好的層次調(diào)用關(guān)系,就完成了軟件結(jié)構(gòu)設(shè)計(jì)的任務(wù)n如果數(shù)據(jù)流圖已經(jīng)細(xì)化到適當(dāng)?shù)膶哟?,那么我們便可以從?shù)據(jù)流圖映射成軟件結(jié)構(gòu)圖n總體設(shè)計(jì)的步驟6 設(shè)計(jì)數(shù)據(jù)庫n數(shù)據(jù)庫的設(shè)計(jì)一般包括如下幾步:n總體設(shè)計(jì)的步驟7 制定測試計(jì)劃n在軟件開發(fā)的早期階段考慮測試問題n使軟件設(shè)計(jì)人員在設(shè)計(jì)時注意軟件的可測試性n

5、總體設(shè)計(jì)的步驟8 書寫文檔n系統(tǒng)說明n總體設(shè)計(jì)的步驟8 書寫文檔n用戶手冊n測試計(jì)劃n詳細(xì)的實(shí)現(xiàn)計(jì)劃n數(shù)據(jù)庫設(shè)計(jì)結(jié)果n總體設(shè)計(jì)的步驟9 復(fù)審n對總體設(shè)計(jì)的結(jié)果進(jìn)行嚴(yán)格的技術(shù)審查n在技術(shù)審查通過之后再由使用部門的負(fù)責(zé)人從管理角度進(jìn)行復(fù)審n第3章:“總體設(shè)計(jì)” 總體設(shè)計(jì)過程 軟件設(shè)計(jì)原理 軟件設(shè)計(jì)中的啟發(fā)規(guī)則 描繪軟件結(jié)構(gòu)的圖形工具 面向數(shù)據(jù)流的設(shè)計(jì)方法1. 抽象 抽象:人們在實(shí)踐中認(rèn)識到,在現(xiàn)實(shí)世界中一定事物、狀態(tài)或過程之間總存在著某些相似的方面(共性)。把這些相似的方面集中和概括起來,暫時忽略它們之間的差異,這就是抽象。抽象就是:抽出本質(zhì),忽略細(xì)節(jié),分層理解 舉例說明:軟件工程各階段的抽象n在

6、可行性研究階段,軟件作為系統(tǒng)的一個完整部件;n在需求分析階段,軟件解法是使用在問題環(huán)境內(nèi)熟悉的方式描述;n進(jìn)入總體設(shè)計(jì)向詳細(xì)設(shè)計(jì)過渡階段,抽象的程度將隨之減少;n最后當(dāng)源程序被寫出后,抽象則達(dá)到最低層2. 模塊化 模塊:是由邊界元素限定的相鄰程序元素(例如,數(shù)據(jù)說明,可執(zhí)行的語句)的序列,而且有一個總體標(biāo)識符代表它。npascal或 ada 這樣的塊結(jié)構(gòu)語言中的beginend對nc、c+和java語言中的 . 對n過程、函數(shù)、子程序和宏等n面向?qū)ο蠓椒▽W(xué)中的對象(見第9章)是模塊,對象內(nèi)的方法(或稱為服務(wù))也是模塊 模塊化:就是把程序劃分成獨(dú)立命名且可獨(dú)立訪問的模塊,每個模塊完成一個子功能,

7、把這些模塊集成起來構(gòu)成一個整體,可以完成指定的功能滿足用戶的需求。 模塊化的數(shù)學(xué)依據(jù)nc(x) 定義問題x的復(fù)雜程度,e(x)確定解決問題x需要的工作量(時間),對于兩個問題p1和p2有ne(p1+p2+pn)e(p1)+e(p2)+ +e(pn) 以上揭示了把一個復(fù)雜問題分成許多容易解決的小問題,原來問題將容易解決n每個程序都相應(yīng)地有一個最適當(dāng)?shù)哪K數(shù)目m,使得系統(tǒng)的開發(fā)成本最小。m成本成本/ /模塊模塊接口成本接口成本軟件總成本軟件總成本成本成本模塊數(shù)模塊數(shù)最小成本區(qū)最小成本區(qū)3. 逐步求精 逐步求精:為了能集中精力解決主要問題而盡量推遲對問題細(xì)節(jié)的考慮。n其作用就在于它能幫助軟件工程師把

8、精力集中在與當(dāng)前開發(fā)階段最相關(guān)的那些方面上n忽略那些對整體解決方案來說雖然是必要的,然而目前還不需要考慮的細(xì)節(jié),這些細(xì)節(jié)將留到以后再考慮。3. 逐步求精 miller法則:n一個人在任何時候都只能把注意力集中在(72)個知識塊上nmiller法則是人類智力的基本局限,我們不可能戰(zhàn)勝自己的自然本性,只能接受這個事實(shí),承認(rèn)自身的局限性,并在這個前提下盡我們的最大努力工作3. 逐步求精 抽象與求精是一對互補(bǔ)的概念n抽象使得設(shè)計(jì)者能夠說明過程和數(shù)據(jù),同時卻忽略低層細(xì)節(jié);可以把抽象看作是一種通過忽略多余的細(xì)節(jié)同時強(qiáng)調(diào)有關(guān)的細(xì)節(jié),而實(shí)現(xiàn)逐步求精的方法n求精則幫助設(shè)計(jì)者在設(shè)計(jì)過程中逐步揭示出低層細(xì)節(jié)n這兩個

9、概念都有助于設(shè)計(jì)者在設(shè)計(jì)演化過程中創(chuàng)造出完整的設(shè)計(jì)模型4. 信息隱蔽和局部化 信息隱蔽原理n應(yīng)該這樣設(shè)計(jì)和確定模塊,使得一個模塊內(nèi)包含的信息(過程或數(shù)據(jù))對于不需要這些信息的模塊來說,是不能訪問的 局部化n是把一些關(guān)系密切的軟件元素物理地放得彼此靠近。顯然, 局部化有助于實(shí)現(xiàn)信息隱藏5. 模塊獨(dú)立性 模塊獨(dú)立性的概念是模塊化、抽象化、信息隱蔽概念的一個直接產(chǎn)物 強(qiáng)調(diào)模塊的獨(dú)立性,有兩個重要原因:n模塊化程度較高的軟件容易編制n獨(dú)立的模塊比較容易維護(hù)和測試 模塊獨(dú)立是好設(shè)計(jì)的關(guān)鍵,而設(shè)計(jì)又是決定軟件質(zhì)量的關(guān)鍵環(huán)節(jié)5. 模塊獨(dú)立性 模塊的獨(dú)立程度可以由兩個定性標(biāo)準(zhǔn)度量,這兩個標(biāo)準(zhǔn)分別稱為內(nèi)聚和耦合

10、 耦合耦合(coupling) & 內(nèi)聚內(nèi)聚(cohesion)5.1 耦合 耦合:是對一個軟件結(jié)構(gòu)內(nèi)不同模塊之間互連程度的度量 耦合強(qiáng)弱取決于模塊間接口復(fù)雜程度,進(jìn)入或訪問一個模塊的點(diǎn),以及通過接口的數(shù)據(jù) 模塊間的耦合程度強(qiáng)烈影響系統(tǒng)的可理解性、可測試性、可靠性和可維護(hù)性great deal of dependenceindependent 高耦合高耦合中等耦合中等耦合無耦合無耦合 耦合表示一個軟件結(jié)構(gòu)內(nèi)各個模塊之間的互連程度,耦合表示一個軟件結(jié)構(gòu)內(nèi)各個模塊之間的互連程度,應(yīng)盡量選用松散耦合的系統(tǒng)應(yīng)盡量選用松散耦合的系統(tǒng)例例1 1:a a訪問訪問c c的內(nèi)部數(shù)據(jù)的內(nèi)部數(shù)據(jù)或不通過正常入口或不

11、通過正常入口而轉(zhuǎn)入而轉(zhuǎn)入c c的內(nèi)部的內(nèi)部abcda:goto c1c:c1: 獨(dú)立性由弱到強(qiáng)(耦合程度由強(qiáng)到弱)排列為:獨(dú)立性由弱到強(qiáng)(耦合程度由強(qiáng)到弱)排列為: 內(nèi)容耦合內(nèi)容耦合: 一個模塊直接影響另一個一個模塊直接影響另一個模塊,調(diào)用或操縱其他模塊的數(shù)據(jù)模塊,調(diào)用或操縱其他模塊的數(shù)據(jù)例例2 2:部分代碼重疊(常:部分代碼重疊(?,F(xiàn)在匯編程序中)現(xiàn)在匯編程序中)b a例例3 3:一個模塊有多個:一個模塊有多個入口(功能)入口(功能)a:entry 1:entry 2: 如果發(fā)生下列情形,模塊間就發(fā)生了(1) 一個模塊直接訪問另一個模塊的內(nèi)部數(shù)據(jù)(2) 一個模塊不通過正常入口轉(zhuǎn)到另一模塊內(nèi)部

12、(3) 兩個模塊有一部分程序代碼重迭(只可能出現(xiàn)在匯編語言中)(4) 一個模塊有多個入口 公共耦合:公共耦合:幾個模塊共享一個數(shù)據(jù)區(qū)域幾個模塊共享一個數(shù)據(jù)區(qū)域global : v1 v2a:a1=v1+v2b:v1=b1global : v1 v2a:v1+b:v2=b1+v1缺陷:缺陷: 公共部分的改動將影響所有調(diào)用它的模塊;公共部分的改動將影響所有調(diào)用它的模塊; 公共部分的數(shù)據(jù)存取無法控制;公共部分的數(shù)據(jù)存取無法控制; 復(fù)雜程度隨耦合模塊的個數(shù)增加而增加。復(fù)雜程度隨耦合模塊的個數(shù)增加而增加。 特征耦合:特征耦合: 控制耦合控制耦合:一個模塊通過傳遞控制信息來控:一個模塊通過傳遞控制信息來控

13、制另一個模塊制另一個模塊abflagf2f1fnflag接口單一,但影響被控模塊的內(nèi)部邏輯 數(shù)據(jù)耦合數(shù)據(jù)耦合: 只有數(shù)據(jù)在模塊之間進(jìn)行交換,只通過參只有數(shù)據(jù)在模塊之間進(jìn)行交換,只通過參數(shù)傳遞數(shù)傳遞基本類型基本類型的數(shù)據(jù)的數(shù)據(jù)標(biāo)記耦合標(biāo)記耦合與與數(shù)據(jù)耦合數(shù)據(jù)耦合形式相同,區(qū)別在于調(diào)用時傳遞形式相同,區(qū)別在于調(diào)用時傳遞的參數(shù)是否為基本數(shù)據(jù)類型的參數(shù)是否為基本數(shù)據(jù)類型 標(biāo)記耦合標(biāo)記耦合: 模塊間通過參數(shù)表傳遞模塊間通過參數(shù)表傳遞記錄信息記錄信息,這個記,這個記錄是某一數(shù)據(jù)結(jié)構(gòu)的子結(jié)構(gòu),而不是簡單變量錄是某一數(shù)據(jù)結(jié)構(gòu)的子結(jié)構(gòu),而不是簡單變量 非直接耦合非直接耦合: 兩個模塊之間沒有直接關(guān)系,它們之兩個

14、模塊之間沒有直接關(guān)系,它們之間的聯(lián)系完全是通過主模塊的控制和調(diào)用來實(shí)現(xiàn)的間的聯(lián)系完全是通過主模塊的控制和調(diào)用來實(shí)現(xiàn)的非直接耦合的模塊獨(dú)立性最強(qiáng)非直接耦合的模塊獨(dú)立性最強(qiáng)n關(guān)于“耦合”的使用原則 盡量使用數(shù)據(jù)耦合 少用控制耦合和特征耦合 限制公共環(huán)境耦合的范圍 完全不用內(nèi)容耦合5.2 內(nèi)聚 內(nèi)聚:標(biāo)志著一個模塊內(nèi)各個元素彼此結(jié)合的緊密程度 內(nèi)聚和耦合都是進(jìn)行模塊化設(shè)計(jì)的有力工具 實(shí)踐表明內(nèi)聚更重要,應(yīng)該把更多注意力集中到提高模塊的內(nèi)聚程度上5.2 內(nèi)聚 內(nèi)聚有七種,由弱到強(qiáng)分別為 偶然內(nèi)聚-邏輯內(nèi)聚-時間內(nèi)聚-過程內(nèi)聚-通信內(nèi)聚-順序內(nèi)聚-功能內(nèi)聚5.2 內(nèi)聚 偶然內(nèi)聚(低內(nèi)聚)n如果一個模塊完

15、成一組任務(wù),這些任務(wù)彼此間即使有關(guān)系,關(guān)系也是很松散的,就叫做偶然內(nèi)聚n有時在寫完一個程序之后,發(fā)現(xiàn)一組語句在兩處或多處出現(xiàn),于是把這些語句作為一個模塊以節(jié)省內(nèi)存,這樣就出現(xiàn)了偶然內(nèi)聚的模塊。 5.2 內(nèi)聚 邏輯內(nèi)聚(低內(nèi)聚)n如果一個模塊完成的任務(wù)在邏輯上屬于相同或相似的一類,由參數(shù)決定模塊執(zhí)行的功能,則稱為邏輯內(nèi)聚例如,一個模塊產(chǎn)生各種類型的全部輸出a:read inputsfrom diskfrom tapefrom 5.2 內(nèi)聚 時間內(nèi)聚 (低內(nèi)聚)n如果一個模塊包含的任務(wù)必須在同一段時間內(nèi)執(zhí)行,就叫時間內(nèi)聚 例如,模塊完成各種初始化工作或當(dāng)一個模塊處理意外故障時,這個模塊必須在中斷處

16、理的同時完成關(guān)閉文件、報警和保留現(xiàn)場等任務(wù),這就構(gòu)成了時間內(nèi)聚。5.2 內(nèi)聚 過程內(nèi)聚 (中內(nèi)聚)n如果一個模塊內(nèi)的處理元素是相關(guān)的而且以特定次序執(zhí)行,則稱為過程內(nèi)聚。 使用程序流程圖作為工具設(shè)計(jì)軟件時,常常通過研究流程圖確定模塊的劃分,這樣得到的往往是過程內(nèi)聚的模塊 enter datacheck datamanipulate data5.2 內(nèi)聚 通信內(nèi)聚 (中內(nèi)聚)n如果模塊中所有元素都使用同一個輸入數(shù)據(jù)和(或)產(chǎn)生同一個輸出數(shù)據(jù),則稱為通信內(nèi)聚。 例如,一個模塊的功能是從輸入的文件中讀出數(shù)據(jù),然后由這些數(shù)據(jù)產(chǎn)生報表,同時也由這些數(shù)據(jù)產(chǎn)生單項(xiàng)報表。 例如:從同一磁帶上讀取不相干的數(shù)據(jù) 可

17、能破壞獨(dú)立性5.2 內(nèi)聚 順序內(nèi)聚 (高內(nèi)聚)n如果一個模塊內(nèi)的處理元素和同一個功能密切相關(guān),而且這些處理必須順序執(zhí)行(通常一個處理元素的輸出數(shù)據(jù)作為下一個處理元素的輸人數(shù)據(jù)),則稱為順序內(nèi)聚。 例如,一個解非線性方程組的模塊,它的功能依次為:輸入常數(shù)項(xiàng)系數(shù),求解,輸出方程組的解。5.2 內(nèi)聚n順序內(nèi)聚 (高內(nèi)聚)5.2 內(nèi)聚 功能內(nèi)聚 (高內(nèi)聚)n如果模塊內(nèi)所有處理元素屬于一個整體,完成一個單一的功能,則稱為功能內(nèi)聚。 例如,一個模塊只完成矩陣加法運(yùn)算或只打印輸出一種特定的表格功能。n七種內(nèi)聚的優(yōu)劣評分,將得到如下結(jié)果: 功能內(nèi)聚 10分 時間內(nèi)聚 3分 順序內(nèi)聚 9分 邏輯內(nèi)聚 1分 通信

18、內(nèi)聚 7分 偶然內(nèi)聚 0分 過程內(nèi)聚 5分 對于一個模塊而言,模塊自身的內(nèi)聚越強(qiáng),模塊間的耦合就越小,模塊所具有的獨(dú)立性就越好。可以說高內(nèi)聚低耦合是我們進(jìn)行軟件設(shè)計(jì)的一貫原則 耦合、內(nèi)聚與模塊獨(dú)立性的關(guān)系:耦合、內(nèi)聚與模塊獨(dú)立性的關(guān)系:n第3章:“總體設(shè)計(jì)” 總體設(shè)計(jì)過程 軟件設(shè)計(jì)原理 軟件設(shè)計(jì)中的啟發(fā)規(guī)則 描繪軟件結(jié)構(gòu)的圖形工具 面向數(shù)據(jù)流的設(shè)計(jì)方法n結(jié)構(gòu)設(shè)計(jì)原則n結(jié)構(gòu)設(shè)計(jì)原則 總結(jié)經(jīng)驗(yàn)“啟發(fā)式規(guī)則” 找到改進(jìn)軟件設(shè)計(jì),提高軟件質(zhì)量的途徑1. 提高模塊獨(dú)立性 爭取低耦合、高內(nèi)聚(增加內(nèi)聚 減少耦合)2. 模塊規(guī)模適中 過大不易理解;太小則接口開銷過大 注意分解后不應(yīng)降低模塊的獨(dú)立性3. 選擇

19、適當(dāng)?shù)纳疃?、寬度、扇出和扇?3. 選擇適當(dāng)?shù)纳疃取挾取⑸瘸龊蜕热?深度 = 分層的層數(shù)n過大表示分工過細(xì) 寬度 = 同一層上模塊數(shù)的最大值n過大表示系統(tǒng)復(fù)雜度大 扇出 = 一個模塊直接調(diào)用控制的模塊數(shù)。 3 fan-out 9aa的扇出的扇出aa的扇入的扇入 扇入 = 直接調(diào)用該模塊的模塊數(shù)在不破壞獨(dú)立性的前提下,fan-in 大的比較好。3. 選擇適當(dāng)?shù)纳疃?、寬度、扇出和扇?深度:表示軟件結(jié)構(gòu)中控制的層數(shù)n深度能粗略地標(biāo)志一個系統(tǒng)的大小和復(fù)雜程度,深度和程序長度之間有粗略的對應(yīng)關(guān)系 寬度:表示軟件結(jié)構(gòu)中控制的總跨度n寬度是同一個層次上的模塊總數(shù)的最大值,寬度越大系統(tǒng)越復(fù)雜;對寬度影響最

20、大的因素是模塊的扇出 扇出:表示一個模塊直接控制(調(diào)用)的模塊數(shù)目n扇出為3-4,上限扇出為5-9 扇入:表示有多少個上級模塊直接調(diào)用該模塊n扇入越大則共享該模塊的上級模塊數(shù)目越多。 軟件結(jié)構(gòu)一般要求頂層扇出比較高,中層扇出較少,底層模塊有高扇入 4. 模塊的作用域應(yīng)在其控制域之內(nèi)n模塊的作用域n受模塊判定條件影響的所有模塊集合n模塊的控制域n模塊本身以及所有直接從屬模塊的集合4. 作用域在控制域內(nèi)作用域在控制域內(nèi) 控制域控制域macbm的控制域?yàn)榈目刂朴驗(yàn)?m,a,b,c 作用域作用域:m中的一個判定所影響的模塊。中的一個判定所影響的模塊。例如:例如:a: if then goto b1 b

21、: b1: 作用域在控制域內(nèi)作用域在控制域內(nèi)a: if then goto m1 m: m1: goto c1 作用域超出了控制域作用域超出了控制域上例(右圖)中a的作用超出了控制域。改進(jìn)方法之一,可以把a(bǔ)中的 if 移到m中;方法之二,可以把c移到a下面。4. 模塊的作用域應(yīng)在其控制域之內(nèi)n上移判斷點(diǎn):使該判斷層次升高以擴(kuò)大它的控制范圍;n下移受判斷影響的模塊:將受判斷影響的模塊下移到判斷所在模塊的控制范圍內(nèi) 5. 降低接口的復(fù)雜程度 接口復(fù)雜可能表明模塊的獨(dú)立性差6. 單出單入,避免內(nèi)容耦合7. 模塊功能可預(yù)測 相同輸入必產(chǎn)生相同輸出 反例:模塊中使用全局變量或靜態(tài)變量,則可能導(dǎo)致不可預(yù)測

22、n模塊功能的完善化 一個完整的模塊應(yīng)當(dāng)有以下幾部分:n 執(zhí)行規(guī)定的功能的部分;n 出錯處理的部分,當(dāng)模塊不能完成規(guī)定的功能時,必須回送出錯標(biāo)志,出現(xiàn)例外情況的原因n 如果需要返回數(shù)據(jù)給它的調(diào)用者,在完成數(shù)據(jù)加工或結(jié)束時, 應(yīng)當(dāng)給它的調(diào)用者返回一個狀態(tài)碼。n消除重復(fù)功能,改善軟件結(jié)構(gòu) 完全相似n在結(jié)構(gòu)上完全相似,可能只在數(shù)據(jù)類型上不一,此時可以采取完全合并的方法 局部相似n找出其相同部分,分離出去,重新定義成一個獨(dú)立的下一層模塊n還可以與它的上級模塊合并n消除重復(fù)功能,改善軟件結(jié)構(gòu)n完全相似n完全合并n局部相似n分離n與上級合并n模塊的作用范圍應(yīng)在控制范圍之內(nèi)n盡可能減少高扇出結(jié)構(gòu),隨深度增大扇

23、入 如果一個模塊的扇出數(shù)過大,就意味著該模塊過分復(fù)雜,需要協(xié)調(diào)和控制過多的下屬模塊 應(yīng)當(dāng)適當(dāng)增加中間層次的控制模塊n避免或減少使用病態(tài)聯(lián)接 應(yīng)限制使用如下三種病態(tài)聯(lián)接n1.直接病態(tài)聯(lián)接 即模塊a直接從模塊b內(nèi)部取出某些數(shù)據(jù),或者把某些數(shù)據(jù)直接送到模塊b內(nèi)部n避免或減少使用病態(tài)聯(lián)接 應(yīng)限制使用如下三種病態(tài)聯(lián)接n2.公共數(shù)據(jù)域病態(tài)聯(lián)接,模塊a和模塊b通過公共數(shù)據(jù)域,直接傳送或接受數(shù)據(jù),而不是通過它們的上級模塊n這種方式將使得模塊間的耦合程度劇增,它不僅影響模塊和模塊,而且影響與公共數(shù)據(jù)域有關(guān)聯(lián)的所有模塊n避免或減少使用病態(tài)聯(lián)接 應(yīng)限制使用如下三種病態(tài)聯(lián)接n3.通信模塊聯(lián)接 即模塊a和模塊b通過通信

24、模塊tableit傳送數(shù)據(jù)。從表面看這不是病態(tài)聯(lián)接,因?yàn)槟K和模塊b都未涉及通信模塊tableit的內(nèi)部。n然而,它們之間的通信(即數(shù)據(jù)傳送)沒有通過它們的上級模塊,從這個意義上講,這種聯(lián)接是病態(tài)的。n模塊的大小要適中 模塊大小,可以用模塊中語句的數(shù)量來衡量 模塊的大小應(yīng)限制在一定的范圍之內(nèi)n一個模塊的語句超過30行以后,可理解性迅速下降n通常規(guī)定其語句行數(shù)在50100左右,保持在一頁紙之內(nèi),最多不超過500行n設(shè)計(jì)功能可預(yù)測的模塊,但要避免過分受限制的模塊 一個功能可預(yù)測的模塊,不論內(nèi)部處理細(xì)節(jié)如何,但對相同的輸入數(shù)據(jù),總能產(chǎn)生同樣的結(jié)果n如果模塊內(nèi)部蘊(yùn)藏有一些特殊的鮮為人知的功能時,這個模

25、塊就可能是不可預(yù)測的n對于這種模塊,如果調(diào)用者不小心使用,其結(jié)果將不可預(yù)測n設(shè)計(jì)功能可預(yù)測的模塊,但要避免過分受限制的模塊 如果一個模塊的局部數(shù)據(jù)結(jié)構(gòu)的大小、控制流的選擇或者與外界(人、硬軟件) 的接口模式被限制死了,則很難適應(yīng)用戶新的要求或環(huán)境的變更 為了能夠適應(yīng)將來的變更,軟件模塊中局部數(shù)據(jù)結(jié)構(gòu)的大小應(yīng)當(dāng)是可控制的,控制流的選擇對于調(diào)用者來說,應(yīng)當(dāng)是可預(yù)測的。而與外界的接口應(yīng)當(dāng)是靈活的。n軟件應(yīng)滿足設(shè)計(jì)約束和可移植性 為了使得軟件可以在某些特定的環(huán)境下能夠安裝和運(yùn)行,對軟件提出了一些設(shè)計(jì)約束和可移植的要求n例如,設(shè)計(jì)約束有時要求一個程序段在存儲器中覆蓋自身。當(dāng)這種情況出現(xiàn)時,設(shè)計(jì)出來的軟件

26、程序結(jié)構(gòu)不得不根據(jù)重復(fù)程度、訪問頻率、調(diào)用間隔等等特性,重新加以組織。 為每一個模塊寫一份處理說明 為每一個模塊提供一份接口說明 確定全局?jǐn)?shù)據(jù)結(jié)構(gòu)和局部數(shù)據(jù)結(jié)構(gòu) 指出所有的設(shè)計(jì)約束和限制 進(jìn)行概要設(shè)計(jì)的評審 進(jìn)行設(shè)計(jì)的優(yōu)化(如果需要和可能的話)n第3章:“總體設(shè)計(jì)” 總體設(shè)計(jì)過程 軟件設(shè)計(jì)原理 軟件設(shè)計(jì)中的啟發(fā)規(guī)則 描繪軟件結(jié)構(gòu)的圖形工具 面向數(shù)據(jù)流的設(shè)計(jì)方法n總體設(shè)計(jì)階段常用的幾種圖形工具 層次圖 hipo圖 結(jié)構(gòu)圖(sc圖)n層次圖和hipo圖 層次圖:每個方框代表一個模塊,方框間的連線表示調(diào)用關(guān)系 例如 正文加工系統(tǒng)正文加工系統(tǒng)正文加工系統(tǒng)輸入輸入輸出輸出編輯編輯加標(biāo)題加標(biāo)題存儲存儲檢索

27、檢索列表列表編目錄編目錄格式化格式化合并合并修改修改添加添加刪除刪除插入插入n層次圖和hipo圖 hipo圖:hipo圖是美國ibm公司發(fā)明的“層次加輸入/處理/輸出”圖的英文縮寫正文加工系統(tǒng)正文加工系統(tǒng)輸入輸入1.0輸出輸出2.0編輯編輯3.0加標(biāo)題加標(biāo)題4.0存儲存儲5.0檢索檢索6.0列表列表3.6編目錄編目錄7.0格式化格式化8.0合并合并3.5修改修改3.4添加添加3.1刪除刪除3.2插入插入3.3 hipo圖n和h圖中每個方框相對應(yīng),應(yīng)該有一張ipo圖描繪這個方框代表的模塊的處理過程系統(tǒng):系統(tǒng):模塊:模塊:編號:編號:作者:作者:日期:日期:ipo圖圖被調(diào)用:被調(diào)用:輸輸 入:入:

28、調(diào)調(diào) 用:用:輸輸 出:出:處處 理:理:局部數(shù)據(jù)元素:局部數(shù)據(jù)元素:注注 釋:釋:n結(jié)構(gòu)圖sc圖 yourdon提出的結(jié)構(gòu)圖是進(jìn)行軟件結(jié)構(gòu)設(shè)計(jì)的一個有力工具 結(jié)構(gòu)圖反映程序中模塊之間的層次調(diào)用關(guān)系和聯(lián)系n它以特定的符號表示模塊、模塊間的調(diào)用關(guān)系和模塊間信息的傳遞n結(jié)構(gòu)圖sc圖 模塊:模塊用矩形框表示,并用模塊的名字標(biāo)記它n結(jié)構(gòu)圖sc圖 模塊的調(diào)用關(guān)系和接口:模塊之間用單向箭頭聯(lián)結(jié),箭頭從調(diào)用模塊指向被調(diào)用模塊n結(jié)構(gòu)圖sc圖 模塊間的信息傳遞n當(dāng)一個模塊調(diào)用另一個模塊時,調(diào)用模塊把數(shù)據(jù)或控制信息傳送給被調(diào)用模塊,以使被調(diào)用模塊能夠運(yùn)行n被調(diào)用模塊在執(zhí)行過程中又把它產(chǎn)生的數(shù)據(jù)或控制信息回送給調(diào)用

29、模塊n結(jié)構(gòu)圖sc圖 在模塊a的箭頭尾部標(biāo)以一個菱形符號,表示模塊a有條件地調(diào)用另一個模塊b。當(dāng)一個在調(diào)用箭頭尾部標(biāo)以一個弧形符號,表示模塊a反復(fù)調(diào)用模塊c和模塊dn結(jié)構(gòu)圖sc圖產(chǎn)生最佳解產(chǎn)生最佳解計(jì)算最佳解計(jì)算最佳解得到好輸入得到好輸入輸出結(jié)果輸出結(jié)果編輯輸入編輯輸入讀輸入讀輸入顯示結(jié)果顯示結(jié)果結(jié)果格式化結(jié)果格式化編輯結(jié)果原始輸入原始輸入好輸入好輸入解解解格式化的解格式化的解n結(jié)構(gòu)圖sc圖 通常用層次圖作為描繪軟件結(jié)構(gòu)的文檔 利用ipo圖或數(shù)據(jù)字典中的信息得到模塊調(diào)用時傳遞的信息 由層次圖導(dǎo)出結(jié)構(gòu)圖的過程 導(dǎo)出結(jié)構(gòu)圖可以作為檢查設(shè)計(jì)正確性和評價模塊獨(dú)立性的好方法n第3章:“總體設(shè)計(jì)” 總體設(shè)計(jì)

30、過程 軟件設(shè)計(jì)原理 軟件設(shè)計(jì)中的啟發(fā)規(guī)則 描繪軟件結(jié)構(gòu)的圖形工具 面向數(shù)據(jù)流的設(shè)計(jì)方法n基本原理 又稱為 sd:structural design 面向數(shù)據(jù)流的設(shè)計(jì)方法把信息流映射成軟件結(jié)構(gòu)。 信息流的類型決定了映射的方法 信息流有下述兩種類型n變化流n事務(wù)流n基本原理 變換流 信息通常以“外部世界”的形式進(jìn)入軟件系統(tǒng),經(jīng)過處理以后再以“外部世界”的形式離開系統(tǒng)信息時間輸入流輸出流變換流信息流信息流n基本原理 事務(wù)流n這種數(shù)據(jù)流是“以事務(wù)為中心的”n數(shù)據(jù)沿輸入通路到達(dá)一個處理t,這個處理根據(jù)輸入數(shù)據(jù)的類型在若干動作序列中選出一個執(zhí)行n基本原理 事務(wù)流 當(dāng)信息流具有明顯的“發(fā)射中心”時,可歸結(jié)為

31、事務(wù)流t事務(wù)事務(wù)中心.活動通路n軟件結(jié)構(gòu)的標(biāo)準(zhǔn)形式 常見的軟件結(jié)構(gòu)標(biāo)準(zhǔn)型有兩種:n變換型n事務(wù)型(1)變換型結(jié)構(gòu) 變換型結(jié)構(gòu)的數(shù)據(jù)流圖基本上呈線性形狀 明顯地分為輸入、變換(加工)、輸出三部分輸入部分輸入部分輸出部分輸出部分變換部分變換部分輸入信息輸入信息正確正確 信息信息結(jié)結(jié) 果果數(shù)據(jù)數(shù)據(jù)正確性正確性檢查檢查處理處理顯示顯示(1)變換型結(jié)構(gòu)n變換流:取得數(shù)據(jù)、變換數(shù)據(jù)、給出數(shù)據(jù)n相應(yīng)于取得數(shù)據(jù)、變換數(shù)據(jù)、給出數(shù)據(jù),變換型系統(tǒng)結(jié)構(gòu)圖由輸入、中心變換和輸出等三部分組成n軟件結(jié)構(gòu)的標(biāo)準(zhǔn)形式 (2)事務(wù)型結(jié)構(gòu)n系統(tǒng)的數(shù)據(jù)流圖常呈輻射狀;n一個加工(事務(wù)中心)將它的輸入分離成若干種發(fā)散的數(shù)據(jù)流,從而形

32、成若干條活動的路徑,然后根據(jù)輸入值選擇其中的一條路徑處理事務(wù)中心事務(wù)中心處理處理處理處理處理處理處理處理分類分類事務(wù)事務(wù)2事務(wù)事務(wù)1事務(wù)事務(wù)n事務(wù)事務(wù)事務(wù)事務(wù)n變換分析 變換分析n是一系列設(shè)計(jì)步驟的總稱n經(jīng)過這些步驟把具有變換流特點(diǎn)的數(shù)據(jù)流圖映射成軟件結(jié)構(gòu) 設(shè)計(jì)步驟n(1) 復(fù)查基本系統(tǒng)模型n(2) 復(fù)查并精化數(shù)據(jù)流圖n(3) 確定數(shù)據(jù)流圖具有變換特性還是事務(wù)特性n(4) 確定輸入流和輸出流的邊界,從而孤立出變換中心n變換分析 變換分析 設(shè)計(jì)步驟n(5) 完成“第一級分解”,把數(shù)據(jù)流圖映射成系統(tǒng)模塊結(jié)構(gòu),即設(shè)計(jì)系統(tǒng)的上層模塊結(jié)構(gòu)n(6) 完成“第二級分解”,基于數(shù)據(jù)流圖逐步分解高層模塊結(jié)構(gòu),設(shè)

33、計(jì)出下層模塊n(7) 使用設(shè)計(jì)度量和啟發(fā)式規(guī)則對第一次分割得到的軟件結(jié)構(gòu)進(jìn)一步精化n變換分析 應(yīng)用案例:開發(fā)一個帶有微處理器的汽車數(shù)字儀表板控制系統(tǒng) 功能描述n1)通過模數(shù)轉(zhuǎn)換實(shí)現(xiàn)傳感器和微處理機(jī)的接口;n2)在發(fā)光二極管在面板上顯示如下數(shù)據(jù):n3)如果汽車的速度超過55英里/小時,則發(fā)出超速警告鈴聲。燃料流燃料流 傳感器信號傳感器信號sps旋轉(zhuǎn)信號旋轉(zhuǎn)信號讀讀旋轉(zhuǎn)旋轉(zhuǎn)信號信號收集收集和求和求平均平均確定確定加加/ /減減速速轉(zhuǎn)換轉(zhuǎn)換成成轉(zhuǎn)轉(zhuǎn)/ /分分計(jì)算計(jì)算里程里程計(jì)算計(jì)算mph,超超速值速值產(chǎn)生產(chǎn)生加加/ /減減速顯示速顯示計(jì)算計(jì)算燃料燃料消耗消耗計(jì)算計(jì)算gph讀和讀和校核校核產(chǎn)生產(chǎn)生mp

34、g顯示顯示產(chǎn)生產(chǎn)生mph顯示顯示發(fā)出發(fā)出鈴聲鈴聲產(chǎn)生產(chǎn)生里程里程顯示顯示sps sps箭頭指示箭頭指示燃燒流燃燒流上箭頭上箭頭水平線水平線下箭頭下箭頭rpmrpmgphmphmpgmph超速值超速值英里英里顯示顯示鈴聲鈴聲mph顯示顯示mpg顯示顯示n設(shè)計(jì)步驟 1)復(fù)查基本系統(tǒng)模型 2)復(fù)查并精化數(shù)據(jù)流燃料流燃料流 傳感器信號傳感器信號sps旋轉(zhuǎn)信號旋轉(zhuǎn)信號讀讀旋轉(zhuǎn)旋轉(zhuǎn)信號信號收集收集和求和求平均平均確定確定加加/ /減減速速轉(zhuǎn)換轉(zhuǎn)換成成轉(zhuǎn)轉(zhuǎn)/ /分分計(jì)算計(jì)算里程里程計(jì)算計(jì)算mph,超超速值速值產(chǎn)生產(chǎn)生加加/ /減減速顯示速顯示計(jì)算計(jì)算燃料燃料消耗消耗計(jì)算計(jì)算gph讀和讀和校核校核產(chǎn)生產(chǎn)生mpg顯示顯示產(chǎn)生產(chǎn)生mph顯示顯示發(fā)出發(fā)出鈴聲鈴聲產(chǎn)生產(chǎn)生里程里程顯示顯示sps sps箭頭指示箭頭指示燃燒流燃燒流上箭頭上箭頭水平線水平線下箭頭下箭頭rpmrpmgphmp

溫馨提示

  • 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

提交評論