軟件工程第五章_第1頁
軟件工程第五章_第2頁
軟件工程第五章_第3頁
軟件工程第五章_第4頁
軟件工程第五章_第5頁
已閱讀5頁,還剩102頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、125.15.1 設計過程設計過程5.2 5.2 設計原理設計原理5.3 5.3 啟發(fā)規(guī)則啟發(fā)規(guī)則5.4 5.4 描繪軟件結(jié)構的圖形工具描繪軟件結(jié)構的圖形工具5.5 5.5 面向數(shù)據(jù)流的設計方法面向數(shù)據(jù)流的設計方法5.6 5.6 小結(jié)小結(jié)3總體設計總體設計又稱為概要設計、初步設計又稱為概要設計、初步設計基本目的:基本目的:系統(tǒng)應該如何實現(xiàn)系統(tǒng)應該如何實現(xiàn)劃分出組成系統(tǒng)的物理元素劃分出組成系統(tǒng)的物理元素程序、文件、數(shù)程序、文件、數(shù)據(jù)庫、人工過程和文檔等,每個物理元素仍然處于據(jù)庫、人工過程和文檔等,每個物理元素仍然處于黑盒子級黑盒子級設計軟件的結(jié)構,確定系統(tǒng)中每個程序是由哪些設計軟件的結(jié)構,確定系

2、統(tǒng)中每個程序是由哪些模塊組成的,以及這些模塊相互間的關系。模塊組成的,以及這些模塊相互間的關系。4站在全局高度上,花較少成本,從較抽象的層次上站在全局高度上,花較少成本,從較抽象的層次上分析對比多種可能的系統(tǒng)實現(xiàn)方案和軟件結(jié)構,從分析對比多種可能的系統(tǒng)實現(xiàn)方案和軟件結(jié)構,從中選出最佳方案和最合理的軟件結(jié)構,從而用較低中選出最佳方案和最合理的軟件結(jié)構,從而用較低成本開發(fā)出較高質(zhì)量的軟件系統(tǒng)。成本開發(fā)出較高質(zhì)量的軟件系統(tǒng)。尋找實現(xiàn)目標系統(tǒng)的各種不同的方案尋找實現(xiàn)目標系統(tǒng)的各種不同的方案從若干個合理的方案中選取最佳方案從若干個合理的方案中選取最佳方案設計軟件結(jié)構設計軟件結(jié)構進行必要的數(shù)據(jù)庫設計進行必

3、要的數(shù)據(jù)庫設計確定測試要求并且制定測試計劃確定測試要求并且制定測試計劃51.設想供選擇的方案設想供選擇的方案 在數(shù)據(jù)流圖的基礎上,考慮各種可能的實在數(shù)據(jù)流圖的基礎上,考慮各種可能的實現(xiàn)方案?,F(xiàn)方案。 一種常用的方法是,設想把數(shù)據(jù)流圖中的一種常用的方法是,設想把數(shù)據(jù)流圖中的處理分組的各種可能的方法,拋棄在技術處理分組的各種可能的方法,拋棄在技術上行不通的分組方法,余下的分組方法代上行不通的分組方法,余下的分組方法代表可能的實現(xiàn)策略。表可能的實現(xiàn)策略。5.1 5.1 設計過程設計過程62、選取合理的方案、選取合理的方案從上一步得到的一系列供選擇的方案中選取若干個合從上一步得到的一系列供選擇的方案中

4、選取若干個合理的方案,通常,考慮的這些方案中至少應包括低成本、理的方案,通常,考慮的這些方案中至少應包括低成本、中成本和高成本的三種方案類型。中成本和高成本的三種方案類型。對每個合理方案要提供以下幾方面資料:對每個合理方案要提供以下幾方面資料: (1)系統(tǒng)流程圖;)系統(tǒng)流程圖; (2)數(shù)據(jù)字典;)數(shù)據(jù)字典; (3)成本效益分析;)成本效益分析; (4)實現(xiàn)這個系統(tǒng)的進度計劃。)實現(xiàn)這個系統(tǒng)的進度計劃。5.1 5.1 設計過程設計過程7 根據(jù)系統(tǒng)分析確定的目標,來判斷哪些方根據(jù)系統(tǒng)分析確定的目標,來判斷哪些方案是合理的。案是合理的。 在判斷哪些方案合理時應該考慮在問題定在判斷哪些方案合理時應該考

5、慮在問題定義和可行性研究階段確定的工程規(guī)模和目義和可行性研究階段確定的工程規(guī)模和目標,有時可能還需要進一步征求用戶的意標,有時可能還需要進一步征求用戶的意見。見。5.1 5.1 設計過程設計過程83.推薦最佳方案推薦最佳方案 綜合分析對比各種合理方案的利弊,推薦綜合分析對比各種合理方案的利弊,推薦一個最佳的方案,并為最佳方案制定詳細一個最佳的方案,并為最佳方案制定詳細的實現(xiàn)計劃。的實現(xiàn)計劃。5.1 5.1 設計過程設計過程9 4.功能分解功能分解 為了最終實現(xiàn)目標系統(tǒng),必須設計出組成這個系統(tǒng)的所為了最終實現(xiàn)目標系統(tǒng),必須設計出組成這個系統(tǒng)的所有程序和文件(或數(shù)據(jù)庫)。有程序和文件(或數(shù)據(jù)庫)。

6、 對于大型程序的設計,通常分為兩個階段:結(jié)構設計和對于大型程序的設計,通常分為兩個階段:結(jié)構設計和過程設計。過程設計。 結(jié)構設計:結(jié)構設計:確定程序由哪些模塊組成,以及這些模塊之確定程序由哪些模塊組成,以及這些模塊之間的相互關系。間的相互關系。 過程設計:過程設計:確定每個模塊的處理過程。確定每個模塊的處理過程。 其中,結(jié)構設計是其中,結(jié)構設計是總體設計總體設計階段的任務,而過程設計則階段的任務,而過程設計則是詳細設計階段的任務。是詳細設計階段的任務。5.1 5.1 設計過程設計過程10 對數(shù)據(jù)流圖進一步細化,進行功能分解對數(shù)據(jù)流圖進一步細化,進行功能分解5.1 5.1 設計過程設計過程115

7、.設計軟件結(jié)構設計軟件結(jié)構 軟件結(jié)構反映系統(tǒng)中模塊的相互調(diào)用關系:頂軟件結(jié)構反映系統(tǒng)中模塊的相互調(diào)用關系:頂層模塊調(diào)用它的下層模塊以實現(xiàn)程序的完整功層模塊調(diào)用它的下層模塊以實現(xiàn)程序的完整功能,每個下層模塊再調(diào)用更下層的模塊,最下能,每個下層模塊再調(diào)用更下層的模塊,最下層的模塊完成最具體的功能。層的模塊完成最具體的功能。 軟件結(jié)構通過層次圖或結(jié)構圖來描繪,可以直軟件結(jié)構通過層次圖或結(jié)構圖來描繪,可以直接從數(shù)據(jù)流圖映射出軟件結(jié)構。接從數(shù)據(jù)流圖映射出軟件結(jié)構。5.1 5.1 設計過程設計過程126.數(shù)據(jù)庫設計數(shù)據(jù)庫設計 數(shù)據(jù)庫的應用越來越廣泛,目前大多數(shù)的數(shù)據(jù)庫的應用越來越廣泛,目前大多數(shù)的系統(tǒng)都要

