第13章 設(shè)計(jì)概念和原則
在任何工程化產(chǎn)品或系統(tǒng)的開發(fā)階段中,設(shè)計(jì)是第一步。它可以定義為“為了能夠足夠詳細(xì)地定義一種設(shè)備、一個(gè)處理或一個(gè)系統(tǒng),以便保證其物理實(shí)現(xiàn),而應(yīng)用各種技術(shù)和原則的過程?!盵TAY59]。
設(shè)計(jì)者的目標(biāo)是生成一個(gè)隨后要構(gòu)造的實(shí)體的一種模型或表示。開發(fā)模型的過程綜合了基于構(gòu)造類似實(shí)體的經(jīng)驗(yàn)的直覺和判斷、一系列指導(dǎo)模型演化路徑的原則和直觀推斷、一系列判斷質(zhì)量的標(biāo)準(zhǔn)以及導(dǎo)出最終設(shè)計(jì)表示的迭代過程。
象其他學(xué)科中的設(shè)計(jì)方法一樣,軟件設(shè)計(jì)隨著新的方法、更好的分析和更廣泛的理解的引入而不斷地變化著。與機(jī)械或電子設(shè)計(jì)不同的是,軟件設(shè)計(jì)在它的演化過程中處于一種相對(duì)早期的階段。我們對(duì)軟件設(shè)計(jì)(相對(duì)于“編程”或“代碼書寫”)給予正式考慮僅僅才三十年,因此,軟件設(shè)計(jì)方法學(xué)缺少那些更經(jīng)典的工程設(shè)計(jì)學(xué)科所具有的深度、靈活性和定量性。但是,軟件設(shè)計(jì)的方法是存在的;設(shè)計(jì)質(zhì)量的標(biāo)準(zhǔn)是能夠獲得的;設(shè)計(jì)符號(hào)體系也是能夠應(yīng)用的。在本章中,我們探討可以應(yīng)用于所有軟件設(shè)計(jì)的基本概念和原則。第14章和第21章考察各種軟件設(shè)計(jì)方法。
13.1軟件設(shè)計(jì)和軟件工程
軟件設(shè)計(jì)處于軟件工程過程中的技術(shù)核心位置,并且它的應(yīng)用不考慮所使用的軟件過程模型。軟件設(shè)計(jì)開始于對(duì)軟件需求進(jìn)行分析和規(guī)約之后,它是構(gòu)造和驗(yàn)證軟件所需的三項(xiàng)技術(shù)活動(dòng)—設(shè)計(jì)、代碼生成和測(cè)試—之一,每一項(xiàng)活動(dòng)都最終導(dǎo)致經(jīng)過驗(yàn)證的計(jì)算機(jī)軟件的方式變換信息。
分析模型(第12章)的每一個(gè)元素均提供了創(chuàng)建設(shè)計(jì)模型所需的信息。軟件設(shè)計(jì)中的信息流表示在圖13-1中,通過數(shù)據(jù)、功能和行為模型展示的軟件需求被傳送給設(shè)計(jì)階段,使用許多設(shè)計(jì)方法(在后面章節(jié)中討論)中的一種,設(shè)計(jì)階段產(chǎn)生數(shù)據(jù)設(shè)計(jì)、體系結(jié)構(gòu)設(shè)計(jì)、接口設(shè)計(jì)和過程設(shè)計(jì)。
數(shù)據(jù)設(shè)計(jì)將分析時(shí)創(chuàng)建的信息域模型變換成實(shí)現(xiàn)軟件所需的數(shù)據(jù)結(jié)構(gòu)。在實(shí)體—關(guān)系圖中定義的數(shù)據(jù)對(duì)象和關(guān)系以及數(shù)據(jù)字典中描述的詳細(xì)數(shù)據(jù)內(nèi)容為數(shù)據(jù)設(shè)計(jì)活動(dòng)奠定了基礎(chǔ)。
結(jié)構(gòu)設(shè)計(jì)定義了程序的主要結(jié)構(gòu)元素之間的關(guān)系。這種設(shè)計(jì)表示—計(jì)算機(jī)程序的模塊框架—可以從分析模型和分析模型中定義的子系統(tǒng)的交互導(dǎo)出。
接口設(shè)計(jì)描述了軟件內(nèi)部、軟件和協(xié)作系統(tǒng)之間以及軟件同人之間如何通信。一個(gè)接口意味著信息流(如數(shù)據(jù)和/或控制流),因此,數(shù)據(jù)和控制流圖提供了接口設(shè)計(jì)所需的信息。
過程設(shè)計(jì)將程序體系結(jié)構(gòu)的結(jié)構(gòu)元素變換為對(duì)軟件構(gòu)件的過程性描述。從PSPEC,CSPEC和STD獲得的信息是過程設(shè)計(jì)的基礎(chǔ)。
我們?cè)谠O(shè)計(jì)時(shí)作出的決策最終將會(huì)影響軟件構(gòu)造是否成功,更重要的是會(huì)決定,軟件維護(hù)的難易程度,但是,為什么設(shè)計(jì)如此重要呢?
軟件設(shè)計(jì)的重要性可以用一個(gè)詞來表達(dá)—質(zhì)量。設(shè)計(jì)是在軟件開發(fā)中形成質(zhì)量的地方,設(shè)計(jì)為我們提供了可以用于質(zhì)量評(píng)估的軟件表示,設(shè)計(jì)是我們能將用戶需求準(zhǔn)確地轉(zhuǎn)化為完整的軟件產(chǎn)品或系統(tǒng)的方法。軟件設(shè)計(jì)作為所有軟件工程和軟件維護(hù)步驟的基礎(chǔ),沒有設(shè)計(jì),我們將冒構(gòu)造出不穩(wěn)定系統(tǒng)的風(fēng)險(xiǎn)—稍作改動(dòng)就會(huì)失??;難于測(cè)試的系統(tǒng);直到軟件工程過程后期才能評(píng)估系統(tǒng)的質(zhì)量,到那時(shí)時(shí)間已不夠并且已經(jīng)花銷很多經(jīng)費(fèi)。
13.2 設(shè)計(jì)過程
軟件設(shè)計(jì)是一個(gè)迭代的過程,通過它需求被變換為用于構(gòu)造軟件的“藍(lán)圖”。初始時(shí),藍(lán)圖描述了軟件的整體視圖,也就是說,設(shè)計(jì)在高的抽象層次上表示—在該層次可以直接追蹤到特定數(shù)據(jù)、功能和行為需求。隨著數(shù)據(jù)迭代的開始,后續(xù)的精化將導(dǎo)致更低抽象級(jí)別的設(shè)計(jì)表示,這些表示仍然能夠追蹤到需求,但是連接更微妙了。
13.2.1 設(shè)計(jì)和軟件質(zhì)量
在整個(gè)設(shè)計(jì)過程中,演化的設(shè)計(jì)的質(zhì)量可以通過在第8章討論的一系列正式技術(shù)復(fù)審或設(shè)計(jì)追蹤審查來評(píng)估。McGlanghlin[McG91]提出了可以指導(dǎo)良好設(shè)計(jì)演化的三個(gè)特征:
·設(shè)計(jì)必須實(shí)現(xiàn)所有包含在分析模型中的明顯需求,并且必須滿足客戶希望的所有隱式需求。
·對(duì)于那些生成代碼和那些進(jìn)行測(cè)試并隨后維護(hù)軟件的人而言,設(shè)計(jì)必須是可讀的,可理解的。
·設(shè)計(jì)應(yīng)該提供軟件的完整面貌,這與從某個(gè)實(shí)現(xiàn)視角看到的數(shù)據(jù)、功能、和行為域有關(guān)。
這些特征中的每一個(gè)實(shí)際上都是設(shè)計(jì)過程的目標(biāo)。但是如何達(dá)到這些目標(biāo)呢?
為評(píng)價(jià)一項(xiàng)設(shè)計(jì)表示的質(zhì)量,我們必須建立良好的設(shè)計(jì)技術(shù)標(biāo)準(zhǔn),在本章的后面部分,我們將詳細(xì)討論設(shè)計(jì)質(zhì)量標(biāo)準(zhǔn),現(xiàn)在,我們給出下面的指南:
1.設(shè)計(jì)應(yīng)該展示一種層次性組織,從而使得可以有指導(dǎo)性地使用軟件元素間的控制。①
2.設(shè)計(jì)應(yīng)該模塊化,也就是說軟件應(yīng)該邏輯地劃分成完成特定功能和子功能的構(gòu)件。
3.設(shè)計(jì)應(yīng)該既包含數(shù)據(jù)抽象,也包含過程抽象。
4.設(shè)計(jì)應(yīng)該導(dǎo)出具有獨(dú)立功能特征的模塊(例如,子例程或過程)。
5.設(shè)計(jì)應(yīng)該導(dǎo)出降低模塊和外部環(huán)境間復(fù)雜連接的接口。
6.設(shè)計(jì)應(yīng)該通過使用由軟件需求分析過程中獲得的信息導(dǎo)出要驅(qū)動(dòng)的可重復(fù)的方法。
這些標(biāo)準(zhǔn)不是偶然獲得的,軟件設(shè)計(jì)過程通過應(yīng)用基本設(shè)計(jì)原則、系統(tǒng)化的方法學(xué)和完全的復(fù)審來促進(jìn)良好的設(shè)計(jì)。
在任何工程化產(chǎn)品或系統(tǒng)的開發(fā)階段中,設(shè)計(jì)是第一步。它可以定義為“為了能夠足夠詳細(xì)地定義一種設(shè)備、一個(gè)處理或一個(gè)系統(tǒng),以便保證其物理實(shí)現(xiàn),而應(yīng)用各種技術(shù)和原則的過程?!盵TAY59]。
設(shè)計(jì)者的目標(biāo)是生成一個(gè)隨后要構(gòu)造的實(shí)體的一種模型或表示。開發(fā)模型的過程綜合了基于構(gòu)造類似實(shí)體的經(jīng)驗(yàn)的直覺和判斷、一系列指導(dǎo)模型演化路徑的原則和直觀推斷、一系列判斷質(zhì)量的標(biāo)準(zhǔn)以及導(dǎo)出最終設(shè)計(jì)表示的迭代過程。
象其他學(xué)科中的設(shè)計(jì)方法一樣,軟件設(shè)計(jì)隨著新的方法、更好的分析和更廣泛的理解的引入而不斷地變化著。與機(jī)械或電子設(shè)計(jì)不同的是,軟件設(shè)計(jì)在它的演化過程中處于一種相對(duì)早期的階段。我們對(duì)軟件設(shè)計(jì)(相對(duì)于“編程”或“代碼書寫”)給予正式考慮僅僅才三十年,因此,軟件設(shè)計(jì)方法學(xué)缺少那些更經(jīng)典的工程設(shè)計(jì)學(xué)科所具有的深度、靈活性和定量性。但是,軟件設(shè)計(jì)的方法是存在的;設(shè)計(jì)質(zhì)量的標(biāo)準(zhǔn)是能夠獲得的;設(shè)計(jì)符號(hào)體系也是能夠應(yīng)用的。在本章中,我們探討可以應(yīng)用于所有軟件設(shè)計(jì)的基本概念和原則。第14章和第21章考察各種軟件設(shè)計(jì)方法。
13.1軟件設(shè)計(jì)和軟件工程
軟件設(shè)計(jì)處于軟件工程過程中的技術(shù)核心位置,并且它的應(yīng)用不考慮所使用的軟件過程模型。軟件設(shè)計(jì)開始于對(duì)軟件需求進(jìn)行分析和規(guī)約之后,它是構(gòu)造和驗(yàn)證軟件所需的三項(xiàng)技術(shù)活動(dòng)—設(shè)計(jì)、代碼生成和測(cè)試—之一,每一項(xiàng)活動(dòng)都最終導(dǎo)致經(jīng)過驗(yàn)證的計(jì)算機(jī)軟件的方式變換信息。
分析模型(第12章)的每一個(gè)元素均提供了創(chuàng)建設(shè)計(jì)模型所需的信息。軟件設(shè)計(jì)中的信息流表示在圖13-1中,通過數(shù)據(jù)、功能和行為模型展示的軟件需求被傳送給設(shè)計(jì)階段,使用許多設(shè)計(jì)方法(在后面章節(jié)中討論)中的一種,設(shè)計(jì)階段產(chǎn)生數(shù)據(jù)設(shè)計(jì)、體系結(jié)構(gòu)設(shè)計(jì)、接口設(shè)計(jì)和過程設(shè)計(jì)。
數(shù)據(jù)設(shè)計(jì)將分析時(shí)創(chuàng)建的信息域模型變換成實(shí)現(xiàn)軟件所需的數(shù)據(jù)結(jié)構(gòu)。在實(shí)體—關(guān)系圖中定義的數(shù)據(jù)對(duì)象和關(guān)系以及數(shù)據(jù)字典中描述的詳細(xì)數(shù)據(jù)內(nèi)容為數(shù)據(jù)設(shè)計(jì)活動(dòng)奠定了基礎(chǔ)。
結(jié)構(gòu)設(shè)計(jì)定義了程序的主要結(jié)構(gòu)元素之間的關(guān)系。這種設(shè)計(jì)表示—計(jì)算機(jī)程序的模塊框架—可以從分析模型和分析模型中定義的子系統(tǒng)的交互導(dǎo)出。
接口設(shè)計(jì)描述了軟件內(nèi)部、軟件和協(xié)作系統(tǒng)之間以及軟件同人之間如何通信。一個(gè)接口意味著信息流(如數(shù)據(jù)和/或控制流),因此,數(shù)據(jù)和控制流圖提供了接口設(shè)計(jì)所需的信息。
過程設(shè)計(jì)將程序體系結(jié)構(gòu)的結(jié)構(gòu)元素變換為對(duì)軟件構(gòu)件的過程性描述。從PSPEC,CSPEC和STD獲得的信息是過程設(shè)計(jì)的基礎(chǔ)。
我們?cè)谠O(shè)計(jì)時(shí)作出的決策最終將會(huì)影響軟件構(gòu)造是否成功,更重要的是會(huì)決定,軟件維護(hù)的難易程度,但是,為什么設(shè)計(jì)如此重要呢?
軟件設(shè)計(jì)的重要性可以用一個(gè)詞來表達(dá)—質(zhì)量。設(shè)計(jì)是在軟件開發(fā)中形成質(zhì)量的地方,設(shè)計(jì)為我們提供了可以用于質(zhì)量評(píng)估的軟件表示,設(shè)計(jì)是我們能將用戶需求準(zhǔn)確地轉(zhuǎn)化為完整的軟件產(chǎn)品或系統(tǒng)的方法。軟件設(shè)計(jì)作為所有軟件工程和軟件維護(hù)步驟的基礎(chǔ),沒有設(shè)計(jì),我們將冒構(gòu)造出不穩(wěn)定系統(tǒng)的風(fēng)險(xiǎn)—稍作改動(dòng)就會(huì)失??;難于測(cè)試的系統(tǒng);直到軟件工程過程后期才能評(píng)估系統(tǒng)的質(zhì)量,到那時(shí)時(shí)間已不夠并且已經(jīng)花銷很多經(jīng)費(fèi)。
13.2 設(shè)計(jì)過程
軟件設(shè)計(jì)是一個(gè)迭代的過程,通過它需求被變換為用于構(gòu)造軟件的“藍(lán)圖”。初始時(shí),藍(lán)圖描述了軟件的整體視圖,也就是說,設(shè)計(jì)在高的抽象層次上表示—在該層次可以直接追蹤到特定數(shù)據(jù)、功能和行為需求。隨著數(shù)據(jù)迭代的開始,后續(xù)的精化將導(dǎo)致更低抽象級(jí)別的設(shè)計(jì)表示,這些表示仍然能夠追蹤到需求,但是連接更微妙了。
13.2.1 設(shè)計(jì)和軟件質(zhì)量
在整個(gè)設(shè)計(jì)過程中,演化的設(shè)計(jì)的質(zhì)量可以通過在第8章討論的一系列正式技術(shù)復(fù)審或設(shè)計(jì)追蹤審查來評(píng)估。McGlanghlin[McG91]提出了可以指導(dǎo)良好設(shè)計(jì)演化的三個(gè)特征:
·設(shè)計(jì)必須實(shí)現(xiàn)所有包含在分析模型中的明顯需求,并且必須滿足客戶希望的所有隱式需求。
·對(duì)于那些生成代碼和那些進(jìn)行測(cè)試并隨后維護(hù)軟件的人而言,設(shè)計(jì)必須是可讀的,可理解的。
·設(shè)計(jì)應(yīng)該提供軟件的完整面貌,這與從某個(gè)實(shí)現(xiàn)視角看到的數(shù)據(jù)、功能、和行為域有關(guān)。
這些特征中的每一個(gè)實(shí)際上都是設(shè)計(jì)過程的目標(biāo)。但是如何達(dá)到這些目標(biāo)呢?
為評(píng)價(jià)一項(xiàng)設(shè)計(jì)表示的質(zhì)量,我們必須建立良好的設(shè)計(jì)技術(shù)標(biāo)準(zhǔn),在本章的后面部分,我們將詳細(xì)討論設(shè)計(jì)質(zhì)量標(biāo)準(zhǔn),現(xiàn)在,我們給出下面的指南:
1.設(shè)計(jì)應(yīng)該展示一種層次性組織,從而使得可以有指導(dǎo)性地使用軟件元素間的控制。①
2.設(shè)計(jì)應(yīng)該模塊化,也就是說軟件應(yīng)該邏輯地劃分成完成特定功能和子功能的構(gòu)件。
3.設(shè)計(jì)應(yīng)該既包含數(shù)據(jù)抽象,也包含過程抽象。
4.設(shè)計(jì)應(yīng)該導(dǎo)出具有獨(dú)立功能特征的模塊(例如,子例程或過程)。
5.設(shè)計(jì)應(yīng)該導(dǎo)出降低模塊和外部環(huán)境間復(fù)雜連接的接口。
6.設(shè)計(jì)應(yīng)該通過使用由軟件需求分析過程中獲得的信息導(dǎo)出要驅(qū)動(dòng)的可重復(fù)的方法。
這些標(biāo)準(zhǔn)不是偶然獲得的,軟件設(shè)計(jì)過程通過應(yīng)用基本設(shè)計(jì)原則、系統(tǒng)化的方法學(xué)和完全的復(fù)審來促進(jìn)良好的設(shè)計(jì)。