軟件工程 第5章總體設(shè)計(jì)

上傳人:努力****83 文檔編號(hào):108988354 上傳時(shí)間:2022-06-16 格式:PPT 頁(yè)數(shù):110 大?。?.72MB
收藏 版權(quán)申訴 舉報(bào) 下載
軟件工程 第5章總體設(shè)計(jì)_第1頁(yè)
第1頁(yè) / 共110頁(yè)
軟件工程 第5章總體設(shè)計(jì)_第2頁(yè)
第2頁(yè) / 共110頁(yè)
軟件工程 第5章總體設(shè)計(jì)_第3頁(yè)
第3頁(yè) / 共110頁(yè)

下載文檔到電腦,查找使用更方便

50 積分

下載資源

還剩頁(yè)未讀,繼續(xù)閱讀

資源描述:

《軟件工程 第5章總體設(shè)計(jì)》由會(huì)員分享,可在線(xiàn)閱讀,更多相關(guān)《軟件工程 第5章總體設(shè)計(jì)(110頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、第第5章章 總體設(shè)計(jì)總體設(shè)計(jì)5.1 設(shè)計(jì)過(guò)程設(shè)計(jì)過(guò)程5.2 設(shè)計(jì)原理設(shè)計(jì)原理5.3 啟發(fā)規(guī)則啟發(fā)規(guī)則5.4 描繪軟件結(jié)構(gòu)的圖形工具描繪軟件結(jié)構(gòu)的圖形工具5.5 面向數(shù)據(jù)流的設(shè)計(jì)方法面向數(shù)據(jù)流的設(shè)計(jì)方法軟件設(shè)計(jì)宣言:軟件設(shè)計(jì)宣言:Mitch Kaporn“什么是設(shè)計(jì)?設(shè)計(jì)是你站在兩個(gè)世界什么是設(shè)計(jì)?設(shè)計(jì)是你站在兩個(gè)世界技技術(shù)世界和人類(lèi)的目標(biāo)世界術(shù)世界和人類(lèi)的目標(biāo)世界而你嘗試將這兩而你嘗試將這兩個(gè)世界結(jié)合在一起個(gè)世界結(jié)合在一起”。羅馬建筑批評(píng)家羅馬建筑批評(píng)家Vitruvius提出的觀念:提出的觀念:n“設(shè)計(jì)良好的建筑應(yīng)該展示出堅(jiān)固、適用和令設(shè)計(jì)良好的建筑應(yīng)該展示出堅(jiān)固、適用和令人賞心悅目人賞心悅目

2、”。設(shè)計(jì)階段:設(shè)計(jì)階段:n從工程管理的角度,可以將軟件設(shè)計(jì)分為概要從工程管理的角度,可以將軟件設(shè)計(jì)分為概要設(shè)計(jì)階段和詳細(xì)設(shè)計(jì)階段。設(shè)計(jì)階段和詳細(xì)設(shè)計(jì)階段。n從技術(shù)的角度,傳統(tǒng)的結(jié)構(gòu)化方法將軟件設(shè)計(jì)從技術(shù)的角度,傳統(tǒng)的結(jié)構(gòu)化方法將軟件設(shè)計(jì)劃分為體系結(jié)構(gòu)設(shè)計(jì)、數(shù)據(jù)設(shè)計(jì)、接口設(shè)計(jì)和劃分為體系結(jié)構(gòu)設(shè)計(jì)、數(shù)據(jù)設(shè)計(jì)、接口設(shè)計(jì)和過(guò)程設(shè)計(jì)過(guò)程設(shè)計(jì)4部分。部分。n面向?qū)ο蠓椒▌t將軟件設(shè)計(jì)劃分為體系結(jié)構(gòu)設(shè)面向?qū)ο蠓椒▌t將軟件設(shè)計(jì)劃分為體系結(jié)構(gòu)設(shè)計(jì)、類(lèi)設(shè)計(jì)計(jì)、類(lèi)設(shè)計(jì)/數(shù)據(jù)設(shè)計(jì)、接口設(shè)計(jì)和構(gòu)件級(jí)設(shè)數(shù)據(jù)設(shè)計(jì)、接口設(shè)計(jì)和構(gòu)件級(jí)設(shè)計(jì)計(jì)4部分。部分。 結(jié)構(gòu)化設(shè)計(jì)和結(jié)構(gòu)化分析的關(guān)系:結(jié)構(gòu)化設(shè)計(jì)和結(jié)構(gòu)化分析的關(guān)系:5.1 設(shè)計(jì)過(guò)

3、程設(shè)計(jì)過(guò)程由兩個(gè)主要階段組成:由兩個(gè)主要階段組成:n系統(tǒng)設(shè)計(jì)階段,確定系統(tǒng)的具體實(shí)現(xiàn)方案系統(tǒng)設(shè)計(jì)階段,確定系統(tǒng)的具體實(shí)現(xiàn)方案q設(shè)想供選擇的方案設(shè)想供選擇的方案q選取合理的方案選取合理的方案q推薦最佳方案推薦最佳方案n結(jié)構(gòu)設(shè)計(jì)階段,確定軟件結(jié)構(gòu)結(jié)構(gòu)設(shè)計(jì)階段,確定軟件結(jié)構(gòu)q功能分解功能分解q設(shè)計(jì)軟件結(jié)構(gòu)設(shè)計(jì)軟件結(jié)構(gòu)q設(shè)計(jì)數(shù)據(jù)庫(kù)設(shè)計(jì)數(shù)據(jù)庫(kù)q制定測(cè)試計(jì)劃制定測(cè)試計(jì)劃q書(shū)寫(xiě)文檔書(shū)寫(xiě)文檔q審查和復(fù)審審查和復(fù)審典型的總體設(shè)計(jì)過(guò)程包括下述典型的總體設(shè)計(jì)過(guò)程包括下述9個(gè)步驟:個(gè)步驟:1. 設(shè)想供選擇的方案設(shè)想供選擇的方案n根據(jù)需求分析階段得出的數(shù)據(jù)流圖考慮各種可根據(jù)需求分析階段得出的數(shù)據(jù)流圖考慮各種可能的實(shí)現(xiàn)方

4、案,力求從中選出最佳方案。能的實(shí)現(xiàn)方案,力求從中選出最佳方案。2. 選取合理的方案選取合理的方案n從前一步得到的一系列供選擇的方案中選取若從前一步得到的一系列供選擇的方案中選取若干個(gè)合理的方案。對(duì)每個(gè)合理的方案分析員都干個(gè)合理的方案。對(duì)每個(gè)合理的方案分析員都應(yīng)該準(zhǔn)備下列應(yīng)該準(zhǔn)備下列4份資料:份資料:q系統(tǒng)流程圖;系統(tǒng)流程圖;q組成系統(tǒng)的物理元素清單;組成系統(tǒng)的物理元素清單;q成本成本/效益分析;效益分析;q實(shí)現(xiàn)這個(gè)系統(tǒng)的進(jìn)度計(jì)劃。實(shí)現(xiàn)這個(gè)系統(tǒng)的進(jìn)度計(jì)劃。3. 推薦最佳方案推薦最佳方案n分析員應(yīng)該綜合分析對(duì)比各種合理方案的利弊,分析員應(yīng)該綜合分析對(duì)比各種合理方案的利弊,推薦一個(gè)最佳的方案,并且為

5、推薦的方案制定推薦一個(gè)最佳的方案,并且為推薦的方案制定詳細(xì)的實(shí)現(xiàn)計(jì)劃。詳細(xì)的實(shí)現(xiàn)計(jì)劃。4. 功能分解功能分解n首先進(jìn)行結(jié)構(gòu)設(shè)計(jì),然后進(jìn)行過(guò)程設(shè)計(jì)。首先進(jìn)行結(jié)構(gòu)設(shè)計(jì),然后進(jìn)行過(guò)程設(shè)計(jì)。n結(jié)構(gòu)設(shè)計(jì)確定程序由哪些模塊組成,以及這些結(jié)構(gòu)設(shè)計(jì)確定程序由哪些模塊組成,以及這些模塊之間的關(guān)系;過(guò)程設(shè)計(jì)確定每個(gè)模塊的處模塊之間的關(guān)系;過(guò)程設(shè)計(jì)確定每個(gè)模塊的處理過(guò)程。理過(guò)程。n結(jié)構(gòu)設(shè)計(jì)是總體設(shè)計(jì)階段的任務(wù),過(guò)程設(shè)計(jì)是結(jié)構(gòu)設(shè)計(jì)是總體設(shè)計(jì)階段的任務(wù),過(guò)程設(shè)計(jì)是詳細(xì)設(shè)計(jì)階段的任務(wù)。詳細(xì)設(shè)計(jì)階段的任務(wù)。5. 設(shè)計(jì)軟件結(jié)構(gòu)設(shè)計(jì)軟件結(jié)構(gòu)n通常程序中的一個(gè)模塊完成一個(gè)適當(dāng)?shù)淖庸δ?。通常程序中的一個(gè)模塊完成一個(gè)適當(dāng)?shù)淖庸δ堋?yīng)