8、用到數(shù)據(jù)庫技術。系統(tǒng)都要用到數(shù)據(jù)庫技術。 數(shù)據(jù)庫設計是一項專門的技術,包括數(shù)據(jù)庫設計是一項專門的技術,包括模式模式設計、子模式設計、完整性和安全性設計和優(yōu)設計、子模式設計、完整性和安全性設計和優(yōu)化處理化處理等。等。 5.1 5.1 設計過程設計過程137.制定測試計劃制定測試計劃 在軟件開發(fā)的早期階段提前考慮軟件的測在軟件開發(fā)的早期階段提前考慮軟件的測試計劃是很有必要的。這樣能促使軟件設計人試計劃是很有必要的。這樣能促使軟件設計人員在設計時注意到軟件的測試問題,從而有利員在設計時注意到軟件的測試問題,從而有利于提高軟件的可測試性。于提高軟件的可測試性。 5.1 5.1 設計過程設計過程148.

9、書寫文檔書寫文檔文檔包括:文檔包括: 系統(tǒng)說明系統(tǒng)說明 用戶手冊用戶手冊 測試計劃測試計劃 詳細的實現(xiàn)計劃詳細的實現(xiàn)計劃 數(shù)據(jù)庫設計結(jié)果數(shù)據(jù)庫設計結(jié)果5.1 5.1 設計過程設計過程159.審查和復審審查和復審 先技術審查先技術審查 后管理審查后管理審查5.1 5.1 設計過程設計過程16軟件設計準則軟件設計準則5.2 5.2 軟件設計準則軟件設計準則171. 1. 模塊化模塊化 模塊模塊是由邊界元素限定的相鄰的程序元素(是由邊界元素限定的相鄰的程序元素(例如,數(shù)據(jù)說明,可執(zhí)行的語句)的序列,而且例如,數(shù)據(jù)說明,可執(zhí)行的語句)的序列,而且有一個總體標識符來代表它。有一個總體標識符來代表它。 模

10、塊化模塊化就是把程序劃分成獨立命名且可獨立就是把程序劃分成獨立命名且可獨立訪問的模塊,每個模塊完成一個子功能,把這些訪問的模塊,每個模塊完成一個子功能,把這些模塊集成起來構成一個整體,可以完成指定的功模塊集成起來構成一個整體,可以完成指定的功能滿足用戶的需求。能滿足用戶的需求。模塊化與模塊獨立模塊化與模塊獨立18 當模塊數(shù)目增加時每當模塊數(shù)目增加時每個模塊的規(guī)模將減小,開個模塊的規(guī)模將減小,開發(fā)單個模塊需要的成本發(fā)單個模塊需要的成本(工作量)確實減少了;(工作量)確實減少了;但是,隨著模塊數(shù)目增加,但是,隨著模塊數(shù)目增加,設計模塊間接口所需要的設計模塊間接口所需要的工作量也將增加。每個程工作量

11、也將增加。每個程序都相應地有一個最序都相應地有一個最適當適當?shù)哪K數(shù)目的模塊數(shù)目M M,使得系統(tǒng),使得系統(tǒng)的開發(fā)成本最小。的開發(fā)成本最小。圖5.1 模塊化和軟件成本的關系模塊化與模塊獨立模塊化與模塊獨立19采用模塊化原理的優(yōu)點采用模塊化原理的優(yōu)點n使軟件結(jié)構清晰,容易設計、容易閱讀和理解。使軟件結(jié)構清晰,容易設計、容易閱讀和理解。n使軟件容易測試和調(diào)試,從而提高軟件的可靠性。使軟件容易測試和調(diào)試,從而提高軟件的可靠性。n能夠提高軟件的可修改性。能夠提高軟件的可修改性。n有助于軟件開發(fā)工程的組織管理。有助于軟件開發(fā)工程的組織管理。20 人們在實踐中認識到,在現(xiàn)實世界中一人們在實踐中認識到,在現(xiàn)實

12、世界中一定事物、狀態(tài)或過程之間總存在著某些相似定事物、狀態(tài)或過程之間總存在著某些相似的方面(共性)。把這些相似的方面集中和的方面(共性)。把這些相似的方面集中和概括起來,暫時忽略它們之間的差異,這就概括起來,暫時忽略它們之間的差異,這就是是抽象抽象。或者說抽象就是抽出事物的本質(zhì)特?;蛘哒f抽象就是抽出事物的本質(zhì)特性而暫時不考慮它們的細節(jié)。性而暫時不考慮它們的細節(jié)。抽象抽象21處理復雜系統(tǒng):處理復雜系統(tǒng):用層次的方式構造和分析。用層次的方式構造和分析。一個復雜的動態(tài)系統(tǒng)首先可以用一些高級的一個復雜的動態(tài)系統(tǒng)首先可以用一些高級的抽象概念構造和理解,這些高級概念又可以抽象概念構造和理解,這些高級概念又

13、可以用一些較低級的概念構造和理解,如此進行用一些較低級的概念構造和理解,如此進行下去,直至最低層次的具體元素。下去,直至最低層次的具體元素。22考慮對任何問題的模塊化解法時,可以提出考慮對任何問題的模塊化解法時,可以提出許多抽象的層次。在抽象的許多抽象的層次。在抽象的最高層次最高層次使用問使用問題環(huán)境的語言,以題環(huán)境的語言,以概括概括的方式敘述問題的解的方式敘述問題的解法;在法;在較低較低抽象層次抽象層次采用更過程化采用更過程化的方法,的方法,把面向問題的術語和面向?qū)崿F(xiàn)的術語結(jié)合起把面向問題的術語和面向?qū)崿F(xiàn)的術語結(jié)合起來敘述問題的解法;最后在最低的抽象層次來敘述問題的解法;最后在最低的抽象層次

14、用可直接實現(xiàn)的方式敘述問題的解法。用可直接實現(xiàn)的方式敘述問題的解法。23逐步求精逐步求精定義定義:“為了能集中精力解決主要問題而為了能集中精力解決主要問題而盡量推遲對問題細節(jié)的考慮。盡量推遲對問題細節(jié)的考慮?!盡iller法則:一個人在任何時候都只能法則:一個人在任何時候都只能把注意力集中在把注意力集中在72個知識塊上個知識塊上 求精要求設計者細化原始陳述,隨著每個求精要求設計者細化原始陳述,隨著每個后續(xù)求精(細化)步驟的完成而提供越來越多后續(xù)求精(細化)步驟的完成而提供越來越多的細節(jié)。的細節(jié)。24 逐步求精是一項把一個時期內(nèi)必須解決逐步求精是一項把一個時期內(nèi)必須解決的種種問題按優(yōu)先級排序的技

15、術。它確的種種問題按優(yōu)先級排序的技術。它確保每個問題都將被解決,而且每個問題保每個問題都將被解決,而且每個問題都將在適當?shù)臅r候被解決,但是,在任都將在適當?shù)臅r候被解決,但是,在任何時候一個人都不需要同時處理何時候一個人都不需要同時處理7 7個以上個以上知識塊。知識塊。25抽象與求精是一對互補的概念。抽象與求精是一對互補的概念。n抽象使得設計者能夠說明過程和數(shù)據(jù),同抽象使得設計者能夠說明過程和數(shù)據(jù),同時卻忽略低層細節(jié)。時卻忽略低層細節(jié)。n求精則幫助設計者在設計過程中逐步揭示求精則幫助設計者在設計過程中逐步揭示出低層細節(jié)。出低層細節(jié)。26 信息隱藏原理信息隱藏原理指出:應該這樣設計和確指出:應該這

