第三章 結構化設計
1. 軟件設計階段的主要任務、方法、階段:
需求分析階段的主要任務是確定系統(tǒng)必須“做什么”,形成軟件的需求規(guī)格說明書,軟件設計階段的主要任務是確定系統(tǒng)“怎么做”,從軟件需求規(guī)格說明書出發(fā),形成軟件的具體設計方案,軟件設計可以采用多種方法,如結構化設計方法、面向數(shù)據(jù)結構的設計方法、面向對象的設計方法等,結構化軟件設計可以分為總體設計和詳細設計兩個階段。
2. 總體設計階段的主要任務及其內(nèi)容:
總體設計階段的主要任務是把系統(tǒng)的功能需求分配給軟件結構,形成軟件的模塊結構圖(MSD),在結構圖中矩形表示功能單元,稱為“模塊”,連接上下層模塊的線段表示它們之間的調(diào)用關系,在總體設計階段,每個模塊還處于黑盒子級,模塊通過外部特征標識,名字、輸入、輸出。
3. 總體設計的表示形式及其內(nèi)容(層次圖、HIPO圖、結構圖):
層次圖是軟件總體設計階段常使用的表示形式之一,用來描繪軟件的層次結構,圖中的每個方框代表一個模塊,方框間的連線表示模塊的調(diào)用關系,層次圖很適合于在自頂向下設計軟件的過程中使用;
HIPO圖是由美國IBM公司發(fā)明的“層次圖+輸入/處理/輸出圖”的英文縮寫,HIPO圖實際上由H圖和IPO圖兩部分組成,H圖就是上面提到的層次圖,為了能使HIPO圖具有可跟蹤性,在H圖里除了頂層的方框之外,每個方框都加了編號;
結構圖和層次圖類似,圖中每個方框代表一個模塊,方框之間的箭頭(或直線)表示模塊的調(diào)用關系,在結構圖中通常還用帶注釋的箭頭表示模塊調(diào)用過程中來回傳遞的信息,尾部是空心圓表示傳遞的是數(shù)據(jù),實心圓表示傳遞的是控制信息。
4. 模塊及其組成:
模塊是執(zhí)行一個特殊任務或實現(xiàn)一個特殊的抽象數(shù)據(jù)類型的一組例程和數(shù)據(jù)結構,模塊由兩部分組成,接口和實現(xiàn)模塊功能的執(zhí)行機制。
5. 面向數(shù)據(jù)流的設計方法(綜合應用):
面向數(shù)據(jù)流的設計方法把數(shù)據(jù)流圖映射成為軟件結構,數(shù)據(jù)流圖的類型決定了映射的方法,數(shù)據(jù)流圖可以分為變換型數(shù)據(jù)流圖和事務型數(shù)據(jù)流圖,具有較明顯的輸入、變換(或稱主加工)和輸出界面的數(shù)據(jù)流圖稱為變換型數(shù)據(jù)流圖,數(shù)據(jù)沿輸入通路到達一個處理模塊,這個處理模塊根據(jù)輸入數(shù)據(jù)的類型在若干動作序列中選出一個來執(zhí)行,這類數(shù)據(jù)流圖稱為事務型數(shù)據(jù)流圖,并且稱這個模塊為事務中心,它完成如下任務,接收輸入數(shù)據(jù)、分析數(shù)據(jù)并確定數(shù)據(jù)類型、根據(jù)數(shù)據(jù)類型選取一條活動通路。
6. 評價軟件設計質(zhì)量的主要準則(模塊化、抽象、耦合、內(nèi)聚)及詳細內(nèi)容:
模塊化是好的軟件設計的一個基本準則;
抽象就是抽出事務的本質(zhì)特性而暫時不考慮它們的細節(jié),模塊是按照不同的抽象級別安排的,高層抽象模塊向讀者隱藏了功能實現(xiàn)的細節(jié),這就是信息隱蔽,模塊之間相互隱藏自身的實現(xiàn)細節(jié)對一個好的設計來說是至關重要的;
耦合是對不同模塊之間相互依賴程度的度量,緊密耦合是指兩個模塊之間存在著很強的依賴關系,松散耦合是指兩個模塊之間存在一些依賴關系,但他們之間的連接比較弱,無耦合是指模塊之間根本沒有任何連接;
耦合的強度依賴于以下四個因素,一個模塊對另一個模塊的引用,一個模塊向另一個模塊傳遞的數(shù)據(jù)量,一個模塊施加到另一個模塊的控制的數(shù)量,模塊之間接口的復雜程度;
從強到弱的幾種常見的耦合類型,內(nèi)容耦合,一個模塊直接修改或操作另一個模塊的數(shù)據(jù);公共耦合,兩個以上的模塊共同引用一個全局數(shù)據(jù)項;控制耦合,一個模塊在界面上傳遞一個信號控制另一個模塊,接收信號的模塊的動作根據(jù)信號值進行調(diào)整,稱為控制耦合;標記耦合,若兩個模塊至少有一個通過界面?zhèn)鬟f的公共參數(shù)包含內(nèi)部結構;數(shù)據(jù)耦合,模塊間通過參數(shù)傳遞基本類型的數(shù)據(jù),數(shù)據(jù)耦合是簡單的耦合形式,系統(tǒng)中至少必須存在這種類型的耦合;
內(nèi)聚度量的是一個模塊內(nèi)部各成分之間相互關聯(lián)的強度,如果一個模塊的所有成分都直接參與并且對于完成同一功能來說都是基本的,則該模塊是高內(nèi)聚的;
從低到高的幾種常見的內(nèi)聚類型,偶然內(nèi)聚,一個模塊的各個成分之間毫無關系;邏輯內(nèi)聚,幾個邏輯上相關的功能被放在同一模塊中;時間內(nèi)聚,一個模塊完成的功能必須在同一時間內(nèi)執(zhí)行,但這些功能只是因為時間因素關聯(lián)在一起;過程內(nèi)聚,一個模塊內(nèi)部的處理成分是相關的,而且這些處理必須以特定的次序執(zhí)行;通信內(nèi)聚,一個模塊的所有成分都操作同一數(shù)據(jù)集或生成同一數(shù)據(jù)集;順序內(nèi)聚,一個模塊的各個成分和同一個功能密切相關,而且一個成分的輸出作為另一個的成分;功能內(nèi)聚,理想的內(nèi)聚是功能內(nèi)聚,模塊的所有成分對于完成單一的功能都是基本的;
內(nèi)聚和耦合是密切相關的,在進行軟件設計時,應力爭做到強內(nèi)聚、弱耦合。
7. 結構化設計的啟發(fā)式規(guī)則:
改進軟件結構提高模塊獨立性,模塊規(guī)模應該適中,深度、寬度、扇入和扇出應適中,模塊的作用域應該在控制域之內(nèi),力爭降低模塊接口的復雜性,模塊功能應該可以預測;
模塊的作用域定義為受該模塊內(nèi)一個判定影響的所有模塊的集合,模塊的控制域是這個模塊本身以及所有直接或間接從屬于它的模塊的集合。
8. 結構化分析與結構化設計的區(qū)別:
結構化分析得到數(shù)據(jù)流圖、數(shù)據(jù)字典等,屬于邏輯模型,結構化設計得到模塊結構圖,屬于程序模型。
9. 詳細設計階段的目標、表現(xiàn)、內(nèi)容:
詳細設計階段的根本目標是確定怎樣具體的實現(xiàn)所要求的系統(tǒng),詳細設計以總體設計階段的工作為基礎,但又不同于總體設計,主要表現(xiàn)在,在總體設計階段,數(shù)據(jù)項和數(shù)據(jù)結構以比較抽象的方式描述,詳細設計要提供關于算法的更多細節(jié);
詳細設計的模塊包含實現(xiàn)對應的總體設計的模塊所需要的處理邏輯,主要有,詳細的算法,數(shù)據(jù)表示和數(shù)據(jù)結構,實施的功能和使用的數(shù)據(jù)之間的關系。
10.結構化程序的三種基本結構,結構化設計的目標:
結構化程序設計技術采用自頂向下逐步求精的設計方法和單入口單出口的控制結構,并且只包含順序、選擇和循環(huán)三種結構,結構化程序設計的目標之一是使程序的控制流程線性化,即程序的動態(tài)執(zhí)行順序符合靜態(tài)書寫結構,結構化程序設計的觀點是要求設計好結構的程序。
11.詳細設計的任務,詳細設計的工具及其內(nèi)容特點:
詳細設計的任務是給出軟件模塊結構中各個模塊的內(nèi)部過程描述,也就是模塊內(nèi)部的算法設計,詳細設計的工具可以分為圖形、表格、語言三種,包括程序流程圖、盒圖(N-S圖)、PAD圖、類程序設計語言(PDL);
程序流程圖中使用的主要符號包括順序、選擇、循環(huán)結構,它的主要缺點如下,程序流程圖本質(zhì)上不是逐步求精的好工具,它誘使程序員過早的考慮程序的控制流程,而不去考慮程序的全局結構,程序流程圖中用箭頭代表控制流,因此程序員不受任何約束,可以完全不顧結構程序設計的精神,隨意轉移控制,程序流程圖不易表示數(shù)據(jù)結構;
PAD是問題分析圖的英文縮寫,它用二維樹形結構的圖表示程序的控制流,PAD圖的主要優(yōu)點如下,使用表示結構化控制結構的PAD符號所設計出來的程序必然是結構化程序,PAD圖所描述的程序結構十分清晰,用PAD圖表現(xiàn)程序邏輯,易讀、易懂、易記,很容易將PAD圖轉換成高級語言源程序,既可用于表示程序邏輯,也可用于描述數(shù)據(jù)結構,PAD圖的符號支持自頂向下逐步求精的使用,PAD圖是面向高級程序設計語言的;
類程序設計語言也稱為偽碼,它是用正文形式表示數(shù)據(jù)結構和處理過程的設計工具,PDL具有以下特點,關鍵字的固定語法,提供了結構化控制結構、數(shù)據(jù)說明和模塊化的手段,自然語言的自由語法,用于描述處理過程和判定條件,數(shù)據(jù)說明的手段,既包括簡單的數(shù)據(jù)結構,又包括復雜的數(shù)據(jù)結構,模塊定義和調(diào)用的技術,提供各種接口描述模式;
PDL作為一種設計工具有如下一些優(yōu)點,可以作為注釋直接插在源程序中間,可以使用普通的正文編輯程序或文字處理系統(tǒng),很方面的完成PDL的書寫和編輯工作,已經(jīng)有自動處理程序存在,而且可以自動由PDL生成程序代碼,PDL的缺點是不如圖形工具形象直觀,描述復雜的條件組合與動作間的對應關系時,不如判定表或判定樹清晰簡單。
本章設計題為DFD到模塊結構圖的轉換和詳細設計工具的具體應用,為筆試和試驗的必考題型,非常重要,請考生參考輔導第256頁(1)~(7)題,務必每一種題型都熟練掌握。
本章與上一章的設計題是軟件工程科目的重點,大約占筆試的35%,占試驗的70%,并且前面四章的所有內(nèi)容大約占筆試的60%,希望讀者重點掌握。
1. 軟件設計階段的主要任務、方法、階段:
需求分析階段的主要任務是確定系統(tǒng)必須“做什么”,形成軟件的需求規(guī)格說明書,軟件設計階段的主要任務是確定系統(tǒng)“怎么做”,從軟件需求規(guī)格說明書出發(fā),形成軟件的具體設計方案,軟件設計可以采用多種方法,如結構化設計方法、面向數(shù)據(jù)結構的設計方法、面向對象的設計方法等,結構化軟件設計可以分為總體設計和詳細設計兩個階段。
2. 總體設計階段的主要任務及其內(nèi)容:
總體設計階段的主要任務是把系統(tǒng)的功能需求分配給軟件結構,形成軟件的模塊結構圖(MSD),在結構圖中矩形表示功能單元,稱為“模塊”,連接上下層模塊的線段表示它們之間的調(diào)用關系,在總體設計階段,每個模塊還處于黑盒子級,模塊通過外部特征標識,名字、輸入、輸出。
3. 總體設計的表示形式及其內(nèi)容(層次圖、HIPO圖、結構圖):
層次圖是軟件總體設計階段常使用的表示形式之一,用來描繪軟件的層次結構,圖中的每個方框代表一個模塊,方框間的連線表示模塊的調(diào)用關系,層次圖很適合于在自頂向下設計軟件的過程中使用;
HIPO圖是由美國IBM公司發(fā)明的“層次圖+輸入/處理/輸出圖”的英文縮寫,HIPO圖實際上由H圖和IPO圖兩部分組成,H圖就是上面提到的層次圖,為了能使HIPO圖具有可跟蹤性,在H圖里除了頂層的方框之外,每個方框都加了編號;
結構圖和層次圖類似,圖中每個方框代表一個模塊,方框之間的箭頭(或直線)表示模塊的調(diào)用關系,在結構圖中通常還用帶注釋的箭頭表示模塊調(diào)用過程中來回傳遞的信息,尾部是空心圓表示傳遞的是數(shù)據(jù),實心圓表示傳遞的是控制信息。
4. 模塊及其組成:
模塊是執(zhí)行一個特殊任務或實現(xiàn)一個特殊的抽象數(shù)據(jù)類型的一組例程和數(shù)據(jù)結構,模塊由兩部分組成,接口和實現(xiàn)模塊功能的執(zhí)行機制。
5. 面向數(shù)據(jù)流的設計方法(綜合應用):
面向數(shù)據(jù)流的設計方法把數(shù)據(jù)流圖映射成為軟件結構,數(shù)據(jù)流圖的類型決定了映射的方法,數(shù)據(jù)流圖可以分為變換型數(shù)據(jù)流圖和事務型數(shù)據(jù)流圖,具有較明顯的輸入、變換(或稱主加工)和輸出界面的數(shù)據(jù)流圖稱為變換型數(shù)據(jù)流圖,數(shù)據(jù)沿輸入通路到達一個處理模塊,這個處理模塊根據(jù)輸入數(shù)據(jù)的類型在若干動作序列中選出一個來執(zhí)行,這類數(shù)據(jù)流圖稱為事務型數(shù)據(jù)流圖,并且稱這個模塊為事務中心,它完成如下任務,接收輸入數(shù)據(jù)、分析數(shù)據(jù)并確定數(shù)據(jù)類型、根據(jù)數(shù)據(jù)類型選取一條活動通路。
6. 評價軟件設計質(zhì)量的主要準則(模塊化、抽象、耦合、內(nèi)聚)及詳細內(nèi)容:
模塊化是好的軟件設計的一個基本準則;
抽象就是抽出事務的本質(zhì)特性而暫時不考慮它們的細節(jié),模塊是按照不同的抽象級別安排的,高層抽象模塊向讀者隱藏了功能實現(xiàn)的細節(jié),這就是信息隱蔽,模塊之間相互隱藏自身的實現(xiàn)細節(jié)對一個好的設計來說是至關重要的;
耦合是對不同模塊之間相互依賴程度的度量,緊密耦合是指兩個模塊之間存在著很強的依賴關系,松散耦合是指兩個模塊之間存在一些依賴關系,但他們之間的連接比較弱,無耦合是指模塊之間根本沒有任何連接;
耦合的強度依賴于以下四個因素,一個模塊對另一個模塊的引用,一個模塊向另一個模塊傳遞的數(shù)據(jù)量,一個模塊施加到另一個模塊的控制的數(shù)量,模塊之間接口的復雜程度;
從強到弱的幾種常見的耦合類型,內(nèi)容耦合,一個模塊直接修改或操作另一個模塊的數(shù)據(jù);公共耦合,兩個以上的模塊共同引用一個全局數(shù)據(jù)項;控制耦合,一個模塊在界面上傳遞一個信號控制另一個模塊,接收信號的模塊的動作根據(jù)信號值進行調(diào)整,稱為控制耦合;標記耦合,若兩個模塊至少有一個通過界面?zhèn)鬟f的公共參數(shù)包含內(nèi)部結構;數(shù)據(jù)耦合,模塊間通過參數(shù)傳遞基本類型的數(shù)據(jù),數(shù)據(jù)耦合是簡單的耦合形式,系統(tǒng)中至少必須存在這種類型的耦合;
內(nèi)聚度量的是一個模塊內(nèi)部各成分之間相互關聯(lián)的強度,如果一個模塊的所有成分都直接參與并且對于完成同一功能來說都是基本的,則該模塊是高內(nèi)聚的;
從低到高的幾種常見的內(nèi)聚類型,偶然內(nèi)聚,一個模塊的各個成分之間毫無關系;邏輯內(nèi)聚,幾個邏輯上相關的功能被放在同一模塊中;時間內(nèi)聚,一個模塊完成的功能必須在同一時間內(nèi)執(zhí)行,但這些功能只是因為時間因素關聯(lián)在一起;過程內(nèi)聚,一個模塊內(nèi)部的處理成分是相關的,而且這些處理必須以特定的次序執(zhí)行;通信內(nèi)聚,一個模塊的所有成分都操作同一數(shù)據(jù)集或生成同一數(shù)據(jù)集;順序內(nèi)聚,一個模塊的各個成分和同一個功能密切相關,而且一個成分的輸出作為另一個的成分;功能內(nèi)聚,理想的內(nèi)聚是功能內(nèi)聚,模塊的所有成分對于完成單一的功能都是基本的;
內(nèi)聚和耦合是密切相關的,在進行軟件設計時,應力爭做到強內(nèi)聚、弱耦合。
7. 結構化設計的啟發(fā)式規(guī)則:
改進軟件結構提高模塊獨立性,模塊規(guī)模應該適中,深度、寬度、扇入和扇出應適中,模塊的作用域應該在控制域之內(nèi),力爭降低模塊接口的復雜性,模塊功能應該可以預測;
模塊的作用域定義為受該模塊內(nèi)一個判定影響的所有模塊的集合,模塊的控制域是這個模塊本身以及所有直接或間接從屬于它的模塊的集合。
8. 結構化分析與結構化設計的區(qū)別:
結構化分析得到數(shù)據(jù)流圖、數(shù)據(jù)字典等,屬于邏輯模型,結構化設計得到模塊結構圖,屬于程序模型。
9. 詳細設計階段的目標、表現(xiàn)、內(nèi)容:
詳細設計階段的根本目標是確定怎樣具體的實現(xiàn)所要求的系統(tǒng),詳細設計以總體設計階段的工作為基礎,但又不同于總體設計,主要表現(xiàn)在,在總體設計階段,數(shù)據(jù)項和數(shù)據(jù)結構以比較抽象的方式描述,詳細設計要提供關于算法的更多細節(jié);
詳細設計的模塊包含實現(xiàn)對應的總體設計的模塊所需要的處理邏輯,主要有,詳細的算法,數(shù)據(jù)表示和數(shù)據(jù)結構,實施的功能和使用的數(shù)據(jù)之間的關系。
10.結構化程序的三種基本結構,結構化設計的目標:
結構化程序設計技術采用自頂向下逐步求精的設計方法和單入口單出口的控制結構,并且只包含順序、選擇和循環(huán)三種結構,結構化程序設計的目標之一是使程序的控制流程線性化,即程序的動態(tài)執(zhí)行順序符合靜態(tài)書寫結構,結構化程序設計的觀點是要求設計好結構的程序。
11.詳細設計的任務,詳細設計的工具及其內(nèi)容特點:
詳細設計的任務是給出軟件模塊結構中各個模塊的內(nèi)部過程描述,也就是模塊內(nèi)部的算法設計,詳細設計的工具可以分為圖形、表格、語言三種,包括程序流程圖、盒圖(N-S圖)、PAD圖、類程序設計語言(PDL);
程序流程圖中使用的主要符號包括順序、選擇、循環(huán)結構,它的主要缺點如下,程序流程圖本質(zhì)上不是逐步求精的好工具,它誘使程序員過早的考慮程序的控制流程,而不去考慮程序的全局結構,程序流程圖中用箭頭代表控制流,因此程序員不受任何約束,可以完全不顧結構程序設計的精神,隨意轉移控制,程序流程圖不易表示數(shù)據(jù)結構;
PAD是問題分析圖的英文縮寫,它用二維樹形結構的圖表示程序的控制流,PAD圖的主要優(yōu)點如下,使用表示結構化控制結構的PAD符號所設計出來的程序必然是結構化程序,PAD圖所描述的程序結構十分清晰,用PAD圖表現(xiàn)程序邏輯,易讀、易懂、易記,很容易將PAD圖轉換成高級語言源程序,既可用于表示程序邏輯,也可用于描述數(shù)據(jù)結構,PAD圖的符號支持自頂向下逐步求精的使用,PAD圖是面向高級程序設計語言的;
類程序設計語言也稱為偽碼,它是用正文形式表示數(shù)據(jù)結構和處理過程的設計工具,PDL具有以下特點,關鍵字的固定語法,提供了結構化控制結構、數(shù)據(jù)說明和模塊化的手段,自然語言的自由語法,用于描述處理過程和判定條件,數(shù)據(jù)說明的手段,既包括簡單的數(shù)據(jù)結構,又包括復雜的數(shù)據(jù)結構,模塊定義和調(diào)用的技術,提供各種接口描述模式;
PDL作為一種設計工具有如下一些優(yōu)點,可以作為注釋直接插在源程序中間,可以使用普通的正文編輯程序或文字處理系統(tǒng),很方面的完成PDL的書寫和編輯工作,已經(jīng)有自動處理程序存在,而且可以自動由PDL生成程序代碼,PDL的缺點是不如圖形工具形象直觀,描述復雜的條件組合與動作間的對應關系時,不如判定表或判定樹清晰簡單。
本章設計題為DFD到模塊結構圖的轉換和詳細設計工具的具體應用,為筆試和試驗的必考題型,非常重要,請考生參考輔導第256頁(1)~(7)題,務必每一種題型都熟練掌握。
本章與上一章的設計題是軟件工程科目的重點,大約占筆試的35%,占試驗的70%,并且前面四章的所有內(nèi)容大約占筆試的60%,希望讀者重點掌握。