6、該把模塊組織成良好的層次系統(tǒng)。軟件結(jié)構(gòu)應(yīng)該把模塊組織成良好的層次系統(tǒng)。軟件結(jié)構(gòu)可以用層次圖或結(jié)構(gòu)圖來(lái)描繪??梢杂脤哟螆D或結(jié)構(gòu)圖來(lái)描繪。n如果數(shù)據(jù)流圖已經(jīng)細(xì)化到適當(dāng)?shù)膶哟危瑒t可以如果數(shù)據(jù)流圖已經(jīng)細(xì)化到適當(dāng)?shù)膶哟?,則可以直接從數(shù)據(jù)流圖映射出軟件結(jié)構(gòu),這就是面向直接從數(shù)據(jù)流圖映射出軟件結(jié)構(gòu),這就是面向數(shù)據(jù)流的設(shè)計(jì)方法。數(shù)據(jù)流的設(shè)計(jì)方法。6. 設(shè)計(jì)數(shù)據(jù)庫(kù)設(shè)計(jì)數(shù)據(jù)庫(kù)n對(duì)于需要使用數(shù)據(jù)庫(kù)的那些應(yīng)用系統(tǒng),軟件工對(duì)于需要使用數(shù)據(jù)庫(kù)的那些應(yīng)用系統(tǒng),軟件工程師應(yīng)該在需求分析階段所確定的系統(tǒng)數(shù)據(jù)需程師應(yīng)該在需求分析階段所確定的系統(tǒng)數(shù)據(jù)需求的基礎(chǔ)上,進(jìn)一步設(shè)計(jì)數(shù)據(jù)庫(kù)。求的基礎(chǔ)上,進(jìn)一步設(shè)計(jì)數(shù)據(jù)庫(kù)。7. 制定測(cè)試計(jì)劃制

7、定測(cè)試計(jì)劃n在軟件開(kāi)發(fā)的早期階段考慮測(cè)試問(wèn)題,能促使軟件設(shè)在軟件開(kāi)發(fā)的早期階段考慮測(cè)試問(wèn)題,能促使軟件設(shè)計(jì)人員在設(shè)計(jì)時(shí)注意提高軟件的可測(cè)試性。計(jì)人員在設(shè)計(jì)時(shí)注意提高軟件的可測(cè)試性。8. 書(shū)寫(xiě)文檔書(shū)寫(xiě)文檔n應(yīng)該用正式的文檔記錄總體設(shè)計(jì)的結(jié)果,在這個(gè)階段應(yīng)該用正式的文檔記錄總體設(shè)計(jì)的結(jié)果,在這個(gè)階段應(yīng)該完成的文檔通常有下述幾種:應(yīng)該完成的文檔通常有下述幾種: (1) 系統(tǒng)說(shuō)明;系統(tǒng)說(shuō)明; (2) 用戶(hù)手冊(cè);用戶(hù)手冊(cè);(3) 測(cè)試計(jì)劃;測(cè)試計(jì)劃; (4) 詳細(xì)的實(shí)現(xiàn)計(jì)劃;詳細(xì)的實(shí)現(xiàn)計(jì)劃;(5) 數(shù)據(jù)庫(kù)設(shè)計(jì)結(jié)果。數(shù)據(jù)庫(kù)設(shè)計(jì)結(jié)果。9. 審查和復(fù)審審查和復(fù)審n最后應(yīng)該對(duì)總體設(shè)計(jì)的結(jié)果進(jìn)行嚴(yán)格的技術(shù)審查和管

8、最后應(yīng)該對(duì)總體設(shè)計(jì)的結(jié)果進(jìn)行嚴(yán)格的技術(shù)審查和管理復(fù)審。理復(fù)審。 5.2 設(shè)計(jì)原理設(shè)計(jì)原理5.2.1 模塊化模塊化n模塊:模塊:是由邊界元素限定的相鄰程序元素的序是由邊界元素限定的相鄰程序元素的序列,而且有一個(gè)總體標(biāo)識(shí)符代表它。列,而且有一個(gè)總體標(biāo)識(shí)符代表它。n模塊化:模塊化:就是把程序劃分成獨(dú)立命名且可獨(dú)立就是把程序劃分成獨(dú)立命名且可獨(dú)立訪(fǎng)問(wèn)的模塊,每個(gè)模塊完成一個(gè)子功能,把這訪(fǎng)問(wèn)的模塊,每個(gè)模塊完成一個(gè)子功能,把這些模塊集成起來(lái)構(gòu)成一個(gè)整體,可以完成指定些模塊集成起來(lái)構(gòu)成一個(gè)整體,可以完成指定的功能滿(mǎn)足用戶(hù)的需求。的功能滿(mǎn)足用戶(hù)的需求。 為什么要模塊化?為什么要模塊化?n模塊化是為了使一個(gè)復(fù)

9、雜的大型程序能被人的模塊化是為了使一個(gè)復(fù)雜的大型程序能被人的智力所管理,軟件應(yīng)該具備的惟一屬性。智力所管理,軟件應(yīng)該具備的惟一屬性。n如果一個(gè)大型程序僅由一個(gè)模塊組成,它將很如果一個(gè)大型程序僅由一個(gè)模塊組成,它將很難被人所理解。難被人所理解。 模塊化的根據(jù):模塊化的根據(jù): n如果如果C(P1)C(P2),顯然,顯然E(P1)E(P2)n根據(jù)人類(lèi)解決一般問(wèn)題的經(jīng)驗(yàn),根據(jù)人類(lèi)解決一般問(wèn)題的經(jīng)驗(yàn),C(P1+P2)C(P1)+C(P2)n綜上所述,得到下面的不等式綜上所述,得到下面的不等式E(P1+P2)E(P1)+E(P2)n每個(gè)程序都相每個(gè)程序都相應(yīng)地有一個(gè)最應(yīng)地有一個(gè)最適當(dāng)?shù)哪K數(shù)適當(dāng)?shù)哪K數(shù)目

10、目M,使得系,使得系統(tǒng)的開(kāi)發(fā)成本統(tǒng)的開(kāi)發(fā)成本最小。最小。 模塊化和軟件成本模塊化和軟件成本模塊化的作用:模塊化的作用:n采用模塊化原理可以使軟件結(jié)構(gòu)清晰,不僅容采用模塊化原理可以使軟件結(jié)構(gòu)清晰,不僅容易設(shè)計(jì)也容易閱讀和理解。易設(shè)計(jì)也容易閱讀和理解。n模塊化使軟件容易測(cè)試和調(diào)試,因而有助于提模塊化使軟件容易測(cè)試和調(diào)試,因而有助于提高軟件的可靠性。高軟件的可靠性。n模塊化能夠提高軟件的可修改性。模塊化能夠提高軟件的可修改性。n模塊化也有助于軟件開(kāi)發(fā)工程的組織管理。模塊化也有助于軟件開(kāi)發(fā)工程的組織管理。 5.2.2 抽象抽象n抽象:抽象:現(xiàn)實(shí)世界中一定事物、狀態(tài)或過(guò)程之間現(xiàn)實(shí)世界中一定事物、狀態(tài)或過(guò)

11、程之間總存在著某些相似的方面總存在著某些相似的方面(共性共性)。把這些相似。把這些相似的方面集中和概括起來(lái),暫時(shí)忽略它們之間的的方面集中和概括起來(lái),暫時(shí)忽略它們之間的差異,這就是抽象。差異,這就是抽象。n抽象就是抽出事物本質(zhì)特性而暫時(shí)不考慮細(xì)節(jié)。抽象就是抽出事物本質(zhì)特性而暫時(shí)不考慮細(xì)節(jié)。n“抽象是人類(lèi)處理復(fù)雜問(wèn)題的基本方法之抽象是人類(lèi)處理復(fù)雜問(wèn)題的基本方法之一。一?!?Grady Boach一般抽象過(guò)程:一般抽象過(guò)程:n處理復(fù)雜系統(tǒng)的惟一有效的方法是用層次的方處理復(fù)雜系統(tǒng)的惟一有效的方法是用層次的方式構(gòu)造和分析它。式構(gòu)造和分析它。軟件工程抽象過(guò)程:軟件工程抽象過(guò)程:n軟件工程過(guò)程的每一步都是對(duì)