16、樣設計和確定模塊,使得一個模塊內(nèi)包含的信息(過程定模塊,使得一個模塊內(nèi)包含的信息(過程和數(shù)據(jù))對于不需要這些信息的模塊來說,和數(shù)據(jù))對于不需要這些信息的模塊來說,是不能訪問的。是不能訪問的。 實際上,應該隱藏的不是有關模塊的一實際上,應該隱藏的不是有關模塊的一切信息,而是切信息,而是模塊的實現(xiàn)細節(jié)模塊的實現(xiàn)細節(jié)。 信息隱藏信息隱藏問題:問題:“為了得到最好的一組模塊,應為了得到最好的一組模塊,應該怎樣分解軟件該怎樣分解軟件”。27 開發(fā)具有獨立功能而且和其他模塊之開發(fā)具有獨立功能而且和其他模塊之間沒有過多的相互作用的模塊,就可以做間沒有過多的相互作用的模塊,就可以做到模塊獨立。到模塊獨立。模塊

17、獨立模塊獨立有效的模塊化(即具有獨立性的模塊)的軟有效的模塊化(即具有獨立性的模塊)的軟件比較容易開發(fā)出來;件比較容易開發(fā)出來;獨立的模塊比較容易測試和維護。獨立的模塊比較容易測試和維護。28 模塊的獨立程度由兩個定性標準度量,模塊的獨立程度由兩個定性標準度量,分別是耦合和內(nèi)聚。分別是耦合和內(nèi)聚。耦合耦合:衡量不同:衡量不同模塊彼此間模塊彼此間互相依賴互相依賴( (連接連接) )的緊密程度;的緊密程度;內(nèi)聚:內(nèi)聚:衡量一個衡量一個模塊內(nèi)部各個元素模塊內(nèi)部各個元素彼此結(jié)合彼此結(jié)合的緊密程度。的緊密程度。29偶然型偶然型邏輯型邏輯型時間型時間型通信型通信型順序型順序型功能型功能型內(nèi)容耦合內(nèi)容耦合公

18、共耦合公共耦合控制耦合控制耦合復合耦合復合耦合數(shù)據(jù)耦合數(shù)據(jù)耦合30 耦合耦合(Coupling)Great deal of dependenceIndependent Highly coupled Loosely coupledUncoupledGoal: as loose as possible = as independent as possible耦合表示一個軟件結(jié)構內(nèi)各個模塊之間的互連程度,應耦合表示一個軟件結(jié)構內(nèi)各個模塊之間的互連程度,應盡量選用松散耦合的系統(tǒng)盡量選用松散耦合的系統(tǒng)31例例1:A訪問訪問C的內(nèi)部的內(nèi)部數(shù)據(jù)或不通過正數(shù)據(jù)或不通過正常入口而轉(zhuǎn)入常入口而轉(zhuǎn)入C的內(nèi)部。的內(nèi)部

19、。ABCDA:goto C1C:C1: 獨立性由弱到強(耦合程度由強到弱)排列為:獨立性由弱到強(耦合程度由強到弱)排列為: 內(nèi)容耦合內(nèi)容耦合(Content Coupling): 一個模塊直接影響另一個一個模塊直接影響另一個32例例2:部分代碼重疊:部分代碼重疊(常出現(xiàn)在匯編程(常出現(xiàn)在匯編程序中)序中)B A例例3:一個模塊有:一個模塊有多個入口(功能)多個入口(功能)A:entry 1:entry 2: The least desirable33 公共耦合公共耦合 (Common coupling):幾個模塊共享一個數(shù)據(jù)區(qū)域:幾個模塊共享一個數(shù)據(jù)區(qū)域Global : V1 V2A:A1=

20、V1+V2B:V1=B1Global : V1 V2A:V1+B:V2=B1+V1問題:問題: 公共部分的改動將影響所有調(diào)用它的模塊;公共部分的改動將影響所有調(diào)用它的模塊; 公共部分的數(shù)據(jù)存取無法控制;公共部分的數(shù)據(jù)存取無法控制; 復雜程度隨耦合模塊的個數(shù)增加而增加。復雜程度隨耦合模塊的個數(shù)增加而增加。公共區(qū)可以是:全程數(shù)據(jù)區(qū)、共享通信區(qū)、內(nèi)存公共覆蓋公共區(qū)可以是:全程數(shù)據(jù)區(qū)、共享通信區(qū)、內(nèi)存公共覆蓋區(qū)、任何介質(zhì)上的文件、物理設備等。區(qū)、任何介質(zhì)上的文件、物理設備等。34 圖中存在公共耦合,假設模塊圖中存在公共耦合,假設模塊A、C、E都存取全程數(shù)據(jù)都存取全程數(shù)據(jù)區(qū)(如公用一個磁盤文件)中的一個

21、數(shù)據(jù)項。區(qū)(如公用一個磁盤文件)中的一個數(shù)據(jù)項。 如果如果A模塊讀取該項數(shù)據(jù),然后調(diào)用模塊讀取該項數(shù)據(jù),然后調(diào)用C模塊對該項重新模塊對該項重新計算,并進行數(shù)據(jù)更新。計算,并進行數(shù)據(jù)更新。ABCDE全程數(shù)全程數(shù)據(jù)區(qū)據(jù)區(qū)(3)公共耦合)公共耦合35 如果此時如果此時C模塊錯誤地更新了該項數(shù)據(jù),在往下的處模塊錯誤地更新了該項數(shù)據(jù),在往下的處理中模塊理中模塊E讀該數(shù)據(jù)項時出現(xiàn)錯誤。讀該數(shù)據(jù)項時出現(xiàn)錯誤。 表面上看,問題由模塊表面上看,問題由模塊E產(chǎn)生,實際上由模塊產(chǎn)生,實際上由模塊C引起。引起。ABCDE全程數(shù)全程數(shù)據(jù)區(qū)據(jù)區(qū)(3)公共耦合)公共耦合36 控制耦合控制耦合(Control couplin

22、g):一個模塊通過傳遞控制:一個模塊通過傳遞控制信息來控制另一個模塊信息來控制另一個模塊ABFlagF2F1FnFlag接口單一,接口單一,但仍然影響但仍然影響被控模塊的被控模塊的內(nèi)部邏輯。內(nèi)部邏輯。 數(shù)據(jù)耦合數(shù)據(jù)耦合(Data coupling): 只有數(shù)據(jù)在模塊之間進行只有數(shù)據(jù)在模塊之間進行交換交換 The most desirable.37耦合是影響軟件復雜程度的一個重要因耦合是影響軟件復雜程度的一個重要因素素, ,應采取下述設計原則應采取下述設計原則: :應該應該盡量使用盡量使用數(shù)據(jù)耦合數(shù)據(jù)耦合少用少用控制耦合控制耦合限制限制公共耦合的范圍公共耦合的范圍完全不用完全不用內(nèi)容耦合。內(nèi)容耦

23、合。38 低內(nèi)聚:低內(nèi)聚: 偶然內(nèi)聚偶然內(nèi)聚(Coincidental cohesion)A:Read inputsfrom diskfrom tapefrom 邏輯內(nèi)聚邏輯內(nèi)聚(Logical cohesion)例如:例如: 內(nèi)聚內(nèi)聚 (Cohesion): 一個模塊內(nèi)各元素結(jié)合的緊密程度一個模塊內(nèi)各元素結(jié)合的緊密程度.Goal: as cohesive as possible.39 時間內(nèi)聚時間內(nèi)聚(Temporal cohesion):模塊內(nèi)的功能在):模塊內(nèi)的功能在同一時間段內(nèi)完成同一時間段內(nèi)完成例如:系統(tǒng)的初始化例如:系統(tǒng)的初始化問題:不同功能混在一個模塊中,有時共用部分問題:不同功

