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