12、軟件解法的抽象軟件工程過(guò)程的每一步都是對(duì)軟件解法的抽象層次的一次精化。層次的一次精化。n在可行性研究階段,軟件作為系統(tǒng)的一個(gè)完整在可行性研究階段,軟件作為系統(tǒng)的一個(gè)完整部件;部件;n在需求分析期間,軟件解法是使用在問(wèn)題環(huán)境在需求分析期間,軟件解法是使用在問(wèn)題環(huán)境內(nèi)熟悉的方式描述的;內(nèi)熟悉的方式描述的;n當(dāng)由總體設(shè)計(jì)向詳細(xì)設(shè)計(jì)過(guò)渡時(shí),抽象的程度當(dāng)由總體設(shè)計(jì)向詳細(xì)設(shè)計(jì)過(guò)渡時(shí),抽象的程度也就隨之減少了;也就隨之減少了;n最后,當(dāng)源程序?qū)懗鰜?lái)以后,也就達(dá)到了抽象最后,當(dāng)源程序?qū)懗鰜?lái)以后,也就達(dá)到了抽象的最低層。的最低層。 5.2.3 逐步求精逐步求精n逐步求精:逐步求精:為了能集中精力解決主要問(wèn)題而盡

13、為了能集中精力解決主要問(wèn)題而盡量推遲對(duì)問(wèn)題細(xì)節(jié)的考慮。逐步求精是人類(lèi)解量推遲對(duì)問(wèn)題細(xì)節(jié)的考慮。逐步求精是人類(lèi)解決復(fù)雜問(wèn)題時(shí)采用的基本方法,也是許多軟件決復(fù)雜問(wèn)題時(shí)采用的基本方法,也是許多軟件工程技術(shù)的基礎(chǔ)。工程技術(shù)的基礎(chǔ)。nMiller法則:一個(gè)人在任何時(shí)候都只能把注意法則:一個(gè)人在任何時(shí)候都只能把注意力集中在(力集中在(72)個(gè)知識(shí)塊上。)個(gè)知識(shí)塊上。 例:例:用篩選法求用篩選法求100以?xún)?nèi)的素?cái)?shù)。所謂的篩選法,就是以?xún)?nèi)的素?cái)?shù)。所謂的篩選法,就是從從2到到100中去掉中去掉2,3,5,7的倍數(shù),剩下的就是的倍數(shù),剩下的就是100以?xún)?nèi)的素?cái)?shù)。以?xún)?nèi)的素?cái)?shù)。n首先按程序功能寫(xiě)出一個(gè)框架首先按程序功

14、能寫(xiě)出一個(gè)框架main() 建立建立2到到100的數(shù)組的數(shù)組A ,其中,其中Aii;.1 建立建立2到到10的素?cái)?shù)表的素?cái)?shù)表B ,存放,存放2到到10以?xún)?nèi)的素?cái)?shù);以?xún)?nèi)的素?cái)?shù);.2 若若Aii是是 B 中任一數(shù)的倍數(shù),則剔除中任一數(shù)的倍數(shù),則剔除Ai;.3 輸出輸出A 中所有沒(méi)有被剔除的數(shù);中所有沒(méi)有被剔除的數(shù);.4 n上述框架中每一個(gè)加工語(yǔ)句都可進(jìn)一步細(xì)化上述框架中每一個(gè)加工語(yǔ)句都可進(jìn)一步細(xì)化nmain() /*建立建立2到到100的數(shù)組的數(shù)組A ,其中,其中Aii*/ .1 for (i = 2;i = 100;i+)Ai = i; /* 建立建立2到到10的素?cái)?shù)表的素?cái)?shù)表B ,存放,存放2

15、到到10以?xún)?nèi)的素?cái)?shù)以?xún)?nèi)的素?cá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 中所有沒(méi)有被剔除的數(shù)中所有沒(méi)有被剔除的數(shù)*/ .4 for (i = 2; i 25) module_3(); else module_4();評(píng)價(jià):評(píng)價(jià):n與結(jié)構(gòu)化編程矛盾,生成的代碼完全不可讀。與結(jié)構(gòu)化編程矛盾,生成的代碼完全不可讀。n如果在一個(gè)模塊中對(duì)一個(gè)全局變

16、量的聲明進(jìn)行修改,如果在一個(gè)模塊中對(duì)一個(gè)全局變量的聲明進(jìn)行修改,必須修改能夠訪(fǎng)問(wèn)該全局變量的每一個(gè)模塊。必須修改能夠訪(fǎng)問(wèn)該全局變量的每一個(gè)模塊。n公共環(huán)境耦合的模塊難于重用,必須提供一個(gè)全局變公共環(huán)境耦合的模塊難于重用,必須提供一個(gè)全局變量的清單。量的清單。n即使模塊本身不改變,它和產(chǎn)品中其他模塊之間公共即使模塊本身不改變,它和產(chǎn)品中其他模塊之間公共環(huán)境耦合的實(shí)例數(shù)也會(huì)變化非常大。環(huán)境耦合的實(shí)例數(shù)也會(huì)變化非常大。n潛在危險(xiǎn)很大。模塊暴露出必需要更多的數(shù)據(jù),難以潛在危險(xiǎn)很大。模塊暴露出必需要更多的數(shù)據(jù),難以控制數(shù)據(jù)存取,而且會(huì)導(dǎo)致計(jì)算機(jī)犯罪。控制數(shù)據(jù)存取,而且會(huì)導(dǎo)致計(jì)算機(jī)犯罪。n有些情況下公共環(huán)

17、境耦合更好。有些情況下公共環(huán)境耦合更好。 (6) 內(nèi)容耦合內(nèi)容耦合(content coupling)n最高程度的耦合是內(nèi)容耦合。如果出現(xiàn)下列最高程度的耦合是內(nèi)容耦合。如果出現(xiàn)下列情況之一,兩個(gè)模塊間就發(fā)生了內(nèi)容耦合:情況之一,兩個(gè)模塊間就發(fā)生了內(nèi)容耦合:q一個(gè)模塊訪(fǎng)問(wèn)另一個(gè)模塊的內(nèi)部數(shù)據(jù);一個(gè)模塊訪(fǎng)問(wèn)另一個(gè)模塊的內(nèi)部數(shù)據(jù);q一個(gè)模塊不通過(guò)正常入口轉(zhuǎn)到另一個(gè)模塊的內(nèi)部;一個(gè)模塊不通過(guò)正常入口轉(zhuǎn)到另一個(gè)模塊的內(nèi)部;q兩個(gè)模塊有一部分程序代碼重疊;兩個(gè)模塊有一部分程序代碼重疊;q一個(gè)模塊有多個(gè)入口。一個(gè)模塊有多個(gè)入口。 n耦合是影響軟件復(fù)雜程度的一個(gè)重要因素。耦合是影響軟件復(fù)雜程度的一個(gè)重要因素。

18、n應(yīng)該采取下述設(shè)計(jì)原則:應(yīng)該采取下述設(shè)計(jì)原則: 盡量使用數(shù)據(jù)耦合,盡量使用數(shù)據(jù)耦合, 少用控制耦合和特征耦合,少用控制耦合和特征耦合, 限制公共環(huán)境耦合的范圍,限制公共環(huán)境耦合的范圍, 完全不用內(nèi)容耦合。完全不用內(nèi)容耦合。 2. 內(nèi)聚內(nèi)聚n內(nèi)聚:內(nèi)聚:標(biāo)志一個(gè)模塊內(nèi)各個(gè)元素彼此結(jié)合的緊標(biāo)志一個(gè)模塊內(nèi)各個(gè)元素彼此結(jié)合的緊密程度,它是信息隱藏和局部化概念的自然擴(kuò)密程度,它是信息隱藏和局部化概念的自然擴(kuò)展。簡(jiǎn)單地說(shuō),理想內(nèi)聚的模塊只做一件事情。展。簡(jiǎn)單地說(shuō),理想內(nèi)聚的模塊只做一件事情。n要求:要求:設(shè)計(jì)時(shí)應(yīng)該力求做到高內(nèi)聚,通常中等設(shè)計(jì)時(shí)應(yīng)該力求做到高內(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)聚往往意味著模塊間的松耦合。實(shí)踐表明內(nèi)聚更重往意味著模塊間的松耦合。實(shí)踐表明內(nèi)聚更重要,應(yīng)該把更多注意力集中到提高模塊的內(nèi)聚要,應(yīng)該把更多注意力集中到提高模塊的內(nèi)聚程度上。程度上。 內(nèi)聚程度的度量:內(nèi)聚程度的度量:(1) 偶然內(nèi)聚偶然內(nèi)聚(coincidental cohesion)n如果一個(gè)模塊完成一組任務(wù),這些任務(wù)彼此間如果一個(gè)模塊完成一組任務(wù),這些任務(wù)彼此間即使有關(guān)系,關(guān)系也是很松散的,就叫做偶然即