24、能混在一個模塊中,有時共用部分編碼,使局部功能的修改牽動全局。編碼,使局部功能的修改牽動全局。 中內(nèi)聚:中內(nèi)聚: 過程內(nèi)聚過程內(nèi)聚(Procedural cohesion):模塊內(nèi)的處理是相):模塊內(nèi)的處理是相關的,而且必須以特定順序執(zhí)行關的,而且必須以特定順序執(zhí)行例如:例如:enter datacheck datamanipulate data40 通信內(nèi)聚通信內(nèi)聚(Communicational cohesion):模塊中所有元素):模塊中所有元素都用同一個輸入數(shù)據(jù)或產(chǎn)生同一個輸出數(shù)據(jù)都用同一個輸入數(shù)據(jù)或產(chǎn)生同一個輸出數(shù)據(jù)例如:從同一磁帶上讀取不相干的數(shù)據(jù)例如:從同一磁帶上讀取不相干的數(shù)據(jù)

25、 可能破可能破壞獨立性。壞獨立性。 高內(nèi)聚:高內(nèi)聚: 順序內(nèi)聚順序內(nèi)聚(Sequential cohesion):模塊內(nèi)的處理元素和):模塊內(nèi)的處理元素和統(tǒng)一的功能密切相關,而且這些處理必須順序執(zhí)行。統(tǒng)一的功能密切相關,而且這些處理必須順序執(zhí)行。 功能內(nèi)聚功能內(nèi)聚(Functional cohesion):所有元素合力完成一):所有元素合力完成一個單一功能,缺一不可個單一功能,缺一不可41模塊獨立模塊獨立內(nèi)聚度量一個模塊內(nèi)的各個元素彼此結(jié)合的緊密程度。設計時應該力求做到高內(nèi)聚。內(nèi)聚內(nèi)聚耦合是對一個軟件結(jié)構內(nèi)不同模塊之間互連程度的度量。盡量使用數(shù)據(jù)耦合,少用控制耦合,限制公共環(huán)境耦合的范圍,完全

26、不用內(nèi)容耦合。耦合耦合425.3 5.3 啟啟 發(fā)發(fā) 規(guī)規(guī) 則則改進軟件結(jié)構提高模塊獨立性改進軟件結(jié)構提高模塊獨立性 設計出軟件的初步結(jié)構以后,應該審設計出軟件的初步結(jié)構以后,應該審查分析這個結(jié)構,通過模塊分解或合并,查分析這個結(jié)構,通過模塊分解或合并,力求降低耦合提高內(nèi)聚。力求降低耦合提高內(nèi)聚。模塊規(guī)模應該適中模塊規(guī)模應該適中 經(jīng)驗表明,一個模塊的規(guī)模不應過大,經(jīng)驗表明,一個模塊的規(guī)模不應過大,最好能寫在一頁紙內(nèi)(通常不超過最好能寫在一頁紙內(nèi)(通常不超過6060行語行語句)。句)。 過小的模塊開銷大于有效操作,而過小的模塊開銷大于有效操作,而且模塊數(shù)目過多將使系統(tǒng)接口復雜。且模塊數(shù)目過多將使

27、系統(tǒng)接口復雜。因此過小的模塊有時不值得單獨存因此過小的模塊有時不值得單獨存在,特別是只有一個模塊調(diào)用它時,在,特別是只有一個模塊調(diào)用它時,通常可以把它合并到上級模塊中去通??梢园阉喜⒌缴霞壞K中去而不必單獨存在。而不必單獨存在。435.3 5.3 啟啟 發(fā)發(fā) 規(guī)規(guī) 則則深度、寬度、扇出和扇入都應適當深度、寬度、扇出和扇入都應適當 觀察大量軟件系統(tǒng)后發(fā)現(xiàn),設計得很好觀察大量軟件系統(tǒng)后發(fā)現(xiàn),設計得很好的軟件結(jié)構通常頂層扇出比較高,中層扇出的軟件結(jié)構通常頂層扇出比較高,中層扇出較少,底層扇入到公共的實用模塊中去(底較少,底層扇入到公共的實用模塊中去(底層模塊有高扇入)。層模塊有高扇入)。是一個模塊

28、直接控制(調(diào)用)的模塊數(shù)目是能夠直接調(diào)用此模塊的上級的模塊數(shù)目軟件結(jié)構中控制的層數(shù)同一層次上的模塊總數(shù)的最大值44 深度深度 = 分層的層數(shù)。過大表示分工過細。分層的層數(shù)。過大表示分工過細。 寬度寬度 = 同一層上模塊數(shù)的最大值。過大表示系統(tǒng)復雜同一層上模塊數(shù)的最大值。過大表示系統(tǒng)復雜度大。度大。45 扇出扇出 = 一個模塊直接調(diào)一個模塊直接調(diào)用用控制的模塊數(shù)。控制的模塊數(shù)。 3 fan-out 9AA的扇出的扇出AA的扇入的扇入 扇入扇入 = 直接調(diào)用該模直接調(diào)用該模塊的模塊數(shù)塊的模塊數(shù)在不破壞獨立性的前提在不破壞獨立性的前提下,下,fan-in 大的比較好。大的比較好。46 對扇出、扇入過

29、大的改進:對扇出、扇入過大的改進: (a)對扇入過大的改進)對扇入過大的改進(b)對扇出過大的改進)對扇出過大的改進47模塊的作用域應該在控制域之內(nèi)模塊的作用域應該在控制域之內(nèi) 模塊的作用域定義為受該模塊內(nèi)一個模塊的作用域定義為受該模塊內(nèi)一個判定影響的判定影響的所有模塊的集合所有模塊的集合。模塊的控制。模塊的控制域是這個模塊本身以及所有域是這個模塊本身以及所有直接或間接直接或間接從從屬于它的模塊的集合。屬于它的模塊的集合。 在一個設計得很好的系統(tǒng)中,所有受在一個設計得很好的系統(tǒng)中,所有受判定影響的模塊應該都從屬于做出判定的判定影響的模塊應該都從屬于做出判定的那個模塊,最好局限于做出判定的那個模

30、那個模塊,最好局限于做出判定的那個模塊本身及它的直屬下級模塊。塊本身及它的直屬下級模塊。5.3 5.3 啟啟 發(fā)發(fā) 規(guī)規(guī) 則則48 控制域控制域MACBM的控制域為的控制域為 M,A,B,C 作用域:作用域:M中的一個判定所影響的模塊。中的一個判定所影響的模塊。例如:例如:A: if then goto B1 B: B1: 作用域在控制域內(nèi)作用域在控制域內(nèi)A: if then goto M1 M: M1: goto C1 作用域超出了控制域作用域超出了控制域上例中上例中A的作用超出了控制域。改進方法之一,可以的作用超出了控制域。改進方法之一,可以把把A中的中的 if 移到移到M中;方法之二,可

31、以把中;方法之二,可以把C移到移到A下面。下面。2. 軟件設計原則軟件設計原則49力爭降低模塊接口的復雜程度力爭降低模塊接口的復雜程度 模塊接口復雜是軟件發(fā)生錯誤的一個主模塊接口復雜是軟件發(fā)生錯誤的一個主要原因。應該仔細設計模塊接口,使得信息要原因。應該仔細設計模塊接口,使得信息傳遞簡單并且和模塊的功能一致。傳遞簡單并且和模塊的功能一致。5.3 5.3 啟啟 發(fā)發(fā) 規(guī)規(guī) 則則 如:如:QUAD-ROOT(TBL,X) 求一元二次方程的根的模塊,其中求一元二次方程的根的模塊,其中TBL,X都為數(shù)組,分別代表方程都為數(shù)組,分別代表方程的系數(shù)和方程的根。的系數(shù)和方程的根。 應該使接口更簡單,如:應該

