軟件工程的基本思想是面對復雜的問題,讓軟件的開發(fā)按照工程的概念、原理、技術和方法模式來實施,有計劃地按照要求分階段實現。針對大型項目開發(fā),為了保證軟件產品質量,提高軟件開發(fā)效率,在進行詳細設計、程序設計之前,必須先確定軟件總體結構。軟件總體結構設計的方法主要有結構化設計、面向數據結構的設計和面向對象的設計,其中結構化設計方法是應用最廣泛的一種,它是建立良好程序結構的方法,提出了衡量模塊質量的標準是“高內聚、低耦合”。另外,結構化設計(StructuredDesign,SD)方法是一種面向過程的設計方法或面向數據流的設計方法,它可以與結構化分析(StructuredAnalysis,SA)方法、結構化程序設計(StructuredProgramming)方法前后呼應,形成了統(tǒng)一、完整的系列化方法。結構化設計方法以需求分析階段獲得的數據流圖為基礎,通過一系列映射,把數據流圖變換為軟件結構圖。
在需求分析階段,用SA方法產生了數據流圖。結構化的設計能方便地將數據流圖(DataFlowDiagram,DFD)轉換成軟件結構圖。DFD中從系統(tǒng)的輸入數據流到系統(tǒng)的輸出數據流的一連串連續(xù)變換形成了一條信息流。根據數據流類型不同,可分為變換型和事務型2類,事務型和變換型數據流的設計步驟基本是大同小異,它們之間主要差別就是從數據流圖到軟件結構的映射方法不同。因此,在進行軟件結構設計時,首先對數據流圖進行分析,然后判斷屬于那一種類型,根據不同的數據流類型,通過一系列映射,把數據流程圖轉換為軟件結構圖?;玖鞒桃妶D1.
1.1變換型數據流
信息在沿著輸入通路進入系統(tǒng),同時由外部形式變換成內部形式進入系統(tǒng)的信息,通過變換中心經加工處理,以后再沿著輸出通路變換成外部形式離開系統(tǒng)。當數據流具有了信息流的這種特征時這種信息流就叫作變換型數據流。變換型數據流的DFD可明顯地分為三大部分:邏輯輸入、變換中心(主加工)、邏輯輸出。變換型數據流結構見圖2.邏輯輸入:可以從數據流圖上的物理輸入開始,一步一步向系統(tǒng)中間移動,一直到數據流不再被看作是系統(tǒng)的輸入為止,則其前一個數據流就是系統(tǒng)的邏輯輸入??梢哉J為邏輯輸入就是離物理輸入端最遠的,且仍被看作是系統(tǒng)輸入的數據流。變換中心:多股數據流匯集的地方往往是系統(tǒng)的中心變換部分。
圖2變換型數據流結構
1.2事務型數據流
信息在沿著輸入通路進入系統(tǒng),由外部形成內部形式后到達事務中心。通常事務中心位于幾條處理路徑的起點,從數據流程圖上很容易標識出來,因為事務處理中心一般會有“發(fā)射中心”的特征。因為事務流有明顯的事務中心,所以各式各樣活動流都以事務中心為起點呈輻射狀流出。事務型數據流結構見圖3.
圖3事務型數據流結構
事務中心主要完成下述任務:接收輸入數據(輸入數據又稱為事務);分析每個事務以確定它的類型;根據事務類型選取一條活動通路。通常,事務中心前面的部分叫作接收路徑,發(fā)射中心后面各條發(fā)散路徑叫作事務處理路徑。對于每條處理路徑來講,還應該確定它們自己的流特征。
任何一個設計過程都不是統(tǒng)一、固定不變的,設計的要求越高,往往需要設計者在方法上不但具有超強的判斷能力還要有規(guī)則性的創(chuàng)造精神。根據不同類型,分析其映射過程。
(1)設計軟件結構的頂層和第1層。設計一個主模塊,并用系統(tǒng)的名字為它命名,作為系統(tǒng)的頂層。第1層為每個邏輯輸入設計一個輸入模塊,它的功能是為主模塊提供數據;為每一個邏輯輸出設計一個輸出模塊,它的功能是將主模塊提供的數據輸出;為中心變換設計一個變換模塊,它的功能是將邏輯輸入轉換成邏輯輸出。主模塊控制和協調第1層的輸入模塊、變換模塊和輸出模塊的工作。
圖4變換型數據流轉換后的初始軟件結構圖
2.2事務型數據流到軟件結構圖映射
事務型數據處理問題的工作機理是接受一項事務,根據事務處理的特點和性質,選擇分派一個適當的處理單元,然后給出結果。
圖5事務型數據流轉換后的初始軟件結構圖
2.3變換-事務混合型的系統(tǒng)結構圖
一般來講,一個大型項目不可能是單一的數據變換型,也不可能是單一的事務型,通常是變換型數據流和事務型數據流的混合體。在具體的應用中一般以變換型為主,事務型為輔的方式進行軟件結構設計。變換-事務混合型的系統(tǒng)結構圖見圖6.
圖6變換-事務混合型的系統(tǒng)結構圖
3軟件結構設計的圖形工具
結構化設計主要有兩種圖形工具:結構圖和層次圖。結構圖和層次圖基本上是大同小異,都是用來描述軟件結構的圖形工具,圖中設有很多方框,一個方框就代表一個模塊,框內注明模塊的名字或主要功能;方框之間的箭頭(或直線)用來表示模塊的調用關系。二者描述重點不一樣。
結構圖主要描述軟件結構中模塊之間的調用關系和信息傳遞問題。基本成分有模塊、調用和數據。
層次圖主要描述軟件系統(tǒng)的層次結構以及各個功能的隸屬關系,特別適合于自頂向下設計使用。在層次圖里除頂層之外,每個方框里都加編號,記錄它所在的層次及在該層次的位置。一般最上層的模塊含有退出、輸入、處理、輸出、查詢和系統(tǒng)維護模塊。根據系統(tǒng)的具體要求,下層再將功能進一步細化。
數據流程圖轉換為初始軟件結構圖后,按照高內聚低耦合、模塊化、信息隱藏的原則,應該對初始軟件結構圖進行優(yōu)化??紤]設計優(yōu)化問題時應該記住,“一個不能工作的‘最佳設計’的價值是值得懷疑的”。軟件設計人員應該致力于開發(fā)能夠滿足所有功能和性能要求,導出不同的軟件結構,對它們進行評價和比較,力求得到“最佳”的效果,這種優(yōu)化真正的優(yōu)點,就是能夠把軟件結構設計和詳細設計很好地分開。通常,用下述方法對初始化軟件結構進行優(yōu)化是合理的:在不考慮時間因素的前提下開發(fā)并精化軟件結構。在得到初始的功能結構圖之后,如果發(fā)現有幾個模塊有相似之處,可消除重復功能,改善軟件結構;模塊功能的完善化。一個完整的功能模塊,不僅應能完成指定的功能,而且還應當能夠告訴使用者完成任務的狀態(tài),以及不能完成的原因;模塊的作用范圍應在控制范圍之內。模塊的控制范圍包括它本身及其所有的從屬模塊;模塊的作用范圍是指模塊內一個判定的作用范圍,凡是受這個判定影響的所有模塊都屬于這個判定的作用范圍;盡可能減少高扇出結構。模塊的扇出過大,將使得系統(tǒng)的模塊結構圖的寬度變大,寬度越大結構圖越復雜。模塊的扇出過小也不好,這樣將使得系統(tǒng)的功能結構圖的深度大大增加,不但增加了模塊接口的復雜度,而且增加了調用和返回的時間開銷,降低系統(tǒng)的工作效率。比較適當的模塊扇出數目為2~5個,最多不要超過9個;模塊的大小要適中。限制模塊的大小是減少復雜性的手段之一,因而要求把模塊的大小限制在一定的范圍之內。模塊的大小一般用模塊的源代碼數量來衡量,通常在設計過程中,將模塊的源代碼數量限制在50~100行左右,即一頁紙的范圍內,這樣閱讀比較方便;設計功能可預測的模塊,避免過分受限制的模塊。一個功能可預測的模塊不論內部處理細節(jié)如何,但對相同的輸入數據,總能產生同樣的結果;軟件包應滿足設計約束和可移植性。一個僅處理單一功能的模塊,由于具有高度的內聚性,而受到了設計人員的重視。
綜上所述,結構化設計方法是設計軟件體系結構的一種系統(tǒng)化的方法,根據不同的映射規(guī)則,可以把數據流圖變換成軟件的初步結構圖。得出軟件的初始結構圖之后,還必須根據結構化設計的基本原則和有關啟發(fā)規(guī)則,對所得到的初始軟件結構圖進行仔細優(yōu)化,才能設計出令人滿意的軟件體系結構。