20、使有關(guān)系,關(guān)系也是很松散的,就叫做偶然內(nèi)聚。內(nèi)聚。MA=B+CGET CHERIF R=5 THEN S=1評(píng)價(jià):評(píng)價(jià):n模塊內(nèi)各元素之間沒(méi)有實(shí)質(zhì)性聯(lián)系,很可能在模塊內(nèi)各元素之間沒(méi)有實(shí)質(zhì)性聯(lián)系,很可能在一種應(yīng)用場(chǎng)合需要修改這個(gè)模塊,在另一種應(yīng)一種應(yīng)用場(chǎng)合需要修改這個(gè)模塊,在另一種應(yīng)用場(chǎng)合又不允許這種修改,從而陷入困境;用場(chǎng)合又不允許這種修改,從而陷入困境;n可理解性差,可維護(hù)性產(chǎn)生退化;可理解性差,可維護(hù)性產(chǎn)生退化;n模塊是不可重用的。模塊是不可重用的。解決方案:解決方案:n將模塊分成更小的模塊,每個(gè)小模塊執(zhí)行一個(gè)將模塊分成更小的模塊,每個(gè)小模塊執(zhí)行一個(gè)操作。操作。(2) 邏輯內(nèi)聚邏輯內(nèi)聚(l

21、ogical cohesion)n如果一個(gè)模塊完成的任務(wù)在邏輯上屬于相同如果一個(gè)模塊完成的任務(wù)在邏輯上屬于相同或相似的一類(lèi),則稱(chēng)為邏輯內(nèi)聚?;蛳嗨频囊活?lèi),則稱(chēng)為邏輯內(nèi)聚。new_operationfunction_code=7;new_operation(function_code,dummy1,dummy2,dummy3);/dummy1、dummy2和和dummy3是偽變量,是偽變量,/如果如果function_code=7則不使用它們則不使用它們?cè)u(píng)價(jià):評(píng)價(jià):n接口難以理解,造成整體上不易理解;接口難以理解,造成整體上不易理解;n完成多個(gè)操作的代碼互相糾纏在一起,即使局完成多個(gè)操作的代碼互

22、相糾纏在一起,即使局部功能的修改有時(shí)也會(huì)影響全局,導(dǎo)致嚴(yán)重的部功能的修改有時(shí)也會(huì)影響全局,導(dǎo)致嚴(yán)重的維護(hù)問(wèn)題;維護(hù)問(wèn)題;n難以重用。難以重用。解決方案:解決方案:n模塊分解。模塊分解。 (3) 時(shí)間內(nèi)聚時(shí)間內(nèi)聚(temporal cohesion)n如果一個(gè)模塊包含的任務(wù)必須在同一段時(shí)間如果一個(gè)模塊包含的任務(wù)必須在同一段時(shí)間內(nèi)執(zhí)行,就叫時(shí)間內(nèi)聚。內(nèi)執(zhí)行,就叫時(shí)間內(nèi)聚。執(zhí)行初始化執(zhí)行初始化打開(kāi)舊主文件、新主文件、事務(wù)文件和打印文件;打開(kāi)舊主文件、新主文件、事務(wù)文件和打印文件;初始化銷(xiāo)售地區(qū)表;初始化銷(xiāo)售地區(qū)表;讀第一條事務(wù)記錄和第一條舊主文件記錄;讀第一條事務(wù)記錄和第一條舊主文件記錄;評(píng)價(jià):評(píng)價(jià)

23、:n時(shí)間關(guān)系在一定程度上反映了程序某些實(shí)質(zhì),時(shí)間關(guān)系在一定程度上反映了程序某些實(shí)質(zhì),所以時(shí)間內(nèi)聚比邏輯內(nèi)聚好一些。所以時(shí)間內(nèi)聚比邏輯內(nèi)聚好一些。n模塊內(nèi)操作之間的關(guān)系很弱,與其他模塊的操模塊內(nèi)操作之間的關(guān)系很弱,與其他模塊的操作卻有很強(qiáng)的關(guān)聯(lián)。作卻有很強(qiáng)的關(guān)聯(lián)。n時(shí)間內(nèi)聚的模塊不太可能重用。時(shí)間內(nèi)聚的模塊不太可能重用。 (4) 過(guò)程內(nèi)聚過(guò)程內(nèi)聚(procedural cohesion)n如果一個(gè)模塊內(nèi)的處理元素是相關(guān)的,而且必如果一個(gè)模塊內(nèi)的處理元素是相關(guān)的,而且必須以特定次序執(zhí)行,則稱(chēng)為過(guò)程內(nèi)聚。須以特定次序執(zhí)行,則稱(chēng)為過(guò)程內(nèi)聚。n使用程序流程圖作為工具設(shè)計(jì)軟件使用程序流程圖作為工具設(shè)計(jì)軟件

24、時(shí),常常通時(shí),常常通過(guò)研究流程圖確定模塊的劃分,這樣得到的往過(guò)研究流程圖確定模塊的劃分,這樣得到的往往是過(guò)程內(nèi)聚的模塊。往是過(guò)程內(nèi)聚的模塊。 評(píng)價(jià):評(píng)價(jià):n比時(shí)間內(nèi)聚好,至少操作之間是過(guò)程關(guān)聯(lián)的。比時(shí)間內(nèi)聚好,至少操作之間是過(guò)程關(guān)聯(lián)的。n仍是弱連接,不太可能重用模塊。仍是弱連接,不太可能重用模塊。解決方案:解決方案:n分割為單獨(dú)的模塊,每個(gè)模塊執(zhí)行一個(gè)操作。分割為單獨(dú)的模塊,每個(gè)模塊執(zhí)行一個(gè)操作。(5) 通信內(nèi)聚通信內(nèi)聚(communicational cohesion)n如果模塊中所有元素都使用同一個(gè)輸入數(shù)據(jù)如果模塊中所有元素都使用同一個(gè)輸入數(shù)據(jù)和和(或或)產(chǎn)生同一個(gè)輸出數(shù)據(jù),則稱(chēng)為通信內(nèi)產(chǎn)

25、生同一個(gè)輸出數(shù)據(jù),則稱(chēng)為通信內(nèi)聚。即在同一個(gè)數(shù)據(jù)結(jié)構(gòu)上操作。聚。即在同一個(gè)數(shù)據(jù)結(jié)構(gòu)上操作。評(píng)價(jià):評(píng)價(jià):n模塊中各操作緊密相連,比過(guò)程內(nèi)聚更好。模塊中各操作緊密相連,比過(guò)程內(nèi)聚更好。n不能重用。不能重用。解決方案:解決方案:n分成多個(gè)模塊,每個(gè)模塊執(zhí)行一個(gè)操作。分成多個(gè)模塊,每個(gè)模塊執(zhí)行一個(gè)操作。(6) 順序內(nèi)聚順序內(nèi)聚(sequential cohesion)n如果一個(gè)模塊內(nèi)的處理元素和同一個(gè)功能密如果一個(gè)模塊內(nèi)的處理元素和同一個(gè)功能密切相關(guān),而且這些處理必須順序執(zhí)行,則稱(chēng)切相關(guān),而且這些處理必須順序執(zhí)行,則稱(chēng)為順序內(nèi)聚。為順序內(nèi)聚。評(píng)價(jià):評(píng)價(jià):n根據(jù)根據(jù)數(shù)據(jù)流圖劃分模塊時(shí)數(shù)據(jù)流圖劃分模塊時(shí),