32、使接口更簡單,如: QUAD-ROOT(A,B,C,ROOT1,ROOT2) A、B、C是方程的系數(shù),是方程的系數(shù),ROOT1,ROOT2是方程的根。是方程的根。 50設計單入口單出口的模塊設計單入口單出口的模塊 不要使模塊間出現(xiàn)內(nèi)容耦合,設計出不要使模塊間出現(xiàn)內(nèi)容耦合,設計出的每一個模塊都應該只有一個入口一個出的每一個模塊都應該只有一個入口一個出口???。5.3 5.3 啟啟 發(fā)發(fā) 規(guī)規(guī) 則則515.3 5.3 啟啟 發(fā)發(fā) 規(guī)規(guī) 則則模塊功能應該可以預測模塊功能應該可以預測 模塊的功能應該能夠預測,但也要模塊的功能應該能夠預測,但也要防止模塊功能過分局限。防止模塊功能過分局限。525.4 5.

33、4 描繪軟件結(jié)構的圖形工具描繪軟件結(jié)構的圖形工具1 1 層次圖和層次圖和HIPOHIPO圖圖 通常使用層次圖描繪軟件的層次結(jié)構。通常使用層次圖描繪軟件的層次結(jié)構。在圖在圖3.23.2中已經(jīng)非正式地使用了層次圖。中已經(jīng)非正式地使用了層次圖。模塊的作用域和控制域535.4 5.4 描繪軟件結(jié)構的圖形工具描繪軟件結(jié)構的圖形工具正文加工正文加工系統(tǒng)系統(tǒng)輸入輸入輸出輸出編輯編輯加標題加標題存儲存儲檢索檢索編目錄編目錄格式化格式化添加添加刪除刪除插入插入修改修改合并合并列表列表圖圖5.3 正文加工系統(tǒng)的層次圖正文加工系統(tǒng)的層次圖54 HIPO HIPO圖是美國圖是美國IBMIBM公司公司發(fā)明的發(fā)明的“層次

34、圖層次圖加輸入處理輸出圖加輸入處理輸出圖”的英文縮寫。為了的英文縮寫。為了使使HIPOHIPO圖具有可追蹤性,在圖(即層次圖圖具有可追蹤性,在圖(即層次圖)里除了頂層的方框之外,每個方框都加了)里除了頂層的方框之外,每個方框都加了編號。編號方法與本書第編號。編號方法與本書第3 3章章3.5.23.5.2節(jié)中介紹節(jié)中介紹的數(shù)據(jù)流圖的編號方法相同。的數(shù)據(jù)流圖的編號方法相同。 和和H H圖中的每個方框相對應,應該有一張圖中的每個方框相對應,應該有一張IPOIPO圖(或表)描繪這個方框代表的模塊的圖(或表)描繪這個方框代表的模塊的處理過程。處理過程。5.4 5.4 描繪軟件結(jié)構的圖形工具描繪軟件結(jié)構的

35、圖形工具555.4 5.4 描繪軟件結(jié)構的圖形工具描繪軟件結(jié)構的圖形工具正文加工正文加工系統(tǒng)系統(tǒng)輸入輸入1.0輸出輸出2.0編輯編輯3.0加標題加標題4.0存儲存儲5.0檢索檢索6.0編目錄編目錄7.0格式化格式化8.0添加添加3.1刪除刪除3.2插入插入3.3修改修改3.4合并合并3.5列表列表3.6圖圖5.4 帶編號的層次圖(帶編號的層次圖(H圖)圖)56 結(jié)構圖中一個結(jié)構圖中一個方框代表一個模塊方框代表一個模塊,框內(nèi),框內(nèi)注明模塊的名字或主要功能;方框之間的注明模塊的名字或主要功能;方框之間的箭頭箭頭(或直線)表示模塊的調(diào)用關系(或直線)表示模塊的調(diào)用關系。因為按照慣。因為按照慣例總是圖

36、中位于上方的方框代表的模塊調(diào)用下例總是圖中位于上方的方框代表的模塊調(diào)用下方的模塊,即使不用箭頭也不會產(chǎn)生二義性,方的模塊,即使不用箭頭也不會產(chǎn)生二義性,為了簡單起見,可以只用直線而不用箭頭表示為了簡單起見,可以只用直線而不用箭頭表示模塊間的調(diào)用關系。模塊間的調(diào)用關系。5.4 5.4 描繪軟件結(jié)構的圖形工具描繪軟件結(jié)構的圖形工具結(jié)構圖結(jié)構圖-Yourdon-Yourdon提出的提出的57 如果希望進一步標明傳遞的信息是如果希望進一步標明傳遞的信息是數(shù)據(jù)還是控制信息,則可以利用注釋箭數(shù)據(jù)還是控制信息,則可以利用注釋箭頭尾部的形狀來區(qū)分:尾部是空心圓表頭尾部的形狀來區(qū)分:尾部是空心圓表示傳遞的是數(shù)據(jù)

37、,實心圓表示傳遞的是示傳遞的是數(shù)據(jù),實心圓表示傳遞的是控制信息??刂菩畔ⅰD3.5 結(jié)構圖的一個例子585.4 5.4 描繪軟件結(jié)構的圖形工具描繪軟件結(jié)構的圖形工具MAB圖圖5.6 判定為真時調(diào)用判定為真時調(diào)用A,為假時調(diào)用,為假時調(diào)用BMABC圖圖5.7 模塊模塊M循環(huán)調(diào)循環(huán)調(diào)用模塊用模塊A、B、C59例例: :畫出打印報告的軟件結(jié)構圖畫出打印報告的軟件結(jié)構圖 調(diào)用次序為上層調(diào)用下層;調(diào)用次序為上層調(diào)用下層; 同層按照數(shù)據(jù)傳遞關系確同層按照數(shù)據(jù)傳遞關系確定;一般從左到右執(zhí)行。定;一般從左到右執(zhí)行。 執(zhí)行過程即按照數(shù)據(jù)流向進行。執(zhí)行過程即按照數(shù)據(jù)流向進行。 報報 告告計計 算算獲得編輯獲得編輯

38、確認數(shù)據(jù)確認數(shù)據(jù)讀入讀入編輯編輯打印報告頭打印報告頭打印報告尾打印報告尾打印打印輸入EOF輸入已編輯 已編輯已編輯已確認已確認數(shù)據(jù)已確認數(shù)據(jù)計算結(jié)果結(jié)果日期總結(jié)果行行行打印報告打印報告予以確認予以確認605.5 5.5 面向數(shù)據(jù)流的設計方法面向數(shù)據(jù)流的設計方法目標:給出設計軟件結(jié)構的一個系統(tǒng)化目標:給出設計軟件結(jié)構的一個系統(tǒng)化的途徑。的途徑。 面向數(shù)據(jù)流的設計方法定義了一些不面向數(shù)據(jù)流的設計方法定義了一些不同的同的“映射映射”,利用這些映射可以把數(shù)據(jù),利用這些映射可以把數(shù)據(jù)流圖變換成軟件結(jié)構。通常所說的結(jié)構化流圖變換成軟件結(jié)構。通常所說的結(jié)構化設計方法(簡稱設計方法(簡稱SDSD方法),也就是

39、基于數(shù)方法),也就是基于數(shù)據(jù)流的設計方法。據(jù)流的設計方法。61基本思想基本思想: : DFD DFD System Hierarchy System Hierarchy621.1.變換流變換流概念概念圖5.8 變換流63 信息沿輸入通路進入系統(tǒng),同時由外部形信息沿輸入通路進入系統(tǒng),同時由外部形式變換成內(nèi)部形式,進入系統(tǒng)的信息通過式變換成內(nèi)部形式,進入系統(tǒng)的信息通過變換中心,經(jīng)加工處理以后再沿輸出通路變換中心,經(jīng)加工處理以后再沿輸出通路變換成外部形式離開軟件系統(tǒng)。當數(shù)據(jù)流變換成外部形式離開軟件系統(tǒng)。當數(shù)據(jù)流圖具有這些特征時,這種信息流就叫作變圖具有這些特征時,這種信息流就叫作變換流。換流。642

