软件工程(三)—— 结构化方法
一、結構化需求分析
? ? ? ?在軟件系統的需求工作中,通常面臨三大挑戰,即問題空間理解、人與人之間的通信、需求的變化性。為了應對這三大挑戰,支持需求工作目標的實現,一種好的需求技術應具有以下基本特征:
①?提供方便的通信機制;
②?鼓勵需求分析人員使用問題空間的術語思考問題,編寫文檔;
③?提供定義系統邊界的方法;
④?提供支持抽象的基本機制;
⑤?為需求分析人員提供多種可供選擇的議案;
⑥?提供特定的技術,適應需求的變化等。
? ? ? ? 典型的方法包括結構化方法、面向數據結構的軟件開發方法以及近年來流行的面向對象方法等。
? ? ? ? 結構化方法是一種系統的軟件開發方法,其中包括結構化分析方法、結構化設計方法以及結構化程序設計方法。
? ? ? ? 軟件需求分析的目標是給出“系統必須做什么的一個估算”,即需求規格說明——以一種系統化的形式,準確地表達用戶的需求,其中應不存在二義性和不一致性等問題。這樣的需求需求規格說明可作為開發組織和客戶關于“系統必須做什么”的一種契約,并作為以后開發工作的基礎。
1、基本術語
(1)?數據流
? ? ? ? 在計算機軟件領域中,把數據定義為客觀事物的一種表示,而把信息定義為具有特定語義的數據。所以,數據是信息的載體。在結構化分析方法中,數據流是數據的流動。
(2)?加工
? ? ? ? 在結構化分析方法中,加工是數據的變換單元,即它接受輸入的數據,對其進行處理,并產生輸出。
? ? ? ? 既然加工是數據變換單元,因此它必須關聯一個或多個輸入/輸出數據流,一個加工相關聯的輸入和輸出數據,可進一步增強該加工的語義。有序的加工及相關的數據流形成系統的信息流。
(3)?數據存儲
? ? ? ? 數據存儲是數據的靜態結構。
(4)?數據源和數據潭
? ? ? ? 數據源是數據流的起點;數據潭是數據流的歸宿。數據源和數據潭是系統之外的實體,可以是人、物或其他軟件系統。它們均用一個矩形來表示。
2、系統功能模型表示
? ? ? ? 需求分析的首要任務是建立系統功能模型,為此結構化分析方法給出了一種表達功能模型的工具,即數據流圖,簡稱DFD圖。
? ? ? ? 簡單地說,DFD是一種描述數據變換的圖形化工具,其中包含的元素可以是數據流,數據存儲、加工、數據源和數據潭等。
? ? ? ? 在使用DFD圖來表達系統功能模型時,應注意以下3個問題:
①?在DFD圖中,數據流起到連接其他實體的作用;
②?加工之間可以有多個數據流,這些數據流之間可以沒有任何直接關系,數據流圖也不表明它們的先后次序;
③?對于一個較大的軟件系統,往往需要采用多層次的數據流圖。
3、建模過程
(1)?建立系統環境圖,確定系統語境
? ? ? ? 經過需求發現工作之后,分析人員一般可以比較容易地確定系統的數據源和數據潭,以及和這些數據源和數據潭相關的數據流,形成系統頂層數據流圖,也稱為系統環境圖。
(2)?自頂向下,逐步求精,建立系統的層次數據流圖
? ? ? ? 在頂層數據流圖的基礎上,按功能分解的設計思想,對加工進行分解,自頂向下的畫各層設計流圖,直到底層的加工足夠簡單,功能清晰易懂,不必再繼續分解為止,并把這樣的加工稱為葉加工。
? ? ? ? 系統分層數據流圖的層次編號是按頂層、0層、1層、2層…的次序編排的。頂層數據流圖標出了系統的邊界,0層數據流圖是對頂層數據流圖中包含的大加工的細化,1層數據流圖又是對0層中加工的細化。為了方便,有時稱這些圖互為“父子”關系。
? ? ? ? 為了方便管理,從0層開始就要對數據流圖以及其中的加工進行編號,并在整個系統中應是唯一的。編號的規則如下:
①?頂層數據流圖以及其中唯一加工均不必編號;
②?由于0層通常只有一個子圖,因此該子圖的層號為0,而其中每一加工的編號分別為0.1,0.2,0.3...;
③?以后各層,其子圖層號為上一層(父層)的加工號;而該層中的加工編號為子圖層號,后跟一個小數點,再加上該加工在子圖中的順序號,例如1.1,1.2,1.3...。
? ? ? ? 由“父圖”生成“子圖”的步驟如下:
①?將“父圖”的每一加工按其功能分解為若干個子加工;
②?將“父圖”的輸入流和輸出流“分派”到相關的子加工;
③?在各加工之間建立合理的關聯,必要時引入數據存儲,使之形成一個有機的整體。
(3)?定義數據字典
? ? ? ? 它依據系統的數據流圖,定義其中包含的所有數據流和數據存儲的數據結構,直到給出構成以上數據的各數據項的基本數據類型。
? ? ? ? 數據是對客體的一種表示,所有客體均可用三種基本結構表示,這三種結構分別是順序結構、選擇結構和重復結構。它們的特點如下:
①?順序結構
? ? ? ? 順序結構是指數據A是由數據B和數據C順序構成的,并記為“+”。例如:“學生成績”?是由“學號”、“姓名”、“成績”構成的,記為:學生成績 =?學號 +?姓名 +?成績,其中 =?表達的意思是“定義為”。
②?選擇結構
? ? ? ? 選擇結構是由數據A或是數據B或數據C定義的,并記為“|”。例如:“性別”是“男”或是“女”,記為:性別 =?男|女。
③?重復結構
? ? ? ? 重復結構是指數據A是由多個重復出現的數據B構成的,并記為“{ }”。例如:“學生成績表”是由多個“學生成績”構成的,記為:學生成績表 = {學生成績}
? ? ? ? 在數據字典中,為了使定義的結構便于理解和閱讀,一般按3種條目來組織,即數據流條目、數據存儲條目和數據項條目。其中,數據流條目給出DFD圖中所有數據流的結構定義;數據存儲條目給出DFD圖中所有數據存儲的結構定義;數據項條目給出所有數據項的類型定義。
(4)?描述加工
? ? ? ? 它依據系統的數據流圖,給出其中每一加工的小說明。由于需求分析的目的是定義問題,因此對DFD圖中的每一加工只需給出加工的輸入數據和輸出數據之間的關系。對此可根據實際情況采取以下3種表達工具:
①?結構化自然語言
? ? ? ? 如果一個加工的輸入數據和輸出數據之間的邏輯關系比較簡單,可以使用結構化自然語言予以表述。
②?判定表
? ? ? ? 如果一個加工的輸入數據和輸出數據之間比較復雜,可以采用一定的表達工具,例如判定表或判定樹等,以避免產生不一致的理解。
? ? ? ? 一個判定表由4個區組成,Ⅰ區內列出所有的條件類別,Ⅱ區內列出所有的條件組合,Ⅲ區內列出所有的操作,Ⅳ區內列出在相應的組合條件下,某個操作是否執行或執行情況。示例圖如下:
| Ⅰ?條件類別 | Ⅱ?條件組合 |
| Ⅲ?操作 | Ⅳ?操作執行 |
③?判定樹
? ? ? ? 判定樹也是一種描述加工的工具。?
4、應用中注意的問題
(1)?模型平衡問題
①?系統DFD中每個數據流和數據存儲都要在數據字典中予以定義,并且數據名一致;
②?系統DFD中最底層的加工必須在小說明中予以描述,并且加工名一致;
③?父圖中的某加工的輸入輸出數據流和分解這個加工的子圖的輸入輸出數據流必須保持一致,特別是保持頂層輸入數據流和輸出數據流在個數上、在標識上均是一樣的;
④?在加工小說明中,所使用的數據流必須是在數據字典中定義的,并且名字是一致的。
(2)?信息復雜性控制問題
?①?上層數據流可以打包;
②?為了便于理解,一幅數據流圖中的圖元個數要控制在一定的數量以內;
③?檢查與每個加工相關的數據流,是否有太多的輸入輸出數據流,并尋找可降低該加工接口復雜性的、對數據流進行劃分的方法;
④?分析數據內容,確定是否所有的輸入信息都用于產生輸出信息。
5、需求驗證
? ? ? ? 需求驗證應驗證需求規格說明書中的每一單一需求是否滿足5個性質,即必要性、無歧義性、可測性、可跟蹤性、可測量性;驗證需求規格說明是否滿足4個性質,即重要性和穩定性程序、可修改性、完整性和一致性。
二、結構化設計
? ? ? ? 結構化設計的主要任務是在需求分析的基礎上,定義滿足需求所需要的結構,即針對給定的問題,給出該問題的軟件解決方案。其中,結構化設計又進一步細分為總體設計和詳細設計。
1、總體設計
(1)?總體設計的目標及表示
? ? ? ? 總體設計階段的基本任務是把系統的功能需求分配到一個特定的軟件體系結構中。表達這一軟件體系結構的工具有以下幾種:
① Yourdon提出的模塊結構圖
? ? ? ? 模塊結構圖是一種描述軟件宏觀結構的圖形化工具。在結構圖中每個方框代表一個模塊,框內注明模塊的名字或主要功能。連接上下層模塊的線段表示他們之間的調用關系。帶注釋的箭頭表示模塊調用過程中傳遞的信息。處于較高層次的是控制模塊,它們的功能相對復雜而且抽象;處于較低層次的是從屬模塊,它們的功能相對簡單而且具體。依據控制模塊的內部邏輯,一個控制模塊可以調用一個或多個下屬模塊;同時,一個下屬模塊也可以被多個控制模塊所調用,即盡可能的復用已經設計出的低層模塊。
②?層次圖
? ? ? ? 層次圖主要用于描繪軟件的層次結構。在層次圖中,每個方框代表一個模塊,方框間的連線表示模塊的調用關系。層次圖適合自頂向下設計軟件的過程中使用。
③ HIPO圖
? ? ? ? 實際上,HIPO圖是由H圖(層次圖)和IPO圖兩部分組成的。為了使用HIPO圖具有可跟蹤性,除最頂層的方框外,為每個方框都加了編號。對H圖中的每個方框,應有一張IPO圖,用于描述這個方框所代表的模塊的處理邏輯。IPO圖的基本形式是在左邊的輸入框中列出有關的輸入數據,在中間的處理框中列出主要的處理以及處理次序,在右邊的輸出框中列出產生的輸出數據。另外,還用類似向量符號(箭頭線)清楚地指出數據通信的情況。
(2)?總體設計步驟
? ? ? ? 總體設計的基本步驟是,首先將系統的DFD圖轉化為初始的模塊結構圖,再基于“高內聚低耦合”這一軟件設計原則,通過模塊化,將初始的模塊結構圖轉化為最終的、可供詳細設計使用的模塊結構圖(MSD)。
? ? ? ? 待建的數據流圖一般可以分成兩類,即變換型數據流圖和事務型數據流圖。
①?變換型數據流圖
? ? ? ? 具有較明顯的輸入部分和變換部分之間的界面、變換部分和輸出部分之間界面的數據流圖,稱為變換型數據流圖。左邊的虛線是輸入和變換之間的界面,右邊的虛線是變換與輸出之間的界面。左邊虛線處的輸入稱為邏輯輸入,右邊虛線處的輸出稱為邏輯輸出。最開始的輸入稱為物理輸入,最終結束的輸出稱為物理輸出。
? ? ? ? DFD圖所對應的系統,在高層次上來來講由3個部分組成,即處理輸入數據的部分、數據變換部分以及處理數據輸出部分。那么數據處理工作也分為3個部分,即獲取數據、變換數據、輸出數據。
②?事務型數據流圖
? ? ? ? 當數據到達一個加工T,該加工T根據輸入數據的值,在其后的若干動作序列(事務)中選出一個來執行,這類數據流圖稱為事務型數據流圖。
? ? ? ? 加工T完成的任務有:接收輸入數據、分析并確定對應的事務、選取與該事務對應的一條活動路徑。
? ? ? ? 事務型數據流圖所描述系統的數據處理模式為“集中——發散”式。其中,每一路徑完成一項事務處理并且一般可能還要調用若干個操作模塊。而這些模塊又可以共享一些細節模塊。因此,事務型數據流圖可以具有多種形式的軟件結構。
?
? ? ? ? 結構化設計方法基于“自頂向下,功能分解”的基本原則,針對兩種不同類型的數據流圖,分別提出了變換設計和事務設計。其中,變換設計的目標是將變換型數據流圖映射為模塊結構圖,而事務設計的目標是將事務型數據流圖映射為模塊結構圖。
? ? ? ? 總體設計分為3個階段。第一階段為初始設計,在對給定的數據流圖進行復審和精華的基礎上,將其轉換為初始的模塊結構圖。第二階段為精化設計,依據模塊“高內聚,低耦合”的原則,精化初始的模塊結構圖,并設計其中的全局數據結構和每一模塊的接口。第三階段為復審階段,對前兩個階段所得到的高層軟件結構進行復審,必要時還可能需要以該軟件結構做一些精化工作。
? ? ? ? 在實踐中,一個大型的軟件系統一般是變換型流圖和事務型流圖的混合結構。在軟件總體設計中,通常以變換設計為主,事務設計為輔進行結構設計。即首先利用變換設計,把軟件系統分為輸入、中心變換和輸出3個部分,設計上層模塊,然后根據各部分數據流圖的結構特點,適當地利用變換設計和事務設計進行細化,得到初始的模塊結構圖,再按照“高內聚低耦合”的原則,對初始的模塊結構圖進行精化,得到最終的模塊結構圖。
(3)?模塊化以及啟發式規則?
①??模塊化
? ? ? ? 模塊是執行一個特殊任務的一個過程以及相關的數據結構。模塊通常由接口和模塊體(接口的實現)組成。
? ? ? ? 結構化設計方法是一種典型的模塊化方法,即把一個待開發的軟件分解成若干簡單的、具有高內聚低耦合的模塊,這一過程稱為模塊化。
⒈ 耦合
? ? ? ? 耦合是指不同模塊之間相互依賴程序的度量。耦合的產生主要基于以下幾個因素:
●?一個模塊對另一個模塊的引用;
●?一個模塊向另一個模塊傳遞數據;
●?一個模塊對另一個模塊施加控制。
? ? ? ? 常見的模塊耦合類型有:內容耦合、公共耦合、控制耦合、標記耦合、數據耦合。
⒉?內聚
? ? ? ? 內聚是指一個模塊內部各部分之間相互關聯程度的度量。
? ? ? ? 常見的模塊內聚類型有:偶然內聚、邏輯內聚、時間內聚、過程內聚、通信內聚、順序內聚、功能內聚。
②?啟發式規則
? ? ? ??從實踐中總結的一些啟發式規則有:
●?改進軟件結構,提高模塊獨立性
●?力求模塊規模適中
●?力求深度、寬度、扇出(需要控制和協調的下級模塊數量)和扇入(直接調用它的上級模塊的數量)適中
●?盡力使用模塊的作用域在其控制域之內
●?盡力降低模塊接口的復雜度
●?力求模塊功能可以預測
2、詳細設計
? ? ? ? 通過詳細設計,具體描述模塊結構圖中的每一模塊,即給出實現模塊功能的實施機制,包括一組例程和數據結構,從而精確地定義了滿足需求所規約的結構。詳細設計的目標是將總體設計階段所產生的系統高層結構映射為以這些術語所表達的低層結構,也是系統的最終結構。
(1)?結構化程序設計
? ? ? ? 結構化程序設計方法是一種基于結構的編程方法,即采用順序結構、選擇結構以及重復結構進行編程,其中每一結構只允許一個入口和一個出口。它的本質是使程序的控制流程線性化,實現程序的動態執行順序符合靜態書寫的結構,從而增強程序的可讀性,有利于理解、測試和排錯。
(2)?詳細設計工具
? ? ? ? 詳細設計工具通常分為圖形、表格和語言3種。
①?程序流程圖
? ? ? ? 程序流程圖又稱為程序框圖。在程序流程圖中,使用的主要符號包括順序結構、選擇結構和循環結構。它的主要優點是對控制流程的描繪很直觀,便于初學者掌握。但它也有很多缺點,比如:
●?它誘使程序員過早的考慮程序的控制流程,而不去考慮程序的全局結構;
●?它所表達的控制流,往往不受任何約束可隨意轉移,從而會影響甚至破壞好的系統結構;
●?它不易表示數據結構。
②?盒圖(N-S圖)
? ? ? ? 采用盒圖進行設計時,首先給出一個大的矩形,然后為了實現該模塊的功能,再將該矩形分成若干個不同的部分,分別表示不同的子處理過程,這些子處理過程又可以進一步分解成更小的部分,其中每次分解都只能使用給定的基本符號,最終形成表達該模塊的設計。
③ PAD圖
? ? ? ? PAD圖采用二維樹形結構來表示程序的控制流。采用PSD圖設計的模塊一定是結構化的,并且所描述的程序結構也是十分清晰的。左邊的豎線是程序的主線,是第一層控制結構,隨著程序層次的增加,PAD圖逐漸向右延伸,每增加一個層次,圖形向右擴展一條豎線,豎線的條數總是程序的控制層次數,從而使PAD圖表現出的處理邏輯易讀、易懂、易記。
④?類程序設計語言(PDL)
? ? ? ? PDL也稱為偽碼,它不僅可以作為一種設計工具,還可以作為注釋工具直接插在源程序中,以保持文檔和程序的一致性,提高了文檔的質量,可以使用普通的正文編輯程序或文字處理系統,很方便地完成PDL的書寫和編輯工作,已經存在的一些PDL處理工具,可以自動由PDL生成程序代碼。
? ? ? ? PDL的缺點是水如圖形工具那樣形象直觀,并且當描述復雜的條件組合與動作間的對應關系時,不如判定表或判定樹那樣清晰直觀。
(3)?設計規約
? ? ? ? 設計規約通常包括概要設計規約和詳細設計規約,它們是相應設計過程的輸出文檔。
? ? ? ? 概要設計規約指明高層軟件體系結構,它的的主要內容包括:系統環境、軟件模塊的結構、模塊描述、文件結構和全局數據文件的邏輯結構、測試需求等。
? ? ? ? 詳細設計規約是對軟件各部分屬性的描述,它的主要內容包括:各處理過程的算法、算法所涉及的全部數據結構的描述。
總結
以上是生活随笔為你收集整理的软件工程(三)—— 结构化方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android-android stud
- 下一篇: 2020自动化控制科学与工程保研面试经历