26、通常得到順序內(nèi),通常得到順序內(nèi)聚的模塊,這種模塊彼此間的連接往往比較聚的模塊,這種模塊彼此間的連接往往比較簡(jiǎn)單。簡(jiǎn)單。 (7) 功能內(nèi)聚功能內(nèi)聚(functional cohesion)n如果模塊內(nèi)所有處理元素屬于一個(gè)整體,完如果模塊內(nèi)所有處理元素屬于一個(gè)整體,完成一個(gè)單一的功能,則稱(chēng)為功能內(nèi)聚。功能成一個(gè)單一的功能,則稱(chēng)為功能內(nèi)聚。功能內(nèi)聚是最高程度的內(nèi)聚。內(nèi)聚是最高程度的內(nèi)聚。評(píng)價(jià):評(píng)價(jià):n模塊可重用,應(yīng)盡可能重用;模塊可重用,應(yīng)盡可能重用;n可隔離錯(cuò)誤,維護(hù)更容易;可隔離錯(cuò)誤,維護(hù)更容易;n擴(kuò)充產(chǎn)品功能時(shí)更容易。擴(kuò)充產(chǎn)品功能時(shí)更容易。七種內(nèi)聚的優(yōu)劣評(píng)分結(jié)果:七種內(nèi)聚的優(yōu)劣評(píng)分結(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分分 過(guò)程內(nèi)聚過(guò)程內(nèi)聚 5分分n低內(nèi)聚:時(shí)間內(nèi)聚低內(nèi)聚:時(shí)間內(nèi)聚 3分分 邏輯內(nèi)聚邏輯內(nèi)聚 1分分 偶然內(nèi)聚偶然內(nèi)聚 0分分n設(shè)計(jì)時(shí)力爭(zhēng)做到高內(nèi)聚,并且能夠辨認(rèn)出低內(nèi)設(shè)計(jì)時(shí)力爭(zhēng)做到高內(nèi)聚,并且能夠辨認(rèn)出低內(nèi)聚的模塊。聚的模塊。 5.3 啟發(fā)規(guī)則啟發(fā)規(guī)則1. 改進(jìn)軟件結(jié)構(gòu)提高模塊獨(dú)立性改進(jìn)軟件結(jié)構(gòu)提高模塊獨(dú)立性n通過(guò)模塊分解或合并,降低耦合提高內(nèi)聚。通過(guò)模塊分解或合并,降低耦合提高內(nèi)聚。n兩個(gè)方面:兩個(gè)方面: q模塊功能完善化。一個(gè)完整的模塊包含:模塊功能完善化。一個(gè)完整的模塊包含:n執(zhí)行規(guī)定的

28、功能的部分執(zhí)行規(guī)定的功能的部分n出錯(cuò)處理的部分出錯(cuò)處理的部分n返回一個(gè)返回一個(gè)“結(jié)束標(biāo)志結(jié)束標(biāo)志”q消除重復(fù)功能,改善軟件結(jié)構(gòu)。消除重復(fù)功能,改善軟件結(jié)構(gòu)。n完全相似完全相似n局部相似局部相似2. 模塊規(guī)模應(yīng)該適中模塊規(guī)模應(yīng)該適中n經(jīng)驗(yàn)表明,一個(gè)模塊的規(guī)模不應(yīng)過(guò)大,最好能經(jīng)驗(yàn)表明,一個(gè)模塊的規(guī)模不應(yīng)過(guò)大,最好能寫(xiě)在一頁(yè)紙內(nèi)。通常規(guī)定寫(xiě)在一頁(yè)紙內(nèi)。通常規(guī)定50100行語(yǔ)句,最多行語(yǔ)句,最多不超過(guò)不超過(guò)500行。數(shù)字只能作為參考,根本問(wèn)題行。數(shù)字只能作為參考,根本問(wèn)題是要保證模塊的獨(dú)立性。是要保證模塊的獨(dú)立性。n過(guò)大的模塊往往是由于分解不充分,但是進(jìn)一過(guò)大的模塊往往是由于分解不充分,但是進(jìn)一步分解

29、必須符合問(wèn)題結(jié)構(gòu),一般說(shuō)來(lái),分解后步分解必須符合問(wèn)題結(jié)構(gòu),一般說(shuō)來(lái),分解后不應(yīng)該降低模塊獨(dú)立性。不應(yīng)該降低模塊獨(dú)立性。n過(guò)小的模塊開(kāi)銷(xiāo)大于有效操作,而且模塊數(shù)目過(guò)小的模塊開(kāi)銷(xiāo)大于有效操作,而且模塊數(shù)目過(guò)多將使系統(tǒng)接口復(fù)雜。過(guò)多將使系統(tǒng)接口復(fù)雜。3. 深度、寬度、扇出和扇入都應(yīng)適當(dāng)深度、寬度、扇出和扇入都應(yīng)適當(dāng)n深度:深度:軟件結(jié)構(gòu)中控制的層數(shù),它往往能粗略軟件結(jié)構(gòu)中控制的層數(shù),它往往能粗略地標(biāo)志一個(gè)系統(tǒng)的大小和復(fù)雜程度。地標(biāo)志一個(gè)系統(tǒng)的大小和復(fù)雜程度。n寬度:寬度:軟件結(jié)構(gòu)內(nèi)同一個(gè)層次上的模塊總數(shù)的軟件結(jié)構(gòu)內(nèi)同一個(gè)層次上的模塊總數(shù)的最大值。最大值。n扇出:扇出:一個(gè)模塊直接控制一個(gè)模塊直接控制

30、(調(diào)用調(diào)用)的模塊數(shù)目。的模塊數(shù)目。n扇入:扇入:有多少個(gè)上級(jí)模塊直接調(diào)用它。有多少個(gè)上級(jí)模塊直接調(diào)用它。4. 模塊的作用域應(yīng)該在控制域之內(nèi)模塊的作用域應(yīng)該在控制域之內(nèi)n模塊的作用域:模塊的作用域:定義為受該模塊內(nèi)一個(gè)判定影定義為受該模塊內(nèi)一個(gè)判定影響的所有模塊的集合。響的所有模塊的集合。n模塊的控制域:模塊的控制域:是這個(gè)模塊本身以及所有直接是這個(gè)模塊本身以及所有直接或間接從屬于它的模塊的集合?;蜷g接從屬于它的模塊的集合。 n在一個(gè)設(shè)計(jì)得很好的系統(tǒng)中,所有受判定影響在一個(gè)設(shè)計(jì)得很好的系統(tǒng)中,所有受判定影響的模塊應(yīng)該都從屬于做出判定的那個(gè)模塊,最的模塊應(yīng)該都從屬于做出判定的那個(gè)模塊,最好局限于

31、做出判定的那個(gè)模塊本身及它的直屬好局限于做出判定的那個(gè)模塊本身及它的直屬下級(jí)模塊。下級(jí)模塊。解決方案:解決方案:n把模塊把模塊A中的判定移到模塊中的判定移到模塊M中;中;n把模塊把模塊G移到模塊移到模塊A下面,作為他的下級(jí)模塊。下面,作為他的下級(jí)模塊。 5. 力爭(zhēng)降低模塊接口的復(fù)雜程度力爭(zhēng)降低模塊接口的復(fù)雜程度n模塊接口復(fù)雜是軟件發(fā)生錯(cuò)誤的一個(gè)主要原因。模塊接口復(fù)雜是軟件發(fā)生錯(cuò)誤的一個(gè)主要原因。應(yīng)該仔細(xì)設(shè)計(jì)模塊接口,使得信息傳遞簡(jiǎn)單并應(yīng)該仔細(xì)設(shè)計(jì)模塊接口,使得信息傳遞簡(jiǎn)單并且和模塊的功能一致。且和模塊的功能一致。例:解一元二次方程的函數(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. 設(shè)計(jì)單入口單出口的模塊設(shè)計(jì)單入口單出口的模塊n警告軟件工程師不要使模塊間出現(xiàn)內(nèi)容耦合。警告軟件工程師不要使模塊間出現(xiàn)內(nèi)容耦合。當(dāng)從頂部進(jìn)入模塊并且從底部退出來(lái)時(shí),軟件當(dāng)從頂部進(jìn)入模塊并且從底部退出來(lái)時(shí),軟件是比較容易理解的,因此也是比較容易維護(hù)的。是比較容易理解的,因此也是比較容易維護(hù)的。7. 模塊功能應(yīng)該可以預(yù)測(cè)模塊功能應(yīng)該可以預(yù)測(cè)n模塊的功能應(yīng)該能夠預(yù)測(cè),但也要防止模塊功模塊的功能應(yīng)該能夠預(yù)測(cè),但也要防止模塊功能過(guò)分局限。能過(guò)分局限。n功能

33、可預(yù)測(cè):功能可預(yù)測(cè):如果一個(gè)模塊可以當(dāng)做一個(gè)黑盒如果一個(gè)模塊可以當(dāng)做一個(gè)黑盒子,只要輸入的數(shù)據(jù)相同就產(chǎn)生同樣的輸出,子,只要輸入的數(shù)據(jù)相同就產(chǎn)生同樣的輸出,這個(gè)模塊的功能就是可以預(yù)測(cè)的。這個(gè)模塊的功能就是可以預(yù)測(cè)的。5.4 描繪軟件結(jié)構(gòu)的圖形工具描繪軟件結(jié)構(gòu)的圖形工具5.4.1 層次圖和層次圖和HIPO圖圖1. 層次圖層次圖(H圖圖)n層次圖用來(lái)描繪軟件的層次結(jié)構(gòu)。很適于在自頂向?qū)哟螆D用來(lái)描繪軟件的層次結(jié)構(gòu)。很適于在自頂向下設(shè)計(jì)軟件的過(guò)程中使用。下設(shè)計(jì)軟件的過(guò)程中使用。層次圖和層次方框圖的區(qū)別:層次圖和層次方框圖的區(qū)別:層次圖層次圖層次方框圖層次方框圖作用作用描繪軟件結(jié)構(gòu)描繪軟件結(jié)構(gòu)描繪數(shù)據(jù)結(jié)

34、構(gòu)描繪數(shù)據(jù)結(jié)構(gòu)矩形框矩形框模塊模塊數(shù)據(jù)元素?cái)?shù)據(jù)元素連線(xiàn)連線(xiàn)調(diào)用關(guān)系調(diào)用關(guān)系組成關(guān)系組成關(guān)系正文加工系統(tǒng)的層次圖正文加工系統(tǒng)的層次圖 2. HIPO圖圖nHIPO圖是美國(guó)圖是美國(guó)IBM公司發(fā)明的公司發(fā)明的“層次圖層次圖+輸入輸入/處理處理/輸出圖輸出圖”的英文縮寫(xiě)。的英文縮寫(xiě)。n為了能使為了能使HIPO圖具有可追蹤性,在圖具有可追蹤性,在H圖圖(層次層次圖圖)里除了最頂層的方框之外,每個(gè)方框都加里除了最頂層的方框之外,每個(gè)方框都加了編號(hào)。了編號(hào)。n和和H圖中每個(gè)方框相對(duì)應(yīng),應(yīng)該有一張圖中每個(gè)方框相對(duì)應(yīng),應(yīng)該有一張IPO圖圖描繪這個(gè)方框代表的模塊的處理過(guò)程。模塊在描繪這個(gè)方框代表的模塊的處理過(guò)程。