40、. 2. 事務流事務流 數(shù)據(jù)沿輸入通路到達一個處理數(shù)據(jù)沿輸入通路到達一個處理T T,這個處理根,這個處理根據(jù)輸入數(shù)據(jù)的類型在若干個動作序列中選出一個來據(jù)輸入數(shù)據(jù)的類型在若干個動作序列中選出一個來執(zhí)行。這類數(shù)據(jù)流稱為事務流。執(zhí)行。這類數(shù)據(jù)流稱為事務流。圖5.9 事務流圖圖5.95.9中的處理中的處理T T稱為事務中心,稱為事務中心,它完成下述任務:它完成下述任務: (1 1)接收輸入數(shù)據(jù)(輸入數(shù))接收輸入數(shù)據(jù)(輸入數(shù)據(jù)又稱為事務);據(jù)又稱為事務); (2 2)分析每個事務以確定它)分析每個事務以確定它的類型;的類型; (3 3)根據(jù)事務類型選取一條)根據(jù)事務類型選取一條活動通路?;顒油?。概念概

41、念65要求類要求類別處理別處理分房處理分房處理調(diào)房處理調(diào)房處理退房處理退房處理住房要求住房要求事務中心事務中心活動路徑活動路徑66 通常,一個實際系統(tǒng)的數(shù)據(jù)流圖是變換型和事務型通常,一個實際系統(tǒng)的數(shù)據(jù)流圖是變換型和事務型兩種類型的混合體。兩種類型的混合體。 如圖所示,中間的子塊屬事務型數(shù)據(jù)流,如果把中如圖所示,中間的子塊屬事務型數(shù)據(jù)流,如果把中間子塊視為一個處理整體的話,整個程序?qū)僮儞Q型程序。間子塊視為一個處理整體的話,整個程序?qū)僮儞Q型程序。 A(事務型,(事務型,A為事務中心)為事務中心)變換中心變換中心輸入輸入輸出輸出混合型數(shù)據(jù)流圖混合型數(shù)據(jù)流圖673 3 變換型系統(tǒng)結(jié)構圖變換型系統(tǒng)結(jié)構圖

42、68694 4 事務型系統(tǒng)結(jié)構圖事務型系統(tǒng)結(jié)構圖70715.5.2 5.5.2 變換分析技術變換分析技術 變換分析是一系列設計步驟的總稱,經(jīng)變換分析是一系列設計步驟的總稱,經(jīng)過這些步驟把具有變換流特點的數(shù)據(jù)流過這些步驟把具有變換流特點的數(shù)據(jù)流圖按預先確定的模式映射成軟件結(jié)構。圖按預先確定的模式映射成軟件結(jié)構。72 主加工主加工 描述了系統(tǒng)的主要功能、特征。其特點是:輸入描述了系統(tǒng)的主要功能、特征。其特點是:輸入/ /輸出數(shù)輸出數(shù)據(jù)流較多,往往主加工不止一個。據(jù)流較多,往往主加工不止一個。 邏輯輸入邏輯輸入/ /輸出輸出 是指輸入是指輸入/ /輸出主加工的數(shù)據(jù)流。輸出主加工的數(shù)據(jù)流。 輸入流輸入

43、流 是把物理輸入轉(zhuǎn)換為邏輯輸入的數(shù)據(jù)流。是把物理輸入轉(zhuǎn)換為邏輯輸入的數(shù)據(jù)流。 輸出流輸出流 是將邏輯輸出轉(zhuǎn)換為物理輸出的數(shù)據(jù)流。是將邏輯輸出轉(zhuǎn)換為物理輸出的數(shù)據(jù)流。 輸輸 入入流流轉(zhuǎn)換流轉(zhuǎn)換流輸輸 出出 流流 輸輸 入入流流轉(zhuǎn)換流轉(zhuǎn)換流 進行一級分解進行一級分解, ,設計上層模塊設計上層模塊 為每個輸入設計一個輸入模塊,為每個輸出設計一個輸出模塊,同時為每個輸入設計一個輸入模塊,為每個輸出設計一個輸出模塊,同時為每個主加工設計一個處理模塊。為每個主加工設計一個處理模塊。MCICTCOCCDDCICTCO變換分析技術步驟FDC中心中心加工加工2號號加工加工3號號加工加工1號號加工加工4號號加工加

44、工ABE輸輸 出出 流流 變換分析技術73DDCC 這一步的工作是自頂向下,逐步細化,為第一層的每一個輸入模塊、這一步的工作是自頂向下,逐步細化,為第一層的每一個輸入模塊、輸出模塊、處理模塊設計它們的從屬模塊,設計下層模塊的順序一般從設輸出模塊、處理模塊設計它們的從屬模塊,設計下層模塊的順序一般從設計輸入模塊的下層開始。計輸入模塊的下層開始。MCICTCO處理C取B轉(zhuǎn)換B轉(zhuǎn)換D送ECCDDDCCDBBEEDC中心中心加工加工2號號加工加工3號號加工加工1號號加工加工4號號加工加工AB E 輸輸 入入流流轉(zhuǎn)換流轉(zhuǎn)換流輸輸 出出 流流轉(zhuǎn)換流轉(zhuǎn)換流取A轉(zhuǎn)換A轉(zhuǎn)換E送FAABFFE 變換分析技術F74

45、0楊輝三角形系數(shù)求解輸入階數(shù)輸入階數(shù)系數(shù)表系數(shù)表不合理階數(shù)不合理階數(shù)DFD01檢驗階數(shù)2計算系數(shù)3打印系數(shù)系數(shù)表系數(shù)表系數(shù)系數(shù)不合理階數(shù)不合理階數(shù)合理合理階數(shù)階數(shù)輸入階輸入階數(shù)數(shù)DFD11.1輸入階數(shù)1.2檢驗階數(shù)合理合理階數(shù)階數(shù)不合不合理階理階數(shù)數(shù)階數(shù)階數(shù)2.1計算1DFD2合合理理階階數(shù)數(shù)系數(shù)系數(shù)3.1打印1階數(shù)階數(shù)系數(shù)表系數(shù)表13.2打印2階數(shù)階數(shù)系數(shù)系數(shù)表表22.2計算2合理合理階數(shù)階數(shù)系數(shù)系數(shù)求解楊輝三角形系數(shù)75求解楊輝三角形系數(shù)取合理階數(shù)打印系數(shù)計算系數(shù)方法選用輸入階數(shù)檢驗階數(shù)計算1計算2打印1打印2合理階數(shù)合理階數(shù)合理階數(shù)合理階數(shù)合理階數(shù)合理階數(shù)合理階合理階數(shù)數(shù)合理階數(shù)合理階數(shù)

