版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第4章
總體設(shè)計(jì)XX大學(xué)XX系XXX軟件工程教程電子科技大學(xué)出版社學(xué)習(xí)目標(biāo)l
了解總體設(shè)計(jì)的目標(biāo)、任務(wù)和設(shè)計(jì)過(guò)程;l
理解總體設(shè)計(jì)的原理和結(jié)構(gòu)設(shè)計(jì)準(zhǔn)則;l
掌握面向數(shù)據(jù)流的軟件結(jié)構(gòu)設(shè)計(jì)方法和描繪軟件結(jié)構(gòu)的圖形工具;l
能夠運(yùn)用相關(guān)方法和工具進(jìn)行簡(jiǎn)單的軟件結(jié)構(gòu)設(shè)計(jì)。目錄010203總體設(shè)計(jì)的目標(biāo)和任務(wù)總體設(shè)計(jì)的過(guò)程總體設(shè)計(jì)的原理04050607軟件結(jié)構(gòu)設(shè)計(jì)準(zhǔn)則描繪軟件結(jié)構(gòu)的圖形工具面向數(shù)據(jù)流的軟件結(jié)構(gòu)設(shè)計(jì)方法本章小結(jié)總體設(shè)計(jì)的目標(biāo)和任務(wù)01總體設(shè)計(jì)的目標(biāo)和任務(wù)按照軟件生存周期模型的結(jié)構(gòu),總體設(shè)計(jì)(也稱概要設(shè)計(jì))是在需求分析取得正式結(jié)果的基礎(chǔ)上開展的軟件開發(fā)工作,是軟件開發(fā)時(shí)期的第一階段工作,對(duì)開發(fā)時(shí)期的其他后續(xù)工作具有統(tǒng)籌的作用。總體設(shè)計(jì)的目標(biāo)和任務(wù)總體設(shè)計(jì)的基本目的是回答“概括地說(shuō),系統(tǒng)應(yīng)該如何實(shí)現(xiàn)”這個(gè)問(wèn)題,目標(biāo)是得到良好的軟件總體結(jié)構(gòu),即獨(dú)立性良好、規(guī)模適中的一組模塊以及深度、寬度、扇入、扇出合適的系統(tǒng)結(jié)構(gòu)。良好的總體結(jié)構(gòu)將給后續(xù)階段的工作帶來(lái)諸多便利,也是保障軟件質(zhì)量、降低開發(fā)成本、提高軟件可維護(hù)性的先決條件。什么是良好的軟件結(jié)構(gòu)?如何設(shè)計(jì)良好的軟件結(jié)構(gòu)?可以使用哪些工具?將是本章主要介紹的內(nèi)容。總體設(shè)計(jì)的目標(biāo)和任務(wù)從工程管理的角度,軟件設(shè)計(jì)可以劃分為兩個(gè)階段:總體設(shè)計(jì)階段和詳細(xì)設(shè)計(jì)階段??傮w設(shè)計(jì)的目標(biāo)是把需求分析得到的結(jié)構(gòu)化分析模型映射成結(jié)構(gòu)化設(shè)計(jì)模型。前者反映的是問(wèn)題域的既定事實(shí),后者反映的是帶有設(shè)計(jì)者意圖的或意志的預(yù)期事實(shí)。結(jié)構(gòu)化分析與結(jié)構(gòu)化設(shè)計(jì)的關(guān)系如圖4.1所示??傮w設(shè)計(jì)的圖4.1分析模型到設(shè)計(jì)模型的映射總體設(shè)計(jì)的目標(biāo)和任務(wù)需要明白的是,分析模型不是設(shè)計(jì)的結(jié)果,分析模型要如實(shí)反映問(wèn)題域的真實(shí)情況;設(shè)計(jì)模型要以分析模型為基礎(chǔ),用計(jì)算機(jī)所理解的虛擬世界的方式對(duì)問(wèn)題域中待解決的問(wèn)題進(jìn)行重新的結(jié)構(gòu)構(gòu)建,并反映設(shè)計(jì)這的意志,設(shè)計(jì)模型絕不能違反分析模型中的事實(shí)和現(xiàn)實(shí)世界的常識(shí),否則,就不可能得到符合預(yù)期的產(chǎn)品??傮w設(shè)計(jì)的目標(biāo)和任務(wù)總體設(shè)計(jì)的主要任務(wù)是把分析階段得到的數(shù)據(jù)模型映射成數(shù)據(jù)庫(kù)設(shè)計(jì),把數(shù)據(jù)流圖映射成軟件功能結(jié)構(gòu),行為模型可以用于詳細(xì)設(shè)計(jì)階段的流程、算法設(shè)計(jì)。軟件功能結(jié)構(gòu)反映了軟件的功能組成,以及各功能模塊間的邏輯關(guān)系(含接口關(guān)系)??傮w設(shè)計(jì)的過(guò)程02總體設(shè)計(jì)的過(guò)程總體設(shè)計(jì)過(guò)程通常由兩個(gè)主要階段組成:系統(tǒng)設(shè)計(jì)階段,確定系統(tǒng)的的具體實(shí)現(xiàn)方案;”結(jié)構(gòu)設(shè)計(jì)階段,確定軟件的結(jié)構(gòu)。典型的總體設(shè)計(jì)過(guò)程包括以下九個(gè)步驟??傮w設(shè)計(jì)的過(guò)程(1)設(shè)想供選擇的方案在總體設(shè)計(jì)階段,系統(tǒng)分析員首先應(yīng)該考慮各種可能的實(shí)現(xiàn)方案,并力求選出最佳方案。設(shè)”想方案的出發(fā)點(diǎn)是數(shù)據(jù)流圖,常用的做法是,設(shè)想把數(shù)據(jù)流圖中的處理進(jìn)行分組的各種可能的方法,拋棄在技術(shù)上行不通、不合理的分組方法,余下的分組方法代表可能的實(shí)現(xiàn)策略。總體設(shè)計(jì)的過(guò)程(2)選取合理的方案從前一步的到的不同方案中選取若干個(gè)合理的方案,通常要包括低成本、中等成本和高成本的”三種方案。在判斷方案的合理性時(shí),可依據(jù)可行性研究階段確定的項(xiàng)目規(guī)模,有時(shí)可能還需要進(jìn)一步征求用戶的意見。總體設(shè)計(jì)的過(guò)程(3)推薦最佳方案系統(tǒng)分析員應(yīng)綜合分析對(duì)比各種合理方案的利弊,推薦一個(gè)最佳方案,并為此方案制定詳細(xì)的實(shí)現(xiàn)計(jì)劃。用戶”和有關(guān)技術(shù)專家應(yīng)認(rèn)真審查分析員推薦的最佳方案,如果確實(shí)符合用戶需求,且在現(xiàn)有技術(shù)條件下能夠完全實(shí)現(xiàn),則提請(qǐng)使用部門負(fù)責(zé)人進(jìn)行審批。在審批通過(guò)后,方可進(jìn)入總體設(shè)計(jì)的下一個(gè)重要階段——結(jié)構(gòu)設(shè)計(jì)。總體設(shè)計(jì)的過(guò)程(4)功能分級(jí)結(jié)構(gòu)設(shè)計(jì)的任務(wù)是確定目標(biāo)系統(tǒng)由哪些模塊組成,以及這些模塊之間的邏輯關(guān)系。結(jié)構(gòu)設(shè)計(jì)之”后的過(guò)程設(shè)計(jì)屬于詳細(xì)設(shè)計(jì)階段的任務(wù),用于確定每個(gè)模塊的處理過(guò)程??傮w設(shè)計(jì)的過(guò)程為了確定軟件的結(jié)構(gòu),首先應(yīng)該從實(shí)現(xiàn)的角度把復(fù)雜的功能進(jìn)一步分解。具體做法是,仔細(xì)分析數(shù)據(jù)流圖中的每個(gè)處理,如果一個(gè)處理的功能”過(guò)分復(fù)雜,則把它適當(dāng)?shù)姆纸獬梢幌盗斜容^簡(jiǎn)單的功能,整個(gè)分解過(guò)程實(shí)質(zhì)上是對(duì)數(shù)據(jù)流圖的進(jìn)一步細(xì)化。在分解的過(guò)程中,還應(yīng)該用IPO表簡(jiǎn)要地描述每個(gè)處理的算法??傮w設(shè)計(jì)的過(guò)程(5)設(shè)計(jì)軟件結(jié)構(gòu)設(shè)計(jì)軟件結(jié)構(gòu)就是要把軟件的模塊組織成良好的層次系統(tǒng)。在這個(gè)層次系統(tǒng)中,每一層模塊都調(diào)用它”下一層的模塊,每個(gè)下層模塊再調(diào)用更下層的模塊,最下層的模塊完成最具體的功能,從而實(shí)現(xiàn)程序的某個(gè)子功能,所有的子功能共同完成系統(tǒng)的完整功能。描述軟件結(jié)構(gòu)可以使用層次圖或結(jié)構(gòu)圖??傮w設(shè)計(jì)的過(guò)程如果數(shù)據(jù)流圖已經(jīng)細(xì)化到適當(dāng)?shù)膶哟危ㄈ绻俜纸饩蜕婕暗竭^(guò)程設(shè)計(jì)的問(wèn)題),則可以”直接從數(shù)據(jù)流圖映射出軟件結(jié)構(gòu)??傮w設(shè)計(jì)的過(guò)程(6)數(shù)據(jù)庫(kù)設(shè)計(jì)對(duì)于需要使用數(shù)據(jù)庫(kù)的應(yīng)用領(lǐng)域,還要進(jìn)”行數(shù)據(jù)庫(kù)設(shè)計(jì)。數(shù)據(jù)庫(kù)的設(shè)計(jì)包括模式設(shè)計(jì)子模式設(shè)計(jì)、完整性設(shè)計(jì)和安全性設(shè)計(jì)、優(yōu)化處理等。總體設(shè)計(jì)的過(guò)程(7)制定測(cè)試計(jì)劃雖然是在設(shè)計(jì)階段,但是提早考慮測(cè)試問(wèn)題,能促使設(shè)計(jì)人員在設(shè)計(jì)時(shí)注意提高軟件的”可測(cè)試性。在總體設(shè)計(jì)階段僅是利用黑盒測(cè)試法制定功能測(cè)試計(jì)劃與測(cè)試策略。在詳細(xì)設(shè)計(jì)時(shí)才編寫詳細(xì)的測(cè)試用例和測(cè)試計(jì)劃。總體設(shè)計(jì)的過(guò)程(8)編寫文檔應(yīng)該用正式的文檔記錄總體設(shè)計(jì)的結(jié)果,文檔通常包括以下五種。①
系統(tǒng)說(shuō)明。主要內(nèi)容包括系統(tǒng)流程圖描繪的系統(tǒng)構(gòu)成”方案,組成系統(tǒng)的物理元素清單,成本/效益分析,對(duì)最佳方案的概括性描述,精華的數(shù)據(jù)流圖,用層次圖或結(jié)構(gòu)圖描繪的軟件結(jié)構(gòu),用IPO表或PDL語(yǔ)言簡(jiǎn)要描述的各個(gè)模塊的算法,模塊間的結(jié)構(gòu)關(guān)系,以及需求、功能和模塊三者之間的交叉參照關(guān)系等??傮w設(shè)計(jì)的過(guò)程②
用戶手冊(cè)。根據(jù)總體設(shè)計(jì)的結(jié)果,修改更正在需求分析階段產(chǎn)生的初步的用戶手冊(cè)。③
測(cè)試計(jì)劃。包括測(cè)試策略、測(cè)試方案、預(yù)期結(jié)”果、測(cè)試計(jì)劃等。④
詳細(xì)的實(shí)現(xiàn)計(jì)劃。包括實(shí)現(xiàn)的各階段所需要的時(shí)間、資源、人員配置等。⑤
數(shù)據(jù)庫(kù)設(shè)計(jì)的結(jié)果??傮w設(shè)計(jì)的過(guò)程(9)審查和復(fù)查最后,應(yīng)該對(duì)總體設(shè)計(jì)的結(jié)果進(jìn)行嚴(yán)格的”技術(shù)審查,在通過(guò)之后,再由使用部門負(fù)責(zé)人從管理的角度進(jìn)行復(fù)審??傮w設(shè)計(jì)的典型整體過(guò)程如圖4.2所示。圖4.2典型總體設(shè)計(jì)過(guò)程總體設(shè)計(jì)的原理03模塊和模塊化模塊并非是計(jì)算機(jī)專有術(shù)語(yǔ),在計(jì)算機(jī)領(lǐng)域也沒有統(tǒng)一的嚴(yán)格定義,但是幾乎所有的軟件體系結(jié)構(gòu)都是以模塊為最小單位構(gòu)建的。模塊也成構(gòu)件,是指可單獨(dú)命名且可通過(guò)名字訪問(wèn)的過(guò)程函數(shù)、子程序或宏調(diào)用。在具體計(jì)算機(jī)語(yǔ)言中,模塊是由邊界元素(比如Java中的{…})限定的相鄰程序元素的序列,且有一個(gè)總體標(biāo)識(shí)符代表它。面向?qū)ο蠓椒▽W(xué)中的對(duì)象、對(duì)象中的方法,都是模塊。模塊和模塊化模塊一般具有如下四個(gè)基本屬性。(1)接口:指模塊的輸入與輸出。(2)功能:指模塊實(shí)現(xiàn)的處理。(3)邏輯:描述模塊內(nèi)部的處理過(guò)程。(4)狀態(tài):指模塊使用時(shí)的環(huán)境和條件。模塊化就是把程序劃分成獨(dú)立命名且可獨(dú)立訪問(wèn)的模塊,每個(gè)模塊完成一個(gè)子功能,所有模塊按用戶業(yè)務(wù)邏輯集成起來(lái)構(gòu)成一個(gè)整體,完成指定的功能滿足用戶需求。模塊和模塊化模塊化的目的是為了降低軟件的復(fù)雜性。對(duì)軟件進(jìn)行適當(dāng)?shù)姆纸?,可以減少開發(fā)難度,降低開發(fā)成本,提高考法效率。模塊化的論據(jù)如下:如果C(x)表示問(wèn)題x的復(fù)雜程度,函數(shù)E(x)表示解決問(wèn)題x所需要的工作量函數(shù)。對(duì)于p1、p2兩個(gè)問(wèn)題,如果C(p1)>C(p2),
則有:E(p1)>E(p2)(公式4.1)模塊和模塊化由于p1和p2兩個(gè)問(wèn)題合成一個(gè)問(wèn)題時(shí)的復(fù)雜程度大于分別考慮每個(gè)問(wèn)題時(shí)的復(fù)雜程度之和,即C(p1+p2)>C(p1)+C(p2)。這種假設(shè)看起來(lái)似乎有些武斷,但大多數(shù)情況下的確如此。所以,可以得到:E(p1+p2)>E(p1)+E(p2)
(公式4.2)模塊和模塊化但是如果按照這個(gè)論斷,無(wú)限制地分割軟件就可以無(wú)限地降低成本?,F(xiàn)實(shí)中顯然并非如此,因?yàn)檫€有另一個(gè)因素起作用,使得上述論斷不能成立。當(dāng)無(wú)限地分割軟件時(shí),雖然每個(gè)模塊的規(guī)模在減小,開發(fā)成本在降低,但同時(shí)系統(tǒng)的總模塊數(shù)會(huì)上升,模塊間的接口設(shè)計(jì)所需要的成本會(huì)顯著提升。如圖4.3所示。最小成本區(qū)成本或工作量總成本集成成本M成本/模塊模塊數(shù)量圖4.3模塊化和軟件成本關(guān)系圖模塊和模塊化由圖4-3可知,存在一個(gè)模塊數(shù)M,使得軟件總成本最低。可見在總體設(shè)計(jì)中,只有選擇合適的模塊數(shù)據(jù),才會(huì)使得整個(gè)系統(tǒng)的開發(fā)成本較小,但在目前還無(wú)法準(zhǔn)確預(yù)測(cè)這個(gè)M的數(shù)值。模塊和模塊化采用模塊化原理可以使軟件結(jié)構(gòu)清晰,降低設(shè)計(jì)難度,提高可理解性。由于程序的錯(cuò)誤大多發(fā)生在模塊及它們之間的接口中,所以模塊化設(shè)計(jì)會(huì)使軟件容易測(cè)試和調(diào)試,進(jìn)而有助于提高軟件的可靠性。當(dāng)變動(dòng)僅涉及少數(shù)幾個(gè)模塊時(shí),模塊化還能夠提高可修改性。另外,模塊化也有助于軟件開發(fā)的組織管理,一個(gè)復(fù)雜的大型程序可以通過(guò)模塊化分解成許多程序,按照實(shí)現(xiàn)的難易度分配給技術(shù)熟練水平不同的程序員。抽象抽象是人類認(rèn)識(shí)復(fù)雜現(xiàn)象時(shí)使用的最有力的思維工具。人們?cè)诤同F(xiàn)實(shí)世界的互動(dòng)中認(rèn)識(shí)到,現(xiàn)實(shí)世界中的事務(wù)、狀態(tài)或過(guò)程之間總存在著某些共性。把這些共性歸納和概括起來(lái),暫時(shí)忽略它們之間的差異,這就是抽象。抽象就是抽出事物的本質(zhì)特性而暫時(shí)不考慮它們的細(xì)節(jié)。抽象當(dāng)考慮任何問(wèn)題的模塊化解法時(shí),可以提出許多抽象的層次。在抽象的最高層次使用問(wèn)題環(huán)境的語(yǔ)言,以概括的方式敘述問(wèn)題的解法。在較低層次上使用更過(guò)程化的方法,把面向問(wèn)題的術(shù)語(yǔ)和面向?qū)崿F(xiàn)的術(shù)語(yǔ)結(jié)合起來(lái)描述問(wèn)題的解法。最后,在最低的抽象層次則以直接實(shí)現(xiàn)的方式敘述問(wèn)題的解法。抽象軟件工程中的每個(gè)步驟都是對(duì)軟件解決方案抽象化程度的一次細(xì)化。在可行性研究階段,軟件作為系統(tǒng)的一個(gè)完整部件;在需求分析階段,軟件解法是使用在問(wèn)題環(huán)境內(nèi)熟悉的方式進(jìn)行的描述;當(dāng)有總體設(shè)計(jì)向詳細(xì)設(shè)計(jì)過(guò)渡時(shí),抽象的程度也隨之減少了;最后,當(dāng)源程序?qū)懗鰜?lái)后,也就達(dá)到了抽象的最底層。逐步求精逐步求精最初是由NiklausWirth提出的一種自頂向下的設(shè)計(jì)策略。按照這個(gè)策略,程序的體系結(jié)構(gòu)是通過(guò)逐步精化處理過(guò)程的層次而設(shè)計(jì)出來(lái)的。通過(guò)逐步分解對(duì)功能的宏觀陳述而開發(fā)出層次結(jié)構(gòu),最終得出用程序設(shè)計(jì)語(yǔ)言表達(dá)的程序。逐步求精抽象與求精是一對(duì)互補(bǔ)的概念。抽象使得設(shè)計(jì)者能夠說(shuō)明結(jié)構(gòu)和數(shù)據(jù),但卻同時(shí)忽略了底層的細(xì)節(jié)。事實(shí)上,可以把抽象看作是一種通過(guò)忽略多余的細(xì)節(jié)同時(shí)強(qiáng)調(diào)有關(guān)的細(xì)節(jié),而實(shí)現(xiàn)逐步求精的方法。求精則幫助設(shè)計(jì)者在設(shè)計(jì)過(guò)程中逐步解釋底層細(xì)節(jié)。這兩個(gè)概念都有助于設(shè)計(jì)者在設(shè)計(jì)演化過(guò)程中創(chuàng)造出完整的設(shè)計(jì)模型。信息隱藏與局部化應(yīng)用模塊化原理時(shí),必然會(huì)產(chǎn)生一個(gè)問(wèn)題:如何分解一個(gè)軟件才能得到最佳的模塊組合?1972年,D.Parnas提出的信息隱藏原理指出:每一個(gè)模塊的實(shí)現(xiàn)細(xì)節(jié)(過(guò)程和數(shù)據(jù))對(duì)于不需要這些信息的其他模塊來(lái)說(shuō)應(yīng)該是隱藏的。信息隱藏與局部化局部化的概念和信息隱藏概念是密切相關(guān)的。所謂局部化是指把一些關(guān)系密切的軟件元素物理地放得彼此靠近。局部化實(shí)質(zhì)上是一種實(shí)現(xiàn)信息隱藏的手段,信息隱藏是局部化的結(jié)果。信息隱藏與局部化信息隱藏意味著有效的模塊化可以通過(guò)定義一組獨(dú)立的模塊來(lái)實(shí)現(xiàn),這些模塊相互間的通信僅使用對(duì)于實(shí)現(xiàn)軟件功能來(lái)說(shuō)是必要的信息。信息隱藏的原理不僅使得模塊可以進(jìn)行并行開發(fā),還可以減少測(cè)試和后期維護(hù)的工作量。因?yàn)闇y(cè)試和維護(hù)階段不可避免地要修改設(shè)計(jì)和代碼,模塊對(duì)于多數(shù)數(shù)據(jù)和處理過(guò)程細(xì)節(jié)的隱藏可以減少錯(cuò)誤向外傳播。此外,整個(gè)系統(tǒng)欲擴(kuò)充功能也只需“插入”新模塊,原有的多數(shù)模塊無(wú)需改動(dòng)。模塊獨(dú)立模塊的獨(dú)立性是指軟件系統(tǒng)中每個(gè)模塊只涉及軟件要求的具體子功能,而和軟件系統(tǒng)中其他的模塊的接口是簡(jiǎn)單的。顯然,模塊化、抽象、信息隱藏和局部化的直接結(jié)果是模塊獨(dú)立。模塊獨(dú)立程度可以由兩個(gè)定性標(biāo)準(zhǔn)度量:耦合和內(nèi)聚。耦合衡量不同模塊彼此間的相互依賴程度;內(nèi)聚衡量一個(gè)模塊內(nèi)部各元素間彼此結(jié)合的緊密程度。顯然,模塊的耦合性越低,其獨(dú)立性越強(qiáng),內(nèi)聚性越高,其獨(dú)立性越強(qiáng)。模塊獨(dú)立(1)耦合耦合是對(duì)一個(gè)軟件結(jié)構(gòu)內(nèi)不同模塊間相互關(guān)聯(lián)程度的度量。耦合強(qiáng)弱取決于模塊間接口的復(fù)雜程度,一般由模塊之間的調(diào)用方式、傳遞信息的類型和數(shù)量來(lái)決定。模塊獨(dú)立軟件設(shè)計(jì),應(yīng)該追求盡可能松散耦合的結(jié)構(gòu)。這樣的程序容易測(cè)試、修改和維護(hù),當(dāng)某一模塊中出現(xiàn)錯(cuò)誤時(shí),傳播到整個(gè)系統(tǒng)的可能性也小。模塊間的耦合性強(qiáng)烈影響著系統(tǒng)的可理解性、可測(cè)試性、可靠性和可維護(hù)性。模塊間的耦合方式有六種,如圖4.4所示。低高耦合性低耦合中等強(qiáng)度耦合
較強(qiáng)耦合強(qiáng)耦合非直接耦合
數(shù)據(jù)耦合特征耦合
控制耦合
公共環(huán)境耦合
內(nèi)容耦合模塊獨(dú)立性強(qiáng)弱圖4.4耦合性的6種類型模塊獨(dú)立①
非直接耦合。如果兩個(gè)模塊分別從屬于不同的上級(jí)模塊的控制與調(diào)用,它們之間不直接傳遞任何信息,互相獨(dú)立,則稱這兩個(gè)模塊為非直接耦合關(guān)系。需要注意的是,在一個(gè)軟件系統(tǒng)中,所有模塊之間不可能沒有任何間接的練習(xí),否則,它們無(wú)法構(gòu)成一個(gè)系統(tǒng)。模塊獨(dú)立②
數(shù)據(jù)耦合。如果兩個(gè)模塊之間有調(diào)用關(guān)系,相互以參數(shù)形式傳遞信息,而且交換的信息僅僅是數(shù)據(jù),那么這種耦合稱為數(shù)據(jù)耦合。系統(tǒng)中至少必須存在這種耦合,因?yàn)橹挥挟?dāng)某些模塊的輸出數(shù)據(jù)作為另一個(gè)模塊的輸入數(shù)據(jù)時(shí),系統(tǒng)才能完成有價(jià)值的功能。數(shù)據(jù)耦合是理想的設(shè)計(jì)目標(biāo)。模塊獨(dú)立③
特征耦合。兩個(gè)模塊通過(guò)傳遞數(shù)據(jù)結(jié)構(gòu)加以聯(lián)系,或都與一個(gè)數(shù)據(jù)結(jié)構(gòu)有關(guān)系,則稱這兩個(gè)模塊之間存在特征耦合(或標(biāo)記耦合)。當(dāng)被調(diào)用模塊只需要整個(gè)數(shù)據(jù)結(jié)構(gòu)中的一部分?jǐn)?shù)據(jù)元素時(shí),將整個(gè)數(shù)據(jù)結(jié)構(gòu)作為參數(shù)的弊端是極易造成信息泄漏,給計(jì)算機(jī)犯罪提供了可乘之機(jī)。模塊獨(dú)立④
控制耦合。如果兩個(gè)模塊彼此間傳遞的信息中有控制信息,這種耦合稱為控制耦合。比如,一個(gè)模塊傳遞開關(guān)、標(biāo)志、名字等控制信息,明顯控制另一個(gè)模塊的內(nèi)部執(zhí)行邏輯。這種耦合意味著被調(diào)用模塊內(nèi)部的功能分解不徹底,調(diào)用模塊需要知道被調(diào)用模塊內(nèi)部的邏輯結(jié)構(gòu),這就降低了模塊的獨(dú)立性,對(duì)被調(diào)用模塊再分解后可以用數(shù)據(jù)耦合替代。模塊獨(dú)立⑤
公共環(huán)境耦合。當(dāng)兩個(gè)或多個(gè)模塊通過(guò)一個(gè)公共數(shù)據(jù)環(huán)境相互作用時(shí),它們之間的耦合稱為公共環(huán)境耦合。公共環(huán)境是指全局變量、共享通信區(qū)、內(nèi)存的公共覆蓋區(qū)、任何存儲(chǔ)介質(zhì)上的文件、物理設(shè)備等。公共環(huán)境耦合的強(qiáng)度,隨耦合的模塊個(gè)數(shù)而變化——隨耦合模塊的個(gè)數(shù)增加而增加。在只有兩個(gè)模塊有公共環(huán)境耦合的情況下,這種耦合又可分為兩種情況。模塊獨(dú)立一種情況是,一個(gè)模塊往公共環(huán)境送數(shù)據(jù),另一個(gè)模塊從公共環(huán)境取數(shù)據(jù)。這種公共環(huán)境耦合是一種比較松散的耦合。另一種情況是,兩個(gè)模塊都既往公共環(huán)境中送數(shù)據(jù),又從連取數(shù)據(jù)。這種耦合比較緊密,介于數(shù)據(jù)耦合和控制耦合之間。模塊獨(dú)立如果兩個(gè)模塊共享的數(shù)據(jù)很多,都通過(guò)參數(shù)傳遞可能很不方便,此時(shí)利用公共環(huán)境耦合是一種可以被接受的方案。模塊獨(dú)立⑥
內(nèi)容耦合。如果一個(gè)模塊直接訪問(wèn)另一個(gè)模塊的內(nèi)部數(shù)據(jù),一個(gè)模塊不通過(guò)正常入口而轉(zhuǎn)入到另一個(gè)模塊的內(nèi)部,兩個(gè)模塊有一部分代碼重疊(只可能出現(xiàn)在匯編程序中),一個(gè)模塊有多個(gè)入口,這些現(xiàn)象都屬于內(nèi)容耦合。內(nèi)容耦合是最高程度的耦合,是應(yīng)該堅(jiān)決避免使用的耦合。模塊獨(dú)立總之,在設(shè)計(jì)軟件結(jié)構(gòu)時(shí),應(yīng)該根據(jù)問(wèn)題的特點(diǎn),選擇合適的耦合類型。盡量使用數(shù)據(jù)耦合,少用標(biāo)記耦合和控制耦合,限制使用公共環(huán)境耦合,完全不用內(nèi)容耦合。具體做法有:降低模塊接口的復(fù)雜性,減少每個(gè)模塊的參數(shù)個(gè)數(shù),盡量使用標(biāo)準(zhǔn)過(guò)程調(diào)用,少用直接引用,以標(biāo)準(zhǔn)的形式直接傳遞數(shù)據(jù),把模塊的通信信息放在緩沖區(qū)中。模塊獨(dú)立(2)內(nèi)聚內(nèi)聚標(biāo)志了一個(gè)模塊內(nèi)部各元素彼此結(jié)合的緊密程度。它是信息隱藏和局部化概念的自然擴(kuò)展。理想的內(nèi)聚是每個(gè)模塊只做一件事。設(shè)計(jì)軟件結(jié)構(gòu)時(shí)應(yīng)該力求做到高內(nèi)聚,中等程度的內(nèi)聚也是可以接受的選擇。內(nèi)聚和耦合密切相關(guān),內(nèi)聚高往往意味著耦合松散。模塊獨(dú)立內(nèi)聚和耦合都是設(shè)計(jì)軟件結(jié)構(gòu)時(shí)需要考慮的結(jié)構(gòu)特征,但是實(shí)踐經(jīng)驗(yàn)表明,內(nèi)聚更重要,應(yīng)該把更多的注意力集中到提高模塊的內(nèi)聚程度上。這類似于每個(gè)人做好自己,最終形成良好社會(huì)的的價(jià)值觀,因?yàn)橥ㄟ^(guò)統(tǒng)籌管理獲得全面提高的難度顯然更大。按照內(nèi)聚程度的不同,內(nèi)聚可以分為七種情況,如圖4.5所示。低高內(nèi)聚性中等強(qiáng)度內(nèi)聚低內(nèi)聚強(qiáng)內(nèi)聚偶然內(nèi)聚邏輯內(nèi)聚時(shí)間內(nèi)聚過(guò)程內(nèi)聚通信內(nèi)聚順序內(nèi)聚功能內(nèi)聚模塊獨(dú)立性強(qiáng)弱圖4.5內(nèi)聚類型模塊獨(dú)立①
偶然內(nèi)聚。模塊內(nèi)個(gè)元素之間沒有實(shí)質(zhì)性的聯(lián)系,或者說(shuō)模塊內(nèi)各組成成分在功能上互不相關(guān)。偶然內(nèi)聚是強(qiáng)度最低的一種內(nèi)聚,模塊內(nèi)各元素不是為同一個(gè)功能服務(wù),各有不同需求,因而模塊的內(nèi)容不易理解,也不易修改和維護(hù)。模塊獨(dú)立②
邏輯內(nèi)聚。如果一個(gè)模塊完成的任務(wù)在邏輯上屬于相同或相似的一類,各元素之間存在必然的邏輯關(guān)系,則它們之間的關(guān)系屬于邏輯內(nèi)聚。典型的情況是把幾種相關(guān)的功能組合在一個(gè)模塊內(nèi),由傳遞給模塊的參數(shù)確定每次調(diào)用執(zhí)行哪種功能。邏輯內(nèi)聚會(huì)存在不同功能混在一起,共用部分程序代碼的情況,在遇到需求修改模塊時(shí),往往會(huì)影響全局,使修改比較困看。模塊獨(dú)立③
時(shí)間內(nèi)聚。一個(gè)模塊包含的任務(wù)必須在同一時(shí)間段內(nèi)執(zhí)行,這些功能僅是因?yàn)闀r(shí)間因素被組織在一起。例如,初始化工作,同時(shí)打開文件,關(guān)閉文件,緊急故障處理等都是時(shí)間內(nèi)聚模塊。一般情況下,各部分只要滿足時(shí)間上的同一性,執(zhí)行順序可以任意安排。模塊獨(dú)立④
過(guò)程內(nèi)聚。如果一個(gè)模塊內(nèi)的元素是相關(guān)的,而且必須以特定次序執(zhí)行,受同一控制流支配則稱為過(guò)程內(nèi)聚。使用程序流程圖設(shè)計(jì)程序時(shí),確定的模塊劃分往往得到過(guò)程內(nèi)聚的模塊。例如,把流程圖中的循環(huán)部分、判定部分、計(jì)算部分分成3個(gè)模塊,這3個(gè)模塊是過(guò)程內(nèi)聚模塊。模塊獨(dú)立⑤
通信內(nèi)聚。如果模塊中所有元素都使用相同的輸入數(shù)據(jù)或產(chǎn)生相同的輸出數(shù)據(jù),則稱為通信內(nèi)聚。⑥
順序內(nèi)聚。如果一個(gè)模塊內(nèi)的處理元素和同一個(gè)功能密切相關(guān),而且這些處理必須順序執(zhí)行。通常是,一個(gè)處理元素的輸出最為下一個(gè)處理元素的輸入,即在同一個(gè)數(shù)據(jù)結(jié)構(gòu)上操作。根據(jù)數(shù)據(jù)流圖劃分模塊時(shí),往往得到順序內(nèi)聚的模塊。模塊獨(dú)立⑦
功能內(nèi)聚。模塊內(nèi)的所有處理元素屬于一個(gè)整體,即完成一個(gè)單一的功能。功能內(nèi)聚是最高成都的內(nèi)聚,是設(shè)計(jì)的目標(biāo)和理想的結(jié)構(gòu)。在實(shí)際設(shè)計(jì)中,沒有必要精確確定內(nèi)聚的級(jí)別,重要的是力爭(zhēng)做到高內(nèi)聚,并且能辨認(rèn)出低內(nèi)聚模塊,通過(guò)修改結(jié)構(gòu)提高內(nèi)聚程度。軟件結(jié)構(gòu)設(shè)計(jì)準(zhǔn)則04軟件結(jié)構(gòu)設(shè)計(jì)準(zhǔn)則人們?cè)谲浖_發(fā)的長(zhǎng)期實(shí)踐中積累了豐富的經(jīng)驗(yàn),總結(jié)得出了一些啟發(fā)規(guī)則,這些規(guī)則不是普適的基本原理,但是在許多場(chǎng)合仍然具有一定的指導(dǎo)作用,往往能幫助設(shè)計(jì)人員改進(jìn)軟件結(jié)構(gòu)提高軟件質(zhì)量。這些規(guī)則不是設(shè)計(jì)目標(biāo),但可以作為軟件結(jié)構(gòu)設(shè)計(jì)的準(zhǔn)則加以利用。這些準(zhǔn)則如下:軟件結(jié)構(gòu)設(shè)計(jì)準(zhǔn)則(1)改進(jìn)軟件結(jié)構(gòu)提高模塊獨(dú)立性。初步設(shè)計(jì)出軟件結(jié)構(gòu)之后,為了提高模塊的獨(dú)立性,應(yīng)該審查、分析這個(gè)結(jié)構(gòu),通過(guò)分解和合并,力求降低耦合性提高內(nèi)聚性。例如多個(gè)模塊公有的一個(gè)子功能可以獨(dú)立成一個(gè)模塊,由這些模塊調(diào)用;有時(shí)通過(guò)分解或合并模塊可以減少控制信息的傳遞及對(duì)全程數(shù)據(jù)的引用,并降低接口的復(fù)雜程度。軟件結(jié)構(gòu)設(shè)計(jì)準(zhǔn)則(2)模塊規(guī)模應(yīng)該適中。有人從心理學(xué)角度研究得知,一個(gè)模塊的規(guī)模不應(yīng)過(guò)大,最好能寫在一頁(yè)A4紙內(nèi)(通常不超過(guò)60行語(yǔ)句),當(dāng)超過(guò)30行以后,模塊的可理解性迅速下降。過(guò)大的模塊往往是由于分解不充分,但是進(jìn)一步分解必須符合問(wèn)題結(jié)構(gòu),一般說(shuō),分解不應(yīng)以犧牲模塊獨(dú)立性為代價(jià)。軟件結(jié)構(gòu)設(shè)計(jì)準(zhǔn)則模塊規(guī)模也不宜過(guò)小,模塊過(guò)小,目標(biāo)系統(tǒng)所需的模塊個(gè)數(shù)必然增多,接口必然復(fù)雜。特別是只有一個(gè)上層模塊調(diào)用的模塊,通常可以合并到上級(jí)模塊中。軟件結(jié)構(gòu)設(shè)計(jì)準(zhǔn)則(3)深度、寬度、扇入、扇出都應(yīng)當(dāng)適中深度指軟件結(jié)構(gòu)中控制的層數(shù)。在一定意義上能粗略地反映系統(tǒng)的規(guī)模和復(fù)雜程度。深度和程序的長(zhǎng)度有粗略的對(duì)應(yīng)關(guān)系,程序越長(zhǎng)往往容易深度越深。如果深度過(guò)大,則表示控制層數(shù)太多,應(yīng)該考慮是否其中某些模塊分的過(guò)于簡(jiǎn)單了,可以考慮適當(dāng)合并。軟件結(jié)構(gòu)設(shè)計(jì)準(zhǔn)則寬度是指軟件結(jié)構(gòu)在同一個(gè)層次上的模塊總數(shù)的最大值。一般說(shuō)來(lái),寬度越大系統(tǒng)越復(fù)雜。對(duì)寬度影響最大的因素是模塊的扇出。扇出是指一個(gè)模塊直接調(diào)用的模塊數(shù)目。扇出過(guò)大意味著模塊過(guò)分復(fù)雜,需要協(xié)調(diào)和控制過(guò)多的下層模塊;扇出過(guò)小也不好,比如總數(shù)是1。經(jīng)驗(yàn)表明,一個(gè)設(shè)計(jì)得好的典型系統(tǒng)的平均扇出通常是3或4(扇出的上限通常是5~9)。軟件結(jié)構(gòu)設(shè)計(jì)準(zhǔn)則扇出過(guò)大一般是因?yàn)槿狈χ虚g層,此時(shí)應(yīng)當(dāng)適當(dāng)增加中間控制層模塊。扇出過(guò)小時(shí),可以把下級(jí)模塊進(jìn)一步分解成若干個(gè)子功能模塊,或者合并到上級(jí)模塊中去。通過(guò)分解或合并調(diào)整軟件結(jié)構(gòu)時(shí),必須符合問(wèn)題結(jié)構(gòu)(即不能違背解決問(wèn)題的常識(shí)),同時(shí)也不能違背模塊獨(dú)立原理。軟件結(jié)構(gòu)設(shè)計(jì)準(zhǔn)則扇入是指一個(gè)模塊有多少個(gè)上級(jí)模塊直接調(diào)用它。扇入越大說(shuō)明該模塊共享程度越高,這是有利的,但是,不能違背模塊獨(dú)立原理單純追求高扇入。一般設(shè)計(jì)得好的軟件結(jié)構(gòu),通常頂層扇出比較高,中間層扇出較少,底層扇入到公共的使用模塊中區(qū),從形象看像一個(gè)橄欖型。軟件結(jié)構(gòu)設(shè)計(jì)準(zhǔn)則(4)模塊的作用域應(yīng)該在控制域之內(nèi)模塊的作用域是指受該模塊內(nèi)一個(gè)判定影響的所有模塊的集合。模塊的控制域是指模塊本身及其所有直接或間接從屬于它的模塊集合。軟件結(jié)構(gòu)設(shè)計(jì)準(zhǔn)則在一個(gè)設(shè)計(jì)得好的系統(tǒng)中,所有受判定影響的模塊應(yīng)該都從屬于做出判定的那個(gè)模塊,最好局限于做出判定的那個(gè)模塊本身及它的下屬模塊。否則,就需要在作用域之外傳遞控制信息,以保持判定應(yīng)有的作用,如此便增加了控制耦合,使軟件結(jié)構(gòu)變得復(fù)雜而難以理解。軟件結(jié)構(gòu)設(shè)計(jì)準(zhǔn)則(5)降低模塊結(jié)構(gòu)的復(fù)雜程度模塊接口復(fù)雜是軟件出錯(cuò)的主要原因之一。接口的設(shè)計(jì)應(yīng)該盡量使信息傳遞簡(jiǎn)單,并與模塊的功能一致。如果模塊的接口復(fù)雜或不一致(即看起來(lái)傳遞的數(shù)據(jù)之間沒有聯(lián)系),是緊耦合低內(nèi)聚的征兆,應(yīng)該重新分析該模塊的獨(dú)立性。軟件結(jié)構(gòu)設(shè)計(jì)準(zhǔn)則(6)設(shè)計(jì)單入口單出口的模塊這條規(guī)則是在告誡軟件工程師不要模塊間出現(xiàn)內(nèi)容耦合。當(dāng)從頂部進(jìn)入模塊且從底部退出模塊時(shí),軟件是比較容易理解的。軟件結(jié)構(gòu)設(shè)計(jì)準(zhǔn)則(7)模塊功能應(yīng)該可以預(yù)測(cè)模塊功能應(yīng)該能夠預(yù)測(cè),是考慮到方便以后的軟件測(cè)試性和維護(hù),但也要防止模塊功能過(guò)分局限。軟件結(jié)構(gòu)設(shè)計(jì)準(zhǔn)則如果一個(gè)模塊可以看作一個(gè)黑盒子,只要輸入相同的數(shù)據(jù)就產(chǎn)生同樣的輸出,這個(gè)模塊的功能就是可以預(yù)測(cè)的。任意限制模塊內(nèi)數(shù)據(jù)結(jié)構(gòu)的大小、過(guò)分限制在控制流中可以做出的選擇或外部接口的模式,該模塊的功能就過(guò)分局限了(使用范圍過(guò)分狹窄),畢竟可重用性是現(xiàn)代軟件設(shè)計(jì)追求的價(jià)值觀之一。在現(xiàn)實(shí)中不可避免地要修改這類結(jié)構(gòu),以提高模塊的靈活性,擴(kuò)大它的使用范圍。軟件結(jié)構(gòu)設(shè)計(jì)準(zhǔn)則以上七條總體設(shè)計(jì)的準(zhǔn)則是經(jīng)驗(yàn)性的,對(duì)改進(jìn)設(shè)計(jì)、提高質(zhì)量往往具有重要的參考價(jià)值。但是,需要注意它們既不是設(shè)計(jì)的目標(biāo),也不是設(shè)計(jì)時(shí)應(yīng)該普遍遵循的原理,僅是可以借鑒的經(jīng)驗(yàn)。描繪軟件結(jié)構(gòu)的圖形工具05層次圖層次圖用來(lái)描繪軟件的層次結(jié)構(gòu)。層次圖中,一個(gè)矩形框代表一個(gè)模塊,方框間的連線表示調(diào)用關(guān)系,最頂層的方框代表目標(biāo)系統(tǒng)的主控模塊。在方框圖中,位于上層的模塊調(diào)用其有連線的下層模塊。層次圖適用于自頂向下設(shè)計(jì)軟件結(jié)構(gòu)。圖4.6是一個(gè)庫(kù)存管理系統(tǒng)的層次圖。層次圖在使用層次圖時(shí),應(yīng)該注意以下三點(diǎn)。(1)在層次圖中,同一層模塊對(duì)其上層來(lái)說(shuō),不存在調(diào)用次序問(wèn)題,雖然人們習(xí)慣于從左往右畫,但并不代表系統(tǒng)按此順序調(diào)用下層模塊。(2)層次圖不指明怎樣調(diào)用模塊。(3)層次圖只表明一個(gè)模塊調(diào)用哪些模塊。HIPO圖HIPO(Hierarchy
Plus
Input-Process-Output)圖是層次圖加上輸入-處理-輸出圖的英文縮寫,是IBM公司20世界70年代發(fā)展起來(lái)表示軟件結(jié)構(gòu)的一種常用描述工具。為了能使HIPO圖具有可追蹤性,在H圖(層次圖)中除了頂層方框之外,每個(gè)方框都加了編號(hào)。HIPO圖完整的HIPO圖由層次圖和IPO表組成。H圖中的每一個(gè)模塊要對(duì)應(yīng)一張IPO表,每一個(gè)IPO表都要編號(hào),并且要和它所對(duì)應(yīng)的模塊的編號(hào)一致。結(jié)構(gòu)圖Yourdon提出的結(jié)構(gòu)圖是進(jìn)行軟件結(jié)構(gòu)設(shè)計(jì)的另一個(gè)有力工具。結(jié)構(gòu)圖中一個(gè)方框代表一個(gè)模塊,框內(nèi)注明模塊的名稱或主要功能;方框之間用箭頭或直線連接表示調(diào)用關(guān)系,因?yàn)榘凑樟?xí)慣總是上方模塊調(diào)用下層模塊,為了簡(jiǎn)單起見,一般用直線替代箭頭線表示模塊間的調(diào)用關(guān)系。結(jié)構(gòu)圖在結(jié)構(gòu)圖中通常還用帶有注釋的箭頭表示模塊調(diào)用過(guò)程中來(lái)回傳遞的信息,其中箭頭尾部是空心圓表示傳遞的是數(shù)據(jù),實(shí)心圓表示傳遞的是控制信息,如圖4.8所示。產(chǎn)生最佳解結(jié)構(gòu)圖解得到好輸入計(jì)算最佳解輸出結(jié)果結(jié)果格式化顯示結(jié)果讀輸入編輯輸入圖4.8產(chǎn)生最佳解的結(jié)構(gòu)圖此外,結(jié)構(gòu)圖還使用一些附加符號(hào)表示模塊的選擇調(diào)用或循環(huán)調(diào)用。圖4.9所示為當(dāng)模塊M中某個(gè)判定為真時(shí)調(diào)用模塊A,為假時(shí)調(diào)用模塊B。圖4.10所示為模塊M循環(huán)調(diào)用A、B、C。圖4.9結(jié)構(gòu)圖選擇調(diào)用表示法圖4.10結(jié)構(gòu)圖循環(huán)調(diào)用表示法結(jié)構(gòu)圖通常層次圖作為描繪軟件結(jié)構(gòu)的文檔,而結(jié)構(gòu)圖作為文檔并不是很合適,因?yàn)榻Y(jié)構(gòu)圖上的信息較多,反而降低了結(jié)構(gòu)圖的清晰性。但是,結(jié)構(gòu)圖卻可以作為檢查設(shè)計(jì)正確性和評(píng)價(jià)模塊獨(dú)立性的好方法。如果發(fā)現(xiàn)結(jié)構(gòu)圖上的模塊間的練習(xí)不容易解釋,則應(yīng)該考慮是否設(shè)計(jì)上存在問(wèn)題。面向數(shù)據(jù)流的軟件結(jié)構(gòu)設(shè)計(jì)方法06面向數(shù)據(jù)流的軟件結(jié)構(gòu)設(shè)計(jì)方法面向數(shù)據(jù)流的軟件結(jié)構(gòu)設(shè)計(jì)方法,即以數(shù)據(jù)流圖為依據(jù)的設(shè)計(jì)軟件結(jié)構(gòu)的方法,也是通常所說(shuō)的結(jié)構(gòu)化設(shè)計(jì)方法(簡(jiǎn)稱SD方法)。因?yàn)槿魏诬浖到y(tǒng)都可以用數(shù)據(jù)流圖表示,所以面向數(shù)據(jù)流的設(shè)計(jì)方法理論上可以設(shè)計(jì)任何軟件系統(tǒng)的結(jié)構(gòu)。概念面向數(shù)據(jù)流的設(shè)計(jì)方法的實(shí)質(zhì)是把數(shù)據(jù)流圖的信息流映射成軟件結(jié)構(gòu)。因此,信息流的類型決定了映射的方法。按照信息流的流動(dòng)特征,可以分為變換流和事務(wù)流。概念(1)變換流任何軟件系統(tǒng)都看作是一種信息處理系統(tǒng),信息通常以“外部世界”的形式進(jìn)入系統(tǒng),經(jīng)過(guò)處理再以“外部世界”的形式離開系統(tǒng)。概念變換流的特征如圖4.11所示。信息沿輸入通路進(jìn)入系統(tǒng),同時(shí)由外部形式轉(zhuǎn)換成內(nèi)部形式,進(jìn)入系統(tǒng)的信息經(jīng)過(guò)變換中心的加工處理后,再沿著輸出通路變換成外部形式離開軟件系統(tǒng)。當(dāng)數(shù)據(jù)流具有這些特征時(shí),這種信息流就叫做變換流。概念(2)事務(wù)流基本系統(tǒng)模型的實(shí)質(zhì)是變換流,因此,原則上所有信息流都可歸結(jié)為變換流。但是,當(dāng)數(shù)據(jù)流圖明顯具有圖4.12特征時(shí),這種數(shù)據(jù)流是“以事務(wù)為中心的”,即數(shù)據(jù)沿著輸入通路到達(dá)一個(gè)處理T,該處理根據(jù)輸入數(shù)據(jù)的類型在若干個(gè)動(dòng)作序列中選出一個(gè)執(zhí)行。這種數(shù)據(jù)流稱為事務(wù)流(輸入數(shù)據(jù)稱為事務(wù))。圖4.11變換流示意圖圖4.12事務(wù)流示意圖面向數(shù)據(jù)流設(shè)計(jì)方法的過(guò)程運(yùn)用面向數(shù)據(jù)流的方法進(jìn)行軟件結(jié)構(gòu)設(shè)計(jì)的過(guò)程,如圖4.13所示。應(yīng)該注意,設(shè)計(jì)屬于創(chuàng)造性活動(dòng),不能沒有規(guī)矩,但更不能拘囿于規(guī)矩,設(shè)計(jì)首先需要人的判斷力和創(chuàng)造精神,這些常常需要凌駕于規(guī)則之上,才能有最大自由的發(fā)揮,才能獲得最佳的效果。圖面向數(shù)據(jù)流設(shè)計(jì)方法的過(guò)程變換分析法(1)復(fù)查基本系統(tǒng)模型首先應(yīng)該對(duì)需求分析階段得到的基本系統(tǒng)模型進(jìn)行復(fù)查,復(fù)查的目的是為了確保輸入數(shù)據(jù)和輸出數(shù)據(jù)符合實(shí)際。變換分析法(2)復(fù)查并精化數(shù)據(jù)流圖應(yīng)該對(duì)需求分析階段得到的數(shù)據(jù)流圖進(jìn)行復(fù)查,并在必要時(shí)進(jìn)行精化。要確保數(shù)據(jù)流圖正確描繪了目標(biāo)系統(tǒng)的業(yè)務(wù)業(yè)務(wù)邏輯,同時(shí)要確保數(shù)據(jù)流圖中的每個(gè)處理都代表了一個(gè)規(guī)模適中、相對(duì)獨(dú)立的子功能。變換分析法(3)確定數(shù)據(jù)流圖的類型通常,一個(gè)系統(tǒng)中的所有信息都可以被認(rèn)為是變換流,但是,當(dāng)遇到有明顯事務(wù)特性的信息流時(shí),還是采用事務(wù)分析的方法進(jìn)行映射。多數(shù)情況是,系統(tǒng)即具有變換特征,也具有事務(wù)特征,因此,在確定系統(tǒng)數(shù)據(jù)流圖的特征時(shí),應(yīng)該從全局角度考慮哪種特征更占優(yōu)。變換分析法(4)確定數(shù)據(jù)流的邊界對(duì)于變換流來(lái)說(shuō),分析確定輸入流和輸出流的邊界,從而孤立出變換中心。對(duì)于事務(wù)流來(lái)說(shuō),分析確定輸入流的邊界,從而孤立出事務(wù)中心。變換分析法在確定邊界時(shí),不同的設(shè)計(jì)考慮有不同的取舍標(biāo)準(zhǔn),但是,通常一個(gè)處理框的誤差對(duì)最終的軟件結(jié)構(gòu)影響不大,況且在到初步軟件結(jié)構(gòu)后,還有優(yōu)化調(diào)整的要求。接下來(lái),選取相應(yīng)的分析方法把系統(tǒng)數(shù)據(jù)流圖映射成變換型結(jié)構(gòu)或事務(wù)型結(jié)構(gòu)。變換分析法(5)完成“第一級(jí)分解”傳統(tǒng)方法論中,軟件結(jié)構(gòu)代表對(duì)控制自頂向下的分配,所謂分解其實(shí)就是分配控制,分配從屬關(guān)系。第一級(jí)分解,就是分配軟件結(jié)構(gòu)中的頂層控制。變換分析法對(duì)于變換流的情況,位于軟件結(jié)構(gòu)最頂層的總控模塊協(xié)調(diào)以下三個(gè)從屬模塊的控制。(1)輸入信息處理控制模塊。此模塊協(xié)調(diào)對(duì)所有輸入數(shù)據(jù)的接收。(2)變換中心控制模塊。此模塊管理對(duì)內(nèi)部形式的數(shù)據(jù)的所有操作。(3)輸出信息處理控制模塊。此模塊協(xié)調(diào)輸出信息的產(chǎn)生過(guò)程。變換分析法(6)完成“第二級(jí)分解”進(jìn)行第二級(jí)分解就是把數(shù)據(jù)流圖中的每個(gè)處理映射成軟件結(jié)構(gòu)中的一個(gè)適當(dāng)?shù)哪K。具體到變換流來(lái)說(shuō),第二級(jí)分解就是從變換中心的邊界開始沿著輸入通路向外移動(dòng),把輸入通路中每個(gè)處理依次映射成軟件結(jié)構(gòu)中的“輸入信息處理控制模塊”控制下的一個(gè)低層模塊。變換分析法然后,再?gòu)淖儞Q中心的邊界開始,沿著輸出通絡(luò)向外移動(dòng),把輸出通路中的每個(gè)處理依次映射成直接或間接受“輸出信息處理控制模塊”控制的一個(gè)低層模塊。最后,把變換中心內(nèi)的每個(gè)處理映射成受“變換中心控制模塊“控制的一個(gè)個(gè)模塊。變換分析法(7)優(yōu)化對(duì)經(jīng)過(guò)以上步驟得到的結(jié)果按照模塊獨(dú)立原理和總體設(shè)計(jì)準(zhǔn)則進(jìn)行優(yōu)化。為了產(chǎn)生合理的分解,得到盡可能高的內(nèi)聚、盡可能松散的耦合,最重要的是得到一個(gè)易于實(shí)現(xiàn)、易于測(cè)試、和易于維護(hù)的軟件結(jié)構(gòu),應(yīng)該對(duì)初步得到的軟件模塊進(jìn)行再分解或合并。變換分析法機(jī)械地遵循上述映射規(guī)則很可能會(huì)得出一些不必要的控制模塊,如果它們確實(shí)用處不大,那么應(yīng)該合并它們。如果控制模塊功能過(guò)分復(fù)雜,可以適當(dāng)?shù)卦黾又虚g層的控制模塊或者進(jìn)一步將它們分解。變換分析法任何優(yōu)化過(guò)程不能違背設(shè)計(jì)原理,不能違背問(wèn)題域常識(shí)、不能為了最求所謂的“最佳設(shè)計(jì)”而優(yōu)化。設(shè)計(jì)的優(yōu)化可能會(huì)導(dǎo)出不同的軟件結(jié)構(gòu),要從中選優(yōu),力求得到“最好“的結(jié)構(gòu)。避免把結(jié)構(gòu)的優(yōu)化留到過(guò)程設(shè)計(jì)階段,這也是把結(jié)構(gòu)設(shè)計(jì)和過(guò)程設(shè)計(jì)分開的價(jià)值所在。變換分析法結(jié)構(gòu)簡(jiǎn)單往往表明效率高。設(shè)計(jì)優(yōu)化應(yīng)該力求做到在有效模塊化的前提下使用盡可能少的模塊數(shù),以及在能夠滿足信息要求的前提下使用最簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu)。切記,不能正常工作的最佳設(shè)計(jì)沒有實(shí)際意義。正常工作是一切設(shè)計(jì)優(yōu)化的基礎(chǔ),高效、最佳只是愿景目標(biāo)。簡(jiǎn)單說(shuō)就是“先使它能工作,然后再使它快起來(lái)”。事務(wù)分析法事務(wù)分析的設(shè)計(jì)步驟和變換分析的設(shè)計(jì)步驟大致相同或類似,區(qū)別僅在于映射方法。由事務(wù)流映射成的軟件結(jié)構(gòu)包括一個(gè)接收分支和一個(gè)發(fā)送分支。從事務(wù)中心的邊界開始,把接收流童虎的處理映射成模塊。發(fā)送分支由一個(gè)調(diào)度模塊控制它下面的所有模塊。然后把數(shù)據(jù)流圖中的每個(gè)活動(dòng)流通路映射成與它的流特征相對(duì)應(yīng)的結(jié)構(gòu)。如圖4.14所示??偪亟邮胀氛{(diào)度BACA通
路圖4.14事務(wù)分析映射法事務(wù)分析法一般來(lái)說(shuō),如果數(shù)據(jù)流圖不具有顯著的事務(wù)特征,最好使用變換分析;反之,則使用事務(wù)分析技術(shù)。對(duì)于大型的或復(fù)雜的系統(tǒng),事務(wù)分析和變換分析往往兼而有之。事務(wù)分析法例4.1:由于總體設(shè)計(jì)的主要工作開始于對(duì)需求分析獲得的數(shù)據(jù)流圖的分析,下面以某個(gè)“學(xué)生檔案管理系統(tǒng)”的數(shù)據(jù)流圖為例,運(yùn)用面向數(shù)據(jù)流的方法設(shè)計(jì)其軟件結(jié)構(gòu)。假設(shè)某“學(xué)生檔案管理系統(tǒng)”的數(shù)據(jù)流圖如圖4.15所示,并且假設(shè)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度牧業(yè)產(chǎn)業(yè)扶貧項(xiàng)目承包合同范本3篇
- 2025版農(nóng)產(chǎn)品溯源與質(zhì)量認(rèn)證服務(wù)合同3篇
- 遼寧省朝陽(yáng)市北票市2024-2025學(xué)年七年級(jí)上學(xué)期1月期末道德與法治試題(含答案)
- 2025年度個(gè)人公司股權(quán)結(jié)構(gòu)調(diào)整合同4篇
- 二零二五年度某局勞務(wù)分包結(jié)算與數(shù)字化轉(zhuǎn)型戰(zhàn)略合同2篇
- 天然氣在科技創(chuàng)新中的地位考核試卷
- 家禽飼養(yǎng)業(yè)質(zhì)量品牌提升與市場(chǎng)競(jìng)爭(zhēng)策略考核試卷
- 供應(yīng)鏈協(xié)同采購(gòu)與供應(yīng)商管理考核試卷
- 儀器儀表制造業(yè)的持續(xù)創(chuàng)新能力考核試卷
- 2025版二零二五年度美發(fā)店房東租賃合同范本:租賃合作協(xié)議4篇
- 中醫(yī)診療方案腎病科
- 2025年安慶港華燃?xì)庀薰菊衅腹ぷ魅藛T14人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 人教版(2025新版)七年級(jí)下冊(cè)數(shù)學(xué)第七章 相交線與平行線 單元測(cè)試卷(含答案)
- GB/T 44351-2024退化林修復(fù)技術(shù)規(guī)程
- 從跨文化交際的角度解析中西方酒文化(合集5篇)xiexiebang.com
- 中藥飲片培訓(xùn)課件
- 醫(yī)院護(hù)理培訓(xùn)課件:《早產(chǎn)兒姿勢(shì)管理與擺位》
- 《論文的寫作技巧》課件
- 空氣自動(dòng)站儀器運(yùn)營(yíng)維護(hù)項(xiàng)目操作說(shuō)明以及簡(jiǎn)單故障處理
- 2022年12月Python-一級(jí)等級(jí)考試真題(附答案-解析)
- T-CHSA 020-2023 上頜骨缺損手術(shù)功能修復(fù)重建的專家共識(shí)
評(píng)論
0/150
提交評(píng)論