35、模塊在H圖中的編號(hào)便于追蹤了解這個(gè)模塊在軟件結(jié)圖中的編號(hào)便于追蹤了解這個(gè)模塊在軟件結(jié)構(gòu)中的位置。構(gòu)中的位置。5.4.2 結(jié)構(gòu)圖結(jié)構(gòu)圖nYourdon提出的結(jié)構(gòu)圖是進(jìn)行軟件結(jié)構(gòu)設(shè)計(jì)的提出的結(jié)構(gòu)圖是進(jìn)行軟件結(jié)構(gòu)設(shè)計(jì)的另一個(gè)有力工具。結(jié)構(gòu)圖和層次圖類(lèi)似,也是另一個(gè)有力工具。結(jié)構(gòu)圖和層次圖類(lèi)似,也是描繪軟件結(jié)構(gòu)的圖形工具。描繪軟件結(jié)構(gòu)的圖形工具?;痉?hào):基本符號(hào):n方框代表一個(gè)模塊;方框代表一個(gè)模塊;n方框之間的直線(xiàn)表示模塊的調(diào)用關(guān)系;方框之間的直線(xiàn)表示模塊的調(diào)用關(guān)系;n尾部是空心圓箭頭表示傳遞的是數(shù)據(jù);尾部是空心圓箭頭表示傳遞的是數(shù)據(jù);n尾部實(shí)心圓箭頭表示傳遞的是控制信息。尾部實(shí)心圓箭頭表示傳遞的

36、是控制信息。 附加符號(hào):附加符號(hào):n選擇調(diào)用:判定為選擇調(diào)用:判定為真時(shí)調(diào)用真時(shí)調(diào)用A,為假,為假時(shí)調(diào)用時(shí)調(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)圖并不嚴(yán)格表示模塊的調(diào)用次序,層次圖和結(jié)構(gòu)圖并不嚴(yán)格表示模塊的調(diào)用次序,多數(shù)人習(xí)慣按調(diào)用次序從左到右畫(huà)模塊;多數(shù)人習(xí)慣按調(diào)用次序從左到右畫(huà)模塊;n層次圖和結(jié)構(gòu)圖并不指明何時(shí)調(diào)用下層模塊;層次圖和結(jié)構(gòu)圖并不指明何時(shí)調(diào)用下層模塊;n層次圖和結(jié)構(gòu)圖只表明一個(gè)模塊調(diào)用那些模塊,層次圖和結(jié)構(gòu)圖只表明一個(gè)模塊調(diào)用那些模塊,沒(méi)有表示模塊內(nèi)還有沒(méi)有其他成分;沒(méi)有表示模塊內(nèi)還有沒(méi)有其他成分;n通常用層次圖作

37、為描繪軟件結(jié)構(gòu)的文檔;通常用層次圖作為描繪軟件結(jié)構(gòu)的文檔;n由層次圖導(dǎo)出結(jié)構(gòu)圖的過(guò)程,可以作為檢查設(shè)由層次圖導(dǎo)出結(jié)構(gòu)圖的過(guò)程,可以作為檢查設(shè)計(jì)正確性和評(píng)價(jià)模塊獨(dú)立性的好方法。計(jì)正確性和評(píng)價(jià)模塊獨(dú)立性的好方法。5.5 面向數(shù)據(jù)流的設(shè)計(jì)方法面向數(shù)據(jù)流的設(shè)計(jì)方法n面向數(shù)據(jù)流的設(shè)計(jì)方法定義了一些不同的面向數(shù)據(jù)流的設(shè)計(jì)方法定義了一些不同的“映映射射”,利用這些映射可以把數(shù)據(jù)流圖變換成軟,利用這些映射可以把數(shù)據(jù)流圖變換成軟件結(jié)構(gòu)。件結(jié)構(gòu)。n因?yàn)槿魏诬浖到y(tǒng)都可以用數(shù)據(jù)流圖表示,所因?yàn)槿魏诬浖到y(tǒng)都可以用數(shù)據(jù)流圖表示,所以面向數(shù)據(jù)流的設(shè)計(jì)方法理論上可以設(shè)計(jì)任何以面向數(shù)據(jù)流的設(shè)計(jì)方法理論上可以設(shè)計(jì)任何軟件的結(jié)

38、構(gòu)。通常所說(shuō)的結(jié)構(gòu)化設(shè)計(jì)方法軟件的結(jié)構(gòu)。通常所說(shuō)的結(jié)構(gòu)化設(shè)計(jì)方法(簡(jiǎn)簡(jiǎn)稱(chēng)稱(chēng)SD方法方法),也就是基于數(shù)據(jù)流的設(shè)計(jì)方法。,也就是基于數(shù)據(jù)流的設(shè)計(jì)方法。 5.5.1 概念概念n面向數(shù)據(jù)流的設(shè)計(jì)方法把信息流映射成軟件結(jié)面向數(shù)據(jù)流的設(shè)計(jì)方法把信息流映射成軟件結(jié)構(gòu),信息流的類(lèi)型決定了映射的方法。構(gòu),信息流的類(lèi)型決定了映射的方法。n信息流有兩種類(lèi)型:信息流有兩種類(lèi)型:q變換流變換流q事務(wù)流事務(wù)流1. 變換流變換流n信息沿輸入通路進(jìn)入系統(tǒng),同時(shí)由外部形式變信息沿輸入通路進(jìn)入系統(tǒng),同時(shí)由外部形式變換成內(nèi)部形式,進(jìn)入系統(tǒng)的信息通過(guò)變換中心,換成內(nèi)部形式,進(jìn)入系統(tǒng)的信息通過(guò)變換中心,經(jīng)加工處理以后再沿輸出通路變換