46、合理階數(shù)合理階數(shù)合理階數(shù)合理階數(shù)合理階合理階數(shù)數(shù)不合理階數(shù)不合理階數(shù)階階數(shù)數(shù)階階數(shù)數(shù)系系數(shù)數(shù)系系數(shù)數(shù)系系數(shù)數(shù)系系數(shù)數(shù)系數(shù)表系數(shù)表1系數(shù)表系數(shù)表2表示選用表示選用76變換分析變換分析1. 1. 例子例子假設的儀表板將完成下述功能:假設的儀表板將完成下述功能: 通過模通過模- -數(shù)轉(zhuǎn)換實現(xiàn)傳感器和微處理機接口;數(shù)轉(zhuǎn)換實現(xiàn)傳感器和微處理機接口; 在發(fā)光二極管面板上顯示數(shù)據(jù);在發(fā)光二極管面板上顯示數(shù)據(jù); 指示每小時英里數(shù)(指示每小時英里數(shù)(milemileh h),行駛的里程,每加侖),行駛的里程,每加侖油行駛的英里數(shù)(油行駛的英里數(shù)(milemileGalGal)等等;)等等; 指示加速或減速;指示

47、加速或減速; 超速警告:如果車速超過超速警告:如果車速超過55mile55mileh h,則發(fā)出超速警告,則發(fā)出超速警告鈴聲。鈴聲。772. 2. 設計步驟設計步驟第第1 1步步 復查基本系統(tǒng)模型復查基本系統(tǒng)模型。 復查的目的是確保系統(tǒng)的輸入數(shù)據(jù)和輸出數(shù)據(jù)復查的目的是確保系統(tǒng)的輸入數(shù)據(jù)和輸出數(shù)據(jù)符合實際。符合實際。第第2 2步步 復查并精化數(shù)據(jù)流圖復查并精化數(shù)據(jù)流圖。 應該對需求分析階段得出的數(shù)據(jù)流圖認真復查,應該對需求分析階段得出的數(shù)據(jù)流圖認真復查,并且在必要時進行精化。不僅要確保數(shù)據(jù)流圖給出并且在必要時進行精化。不僅要確保數(shù)據(jù)流圖給出了目標系統(tǒng)的正確的邏輯模型,而且應該使數(shù)據(jù)流了目標系統(tǒng)的

48、正確的邏輯模型,而且應該使數(shù)據(jù)流圖中每個處理都代表一個規(guī)模適中相對獨立的子功圖中每個處理都代表一個規(guī)模適中相對獨立的子功能。能。 假設在需求分析階段產(chǎn)生的數(shù)字儀表板系統(tǒng)的假設在需求分析階段產(chǎn)生的數(shù)字儀表板系統(tǒng)的數(shù)據(jù)流圖如圖數(shù)據(jù)流圖如圖5.115.11(見書(見書9797頁)所示。頁)所示。78 這個數(shù)據(jù)流圖對于軟件結(jié)構設計的這個數(shù)據(jù)流圖對于軟件結(jié)構設計的“第一次分第一次分割割”而言已經(jīng)足夠詳細了,因此不需要精化就可以而言已經(jīng)足夠詳細了,因此不需要精化就可以進行下一個設計步驟。進行下一個設計步驟。第第3 3步步 確定數(shù)據(jù)流圖具有變換特性還是事務特性確定數(shù)據(jù)流圖具有變換特性還是事務特性。 一般地說

49、,一個系統(tǒng)中的所有信息流都可以認一般地說,一個系統(tǒng)中的所有信息流都可以認為是變換流,但是,當遇到有明顯事務特性的信息為是變換流,但是,當遇到有明顯事務特性的信息流時,建議采用事務分析方法進行設計。在這一步,流時,建議采用事務分析方法進行設計。在這一步,設計人員應該根據(jù)數(shù)據(jù)流圖中占優(yōu)勢的屬性,確定設計人員應該根據(jù)數(shù)據(jù)流圖中占優(yōu)勢的屬性,確定數(shù)據(jù)流的全局特性。此外還應該把具有和全局特性數(shù)據(jù)流的全局特性。此外還應該把具有和全局特性不同的特點的局部區(qū)域孤立出來,以后可以按照這不同的特點的局部區(qū)域孤立出來,以后可以按照這些子數(shù)據(jù)流的特點精化根據(jù)全局特性得出的軟件結(jié)些子數(shù)據(jù)流的特點精化根據(jù)全局特性得出的軟

50、件結(jié)構。構。79 從圖從圖5.115.11看出,數(shù)據(jù)沿著兩條輸入通路進入系看出,數(shù)據(jù)沿著兩條輸入通路進入系統(tǒng),然后沿著統(tǒng),然后沿著5 5條通路離開,沒有明顯的事務中心。條通路離開,沒有明顯的事務中心。因此可以認為這個信息流具有變換流的總特征。因此可以認為這個信息流具有變換流的總特征。第第4 4步步 確定輸入流和輸出流的邊界,從而孤立出變確定輸入流和輸出流的邊界,從而孤立出變換中心換中心。 輸入流和輸出流的邊界和對它們的解釋有關,輸入流和輸出流的邊界和對它們的解釋有關,也就是說,不同設計人員可能會在流內(nèi)選取稍微不也就是說,不同設計人員可能會在流內(nèi)選取稍微不同的點作為邊界的位置。當然在確定邊界時應

51、該仔同的點作為邊界的位置。當然在確定邊界時應該仔細認真,但是把邊界沿著數(shù)據(jù)流通路移動一個處理細認真,但是把邊界沿著數(shù)據(jù)流通路移動一個處理框的距離,通常對最后的軟件結(jié)構只有很小的影響??虻木嚯x,通常對最后的軟件結(jié)構只有很小的影響。對于汽車數(shù)字儀表板的例子,設計人員確定的流的對于汽車數(shù)字儀表板的例子,設計人員確定的流的邊界如圖邊界如圖5.125.12(見書(見書9898頁)所示。頁)所示。80DFD的分界,先分出的分界,先分出I、P、O三塊三塊燃料流燃料流 傳感器信號傳感器信號SPS旋轉(zhuǎn)信號旋轉(zhuǎn)信號讀讀旋轉(zhuǎn)旋轉(zhuǎn)信號信號收集收集和求和求平均平均確定確定加加/ /減減速速轉(zhuǎn)換轉(zhuǎn)換成成轉(zhuǎn)轉(zhuǎn)/ /分分計算

52、計算里程里程計算計算mph,超超速值速值產(chǎn)生產(chǎn)生加加/ /減減速顯示速顯示計算計算燃料燃料消耗消耗計算計算gph讀和讀和校核校核產(chǎn)生產(chǎn)生mpg顯示顯示產(chǎn)生產(chǎn)生mph顯示顯示發(fā)出發(fā)出鈴聲鈴聲產(chǎn)生產(chǎn)生里程里程顯示顯示SPS SPS箭頭指示箭頭指示燃燒流燃燒流上箭頭上箭頭水平線水平線下箭頭下箭頭rpmrpmgphmphmpgmph超速值超速值英里英里顯示顯示鈴聲鈴聲mph顯示顯示mpg顯示顯示81第第5 5步步 完成完成“第一級分解第一級分解”。 軟件結(jié)構代表對控制的自頂向下的分配,所謂軟件結(jié)構代表對控制的自頂向下的分配,所謂分解就是分配控制的過程。分解就是分配控制的過程。 對于變換流的情況,數(shù)據(jù)流

