




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第第5章章 總體設計總體設計2總體設計總體設計(概要設計或初步設計概要設計或初步設計)n總體設計的基本目的就是回答下面這個問題:“概括地說,系統應該如何實現?”3總體設計的必要性總體設計的必要性n可以站在全局高度上,花較少成本,從較抽象的層次上分析對比多種可能的系統實現方案和軟件結構;n從中選出最佳方案和最合理的軟件結構,從而用較低成本開發出較高質量的軟件系統。45.1 設計過程設計過程n總體設計過程通常由兩個主要階段組成:系統設計階段:確定系統的具體實現方案;結構設計階段:確定軟件結構。51. 設想供選擇的方案在總體設計階段分析員應該考慮各種可能的實現方案,并且力求從中選出最佳方案。數據流圖
2、是總體設計的極好的出發點。2. 選取合理的方案通常至少選取低成本、中等成本和高成本的三種方案。對每個合理的方案分析員都應該準備下列4份資料:系統流程圖;組成系統的物理元素清單;成本/效益分析;實現這個系統的進度計劃。典型的總體設計過程包括下述9個步驟63. 推薦最佳方案綜合分析對比各種合理方案的利弊,推薦一個最佳的方案,并且為推薦的方案制定詳細的實現計劃。在使用部門的負責人也接受了分析員所推薦的方案之后,將進入總體設計過程的下一個重要階段結構設計。74.功能分解為確定軟件結構,首先需要從實現角度把復雜的功能進一步分解。結合算法描述仔細分析數據流圖中的每個處理,如果一個處理的功能過分復雜,必須把
3、它的功能適當地分解成一系列比較簡單的功能。85. 設計軟件結構 設計軟件的體系結構需要在對需求分析階段生成的數據流圖進一步分析和精化的基礎上: (1)將系統按照功能劃分為模塊;通常程序中的一個模塊完成一個適當的子功能。 (2)確定模塊之間的調用關系及其接口;應該把模塊組織成良好的層次系統。 (3)對劃分的結果進行優化和調整。良好的軟件結構設計對詳細設計及編碼階段的工作都是至關重要的。軟件結構(即由模塊組成的層次系統)可以用層次圖或結構圖來描繪。如果數據流圖已經細化到適當的層次,則可以直接從數據流圖映射出軟件結構。96. 設計數據庫對于需要使用數據庫的那些應用系統,軟件工程師應該在需求分析階段所
4、確定的系統數據需求的基礎上,進一步設計數據庫。7. 制定測試計劃在軟件開發的早期階段考慮測試問題,能促使軟件設計人員在設計時注意提高軟件的可測試性。108. 書寫文檔 應該用正式的文檔記錄總體設計的結果,在這個階段應該完成的文檔通常有下述幾種:系統說明:數據流圖、成本/效益分析,用層次圖等描述的軟件構件,用IPO圖簡要描述各個模塊的算法,模塊的接口等。用戶手冊:根據總體設計階段的結果,修改在需求階段產生的初步的用戶手冊。測試計劃:包括測試策略、測試方案、預期的測試結果,測試進度計劃等。詳細的實現計劃數據庫設計結果:由數據模型(E-R圖)轉換成數據庫的設計結果。119. 審查和復審最后應該對總體
5、設計的結果進行嚴格的技術審查,在技術審查通過之后再由使用部門的負責人從管理角度進行復審。125.2 設計原理設計原理n5.2.1 模塊化模塊化:把程序劃分成獨立命名且可獨立訪問的模塊,每個模塊完成一個子功能,這些模塊集成起來構成一個整體,可以完成指定的功能以滿足用戶的需求。模塊是由邊界元素限定的相鄰程序元素的序列,而且有一個總體標識符代表它。模塊是構成程序的基本構件。過程、函數、子程序和宏等,都可作為模塊。面向對象方法學中的對象是模塊,對象內的方法(或稱為服務)也是模塊。13模塊化的根據模塊化的根據“各個擊破”的結論把復雜的問題分解成許多容易解決的小問題,原來的問題也就容易解決了。14n首先,
6、我們設C(x)為問題x所對應的復雜度函數,E(x)為解決問題x所需要的工作量函數。對于兩個問題P1和P2,如果:n C(P1) C(P2)n 即問題P1的復雜度比P2高,則顯然有:n E(P1) E(P2)n 即解決問題P1比P2所需的工作量大。15在人們解決問題的過程中,發現存在有另一個有趣的規律:C(P1+P2) C(P1)+C(P2)即解決由多個問題復合而成的大問題的復雜度大于單獨解決各個問題的復雜度之和。也就是說,對于一個復雜問題,將其分解成多個小問題分別解決比較容易。由此我們可以推出:E(P1+P2) E(P1)+E(P2)即將復雜問題分解成若干個小問題,各個擊破,所需要的工作量小于
7、直接解決復雜問題所需的工作量。16模塊化的好處:1、可以降低軟件開發的難度;、可以使程序結構清晰,增加易讀性和易修改性;、模塊化還有利于提高代碼的可重用性及團隊合作開發大型軟件的可行性。17模塊化和軟件成本圖模塊化和軟件成本圖當然不是!雖然增加程序中的模塊數可以降低開發每個模塊的工作量,但同時卻增加了設計模塊接口的工作量。通過圖5.1所示的模塊數與軟件開發成本的關系圖中可以看出,當劃當劃分的模塊數處于最分的模塊數處于最小成本區時,開發小成本區時,開發軟件的總成本最低。軟件的總成本最低。185.2.2 抽象抽象抽象:抽象是人類在解決復雜問題時經常采用的一種思維方式,它是指將現實世界中具有共性的一
8、類事物的相似的、本質的方面集中概括起來,而暫時忽略它們之間的細節差異。結構化程序中自頂向下、逐步求精的模塊劃分思想正是人類思維中運用抽象方法解決復雜問題的體現。19 軟件工程過程的每一步都是對軟件解法的抽象層次的精化:在可行性研究階段,軟件作為系統的一個完整部件;在需求分析期間,軟件解法是使用在問題環境內熟悉的方式描述的;當由總體設計向詳細設計過渡時,抽象的程度也就隨之減少;最后,當源程序寫出來以后,也就達到了抽象的最低層。205.2.3 逐步求精逐步求精定義:為了能集中精力解決主要問題而盡量推遲對問題細節的考慮。人類的認知過程遵守Miller法則:一個人在任何時候都只能把注意力集中在(72)
9、個知識塊上。逐步求精確保每個問題都將解決,而且每個問題將在適當的時候被解決,在任何時候一個人都不需要同時處理7個以上的知識塊。21采用自頂向下逐步求精、由抽象到具體的思維方式好處?、降低了軟件開發中每個階段的工作難度;、簡化了軟件的設計和實現過程;、有助于提高軟件的可讀性、可測試性和可維護性;、在程序設計中運用抽象的方法還能夠提高代碼的可重用性。22(1)信息隱藏:設計和確定模塊,使得一個模塊內包含的信息(過程和數據)對于不需要這些信息的模塊來說,是不能訪問的。 信息隱蔽的目的:主要是為了提高模塊的獨立性,減少將一個模塊中的錯誤擴散到其他模塊的機會。但是需要強調一點,信息隱蔽并不意味著某個模塊
10、中的內部信息對其他模塊來說是完全不可見或不能使用的,而是說模塊之間的信息傳遞只能通過合法的調用接口來實現。顯然,信息隱蔽對提高軟件的可讀性和可維護性都是非常重要的。5.2.4 信息隱藏和局部化信息隱藏和局部化23(2)局部化:是指把一些關系密切的軟件元素物理地放得彼此靠近。如模塊中的局部數據元素是局部化的一個例子。局部化和信息隱藏概念是密切相關的,局部化有助于信息隱藏。24 模塊的獨立性是指軟件系統中每個模塊只模塊的獨立性是指軟件系統中每個模塊只涉及軟件要求的具體的子功能,而和軟件系統涉及軟件要求的具體的子功能,而和軟件系統中其他模塊的接口是簡單的。中其他模塊的接口是簡單的。5.2.5 模塊獨
11、立模塊獨立不同模塊之間不同模塊之間互連程度互連程度的度量。的度量。模塊的獨立程度可以由兩個定性標準度量,這兩個標準分別稱為耦合和內聚。25模塊獨立是模塊化、抽象、信息隱藏和局部化概念的直接結果。模塊的獨立性的優點:比較容易開發出有效模塊化(即具有獨立的模塊)的軟件。獨立的模塊比較容易測試和維護。261) 耦合性耦合性n耦合性是對一個軟件結構內部不同模塊間聯系緊密程耦合性是對一個軟件結構內部不同模塊間聯系緊密程度的度量指標。度的度量指標。n決定耦合性高低的主要因素決定耦合性高低的主要因素由于模塊間的聯系是通過模塊接口實現的,因此,模由于模塊間的聯系是通過模塊接口實現的,因此,模塊耦合性的高低主要
12、取決于塊耦合性的高低主要取決于模塊接口的復雜程度模塊接口的復雜程度、調用模調用模塊的方式塊的方式以及以及通過模塊接口的數據通過模塊接口的數據。模塊間的耦合性。模塊間的耦合性主要主要可劃分可劃分為如下幾種類型。為如下幾種類型。低低數據數據耦合耦合 高高耦合性耦合性控制控制耦合耦合特征耦特征耦合合公共公共耦合耦合內容內容耦合耦合27注意! 在軟件設計中應該追求盡可能松散耦合的系統。否則影響系統的可理解性、可測性、可靠性和可維護性。28耦合程度強弱的區分耦合程度強弱的區分n無耦合:如果兩個模塊中的每一個都能獨立地工作而不需要另一個模塊的存在,那么它們彼此完全獨立,模塊間無任何連接。29 (2) (2
13、) 數據耦合。數據耦合。若兩個模塊之間僅通過模塊參數交換信息,且交若兩個模塊之間僅通過模塊參數交換信息,且交換的信息全部為簡單數據,則稱這種耦合為數據耦合。數據耦合的耦合換的信息全部為簡單數據,則稱這種耦合為數據耦合。數據耦合的耦合性最低,通常軟件中都包含有數據耦合。數據耦合的例子如下所示:性最低,通常軟件中都包含有數據耦合。數據耦合的例子如下所示:int sum(int a,int b)int sum(int a,int b)int c;int c; c=a+b; c=a+b; return(c); return(c); main()main()int x,y;int x,y; printf
14、(x+y= %d,sum(x,y); printf(x+y= %d,sum(x,y);/* *主函數與主函數與sumsum函數之間即為數據耦合關系函數之間即為數據耦合關系* */ /30 (3) (3) 控制耦合。控制耦合。若模塊之間交換的信息中包含有控制信息若模塊之間交換的信息中包含有控制信息( (盡管盡管有時控制信息是以數據的形式出現的有時控制信息是以數據的形式出現的) ),則稱這種耦合為控制耦合。控制,則稱這種耦合為控制耦合。控制耦合是中等程度的耦合,它會增加程序的復雜性。控制耦合的例子如下所耦合是中等程度的耦合,它會增加程序的復雜性。控制耦合的例子如下所示:示:void output(
15、flag)void output(flag)if (flag) printf(OK! );if (flag) printf(OK! ); else printf(NO! ); else printf(NO! ); main()main() int flag; int flag;output(flag);output(flag); / /* *主函數與主函數與outputoutput函數之間即為控制耦合關系函數之間即為控制耦合關系* */ /A 模塊flagf1Bf2fn 31(4)特征耦合:當把整個數據結構作為參數傳遞而被調用的模塊只需要使用其中一部分數據元素。int sum(struc st
16、u)int sum(struc stu)int c,a,b;int c,a,b;a=stu.math;a=stu.math;b=stu.english;b=stu.english; c=a+b; c=a+b; return(c); return(c); main()main()int x,y;int x,y; struc student stu=“Tom”,18,97,95 struc student stu=“Tom”,18,97,95 printf(“ printf(“總分總分= %d,sum(stu);= %d,sum(stu);/* *主函數與主函數與sumsum函數之間即為特征耦合關
17、系函數之間即為特征耦合關系* */ /struct student char name20; int age; int math; int english; ; 32(5) (5) 公共環境耦合。公共環境耦合。若兩個或多個模塊通過引用公共數據相互聯系,則稱這種耦合為公共耦合。例如,在程序中定義了全局變量,并在多個模塊中對全局變量進行了引用,則引用全局變量的多個模塊間就具有了公共耦合關系。 全局全局數據區數據區ABCDEFB、C、E 為公共耦合33(6)內容耦合:)內容耦合:一個模塊訪問另一個模塊的內部數據;一個模塊不通過正常入口而轉到另一個模塊的內部;兩個模塊有一部分程序代碼重疊;一個模塊有多
18、個入口(這意味著一個模塊有幾種功能)。n最不希望要的耦合!34耦合耦合采取下述設計原則采取下述設計原則n耦合是影響軟件復雜程度的一個重要因素。應該采取下述設計原則:盡量使用數據耦合,少用控制耦合和特征耦合,限制公共環境耦合的范圍,完全不用內容耦合。35課堂練習:課堂練習:兩個模塊都是用同一張數據表,這種耦合屬于()兩個模塊都是用同一張數據表,這種耦合屬于() A. 數據耦合數據耦合 B. 控制耦合控制耦合 C. 公共環境耦合公共環境耦合 D. 內容耦合內容耦合36課堂思考:課堂思考: 請問如何將下面的控制耦合轉變成數據耦合?請問如何將下面的控制耦合轉變成數據耦合?A 模塊flagf1Bf2fn
19、 A 模塊f1f2fn flag數據耦合數據耦合控制耦合控制耦合37內聚內聚內聚標志一個模塊內各個元素彼此結合的緊密程度,它是信息隱藏和局部化概念的自然擴展。理想內聚的模塊只做一件事情!理想內聚的模塊只做一件事情!設計時應該力求做到高內聚,通常中等程度的內聚也是可以采用的,而且效果和高內聚相差不多;不要使用低內聚。38內聚內聚n內聚和耦合是密切相關的,模塊內的高內聚往往意味著模塊間的松耦合。內聚和耦合都是進行模塊化設計的有力工具。n經實踐證明,保證模塊的高內聚性比低耦合性更為重要,在軟件設計時應將更多的注意力集中在提高模塊的內聚性上。模塊的內聚性主要可劃分為如下幾種不同的類型。 39低內聚低內
20、聚n偶然內聚:偶然內聚:如果一個模塊完成一組任務,這些任務彼此間即使有關系,關系也是很松散的。n邏輯內聚:邏輯內聚: 一個模塊完成的任務在邏輯上屬于相同或相似的一類。n時間內聚:時間內聚:一個模塊包含的任務必須在同一段時間內執行。調用模塊判定讀一個記錄寫一個記錄被調用模塊邏輯內聚40中內聚中內聚n過程內聚一個模塊內的處理元素是相關的,而且必須以特定次序執行。n通信內聚模塊中所有元素都使用同一個輸入數據和(或)產生同一個輸出數據。41高內聚高內聚n順序內聚一個模塊內的處理元素和同一個功能密切相關,而且這些處理必須順序執行(通常一個處理元素的輸出數據作為下一個處理元素的輸入數據)。n功能內聚模塊內
21、所有處理元素屬于一個整體,完成一個單一的功能。42n上述七種內聚的優劣評分(分值越高,內聚程度越好),將得到如下結果:功能內聚10分時間內聚3分順序內聚9分邏輯內聚1分通信內聚7分偶然內聚0分過程內聚5分低低功能功能內聚內聚順序順序內聚內聚通信通信內聚內聚過程過程內聚內聚時間時間內聚內聚邏輯邏輯內聚內聚耦然耦然內聚內聚 高高強強弱弱 內聚性內聚性模塊獨立性模塊獨立性人們在開發計算機軟件的長期實踐中積累了豐富的經驗,總結這些經驗得出了一些啟發式規則。往往能幫助他們找到改進軟件設計提高軟件質量的途徑。體系結構設計的啟發規則有如下7點。5.3 啟發規則啟發規則1. 改進軟件結構,提高模塊獨立性設計出
22、軟件的初步結構以后,應該審查分析這個結構,通過模塊分解或合并,力求降低耦合提高內聚。例如,多個模塊公有的一個子功能可以獨立成一個模塊,由這些模塊調用;有時可以通過分解或合并模塊以減少控制信息的傳遞及對全程數據的引用,并且降低接口的復雜程度。2. 模塊規模應該適中n經驗表明,一個模塊的規模不應過大,最好能寫在一頁紙內(通常不超過60行語句)。3. 深度、寬度、扇出和扇入都應適當軟件結構中的深度和寬度不宜過大軟件結構中的深度和寬度不宜過大!(1)深度:表示軟件結構中控制的層數,它往往能粗略地標志一個系統的大小和復雜程度。如果層數過多則應該考慮是否有許多管理模塊過分簡單了,能否適當合并。(2)寬度:
23、是軟件結構內同一個層次上的模塊總數的最大值。一般說來,寬度越大系統越復雜。對寬度影響最大的因素是模塊的扇出。47如下圖所示的軟件結構圖中,深度為5,寬度為8。n影響深度的因素:深度在程序中表現為模塊的嵌套調用,嵌套的層數越多,程序就越復雜,程序的可理解性也就隨之下降。深度過大可通過將結構中過于簡單的模塊分層與上一級模塊合并來解決;n影響寬度的因素:對寬度影響最大的因素是模塊的扇出,即模塊可以調用的下級模塊數越多,軟件結構的寬度就越大。而寬度過大則可通過增加中間層來解決。顯然,軟件結構中的深度和寬度是相互對立的兩個方面,降低深度會引起寬度的增加,而降低寬度又會帶來深度的增加。(3)扇出:是一個模
24、塊直接控制(調用)的模塊數目。扇出過大:意味著模塊過分復雜,需要控制和協調過多的下級模塊,應該適當增加中間層次的控制模塊。n扇出過小:(例如總是1)也不好,可以把下級模塊進一步分解成若干個子功能模塊,或者合并到它的上級模塊中去。經驗表明,一個設計得好的典型系統的平均扇出通常是3或4。n分解模塊或合并模塊必須符合問題結構,不能違背模塊獨立原理。(4)扇入:一個模塊的扇入表明有多少個上級模塊直接調用它。n扇入越大則共享該模塊的上級模塊數目越多,這是有好處的,但是,不能違背模塊獨立原理單純追求高扇入。n 觀察大量軟件系統后發現,設計得很好的軟件結構通常頂層扇出比較高,中層扇出較少, 底層模塊有高扇入
25、。50圖5.5 模塊的扇入和扇出(a) 扇入;(b) 扇出M1M2MnM(a)(b)M1M2MkM51三種情形需要關注:n若模塊的扇入越大,則說明共享該模塊的上級模塊數越多,或者說該模塊在程序中的重用性越高,這正是程序設計所追求的目標之一。(類似重構里的方法抽取)n若模塊的扇出若過大,如在一個模塊中要調用八個下級模塊,則會使該模塊的調用控制過于復雜。這種現象發生的原因通常都是由于設計階段,模塊細化的過程中,分解速度過快造成的。最常見的解決辦法是通過在此模塊和下級模塊間增加一個中間層來控制模塊分解的速度。n若模塊的扇出過小,如扇出為1(下級模塊層中只有一個模塊),在系統設計中通常是不可取的。常見
26、的解決方法是考慮將其合并到上級模塊中。但若合并會影響模塊的獨立性,則將其保留下來也未嘗不可。根據實踐經驗,設計良好的典型系統中,模塊的平均扇出通常為3或4。52圖5.6 軟件結構圖示例 經過對大量軟件系統的研究后發現,在設計良好的軟件結構中,通常頂層的扇出數較大,中間層的扇出數較小,底層的扇入數較大,如圖5.6所示4. 模塊的作用域應該在控制域之內(1)模塊的作用域:受該模塊內一個判定影響的所有模塊的集合。n在一個設計得很好的系統中,所有受判定影響的模塊應該都從屬于做出判定的那個模塊,最好局限于做出判定的那個模塊本身及它的直屬下級模塊。否則軟件難以理解,并可能出現控制耦合。(2)模塊的控制域:
27、這個模塊本身以及所有直接或間接從屬于它的模塊的集合。n 圖5.2 模塊的作用域和控制域模塊A的控制域是A、B、C、D、E、F模塊的集合。要實現作用域是控制域的子集,需要修改軟件結構,如判定從A移到M或將G移到A下。5. 力爭降低模塊接口的復雜程度模塊接口復雜是軟件發生錯誤的一個主要原因。應該仔細設計模塊接口,使得信息傳遞簡單并且和模塊的功能一致。如:quad_root(TBL,X)是求一元二次方程根的模塊,其中數組TBL傳送方程的系數,用數組X來傳回求得的根。不利于于理解和維護,而且開發期也易發生錯誤。改成quad_root(a,b,c,root1,root2)簡單接口。6. 設計單入口單出口
28、的模塊不要使模塊間出現內容耦合。當從頂部進入模塊并且從底部退出來時,軟件是比較容易理解的,因此也是比較容易維護的。7. 模塊功能應該可以預測如果一個模塊可以當做一個黑盒子,也就是說,只要輸入的數據相同就產生同樣的輸出,這個模塊的功能就是可以預測的。以上列出的7條啟發式規則多數是經驗規律,對改進設計,提高軟件質量,往往有重要的參考價值。(1)層次圖用來描繪軟件的層次結構,很適于在自頂向下設計軟件的過程中使用。n層次圖中的一個矩形框代表一個模塊,方框間的連線表示調用關系。n層次方框圖方框間的連線表示組成關系。(P68)5.4 描繪軟件結構的圖形工具描繪軟件結構的圖形工具 5.4.1 層次圖和層次圖
29、和HIPO圖圖圖5.3 正文加工系統的層次圖 60領導層輔助決策系領導層輔助決策系統統查詢查詢輔助決策輔助決策物物資資信信息息重重點點供供料料信信息息商商情情信信息息人人員員狀狀況況合合同同監監視視財財務務信信息息計計劃劃執執行行情情況況工工程程進進展展情情況況超超儲儲低低儲儲情情況況經經營營指指標標歷歷年年對對比比價價格格預預測測物物資資用用量量預預測測庫庫存存定定額額核核定定庫庫存存結結構構分分析析經經濟濟采采購購批批量量保保本本保保利利分分析析6162層次圖很適于在自頂向下設計軟件的過程中使用。(2)帶編號的層次圖:HIPO圖 (層次圖加輸入/處理/輸出圖”的英文縮寫)。為了能使層次圖具
30、有可追蹤性,除了最頂層的方框之外,每個方框都加了編號,稱為HIPO圖 。圖5.4 帶編號的層次圖(H圖)656667計算出勤獎1.1.2.1計算業績獎1.1.2.2計算工資檔案各基本數據項之和1.1.1計算獎金1.1.2計算應發工資1.1計算水電扣款1.2.1計算缺勤扣款1.2.2計算所得稅扣款1.2.3計算扣款1.2計算實發工資1.3計算工資1查詢職工賬號2.1生成工資存款清單2.2工資轉存2打印工資清單3工資計算系統圖5.3 工資計算系統的H圖每一個矩形框代表一個模塊,圖中最頂層的矩形框表示系統中的主控模塊,矩形框之間的連線用于表示模塊之間的調用關系。適用于自頂向下進行分解的軟件結構設計方
31、法。n結構圖中一個方框代表一個模塊,框內注明模塊的名字或主要功能。n方框之間的箭頭(或直線)表示模塊的調用關系。位于上方的方框代表的模塊調用下方的模塊。5.4.2 結構圖(用于結構圖(用于描繪軟件結構)描繪軟件結構)69表表5.1 5.1 結構圖中的基本符號結構圖中的基本符號ABCABC符 號含 義用于表示模塊,方框中標明模塊的名稱用于描述模塊之間的調用關系用于表示模塊調用過程中傳遞的信息,箭頭上標明信息的名稱;箭頭尾部為空心圓表示傳遞的信息是數據,若為實心圓則表示傳遞的是控制信息 表示模塊A選擇調用模塊B或模塊C.判定為真時調用B,為假時調用C表示模塊A循環調用模塊B和模塊C圖5.5 結構圖
32、的例子產生最佳解的一般結構尾部是空心圓表示傳遞的是數據。實心圓表示傳遞的是控制信息。結構圖可以作為檢查設計正確性和評價模塊獨立性的好方法:n傳送的每個數據元素都是完成模塊功能所必須的嗎?n完成模塊功能必須的每個數據元素都傳送來了嗎?n所有數據元素都只和單一的功能有關嗎?如果發現結構圖上模塊間的聯系不容易解釋,則應該考慮是否設計上有問題。面向數據流的設計方法定義了一些不同的“映射”,利用這些映射可以把數據流圖變換成軟件結構。因為任何軟件系統都可以用數據流圖表示,所以面向數據流的設計方法理論上可以設計任何軟件的結構。通常所說的結構化設計方法(簡稱SD方法),也就是基于數據流的設計方法。5.5 面向
33、數據流的設計方法面向數據流的設計方法面向數據流的設計方法把信息流映射成軟件結構。信息流有變換流和事務流兩種類型。1. 變換流n信息沿輸入通路進入系統,同時由外部形式變換成內部形式;n進入系統的信息通過變換中心,經加工處理;n再沿輸出通路變換成外部形式離開軟件系統。5.5.1 概念概念圖5.8 變換流2. 事務流數據沿輸入通路到達一個處理T(事務中心),處理T根據輸入數據的類型在若干個動作序列中選出一個來執行,稱為事務流。 圖5.9 事務流 處理T稱為事務中心,它完成下述任務:(1)接收輸入數據(事務);(2) 分析每個事務以確定它的類型;(3) 根據事務類型選取一條活動通路。77圖5.10面向
34、數據流方法的設計過程圖5.10說明了使用面向數據流方法逐步設計的一般過程。3. 設計過程變換分析是一系列設計步驟的總稱,經過這些步驟把具有變換流特點的數據流圖按預先確定的模式映射成軟件結構。1. 例子在設計汽車數字儀表板時,將軟件做在只讀存儲器中,成為設備的一部分,從而使設備具有某些“智能”。進行面向數據流的變換分析示例。5.5.2 變換分析變換分析假設的儀表板將完成下述功能:(1) 通過模數轉換實現傳感器和微處理機接口;(2) 在發光二極管面板上顯示數據;(3) 指示每小時英里數(mph),行駛的里程,每加侖油行駛的英里數(mpg)等等;(4) 指示加速或減速;(5) 超速警告:如果車速超過
35、55英里/小時,則發出超速警告鈴聲。在軟件需求分析階段應該建立起必要的文檔資料,特別是數據流圖。2. 設計步驟(開發給軟件的整體表示,即軟件結構)第1步 復查基本系統模型。復查的目的是確保系統的輸入數據和輸出數據符合實際。第2步 復查并精化數據流圖。確保數據流圖給出了目標系統的正確的邏輯模型,并且應該使數據流圖中每個處理都代表一個規模適中相對獨立的子功能。在需求分析階段產生的數字儀表板系統的數據流圖如圖5.11所示。81圖5.11數字儀表板系統的數據流圖第3步 確定數據流圖具有變換特性還是事務特性。從圖5.11看出,數據沿著兩條輸入通路進入系統,然后沿著5條通路離開,沒有明顯的事務中心。因此可
36、以認為這個信息流具有變換流的總特征。第4步 確定輸入流和輸出流的邊界,從而孤立出變換中心。輸入流和輸出流的邊界和對它們的解釋有關,也就是說,不同的設計人員可能會在流內選取稍微不同的點作為邊界的位置。84圖5.12具有邊界的數據流圖輸入通路變換中心輸出通路第5步 完成“第一級分解”。軟件結構代表對控制的自頂向下的分配,所謂分解就是分配控制的過程。對于變換流的情況,數據流圖被映射成一個特殊的軟件結構,這個結構控制輸入、變換和輸出等信息處理過程。圖5.13 第一級分解的方法控制模塊Cm協調下述從屬的控制功能輸入信息處理控制模塊Ca,協調對所有輸入數據的接收變換中心控制模塊Ct,管理對內部形式的數據的
37、所有操作輸出信息處理控制模塊Ce,協調輸出信息的產生過程圖5.14 數字儀表板系統的第一級分解第6步 完成“第二級分解”。把數據流圖中的每個處理映射成軟件結構中一個適當的模塊。圖5.15表示進行第二級分解的普遍途徑。圖5.15 第二級分解的方法從變換中心的邊界開始沿著輸入通路向外移動,把輸入通路中每個處理映射成軟件結構中Ca控制下的一個低層模塊。90圖5.12具有邊界的數據流圖輸入通路獲取輸入結構從變換中心的邊界開始沿著輸入通路向外移動,把輸入通路中每個處理映射成軟件結構中Ca控制下的一個低層模塊。圖5.16 未經精化的輸入結構從變換中心的邊界開始沿著輸入通路向外移動,把輸入通路中每個處理映射
38、成軟件結構中Ca控制下的一個低層模塊。92圖5.12具有邊界的數據流圖變換中心把變換中心內的每個處理映射成受Ct控制的一個模塊獲取變換結構圖5.17 未經精化的變換結構把變換中心內的每個處理映射成受Ct控制的一個模塊94圖5.12具有邊界的數據流圖輸出通路沿輸出通路向外移動,把輸出通路中每個處理映射成直接或間接受模塊Ce控制的一個低層模塊獲取輸出結構圖5.18 未經精化的輸出結構沿輸出通路向外移動,把輸出通路中每個處理映射成直接或間接受模塊Ce控制的一個低層模塊n。第7步 使用設計度量和啟發式規則對第一次分割得到的軟件結構進一步精化。為了得到一個易于實現、易于測試和易于維護的軟件結構,應該對初步分割得到的模塊進行再分解或合并。具體到數字儀表板的例子,可做如下某些可能的修改:(1)輸入結構中的模塊“轉換成rpm”和“收集sps”可以合并;(2)模塊“確定加速/減速”可以放在模塊“計算mph”下面,以減少耦合;(3)模塊“加速/減速顯示”可以相應地放在模塊“顯示mph”的下面。圖5.19 經過修改的精化后的數字儀表板系統的軟件結構系統的軟件結構確定軟
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司電商活動策劃方案
- 公司職員會議活動方案
- 可摘義齒固位技術-洞察及研究
- 2025年供熱通風與空調工程師考試試題及答案
- 2025年法律與生物倫理的考試試題及答案
- 2025年中國類人膠原蛋白行業市場全景分析及前景機遇研判報告
- 2024年度浙江省護師類之主管護師典型題匯編及答案
- 公寓防火安全教育
- 員工入職三級安全培訓
- DB43-T 2864-2023 土家族非遺樂器咚咚喹通.用技術要求
- 2023年黑龍江省文化和旅游系統事業單位人員招聘筆試模擬試題及答案解析
- 2023年江西新余市數字產業投資發展有限公司招聘筆試題庫含答案解析
- LY/T 3323-2022草原生態修復技術規程
- 部編版六年級語文下冊課件第1課《北京的春節》《臘八粥》
- 涂裝工模擬練習題含答案
- 2023-2024學年河南省永城市小學數學二年級下冊期末評估測試題
- 乳腺疾病的超聲診斷 (超聲科)
- 服務精神:馬里奧特之路
- 《建筑施工安全檢查標準》JGJ59-2011圖解
- 華為大學人才培養與發展實踐
- 醫療垃圾廢物處理課件
評論
0/150
提交評論