39、成外部形式經(jīng)加工處理以后再沿輸出通路變換成外部形式離開(kāi)軟件系統(tǒng)。離開(kāi)軟件系統(tǒng)。2. 事務(wù)流事務(wù)流n數(shù)據(jù)沿輸入通路到達(dá)一個(gè)處理數(shù)據(jù)沿輸入通路到達(dá)一個(gè)處理T,T根據(jù)輸入根據(jù)輸入數(shù)據(jù)的類(lèi)型在若干個(gè)動(dòng)作序列中選出一個(gè)來(lái)執(zhí)數(shù)據(jù)的類(lèi)型在若干個(gè)動(dòng)作序列中選出一個(gè)來(lái)執(zhí)行。處理行。處理T稱(chēng)為事務(wù)中心,它完成下述任務(wù):稱(chēng)為事務(wù)中心,它完成下述任務(wù):q接收輸入數(shù)據(jù);接收輸入數(shù)據(jù);q分析每個(gè)事務(wù)以分析每個(gè)事務(wù)以 確定它的類(lèi)型;確定它的類(lèi)型;q根據(jù)事務(wù)類(lèi)型根據(jù)事務(wù)類(lèi)型 選取一條活動(dòng)通路。選取一條活動(dòng)通路。 3. 設(shè)計(jì)過(guò)程設(shè)計(jì)過(guò)程 5.5.2 變換分析變換分析n變換分析是一系列設(shè)計(jì)步驟的總稱(chēng),經(jīng)過(guò)這些變換分析是一系列設(shè)計(jì)

40、步驟的總稱(chēng),經(jīng)過(guò)這些步驟把具有變換流特點(diǎn)的數(shù)據(jù)流圖按預(yù)先確定步驟把具有變換流特點(diǎn)的數(shù)據(jù)流圖按預(yù)先確定的模式映射成軟件結(jié)構(gòu)。的模式映射成軟件結(jié)構(gòu)。設(shè)計(jì)步驟:設(shè)計(jì)步驟:(1) 復(fù)查基本系統(tǒng)模型復(fù)查基本系統(tǒng)模型n確保系統(tǒng)的輸入數(shù)據(jù)和輸出數(shù)據(jù)符合實(shí)際。確保系統(tǒng)的輸入數(shù)據(jù)和輸出數(shù)據(jù)符合實(shí)際。(2) 復(fù)查并精化數(shù)據(jù)流圖復(fù)查并精化數(shù)據(jù)流圖n對(duì)需求分析階段得出的數(shù)據(jù)流圖認(rèn)真復(fù)查,并對(duì)需求分析階段得出的數(shù)據(jù)流圖認(rèn)真復(fù)查,并且在必要時(shí)進(jìn)行精化。且在必要時(shí)進(jìn)行精化。n不僅要確保數(shù)據(jù)流圖給出了目標(biāo)系統(tǒng)的正確的不僅要確保數(shù)據(jù)流圖給出了目標(biāo)系統(tǒng)的正確的邏輯模型,而且應(yīng)該使數(shù)據(jù)流圖中每個(gè)處理都邏輯模型,而且應(yīng)該使數(shù)據(jù)流圖中

41、每個(gè)處理都代表一個(gè)規(guī)模適中相對(duì)獨(dú)立的子功能。代表一個(gè)規(guī)模適中相對(duì)獨(dú)立的子功能。 (3) 確定數(shù)據(jù)流圖具有變換特性還是事務(wù)特性確定數(shù)據(jù)流圖具有變換特性還是事務(wù)特性n一個(gè)系統(tǒng)中的所有信息流都可以認(rèn)為是變換一個(gè)系統(tǒng)中的所有信息流都可以認(rèn)為是變換流,但是,當(dāng)遇到有明顯事務(wù)特性的信息流流,但是,當(dāng)遇到有明顯事務(wù)特性的信息流時(shí),建議采用事務(wù)分析方法進(jìn)行設(shè)計(jì)。確定時(shí),建議采用事務(wù)分析方法進(jìn)行設(shè)計(jì)。確定數(shù)據(jù)流的全局特性和局部特性。數(shù)據(jù)流的全局特性和局部特性。(4) 確定輸入流和輸出流的邊界,從而孤立出變確定輸入流和輸出流的邊界,從而孤立出變換中心換中心n輸入流和輸出流的邊界和對(duì)它們的解釋有關(guān),輸入流和輸出流的

42、邊界和對(duì)它們的解釋有關(guān),不同設(shè)計(jì)人員可能會(huì)在流內(nèi)選取稍微不同的不同設(shè)計(jì)人員可能會(huì)在流內(nèi)選取稍微不同的點(diǎn)作為邊界的位置。點(diǎn)作為邊界的位置。(5) 完成完成“第一級(jí)分解第一級(jí)分解”。n位于軟件結(jié)構(gòu)最頂層的控制模塊位于軟件結(jié)構(gòu)最頂層的控制模塊Cm協(xié)調(diào)下協(xié)調(diào)下述從屬的控制功能:述從屬的控制功能:q輸入信息處理控制模塊輸入信息處理控制模塊Ca,協(xié)調(diào)對(duì)所有輸入數(shù)據(jù)的協(xié)調(diào)對(duì)所有輸入數(shù)據(jù)的接收;接收;q變換中心控制模塊變換中心控制模塊Ct,管理對(duì)內(nèi)部形式的數(shù)據(jù)的所管理對(duì)內(nèi)部形式的數(shù)據(jù)的所有操作;有操作;q輸出信息處理控制模塊輸出信息處理控制模塊Ce,協(xié)調(diào)輸出信息的產(chǎn)生,協(xié)調(diào)輸出信息的產(chǎn)生過(guò)程。過(guò)程。 第一級(jí)分

43、解方法第一級(jí)分解方法(6) 完成完成“第二級(jí)分解第二級(jí)分解”n處理映射成軟件結(jié)構(gòu)中一個(gè)適當(dāng)?shù)哪K。完處理映射成軟件結(jié)構(gòu)中一個(gè)適當(dāng)?shù)哪K。完成第二級(jí)分解的方法是:成第二級(jí)分解的方法是:q從變換中心的邊界開(kāi)始沿著輸入通路向外移動(dòng),從變換中心的邊界開(kāi)始沿著輸入通路向外移動(dòng),把輸入通路中每個(gè)處理映射成軟件結(jié)構(gòu)中把輸入通路中每個(gè)處理映射成軟件結(jié)構(gòu)中Ca控制控制下的一個(gè)低層模塊;下的一個(gè)低層模塊;q然后沿輸出通路向外移動(dòng),把輸出通路中每個(gè)處然后沿輸出通路向外移動(dòng),把輸出通路中每個(gè)處理映射成直接或間接受模塊理映射成直接或間接受模塊Ce控制的一個(gè)低層??刂频囊粋€(gè)低層模塊;塊;q最后把變換中心內(nèi)的每個(gè)處理映射成

44、受最后把變換中心內(nèi)的每個(gè)處理映射成受Ct控制的控制的一個(gè)模塊。一個(gè)模塊。第二級(jí)分解方法第二級(jí)分解方法(7) 使用設(shè)計(jì)度量和啟發(fā)式規(guī)則對(duì)第一次分割得使用設(shè)計(jì)度量和啟發(fā)式規(guī)則對(duì)第一次分割得到的軟件結(jié)構(gòu)進(jìn)一步精化到的軟件結(jié)構(gòu)進(jìn)一步精化n為了產(chǎn)生合理的分解,得到盡可能高的內(nèi)聚、為了產(chǎn)生合理的分解,得到盡可能高的內(nèi)聚、盡可能松散的耦合,為了得到一個(gè)易于實(shí)現(xiàn)、盡可能松散的耦合,為了得到一個(gè)易于實(shí)現(xiàn)、易于測(cè)試和易于維護(hù)的軟件結(jié)構(gòu),應(yīng)該對(duì)初易于測(cè)試和易于維護(hù)的軟件結(jié)構(gòu),應(yīng)該對(duì)初步分割得到的模塊進(jìn)行再分解或合并。步分割得到的模塊進(jìn)行再分解或合并。5.5.3 事務(wù)分析事務(wù)分析n雖然在任何情況下都可以使用變換分析方

45、法設(shè)雖然在任何情況下都可以使用變換分析方法設(shè)計(jì)軟件結(jié)構(gòu),但是在數(shù)據(jù)流具有明顯的事務(wù)特計(jì)軟件結(jié)構(gòu),但是在數(shù)據(jù)流具有明顯的事務(wù)特點(diǎn)時(shí),也就是有一個(gè)明顯的點(diǎn)時(shí),也就是有一個(gè)明顯的“發(fā)射中心發(fā)射中心”(事事務(wù)中心務(wù)中心)時(shí),還是以采用事務(wù)分析方法為宜。時(shí),還是以采用事務(wù)分析方法為宜。 n事務(wù)分析的設(shè)計(jì)步驟和變換分析的設(shè)計(jì)步驟大事務(wù)分析的設(shè)計(jì)步驟和變換分析的設(shè)計(jì)步驟大部分相同或類(lèi)似,主要差別僅在于由數(shù)據(jù)流圖部分相同或類(lèi)似,主要差別僅在于由數(shù)據(jù)流圖到軟件結(jié)構(gòu)的映射方法不同:到軟件結(jié)構(gòu)的映射方法不同:q由事務(wù)流映射成的軟件結(jié)構(gòu)包括一個(gè)接收分支和由事務(wù)流映射成的軟件結(jié)構(gòu)包括一個(gè)接收分支和一個(gè)發(fā)送分支;一個(gè)發(fā)送