53、圖被映射成一個特對于變換流的情況,數(shù)據(jù)流圖被映射成一個特殊的軟件結(jié)構,這個結(jié)構控制輸入、變換和輸出等殊的軟件結(jié)構,這個結(jié)構控制輸入、變換和輸出等信息處理過程。圖信息處理過程。圖5.135.13說明了第一級分解的方法。說明了第一級分解的方法。位于軟件結(jié)構最頂層的控制模塊位于軟件結(jié)構最頂層的控制模塊CmCm協(xié)調(diào)下述從屬的協(xié)調(diào)下述從屬的控制功能:控制功能: 輸入信息處理控制模塊輸入信息處理控制模塊Ca,Ca,協(xié)調(diào)對所有輸入數(shù)協(xié)調(diào)對所有輸入數(shù)據(jù)的接收;據(jù)的接收; 變換中心控制模塊變換中心控制模塊Ct,Ct,管理對內(nèi)部形式的數(shù)據(jù)管理對內(nèi)部形式的數(shù)據(jù)的所有操作;的所有操作;82 輸出信息處理控制模塊輸出信

54、息處理控制模塊CeCe,協(xié)調(diào)輸出信息的產(chǎn),協(xié)調(diào)輸出信息的產(chǎn)生過程。生過程。 雖然圖雖然圖5.135.13意味著一個三叉的控制結(jié)構,但是,意味著一個三叉的控制結(jié)構,但是,對一個大型系統(tǒng)中的復雜數(shù)據(jù)流可以用兩個或多個對一個大型系統(tǒng)中的復雜數(shù)據(jù)流可以用兩個或多個模塊完成上述一個模塊的控制功能。應該在能夠完模塊完成上述一個模塊的控制功能。應該在能夠完成控制功能并且保持好的耦合和內(nèi)聚特性的前提下,成控制功能并且保持好的耦合和內(nèi)聚特性的前提下,盡量使第一級控制中的模塊數(shù)目取最小值。盡量使第一級控制中的模塊數(shù)目取最小值。對于數(shù)字儀表板的例子,第一級分解得出的結(jié)構如對于數(shù)字儀表板的例子,第一級分解得出的結(jié)構如

55、圖圖5.145.14所示。每個控制模塊的名字表明了為它所控所示。每個控制模塊的名字表明了為它所控制的那些模塊的功能。制的那些模塊的功能。83圖5.13 第一級分解的方法84圖5.14 數(shù)字儀表板系統(tǒng)的第一級分解85第第6 6步步 完成完成“第二級分解第二級分解”。 所謂第二級分解就是把數(shù)據(jù)流圖中的所謂第二級分解就是把數(shù)據(jù)流圖中的每個處理每個處理映射成軟件結(jié)構中一個適當?shù)哪K映射成軟件結(jié)構中一個適當?shù)哪K。完成第二級分。完成第二級分解的方法是,從變換中心的邊界開始沿著輸入通路解的方法是,從變換中心的邊界開始沿著輸入通路向外移動,把輸入通路中每個處理映射成軟件結(jié)構向外移動,把輸入通路中每個處理映射

56、成軟件結(jié)構中中CaCa控制下的一個低層模塊;然后沿輸出通路向外控制下的一個低層模塊;然后沿輸出通路向外移動,把輸出通路中每個處理映射成直接或間接受移動,把輸出通路中每個處理映射成直接或間接受模塊模塊CeCe控制的一個低層模塊;最后把變換中心內(nèi)的控制的一個低層模塊;最后把變換中心內(nèi)的每個處理映射成受每個處理映射成受CtCt控制的一個模塊。圖控制的一個模塊。圖5.155.15表示表示進行第二級分解的普遍途徑。進行第二級分解的普遍途徑。86圖5.15 第二級分解的方法87 雖然圖雖然圖5.155.15描繪了在數(shù)據(jù)流圖中的處理和軟件描繪了在數(shù)據(jù)流圖中的處理和軟件結(jié)構中的模塊之間的一對一的映射關系,但是

57、,不結(jié)構中的模塊之間的一對一的映射關系,但是,不同的映射經(jīng)常出現(xiàn)。應該根據(jù)實際情況以及同的映射經(jīng)常出現(xiàn)。應該根據(jù)實際情況以及“好好”設計的標準,進行實際的第二級分解。設計的標準,進行實際的第二級分解。 對于數(shù)字儀表板系統(tǒng)的例子,第二級分解的結(jié)對于數(shù)字儀表板系統(tǒng)的例子,第二級分解的結(jié)果分別用圖果分別用圖5.165.16,5.175.17和和5.185.18描繪。這描繪。這3 3張圖表示張圖表示對軟件結(jié)構的初步設計結(jié)果。雖然圖中每個模塊的對軟件結(jié)構的初步設計結(jié)果。雖然圖中每個模塊的名字表明了它的基本功能,但是仍然應該為每個模名字表明了它的基本功能,但是仍然應該為每個模塊寫一個簡要說明,描述:塊寫一

58、個簡要說明,描述:88進出該模塊的信息進出該模塊的信息( (接口描述接口描述) );模塊內(nèi)部的信息;模塊內(nèi)部的信息;過程陳述,包括主要判定點及任務等;過程陳述,包括主要判定點及任務等;對約束和特殊特點的簡短討論。對約束和特殊特點的簡短討論。這些描述是第一代的設計規(guī)格說明,在這個設計時這些描述是第一代的設計規(guī)格說明,在這個設計時期進一步的精化和補充是經(jīng)常發(fā)生的。期進一步的精化和補充是經(jīng)常發(fā)生的。第第7 7步步 使用設計度量和啟發(fā)式規(guī)則對第一次分割得使用設計度量和啟發(fā)式規(guī)則對第一次分割得到的軟件結(jié)構進一步精化。到的軟件結(jié)構進一步精化。89圖5.16 未經(jīng)精化的輸入結(jié)構90圖5.17 未經(jīng)精化的變換

59、結(jié)構91圖5.18 未經(jīng)精化的輸出結(jié)構92 對第一次分割得到的軟件結(jié)構,總可以根據(jù)模對第一次分割得到的軟件結(jié)構,總可以根據(jù)模塊獨立原理進行精化。為了產(chǎn)生合理的分解,得到塊獨立原理進行精化。為了產(chǎn)生合理的分解,得到盡可能高的內(nèi)聚、盡可能松散的耦合,最重要的是,盡可能高的內(nèi)聚、盡可能松散的耦合,最重要的是,為了得到一個易于實現(xiàn)、易于測試和易于維護的軟為了得到一個易于實現(xiàn)、易于測試和易于維護的軟件結(jié)構,應該對初步分割得到的模塊進行再分解或件結(jié)構,應該對初步分割得到的模塊進行再分解或合并。合并。 具體到數(shù)字儀表板的例子,對于從前面的設計具體到數(shù)字儀表板的例子,對于從前面的設計步驟得到的軟件結(jié)構,還可以

60、做許多修改。下面是步驟得到的軟件結(jié)構,還可以做許多修改。下面是某些可能的修改:某些可能的修改: 輸入結(jié)構中的模塊輸入結(jié)構中的模塊“轉(zhuǎn)換成轉(zhuǎn)換成rpm”rpm”和和“收集收集spssps”可以合并;可以合并; 模塊模塊“確定加速確定加速/ /減速減速”可以放在模塊可以放在模塊“計算計算mph”mph”下面,以減少耦合;下面,以減少耦合;93 模塊模塊“加速加速/ /減速顯示減速顯示”可以相應地放在模塊可以相應地放在模塊“顯示顯示mph”mph”的下面。的下面。 經(jīng)過上述修改后的軟件結(jié)構畫在圖經(jīng)過上述修改后的軟件結(jié)構畫在圖5.195.19中。中。 上述上述7 7個設計步驟的目的是,開發(fā)出軟件的整個

溫馨提示

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

最新文檔

評論

0/150

提交評論