46、分支;q映射出接收分支結(jié)構(gòu)的方法和變換分析映射出輸映射出接收分支結(jié)構(gòu)的方法和變換分析映射出輸入結(jié)構(gòu)的方法很相像,即從事務(wù)中心的邊界開(kāi)始,入結(jié)構(gòu)的方法很相像,即從事務(wù)中心的邊界開(kāi)始,把沿著接收流通路的處理映射成模塊;把沿著接收流通路的處理映射成模塊;q發(fā)送分支的結(jié)構(gòu)包含一個(gè)調(diào)度模塊,它控制下層發(fā)送分支的結(jié)構(gòu)包含一個(gè)調(diào)度模塊,它控制下層的所有活動(dòng)模塊;然后把數(shù)據(jù)流圖中的每個(gè)活動(dòng)的所有活動(dòng)模塊;然后把數(shù)據(jù)流圖中的每個(gè)活動(dòng)流通路映射成與它的流特征相對(duì)應(yīng)的結(jié)構(gòu)。流通路映射成與它的流特征相對(duì)應(yīng)的結(jié)構(gòu)。 例例1:n設(shè)計(jì)一個(gè)產(chǎn)品,它將一個(gè)文件名作為輸入,并設(shè)計(jì)一個(gè)產(chǎn)品,它將一個(gè)文件名作為輸入,并返回文件中的字

47、數(shù)。返回文件中的字?jǐn)?shù)。第一級(jí)分解第一級(jí)分解第二級(jí)分解第二級(jí)分解精化精化例例2:汽車(chē)數(shù)字儀表板汽車(chē)數(shù)字儀表板n通過(guò)模數(shù)轉(zhuǎn)換實(shí)現(xiàn)傳感器和微處理機(jī)接口;通過(guò)模數(shù)轉(zhuǎn)換實(shí)現(xiàn)傳感器和微處理機(jī)接口;n在發(fā)光二極管面板上顯示數(shù)據(jù);在發(fā)光二極管面板上顯示數(shù)據(jù);n指示每小時(shí)英里數(shù)指示每小時(shí)英里數(shù)(mph),行駛的里程,每加,行駛的里程,每加侖油行駛的英里數(shù)侖油行駛的英里數(shù)(mpg)等等;等等;n指示加速或減速;指示加速或減速;n超速警告:如果車(chē)速超過(guò)超速警告:如果車(chē)速超過(guò)55英里英里/小時(shí),則發(fā)小時(shí),則發(fā)出超速警告鈴聲。出超速警告鈴聲。第一級(jí)分解第一級(jí)分解第二級(jí)分解第二級(jí)分解精化精化例例3:自動(dòng)柜員機(jī)自動(dòng)柜員機(jī)n

48、顧客插入磁卡,輸入密碼,然后執(zhí)行動(dòng)作,包顧客插入磁卡,輸入密碼,然后執(zhí)行動(dòng)作,包括向支票、存折或信用卡賬戶(hù)存款,提款或查括向支票、存折或信用卡賬戶(hù)存款,提款或查詢(xún)余額等。詢(xún)余額等。n設(shè)計(jì)上分成兩部分:分析器和調(diào)度器。分析器設(shè)計(jì)上分成兩部分:分析器和調(diào)度器。分析器確定事務(wù)類(lèi)型并將信息送到分配器,由調(diào)度器確定事務(wù)類(lèi)型并將信息送到分配器,由調(diào)度器進(jìn)行事務(wù)處理。進(jìn)行事務(wù)處理。例例4:一個(gè)公司的銷(xiāo)售管理系統(tǒng)一個(gè)公司的銷(xiāo)售管理系統(tǒng)總結(jié):總結(jié):n一般說(shuō)來(lái),如果數(shù)據(jù)流不具有顯著的事務(wù)特點(diǎn),一般說(shuō)來(lái),如果數(shù)據(jù)流不具有顯著的事務(wù)特點(diǎn),最好使用變換分析;反之,如果具有明顯的事最好使用變換分析;反之,如果具有明顯的事

49、務(wù)中心,則應(yīng)該采用事務(wù)分析技術(shù)。務(wù)中心,則應(yīng)該采用事務(wù)分析技術(shù)。n機(jī)械地遵循變換分析或事務(wù)分析的映射規(guī)則,機(jī)械地遵循變換分析或事務(wù)分析的映射規(guī)則,可能會(huì)得到一些不必要的控制模塊,如果它們可能會(huì)得到一些不必要的控制模塊,如果它們確實(shí)用處不大,那么可以而且應(yīng)該把它們合并。確實(shí)用處不大,那么可以而且應(yīng)該把它們合并。n如果一個(gè)控制模塊功能過(guò)分復(fù)雜,則應(yīng)該分解如果一個(gè)控制模塊功能過(guò)分復(fù)雜,則應(yīng)該分解為兩個(gè)或多個(gè)控制模塊,或者增加中間層次的為兩個(gè)或多個(gè)控制模塊,或者增加中間層次的控制模塊。控制模塊。 5.5.4 設(shè)計(jì)優(yōu)化設(shè)計(jì)優(yōu)化n設(shè)計(jì)優(yōu)化應(yīng)該力求做到在有效的模塊化的前提設(shè)計(jì)優(yōu)化應(yīng)該力求做到在有效的模塊化的

50、前提下使用最少量的模塊,以及在能夠滿(mǎn)足信息要下使用最少量的模塊,以及在能夠滿(mǎn)足信息要求的前提下使用最簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu)。求的前提下使用最簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu)。n對(duì)于時(shí)間是決定性因素的應(yīng)用場(chǎng)合,可能有必對(duì)于時(shí)間是決定性因素的應(yīng)用場(chǎng)合,可能有必要在詳細(xì)設(shè)計(jì)階段,也可能在編寫(xiě)程序的過(guò)程要在詳細(xì)設(shè)計(jì)階段,也可能在編寫(xiě)程序的過(guò)程中進(jìn)行優(yōu)化。中進(jìn)行優(yōu)化。n軟件開(kāi)發(fā)人員應(yīng)該認(rèn)識(shí)到,程序中相對(duì)說(shuō)比較軟件開(kāi)發(fā)人員應(yīng)該認(rèn)識(shí)到,程序中相對(duì)說(shuō)比較小的部分小的部分(典型地,典型地,10%20%),通常占用全,通常占用全部處理時(shí)間的大部分部處理時(shí)間的大部分(50%80%)。對(duì)時(shí)間起決定性作用的軟件進(jìn)行優(yōu)化:對(duì)時(shí)間起決定性作用的軟件進(jìn)行優(yōu)化:n在不考慮時(shí)間因素的前提下開(kāi)發(fā)并精化軟件結(jié)在不考慮時(shí)間因素的前提下開(kāi)發(fā)并精化軟件結(jié)構(gòu);構(gòu);n在詳細(xì)設(shè)計(jì)階段選出最耗費(fèi)時(shí)間的那些模塊,在詳細(xì)設(shè)計(jì)階段選出最耗費(fèi)時(shí)間的那些模塊,仔細(xì)地設(shè)計(jì)它們的處理過(guò)程,以求提高效率;仔細(xì)地設(shè)計(jì)它們的處理過(guò)程,以求提高效率;n使用高級(jí)程序設(shè)計(jì)語(yǔ)言編寫(xiě)程序;使用高級(jí)程序設(shè)計(jì)語(yǔ)言編寫(xiě)程序;n在軟件中孤立出那些大量占用處理機(jī)資源的模在軟件中孤立出那些大量占用處理機(jī)資源的模塊;塊;n必要時(shí)重新設(shè)計(jì)或用依賴(lài)于機(jī)器的語(yǔ)言重寫(xiě)上必要時(shí)重新設(shè)計(jì)或用依賴(lài)于機(jī)器的語(yǔ)言重寫(xiě)上述大量占用資源的模塊的代碼,以求提高效率。述大量占用資源的模塊的代碼,以求提高效率。

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

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話(huà):18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶(hù)上傳的文檔直接被用戶(hù)下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!