軟件工程課件_第1頁
軟件工程課件_第2頁
軟件工程課件_第3頁
軟件工程課件_第4頁
軟件工程課件_第5頁
已閱讀5頁,還剩141頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

軟件工程信息技術(shù)學(xué)部陳曦軟件工程信息技術(shù)學(xué)部

4.1總體設(shè)計(jì)的過程4.2表示軟件結(jié)構(gòu)的圖形工具4.3軟件設(shè)計(jì)的概念和原理4.4軟件結(jié)構(gòu)設(shè)計(jì)優(yōu)化準(zhǔn)則4.5面向數(shù)據(jù)流的設(shè)計(jì)方法

第4章總體設(shè)計(jì)4.1總體設(shè)計(jì)的過程第4章總體設(shè)計(jì)4.1總體設(shè)計(jì)的過程經(jīng)過可行性分析階段,我們弄清了系統(tǒng)開發(fā)出來的可行性,在需求分析階段,我們弄清了系統(tǒng)到底要“做什么?”,接著進(jìn)入設(shè)計(jì)階段,我們開始考慮“怎么做?”的問題。前面提到過,軟件設(shè)計(jì)階段分為總體設(shè)計(jì)和詳細(xì)設(shè)計(jì)。即首先考慮軟件的總體結(jié)構(gòu),在全局的高度上分析對比多種可能實(shí)現(xiàn)系統(tǒng)的方案和結(jié)構(gòu),從中選出最佳方案,然后再進(jìn)行進(jìn)一步的設(shè)計(jì)。4.1總體設(shè)計(jì)的過程經(jīng)過可行性分析階段,為了實(shí)現(xiàn)目標(biāo)系統(tǒng),最終必須設(shè)計(jì)出組成這個(gè)系統(tǒng)的所有程序和數(shù)據(jù)庫(文件),對于程序,則首先進(jìn)行結(jié)構(gòu)設(shè)計(jì),具體方法如下:(1)采用某種設(shè)計(jì)方法,將一個(gè)復(fù)雜的系統(tǒng)按功能劃分成模塊。(2)確定每個(gè)模塊的功能。(3)確定模塊之間的調(diào)用關(guān)系。(4)確定模塊之間的接口,即模塊之間傳遞的信息。(5)評價(jià)模塊結(jié)構(gòu)的質(zhì)量。1.設(shè)計(jì)軟件系統(tǒng)結(jié)構(gòu)(簡稱軟件結(jié)構(gòu))為了實(shí)現(xiàn)目標(biāo)系統(tǒng),最終必須設(shè)計(jì)出組成這從以上內(nèi)容看,軟件結(jié)構(gòu)的設(shè)計(jì)是以模塊為基礎(chǔ)的,在需求分析階段,通過某種分析方法把系統(tǒng)分解成層次結(jié)構(gòu)。在設(shè)計(jì)階段,以需求分析的結(jié)果為依據(jù),從實(shí)現(xiàn)的角度劃分模塊,并組成模塊的層次結(jié)構(gòu)。軟件結(jié)構(gòu)的設(shè)計(jì)是概要設(shè)計(jì)關(guān)鍵的一步,直接影響到詳細(xì)設(shè)計(jì)與編碼的工作。軟件系統(tǒng)的質(zhì)量及一些整體特性都在軟件結(jié)構(gòu)的設(shè)計(jì)中決定。因此,應(yīng)由經(jīng)驗(yàn)豐富的軟件人員擔(dān)任,采用一定的設(shè)計(jì)方法,選取合理的設(shè)計(jì)方案。從以上內(nèi)容看,軟件結(jié)構(gòu)的設(shè)計(jì)是以模塊為基礎(chǔ)的2.數(shù)據(jù)結(jié)構(gòu)及數(shù)據(jù)庫設(shè)計(jì)1)數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)對于大型數(shù)據(jù)處理的軟件系統(tǒng),除了系統(tǒng)結(jié)構(gòu)設(shè)計(jì)外,數(shù)據(jù)結(jié)構(gòu)與數(shù)據(jù)庫設(shè)計(jì)也是重要的。逐步細(xì)化的方法也適用于數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)。在需求分析階段,可通過數(shù)據(jù)字典對數(shù)據(jù)的組成、操作約束和數(shù)據(jù)之間的關(guān)系等方面進(jìn)行描述,確定數(shù)據(jù)的結(jié)構(gòu)特性,在概要設(shè)計(jì)階段要加以細(xì)化,詳細(xì)設(shè)計(jì)則規(guī)定具體的實(shí)現(xiàn)細(xì)節(jié)。在概要設(shè)計(jì)階段,宜使用抽象的數(shù)據(jù)類型。如“?!笔菙?shù)據(jù)結(jié)構(gòu)的概念模型,在詳細(xì)設(shè)計(jì)中可用線性表和鏈表來實(shí)現(xiàn)“?!?。設(shè)計(jì)有效的數(shù)據(jù)結(jié)構(gòu),將大大簡化軟件模塊處理過程的設(shè)計(jì)。2.數(shù)據(jù)結(jié)構(gòu)及數(shù)據(jù)庫設(shè)計(jì)1)數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)2)數(shù)據(jù)庫的設(shè)計(jì)概念設(shè)計(jì)。一般用ER模型來表示數(shù)據(jù)模型,這是一個(gè)概念模型。ER模型既是設(shè)計(jì)數(shù)據(jù)庫的基礎(chǔ),也是設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)。IDEF1x技術(shù)也支持概念模式,用IDEF1x方法建立系統(tǒng)的信息模型,使模型具有一致性、可擴(kuò)展性和可變性等特性,同樣,該模型可作為數(shù)據(jù)庫設(shè)計(jì)的主要依據(jù)。數(shù)據(jù)庫的設(shè)計(jì)指數(shù)據(jù)存儲(chǔ)文件的設(shè)計(jì),其主要包括以下幾方面的設(shè)計(jì):在數(shù)據(jù)分析的基礎(chǔ)上,從用戶角度采用自底向上的方法進(jìn)行視圖設(shè)計(jì)。2)數(shù)據(jù)庫的設(shè)計(jì)概念設(shè)計(jì)。一般用ER模型來(2)邏輯設(shè)計(jì)。ER模型或IDEF1x模型是獨(dú)立于數(shù)據(jù)庫管理系統(tǒng)(DBMS)的,要結(jié)合具體的DBMS特征來建立數(shù)據(jù)庫的邏輯結(jié)構(gòu)。對于關(guān)系型的DBMS來說,將概念結(jié)構(gòu)轉(zhuǎn)換為數(shù)據(jù)模式、子模式并進(jìn)行規(guī)范,要給出數(shù)據(jù)結(jié)構(gòu)的定義,即定義所含的數(shù)據(jù)項(xiàng)、類型、長度及它們之間的層次或相互關(guān)系的表格等。(2)邏輯設(shè)計(jì)。ER模型或IDEF(3)物理設(shè)計(jì)。對于不同的DBMS,物理環(huán)境不同,提供的存儲(chǔ)結(jié)構(gòu)與存取方法各不相同。物理設(shè)計(jì)就是設(shè)計(jì)數(shù)據(jù)模式的一些物理細(xì)節(jié),如數(shù)據(jù)項(xiàng)存儲(chǔ)要求、存取方式和索引的建立等。(3)物理設(shè)計(jì)。對于不同的DBMS,物理3.編寫概要設(shè)計(jì)文檔編寫概要設(shè)計(jì)文檔的內(nèi)容如下:(1)概要設(shè)計(jì)說明書。(2)數(shù)據(jù)庫設(shè)計(jì)說明書:主要給出所使用的DBMS簡介,數(shù)據(jù)庫的概念模型、邏輯設(shè)計(jì)和結(jié)果。(3)用戶手冊:對需求分析階段編寫的用戶手冊進(jìn)行補(bǔ)充。(4)修訂測試計(jì)劃:對測試策略、方法和步驟提出明確要求。3.編寫概要設(shè)計(jì)文檔編寫概要設(shè)計(jì)文檔的內(nèi)容如下:(1)概4.評審在該階段,對設(shè)計(jì)部分是否完整地實(shí)現(xiàn)了需求中規(guī)定的功能、性能等要求,設(shè)計(jì)方案的可行性、關(guān)鍵的處理及內(nèi)外部接口定義正確性、有效性以及各部分之間的一致性等,都一一進(jìn)行評審。4.評審在該階段,對設(shè)計(jì)部分是否完整地實(shí)現(xiàn)4.2表示軟件結(jié)構(gòu)的圖形工具前面說過,總體設(shè)計(jì)的任務(wù)是要從宏觀的角度把握整個(gè)系統(tǒng)的結(jié)構(gòu),那么如何用“可量化”的方式來表示系統(tǒng)的整體結(jié)構(gòu)呢?這里便需要用到一些工具來幫助設(shè)計(jì)人員從宏觀上表示整個(gè)系統(tǒng)的結(jié)構(gòu),這里的工具主要是圖形工具,包括:層次圖、HIPO圖和結(jié)構(gòu)圖。4.2.1層次圖和HIPO圖層次圖類似于系統(tǒng)流程圖,其圖形符號主要有矩形框和直線。矩形框代表模塊,框內(nèi)寫上模塊的名字;連線表示調(diào)用關(guān)系,即一個(gè)模塊的功能是通過調(diào)用下層模塊實(shí)現(xiàn)的。4.2表示軟件結(jié)構(gòu)的圖形工具前面說過,總體HIPO圖HIPO圖(HierarchyPlusInput/Processing/Output)是美國IBM公司70年代發(fā)展起來的表示軟件系統(tǒng)結(jié)構(gòu)的工具。它既可以描述軟件總的模塊層次結(jié)構(gòu)——H圖(層次圖),又可以描述每個(gè)模塊輸入/輸出數(shù)據(jù)、處理功能及模塊調(diào)用的詳細(xì)情況——IPO圖。HIPO圖以模塊分解的層次性以及模塊內(nèi)部輸入、處理及輸出三大基本部分為基礎(chǔ)建立的。當(dāng)然,繪制HIPO圖同樣要遵循軟件設(shè)計(jì)的基本原理。

1.HIPO圖的H圖該圖用于描述軟件的層次結(jié)構(gòu),矩形框表示一個(gè)模塊,矩形框之間的直線表示模塊之間的調(diào)用關(guān)系,同結(jié)構(gòu)圖一樣未指明調(diào)用順序。HIPO圖HIPO圖(HierarchyP現(xiàn)以某企業(yè)的銷售系統(tǒng)為例,說明HIPO圖的H圖。企業(yè)銷售管理的描述如下:(1)接受顧客的訂單,檢驗(yàn)訂單。若庫存有貨,則進(jìn)行供貨處理,即修改庫存,給倉庫開備貨單,并且將訂單留底;若庫存量不足,則將缺貨訂單登入缺貨記錄。(2)根據(jù)缺貨記錄進(jìn)行缺貨處理,將缺貨通知單發(fā)給采購部分,以便采購。(3)根據(jù)采購部門發(fā)來的進(jìn)貨通知單處理進(jìn)貨,即修改庫存,并從缺貨記錄中取出缺貨訂單進(jìn)行供貨處理。(4)根據(jù)留底的訂單進(jìn)行銷售統(tǒng)計(jì),打印統(tǒng)計(jì)表給經(jīng)理。圖4.1即為該系統(tǒng)HIPO圖的H圖?,F(xiàn)以某企業(yè)的銷售系統(tǒng)為例,說明HIPO圖的H圖。圖4.1銷售管理系統(tǒng)的H圖圖4.1銷售管理系統(tǒng)的H圖2.IPO圖H圖只說明了軟件系統(tǒng)由哪些模塊組成及其控制層次結(jié)構(gòu),并未說明模塊間的信息傳遞及模塊內(nèi)部的處理。因此對一些重要模塊還必須根據(jù)數(shù)據(jù)流圖、數(shù)據(jù)字典及H圖繪制具體的IPO圖,圖4.2為“確定能否供貨”的IPO圖。“確定能否供貨”是圖4.1中的一個(gè)模塊。2.IPO圖H圖只說明了軟件系統(tǒng)由哪些模塊4.2“確定能否供貨系統(tǒng)”的IPO圖4.2“確定能否供貨系統(tǒng)”的IPO圖4.2.2結(jié)構(gòu)圖軟件結(jié)構(gòu)圖是軟件系統(tǒng)的模塊層次結(jié)構(gòu),反映了整個(gè)系統(tǒng)的功能實(shí)現(xiàn),即將來程序的控制層次體系。對于一個(gè)“問題”,可用不同的軟件結(jié)構(gòu)來解決,不同的設(shè)計(jì)方法和不同的劃分和組織,可得出不同的軟件結(jié)構(gòu)。軟件結(jié)構(gòu)往往用樹狀或網(wǎng)狀結(jié)構(gòu)的圖形來表示。軟件工程中,一般采用70年代中期美國Yourdon等提出的稱為結(jié)構(gòu)圖(StructureChart,簡稱SC)的工具來表示軟件結(jié)構(gòu)。結(jié)構(gòu)圖的主要內(nèi)容有:4.2.2結(jié)構(gòu)圖軟件結(jié)構(gòu)圖是軟件系統(tǒng)的模塊(1)模塊:用方框表示,并用名字標(biāo)識(shí)該模塊,名字應(yīng)體現(xiàn)該模塊的功能。(2)模塊的控制關(guān)系:兩個(gè)模塊間用單向箭頭或直線連接起來表示它們的控制關(guān)系,如圖4.3所示。按照慣例,總是圖中位于上方的模塊調(diào)用下方的模塊,所以不用箭頭也不會(huì)產(chǎn)生二義性。調(diào)用模塊和被調(diào)用模塊的關(guān)系稱為上屬與下屬的關(guān)系,或者稱為“統(tǒng)率”與“從屬”的關(guān)系。如圖4.5所示,模塊M統(tǒng)率模塊A、B、C,模塊D從屬于模塊A,也從屬于M。(3)模塊間的信息傳遞:模塊間還經(jīng)常用帶注釋的短箭頭表示模塊調(diào)用過程中來回傳遞的信息。有時(shí)箭頭尾部帶空心圓的表示傳遞的是數(shù)據(jù),帶實(shí)心圓的表示傳遞的是控制信息,如圖4.3所示。(1)模塊:用方框表示,并用名字標(biāo)識(shí)該模塊圖4.3模塊間的控制關(guān)系及信息傳遞圖4.3模塊間的控制關(guān)系及信息傳遞(4)兩個(gè)附加符號:表示模塊有選擇調(diào)用或循環(huán)調(diào)用,如圖4.4所示。(5)結(jié)構(gòu)圖的形態(tài)特征。結(jié)構(gòu)圖的形態(tài)特征包括:①深度:指結(jié)構(gòu)圖控制的層次,也是模塊的層數(shù),見圖4.5,結(jié)構(gòu)圖的深度為5。②寬度:指一層中最大的模塊個(gè)數(shù),如圖4.5所示,寬度為8。③扇出:一個(gè)模塊直接下屬模塊的個(gè)數(shù),如圖4.5所示,模塊M的扇出為3。④扇入:指一個(gè)模塊直接上屬模塊的個(gè)數(shù),如圖4.5所示,模塊T的扇入為4。(4)兩個(gè)附加符號:表示模塊有選擇調(diào)用或4.4選擇調(diào)用和循環(huán)調(diào)用的表示(a)選擇調(diào)用;(b)循環(huán)調(diào)用4.4選擇調(diào)用和循環(huán)調(diào)用的表示圖4.5結(jié)構(gòu)圖示例圖4.5結(jié)構(gòu)圖示例(6)畫結(jié)構(gòu)圖應(yīng)注意的事項(xiàng)如下:①同一名字的模塊在結(jié)構(gòu)圖中僅出現(xiàn)一次。②調(diào)用關(guān)系只能從上到下。③不嚴(yán)格表示模塊的調(diào)用次序,習(xí)慣上從左到右。有時(shí)為了減少連線的交叉,適當(dāng)?shù)卣{(diào)整同一層模塊左右位置,以保持結(jié)構(gòu)圖的清晰性。(6)畫結(jié)構(gòu)圖應(yīng)注意的事項(xiàng)如下:①同一名字4.3軟件設(shè)計(jì)的概念和原理3.2.1模塊化模塊化的概念在程序設(shè)計(jì)技術(shù)中就出現(xiàn)了。何為模塊?模塊在程序中是數(shù)據(jù)說明、可執(zhí)行語句等程序?qū)ο蟮募?,或者是單?dú)命名和編址的元素,如高級語言中的過程、函數(shù)和子程序等。在軟件的體系結(jié)構(gòu)中,模塊是可組合、分解和更換的單元。模塊具有以下幾種基本屬性:(1)接口:指模塊的輸入與輸出。(2)功能:指模塊實(shí)現(xiàn)什么功能。(3)邏輯:描述內(nèi)部如何實(shí)現(xiàn)要求的功能及所需的數(shù)據(jù)。(4)狀態(tài):指該模塊的運(yùn)行環(huán)境,即模塊的調(diào)用與被調(diào)用關(guān)系。4.3軟件設(shè)計(jì)的概念和原理3.2.1模塊化功能、狀態(tài)與接口反映模塊的外部特性,邏輯反映它的內(nèi)部特性。模塊化是指解決一個(gè)復(fù)雜問題時(shí)自頂向下逐層把軟件系統(tǒng)劃分成若干模塊的過程。每個(gè)模塊完成一個(gè)特定的子功能,所有的模塊按某種方法組裝起來,成為一個(gè)整體,完成整個(gè)系統(tǒng)所要求的功能。在面向?qū)ο笤O(shè)計(jì)中,模塊和模塊化的概念將進(jìn)一步擴(kuò)充。模塊化是軟件解決復(fù)雜問題所具備的手段,為了說明這一點(diǎn),可將問題的復(fù)雜性和工作量的關(guān)系進(jìn)行推理。功能、狀態(tài)與接口反映模塊的外部特性,邏輯反映設(shè)問題x,表示它的復(fù)雜性函數(shù)為C(x),解決它所需的工作量函數(shù)為E(x)。對于問題P1和P2;如果C(P1)>C(P2)即P1比P2復(fù)雜,那么E(P1)>E(P2)即問題越復(fù)雜,所需要的工作量越大。根據(jù)解決一般問題的經(jīng)驗(yàn),規(guī)律為:C(P1+P2)>C(P1)+C(P2)即一個(gè)問題由兩個(gè)問題組合而成的復(fù)雜度大于分別考慮每個(gè)問題的復(fù)雜度之和。這樣,可以推出:E(P1+P2)>E(P1)+E(P2)設(shè)問題x,表示它的復(fù)雜性函數(shù)為C(x),由此可知,開發(fā)一個(gè)大而復(fù)雜的軟件系統(tǒng),將它進(jìn)行適當(dāng)?shù)姆纸?,不但可降低其?fù)雜性,還可減少開發(fā)工作量,從而降低開發(fā)成本,提高軟件生產(chǎn)率,這就是模塊化的依據(jù)。但是否將系統(tǒng)無限制分割,最后開發(fā)軟件的工作量就會(huì)趨于零?事實(shí)上模塊劃分越多,塊內(nèi)的工作量減少,但模塊之間接口的工作量增加了,如圖4.6所示。從圖看出,存在著一個(gè)使軟件開發(fā)成本最小區(qū)域的模塊數(shù)M,雖然目前還不能確定M的準(zhǔn)確數(shù)值,但在劃分模塊時(shí),避免數(shù)目過多或過少,一個(gè)模塊的規(guī)模應(yīng)當(dāng)取決于它的功能和用途。同時(shí),應(yīng)減少接口的代價(jià),提高模塊的獨(dú)立性。由此可知,開發(fā)一個(gè)大而復(fù)雜的軟件系統(tǒng),將它進(jìn)圖4.6模塊與開發(fā)軟件成本圖4.6模塊與開發(fā)軟件成本4.3.2抽象抽象是認(rèn)識(shí)復(fù)雜現(xiàn)象過程中使用的思維工具,即抽出事物本質(zhì)的共同特性而暫不考慮它的細(xì)節(jié),不考慮其他因素。抽象的概念被廣泛應(yīng)用于計(jì)算機(jī)軟件領(lǐng)域,在軟件工程學(xué)中更是如此。軟件工程實(shí)施中的每一步都可以看作是對軟件抽象層次的一次細(xì)化。在系統(tǒng)定義階段,軟件可作為整個(gè)計(jì)算機(jī)系統(tǒng)的一個(gè)元素來對待;在軟件需求分析階段,軟件的解決方案是使用問題環(huán)境中的術(shù)語來描述;從概要設(shè)計(jì)到詳細(xì)設(shè)計(jì)階段,提象的層次逐步降低,將面向問題的術(shù)語與面向?qū)崿F(xiàn)的術(shù)語結(jié)合起來描述解決方法,直到產(chǎn)生源程序時(shí)到達(dá)最低的抽象層次。這是軟件工程整個(gè)過程的抽象層次。具體到軟件設(shè)計(jì)階段,又有不同的抽象層次,在進(jìn)行軟件設(shè)計(jì)時(shí),抽象與逐步求精、模塊化密切相關(guān),可幫助定義軟件結(jié)構(gòu)中模塊的實(shí)體,由抽象到具體地分析和構(gòu)造出軟件的層次結(jié)構(gòu),提高軟件的可理解性。4.3.2抽象抽象是認(rèn)識(shí)復(fù)雜現(xiàn)象過程中使用4.3.3信息隱蔽通過抽象,可以確定組成軟件的過程實(shí)體。通過信息隱蔽,可以定義和實(shí)施對模塊的過程細(xì)節(jié)和局部數(shù)據(jù)結(jié)構(gòu)的存取限制。所謂信息隱蔽,是指在設(shè)計(jì)和確定模塊時(shí),使得一個(gè)模塊內(nèi)包含的信息(過程或數(shù)據(jù)),對于不需要這些信息的其他模塊來說,是不能訪問的;“隱蔽”的意思是,有效的模塊化通過定義一組相互獨(dú)立的模塊來實(shí)現(xiàn),這些獨(dú)立的模塊彼此之間僅僅交換那些為了完成系統(tǒng)功能所必需的信息,而將那些自身的實(shí)現(xiàn)細(xì)節(jié)與數(shù)據(jù)“隱藏”起來。一個(gè)軟件系統(tǒng)在整個(gè)生存期中要經(jīng)過多次修改,信息隱蔽為軟件系統(tǒng)的修改、測試及以后的維護(hù)都帶來好處。因此,在劃分模塊時(shí)要采取措施,如采用局部數(shù)據(jù)結(jié)構(gòu),使得大多數(shù)過程(即實(shí)現(xiàn)細(xì)節(jié))和數(shù)據(jù)對軟件的其他部分是隱藏的,這樣,修改軟件時(shí)偶然引入的錯(cuò)誤所造成的影響只局限在一個(gè)或少量幾個(gè)模塊內(nèi)部,不波及其他部分。4.3.3信息隱蔽通過抽象,可以確定組成軟4.3.4模塊獨(dú)立性為了降低軟件系統(tǒng)的復(fù)雜性,提高可理解性、可維護(hù)性,必須把系統(tǒng)劃分成為多個(gè)模塊,但模塊不能任意劃分,應(yīng)盡量保持其獨(dú)立性。模塊獨(dú)立性指每個(gè)模塊只完成系統(tǒng)要求的獨(dú)立的子功能,并且與其他模塊的聯(lián)系最少且接口簡單。模塊獨(dú)立性概念是模塊化、抽象及信息隱蔽這些軟件工程基本原理的直接產(chǎn)物。只有符合和遵守這些原則才能得到高度獨(dú)立的模塊。良好的模塊獨(dú)立性能使開發(fā)的軟件具有較高的質(zhì)量。由于模塊獨(dú)立性強(qiáng),信息隱藏性能好,并完成獨(dú)立的功能,且它的可理解性、可維護(hù)性及可測試性好,必然導(dǎo)致軟件的可靠性高。另外,接口簡單、功能獨(dú)立的模塊易開發(fā),且可并行工作,有效地提高了軟件的生產(chǎn)率。4.3.4模塊獨(dú)立性為了降低軟件系統(tǒng)的復(fù)雜如何衡量軟件的獨(dú)立性呢?根據(jù)模塊的外部特征和內(nèi)部特征,提出了兩個(gè)定性的度量標(biāo)準(zhǔn)——耦合性和內(nèi)聚性。

1.耦合性(Coupling)耦合性也稱塊間聯(lián)系,指軟件系統(tǒng)結(jié)構(gòu)中各模塊間相互聯(lián)系緊密程度的一種度量。模塊之間聯(lián)系越緊密,其耦合性就越強(qiáng),模塊的獨(dú)立性則越差。模塊間耦合高低取決于模塊間接口的復(fù)雜性、調(diào)用的方式及傳遞的信息。模塊的耦合性有以下幾種類型:無直接耦合、數(shù)據(jù)耦合、標(biāo)記耦合、控制耦合、公共耦合、內(nèi)容耦合如何衡量軟件的獨(dú)立性呢?根據(jù)模塊的外部特征(1)無直接耦合:指兩個(gè)模塊之間沒有直接的關(guān)系,它們分別從屬于不同模塊的控制與調(diào)用,它們之間不傳遞任何信息。因此,模塊間的這種耦合性最弱,模塊獨(dú)立性最高。(2)數(shù)據(jù)耦合:指兩個(gè)模塊之間有調(diào)用關(guān)系,傳遞的是簡單的數(shù)據(jù)值,相當(dāng)于高級語言中的值傳遞。這種耦合程度較低,模塊的獨(dú)立性較高。(3)標(biāo)記耦合:指兩個(gè)模塊之間傳遞的是數(shù)據(jù)結(jié)構(gòu),如高級語言中的數(shù)組名、記錄名和文件名等這些名字即為標(biāo)記,其實(shí)傳遞的是這個(gè)數(shù)據(jù)結(jié)構(gòu)的地址。兩個(gè)模塊必須清楚這些數(shù)據(jù)結(jié)構(gòu),并按要求對其進(jìn)行操作,這樣降低了可理解性??刹捎谩靶畔㈦[蔽”的方法,把該數(shù)據(jù)結(jié)構(gòu)以及在其上的操作全部集中在一個(gè)模塊,就可消除這種耦合,但有時(shí)因?yàn)檫€有其他功能的緣故,標(biāo)記耦合是不可避免的。(1)無直接耦合:指兩個(gè)模塊之間沒有直接的(4)控制耦合:指一個(gè)模塊調(diào)用另一個(gè)模塊時(shí),傳遞的是控制變量(如開關(guān)、標(biāo)志等),被調(diào)模塊通過該控制變量的值有選擇地執(zhí)行塊內(nèi)某一功能。因此被調(diào)模塊內(nèi)應(yīng)具有多個(gè)功能,哪個(gè)功能起作用受其調(diào)用模塊的控制??刂岂詈显黾恿死斫馀c編程及修改的復(fù)雜性,調(diào)用模塊必須知道被調(diào)模塊內(nèi)部的邏輯關(guān)系,即被調(diào)模塊處理細(xì)節(jié)不能“信息隱藏”,降低了模塊的獨(dú)立性。在大多數(shù)情況下,模塊間的控制耦合并不是必需的,可以將被調(diào)模塊內(nèi)的判定上移到調(diào)用模塊中去,同時(shí)將被調(diào)模塊按其功能分解為若干單一功能的模塊,將控制耦合改變?yōu)閿?shù)據(jù)耦合。(4)控制耦合:指一個(gè)模塊調(diào)用另一個(gè)模塊時(shí)(5)公共耦合:指通過一個(gè)公共數(shù)據(jù)環(huán)境相互作用的那些模塊間的耦合。公共數(shù)據(jù)環(huán)境可以是全程變量或數(shù)據(jù)結(jié)構(gòu)、共享的通信區(qū)、內(nèi)存的公共覆蓋區(qū)及任何存儲(chǔ)介質(zhì)上的文件和物理設(shè)備等(也有將共享外部設(shè)備分類為外部耦合的)。公共耦合的復(fù)雜程度隨耦合模塊的個(gè)數(shù)增加而增加。如果只有兩個(gè)模塊之間有公共數(shù)據(jù)環(huán)境,那么這種公共耦合就有兩種情況:①一個(gè)模塊只是給公共數(shù)據(jù)環(huán)境送數(shù)據(jù),另一個(gè)模塊只是從公共環(huán)境中取數(shù)據(jù),這只是數(shù)據(jù)耦合的一種形式,是比較松散的公共耦合;②兩個(gè)模塊都既往公共數(shù)據(jù)環(huán)境中送數(shù)據(jù),又從里面取數(shù)據(jù),這是緊密的公共耦合。(5)公共耦合:指通過一個(gè)公共數(shù)據(jù)環(huán)境相互如果在模塊之間共享的數(shù)據(jù)很多,且通過參數(shù)的傳遞很不方便時(shí),才使用公共耦合,因?yàn)楣柴詈蠒?huì)引起以下問題:①耦合的復(fù)雜程度隨模塊的個(gè)數(shù)增加而增加,無法控制各個(gè)模塊對公共數(shù)據(jù)的存取,若某個(gè)模塊有錯(cuò),可通過公共區(qū)將錯(cuò)誤延伸到其他模塊,則會(huì)影響到軟件的可靠性。②使軟件的可維護(hù)性變差。若某一模塊修改了公共區(qū)的數(shù)據(jù),則會(huì)影響到與此有關(guān)的所有模塊。③降低了軟件的可理解性。因?yàn)楦鱾€(gè)模塊使用公共區(qū)的數(shù)據(jù),使用方式往往是隱含的,某些數(shù)據(jù)被哪些模塊共享,不易很快搞清。如果在模塊之間共享的數(shù)據(jù)很多,且通過參數(shù)的傳遞(6)內(nèi)容耦合:是最高程度的耦合,也是最差的耦合。當(dāng)一個(gè)模塊直接使用另一個(gè)模塊的內(nèi)部數(shù)據(jù),或通過非正常入口而轉(zhuǎn)入另一個(gè)模塊內(nèi)部時(shí),這種模塊之間的耦合便為內(nèi)容耦合。這種情況往往出現(xiàn)在匯編程序設(shè)計(jì)中。以上6種由低到高的耦合類型,為設(shè)計(jì)軟件、劃分模塊提供了決策準(zhǔn)則。提高模塊獨(dú)立性、建立模塊間盡可能松散的系統(tǒng),是模塊化設(shè)計(jì)的目標(biāo)。(6)內(nèi)容耦合:是最高程度的耦合,也是最差的為了降低模塊間的耦合度,可采取以下幾點(diǎn)措施:在耦合方式上降低模塊間接口的復(fù)雜性。模塊間接口的復(fù)雜性包括模塊的接口方式、接口信息的結(jié)構(gòu)和數(shù)量。接口方式不采用直接引用(內(nèi)容耦合),而采用調(diào)用方式(如過程語句調(diào)用方式)。接口信息通過參數(shù)傳遞且傳遞信息的結(jié)構(gòu)盡量簡單,不用復(fù)雜參數(shù)結(jié)構(gòu)(如過程、指針等類型參數(shù)),參數(shù)的個(gè)數(shù)也不宜太多,如果很多,可考慮模塊的功能是否龐大復(fù)雜。(2)在傳遞信息類型上盡量使用數(shù)據(jù)耦合,避免控制耦合,慎用或有控制地使用公共耦合。這只是原則,耦合類型的選擇要根據(jù)實(shí)際情況綜合地考慮。為了降低模塊間的耦合度,可采取以下幾點(diǎn)措施:在耦合方式上降低2.內(nèi)聚性(Cohesion)內(nèi)聚性也稱塊內(nèi)聯(lián)系,指模塊的功能強(qiáng)度的度量,即一個(gè)模塊內(nèi)部各個(gè)元素彼此結(jié)合的緊密程度的度量。若一個(gè)模塊內(nèi)各元素(語句之間、程序段之間)聯(lián)系的越緊密,則它的內(nèi)聚性就越高。內(nèi)聚性有以下幾種類型:偶然內(nèi)聚、邏輯內(nèi)聚、時(shí)間內(nèi)聚、通信內(nèi)聚、順序內(nèi)聚、功能內(nèi)聚。2.內(nèi)聚性(Cohesion)內(nèi)聚性也稱塊偶然內(nèi)聚:指一個(gè)模塊內(nèi)的各處理元素之間沒有任何聯(lián)系。例如,有一些無聯(lián)系的處理序列在程序中多次出現(xiàn)或在幾個(gè)模塊中都出現(xiàn),如:ReaddiskFile;Calculatecurrentvalues;Produceuseroutput;…為了節(jié)省存儲(chǔ),把它們抽出來組成一個(gè)新的模塊,這個(gè)模塊就屬于偶然內(nèi)聚。這樣的模塊不易理解也不易修改,這是最差的內(nèi)聚情況。偶然內(nèi)聚:指一個(gè)模塊內(nèi)的各處理元素之間沒有任(2)邏輯內(nèi)聚:指模塊內(nèi)執(zhí)行幾個(gè)邏輯上相似的功能,通過參數(shù)確定該模塊完成哪一個(gè)功能。如產(chǎn)生各種類型錯(cuò)誤的信息輸出放在一個(gè)模塊,或從不同設(shè)備上的輸入放在一個(gè)模塊,這是一個(gè)單入口多功能模塊。這種模塊內(nèi)聚程度有所提高,各部分之間在功能上有相互關(guān)系,但不易修改;當(dāng)某個(gè)調(diào)用模塊要求修改此模塊公用代碼時(shí),而另一些調(diào)用模塊又不要求修改。另外,調(diào)用時(shí)需要進(jìn)行控制參數(shù)的傳遞,造成模塊間的控制耦合,調(diào)用此模塊時(shí),不用的部分也占據(jù)了主存,降低了系統(tǒng)效率。(2)邏輯內(nèi)聚:指模塊內(nèi)執(zhí)行幾個(gè)邏輯上相(3)時(shí)間內(nèi)聚:把需要同時(shí)執(zhí)行的動(dòng)作組合在一起形成的模塊為時(shí)間內(nèi)聚模塊。如初始化一組變量,同時(shí)打開若干文件,同時(shí)關(guān)閉文件等,都與特定時(shí)間有關(guān)。時(shí)間內(nèi)聚比邏輯內(nèi)聚程度高一些,因?yàn)闀r(shí)間內(nèi)聚模塊中的各部分都要在同一時(shí)間內(nèi)完成。但是由于這樣的模塊往往與其他模塊聯(lián)系的比較緊密,如初始化模塊對許多模塊的運(yùn)行有影響,因此和其他模塊耦合的程度較高。(3)時(shí)間內(nèi)聚:把需要同時(shí)執(zhí)行的動(dòng)作組合在(4)通信內(nèi)聚:指模塊內(nèi)所有處理元素都在同一個(gè)數(shù)據(jù)結(jié)構(gòu)上操作(有時(shí)稱之為信息內(nèi)聚),或者指各處理使用相同的輸入數(shù)據(jù)或者產(chǎn)生相同的輸出數(shù)據(jù)。如一個(gè)模塊完成“建表”、“查表”兩部分功能,都使用同一數(shù)據(jù)結(jié)構(gòu)——名字表。又如一個(gè)模塊完成生產(chǎn)日報(bào)表、周報(bào)表和月報(bào)表,都使用同一數(shù)據(jù)——日產(chǎn)量。通信內(nèi)聚的模塊各部分都緊密相關(guān)于同一數(shù)據(jù)(或者數(shù)據(jù)結(jié)構(gòu)),所以內(nèi)聚性要高于前幾種類型。同時(shí),可把某一數(shù)據(jù)結(jié)構(gòu)、文件及設(shè)備等操作都放在一個(gè)模塊內(nèi),可達(dá)到信息隱藏。(4)通信內(nèi)聚:指模塊內(nèi)所有處理元素都在(5)順序內(nèi)聚:指一個(gè)模塊中各個(gè)處理元素都密切相關(guān)于同一功能且必須順序執(zhí)行,前一功能元素的輸出就是下一功能元素的輸入。例如,某一模塊完成求工業(yè)產(chǎn)值的功能,前面部分功能元素求總產(chǎn)值,隨后部分的功能元素求平均產(chǎn)值,顯然,該模塊內(nèi)兩部分緊密相關(guān)。(5)順序內(nèi)聚:指一個(gè)模塊中各個(gè)處理元素都密切相關(guān)(6)功能內(nèi)聚:是最強(qiáng)的內(nèi)聚,指模塊內(nèi)所有元素共同完成一個(gè)功能,缺一不可。因此,模塊不能再分割,如“打印日報(bào)表”這樣一個(gè)單一功能的模塊。功能內(nèi)聚的模塊易理解、易修改,因?yàn)樗墓δ苁敲鞔_的、單一的,因此與其他模塊的耦合是弱的。功能內(nèi)聚的模塊有利于實(shí)現(xiàn)軟件的重用,從而提高軟件開發(fā)的效率。(6)功能內(nèi)聚:是最強(qiáng)的內(nèi)聚,指模塊內(nèi)耦合性與內(nèi)聚性是模塊獨(dú)立性的兩個(gè)定性標(biāo)準(zhǔn),將軟件系統(tǒng)劃分模塊時(shí),盡量做到高內(nèi)聚低耦合,提高模塊的獨(dú)立性,為設(shè)計(jì)高質(zhì)量的軟件結(jié)構(gòu)奠定基礎(chǔ)。但也有內(nèi)聚性與耦合性發(fā)生矛盾的時(shí)候,為了提高內(nèi)聚性而可能使耦合性變差,在這種情況下,建議給予耦合性以更高的重視。耦合性與內(nèi)聚性是模塊獨(dú)立性的兩個(gè)定性標(biāo)準(zhǔn),將4.4軟件結(jié)構(gòu)設(shè)計(jì)優(yōu)化準(zhǔn)則軟件概要設(shè)計(jì)的主要任務(wù)就是軟件結(jié)構(gòu)的設(shè)計(jì),為了提高設(shè)計(jì)的質(zhì)量,必須根據(jù)軟件設(shè)計(jì)的原理改進(jìn)軟件設(shè)計(jì),并提出以下軟件結(jié)構(gòu)的設(shè)計(jì)優(yōu)化準(zhǔn)則。

1.模塊獨(dú)立性準(zhǔn)則劃分模塊時(shí),盡量做到高內(nèi)聚,低耦合,保持模塊相對獨(dú)立性,并以此原則優(yōu)化初始的軟件結(jié)構(gòu)。如果若干模塊之間耦合強(qiáng)度過高,每個(gè)模塊內(nèi)功能不復(fù)雜,可將它們合并,以減少信息的傳遞和公共區(qū)的引用;(2)若有多個(gè)相關(guān)模塊,應(yīng)對它們的功能進(jìn)行分析,消去重復(fù)功能。4.4軟件結(jié)構(gòu)設(shè)計(jì)優(yōu)化準(zhǔn)則軟件概要設(shè)計(jì)的主要

2.控制范圍與作用范圍之間的準(zhǔn)則一個(gè)模塊的作用范圍應(yīng)在其控制范圍之內(nèi),且條件判定所在的模塊應(yīng)與受其影響的模塊在層次上盡量靠近。在軟件結(jié)構(gòu)中,由于存在著不同事務(wù)處理的需要,某一層上的模塊會(huì)存在著判斷處理,這樣可能影響其他層的模塊處理。為了保證含有判定功能模塊的軟件設(shè)計(jì)的質(zhì)量,引入了模塊的作用范圍(或稱影響范圍)與控制范圍的概念。一個(gè)模塊的作用范圍指受該模塊內(nèi)一個(gè)判定影響的所有模塊的集合。一個(gè)模塊的控制范圍指模塊本身以及其所有下屬模塊(直接或間接從屬于它的模塊)的集合。2.控制范圍與作用范圍之間的準(zhǔn)則如圖4.7(a)(符號

表示模塊內(nèi)有判定功能,陰影表示模塊的作用范圍)所示,模塊D的作用范圍是C、D、E和F,模塊D的控制范圍是D、E、F,作用范圍超過了控制范圍,這種結(jié)構(gòu)最差。因?yàn)镈的判定作用到了C,必然有控制信息通過上層模塊B傳遞到C,這樣增加了數(shù)據(jù)的傳遞量和模塊間的耦合。若修改D模塊,則會(huì)影響到不受它控制的C模塊,這樣不易理解與維護(hù)。再看圖4.7(b),模塊TOP的作用范圍在控制范圍之內(nèi),但是判定所在模塊與受判定影響的模塊位置太遠(yuǎn),也存在著額外的數(shù)據(jù)傳遞(模塊B、D并不需要這些數(shù)據(jù)),增加了接口的復(fù)雜性和耦合強(qiáng)度。這種結(jié)構(gòu)雖符合設(shè)計(jì)原則,但不理想。如圖4.7(a)(符號

表示模塊內(nèi)有判定功圖4.7模塊的判定作用范圍(a)差的結(jié)構(gòu)圖;(b)不理想的結(jié)構(gòu)圖;(c)理想的結(jié)構(gòu)圖圖4.7模塊的判定作用范最理想的結(jié)構(gòu)圖是圖4.7(c),消除了額外的數(shù)據(jù)傳遞。如果在設(shè)計(jì)過程中,發(fā)現(xiàn)模塊作用范圍不在其控制范圍之內(nèi),可以用以下方法加以改進(jìn):(1)上移判斷點(diǎn)。如圖4.7(a)所示,將模塊D中的判斷點(diǎn)上移到它的上層模塊B中,或者將模塊D整個(gè)合并到模塊B中,使該判斷的層次升高,以擴(kuò)大它的控制范圍。(2)下移受判斷影響的模塊。將受判斷影響的模塊下移到判斷所在模塊的控制范圍內(nèi),如圖4.7(a)所示,將模塊C下移到模塊D的下層。最理想的結(jié)構(gòu)圖是圖4.7(c),消除了額外的深度是軟件結(jié)構(gòu)設(shè)計(jì)完成后觀察到的情況,能粗略地反映系統(tǒng)的規(guī)模和復(fù)雜程度,寬度也能反映系統(tǒng)的復(fù)雜情況。

3.軟件結(jié)構(gòu)的形態(tài)特征準(zhǔn)則寬度與模塊的扇出有關(guān),一個(gè)模塊的扇出太多,說明本模塊過分復(fù)雜,缺少中間層。單一功能模塊的扇入數(shù)大比較好,說明本模塊為上層幾個(gè)模塊共享的公用模塊,重用率高。但是不能把彼此無關(guān)的功能湊在一起形成一個(gè)通用的超級模塊,雖然它扇入高,但低內(nèi)聚。因此非單一功能的模塊扇入高時(shí)應(yīng)重新分解,以消除控制耦合的情況。軟件結(jié)構(gòu)從形態(tài)上看,應(yīng)是頂層扇出數(shù)較高一些,中間層扇出數(shù)較低一些,底層扇入數(shù)較高一些。軟件結(jié)構(gòu)的深度、寬度、扇入及扇出應(yīng)適當(dāng)。深度是軟件結(jié)構(gòu)設(shè)計(jì)完成后觀察到的情況,能粗略

4.模塊的大小準(zhǔn)則在考慮模塊的獨(dú)立性同時(shí),為了增加可理解性,模塊的大小最好在50~150條語句左右,可以用1~2頁打印紙打印,便于人們閱讀與研究。

5.模塊的接口準(zhǔn)則模塊的接口要簡單、清晰及含義明確,便于理解,易于實(shí)現(xiàn)、測試與維護(hù)。4.模塊的大小準(zhǔn)則在考慮4.5面向數(shù)據(jù)流的設(shè)計(jì)方法面向數(shù)據(jù)流的設(shè)計(jì)方法也稱為結(jié)構(gòu)化設(shè)計(jì)方法,是目前廣泛使用的、傳統(tǒng)的軟件結(jié)構(gòu)設(shè)計(jì)方法。要把數(shù)據(jù)流圖(DFD)轉(zhuǎn)換成軟件結(jié)構(gòu),必須研究DFD的類型。各種軟件系統(tǒng),不論DFD如何龐大與復(fù)雜,一般可分為變換型數(shù)據(jù)流圖和事務(wù)型數(shù)據(jù)流圖兩類。

1.變換型數(shù)據(jù)流圖變換型的DFD是由輸入、變換(或稱處理)和輸出三部分組成,如圖4.8所示,虛線為標(biāo)出的流界。變換型數(shù)據(jù)處理的工作過程一般分為取得數(shù)據(jù)、變換數(shù)據(jù)和給出數(shù)據(jù)。這三步體現(xiàn)了變換型DFD的基本思想。4.5.1兩類基本的數(shù)據(jù)流圖4.5面向數(shù)據(jù)流的設(shè)計(jì)方法面向數(shù)據(jù)流的設(shè)計(jì)圖4.8變換型DFD圖4.8變換型DFD變換是系統(tǒng)的主加工,變換輸入端的數(shù)據(jù)流為系統(tǒng)的邏輯輸入,輸出端為邏輯輸出。而直接從外部設(shè)備輸入的數(shù)據(jù)稱為物理輸入,反之稱為物理輸出。外部的輸入數(shù)據(jù)一般要經(jīng)過輸入正確性和合理性檢查、編輯及格式轉(zhuǎn)換等預(yù)處理,這部分工作都由邏輯輸入部分完成,它將外部形式的數(shù)據(jù)變成內(nèi)部形式,送給主加工。同理,邏輯輸出部分把主加工產(chǎn)生的數(shù)據(jù)的內(nèi)部形式轉(zhuǎn)換成外部形式然后物理輸出。因此變換型的DFD是一個(gè)順序結(jié)構(gòu)。

2.事務(wù)型的數(shù)據(jù)流圖若某個(gè)加工將它的輸入流分離成許多發(fā)散的數(shù)據(jù)流,形成許多平行的加工路徑,并根據(jù)輸入的值選擇其中一個(gè)路徑來執(zhí)行,這種特征的DFD稱為事務(wù)型的數(shù)據(jù)流圖,這個(gè)加工稱為事務(wù)處理中心,如圖4.9所示。變換是系統(tǒng)的主加工,變換輸入端的數(shù)據(jù)流為系統(tǒng)圖4.9事務(wù)型DFD圖4.9事務(wù)型DFD4.5.2面向數(shù)據(jù)流的設(shè)計(jì)方法的步驟結(jié)構(gòu)化設(shè)計(jì)方法的過程如下:(1)精化DFD:把DFD轉(zhuǎn)換成軟件結(jié)構(gòu)圖前,設(shè)計(jì)人員要仔細(xì)地研究分析DFD并參照數(shù)據(jù)字典,認(rèn)真理解其中的有關(guān)元素,檢查有無遺漏或不合理之處,進(jìn)行必要的修改。(2)確定DFD類型:如果是變換型,確定變換中心和邏輯輸入、邏輯輸出的界線,映射為變換結(jié)構(gòu)的頂層和第一層;如果是事務(wù)型,確定事務(wù)中心和加工路徑,映射為事務(wù)結(jié)構(gòu)的頂層和第一層。4.5.2面向數(shù)據(jù)流的設(shè)計(jì)方法的步驟結(jié)構(gòu)化設(shè)計(jì)方法的過程(6)復(fù)查,如果有錯(cuò),轉(zhuǎn)(2)修改完善,否則進(jìn)入詳細(xì)設(shè)計(jì)。(5)描述模塊功能、接口及全局?jǐn)?shù)據(jù)結(jié)構(gòu)。(4)根據(jù)優(yōu)化準(zhǔn)則對軟件結(jié)構(gòu)求精。(3)分解上層模塊,設(shè)計(jì)中下層模塊結(jié)構(gòu)。(6)復(fù)查,如果有錯(cuò),轉(zhuǎn)(2)修改完善,否則進(jìn)入詳細(xì)設(shè)計(jì)。4.5.3變換分析設(shè)計(jì)當(dāng)DFD具有較明顯的變換特征時(shí),則按照下列步驟設(shè)計(jì)。1.確定DFD中的變換中心、邏輯輸入和邏輯輸出如果設(shè)計(jì)人員經(jīng)驗(yàn)豐富,則容易確定系統(tǒng)的變換中心,即主加工。如幾股數(shù)據(jù)流的匯合處往往是系統(tǒng)的主加工。若一下不能確定,則要從物理輸入端開始,沿著數(shù)據(jù)流方向向系統(tǒng)中心尋找,直到有這樣的數(shù)據(jù)流,它不能再被看作是系統(tǒng)的輸入則它的前一個(gè)數(shù)據(jù)流就是系統(tǒng)的邏輯輸入。同理,從物理輸出端開始,逆數(shù)據(jù)流方向向中間移動(dòng),可以確定系統(tǒng)的邏輯輸出。介于邏輯輸入和邏輯輸出之間的加工就是變換中心,用虛線劃分出流界,DFD的三部分就確定了。4.5.3變換分析設(shè)計(jì)當(dāng)DFD具有較明顯的變換特征時(shí),2.設(shè)計(jì)軟件結(jié)構(gòu)的頂層和第一層——變換結(jié)構(gòu)變換中心確定以后,就相當(dāng)于決定了主模塊的位置,這就是軟件結(jié)構(gòu)的頂層,如圖4.10所示。其功能是主要完成所有模塊的控制,它的名稱是系統(tǒng)名稱,以體現(xiàn)完成整個(gè)系統(tǒng)的功能。主模塊確定之后,設(shè)計(jì)軟件結(jié)構(gòu)的第一層。第一層至少要有輸入、輸出和變換三種功能的模塊,即為每個(gè)邏輯輸入設(shè)計(jì)一個(gè)輸入模塊,其功能為向頂層模塊提供相應(yīng)的數(shù)據(jù),如圖4.10中的f3;為每個(gè)邏輯輸出設(shè)計(jì)一個(gè)輸出模塊,其功能為輸出頂層模塊的信息,如圖4.10中的f7,f8。同時(shí),為變換中心設(shè)計(jì)一個(gè)變換模塊,它的功能是將邏輯輸入進(jìn)行變換加工,然后邏輯輸出,如圖4.10中,將f3變換成f7和f8。這些模塊之間的數(shù)據(jù)傳送應(yīng)該與DFD相對應(yīng)。2.設(shè)計(jì)軟件結(jié)構(gòu)的頂層和第一層——變換結(jié)構(gòu)圖4.10變換分析設(shè)計(jì)舉例圖4.10變換分析設(shè)計(jì)舉例3.設(shè)計(jì)中、下層模塊對第一層的輸入、變換及輸出模塊自頂向下、逐層分解。1)輸入模塊的下屬模塊的設(shè)計(jì)輸入模塊的功能是向它的調(diào)用模塊提供數(shù)據(jù),所以必須要有數(shù)據(jù)來源。這樣輸入模塊應(yīng)由接收數(shù)據(jù)和轉(zhuǎn)換成調(diào)用模塊所需的信息兩部分組成。因此,每個(gè)輸入模塊可以設(shè)計(jì)成兩個(gè)下屬模塊:一個(gè)接收,一個(gè)轉(zhuǎn)換。用類似的方法一直分解下去,直到物理輸入端。如圖4.10中模塊“getf3”和“getf2”的分解。模塊“getf1”為物理輸入模塊。3.設(shè)計(jì)中、下層模塊對第一層的輸入、變換及輸出模塊自頂向2)輸出模塊的下屬模塊的設(shè)計(jì)輸出模塊的功能是將它的調(diào)用模塊產(chǎn)生的結(jié)果送出,它由將數(shù)據(jù)轉(zhuǎn)換成下屬模塊所需的形式和發(fā)送數(shù)據(jù)兩部分組成。這樣每個(gè)輸出模塊可以設(shè)計(jì)成兩個(gè)下屬模塊:一個(gè)轉(zhuǎn)換,一個(gè)發(fā)送,一直到物理輸出端。如圖4.10中,模塊“putf7”,“putf8”和“putf10”的分解。模塊“putf9”和“putf11”為物理輸出模塊。3)變換模塊的下屬模塊的設(shè)計(jì)根據(jù)DFD中變換中心的組成情況,按照模塊獨(dú)立性的原則來組織其結(jié)構(gòu),一般對DFD中每個(gè)基本加工建立一個(gè)功能模塊,如圖4.10中模塊“C”,“D”和“E”。2)輸出模塊的下屬模塊的設(shè)計(jì)輸出模塊的4.設(shè)計(jì)的優(yōu)化以上步驟設(shè)計(jì)出的軟件結(jié)構(gòu)僅僅是初始結(jié)構(gòu),還必須根據(jù)設(shè)計(jì)準(zhǔn)則對初始結(jié)構(gòu)精細(xì)和改進(jìn),以下為提供的求精辦法。(1)輸入部分的求精:對每個(gè)物理輸入設(shè)置專門模塊,以體現(xiàn)系統(tǒng)的外部接口;其他輸入模塊并非真正輸入,當(dāng)它與轉(zhuǎn)換數(shù)據(jù)的模塊都很簡單時(shí),可將它們合并成一個(gè)模塊。(2)輸出部分的求精:為每個(gè)物理輸出設(shè)置專門模塊,同時(shí)注意把相同或類似的物理輸出模塊合并在一起,以減低耦合度。(3)變換部分的求精:根據(jù)設(shè)計(jì)準(zhǔn)則,對模塊進(jìn)行合并或調(diào)整。4.設(shè)計(jì)的優(yōu)化以上步驟設(shè)計(jì)出的軟件結(jié)總之,軟件結(jié)構(gòu)的求精,帶有很大的經(jīng)驗(yàn)性。往往形成DFD中的加工與SC中的模塊之間是一對一的映射關(guān)系,然后再修改。但對于一個(gè)實(shí)際問題,可能把DFD中的兩個(gè)甚至多個(gè)加工組成一個(gè)模塊,也可能把DFD中的一個(gè)加工擴(kuò)展為兩個(gè)或更多個(gè)模塊,根據(jù)具體情況要靈活掌握設(shè)計(jì)方法,以求設(shè)計(jì)出由高內(nèi)聚和低耦合的模塊所組成的、具有良好特性的軟件結(jié)構(gòu)。總之,軟件結(jié)構(gòu)的求精,帶有很大的經(jīng)驗(yàn)性。4.5.4事務(wù)分析設(shè)計(jì)對于具有事務(wù)型特征的DFD,則采用事務(wù)分析的設(shè)計(jì)方法。結(jié)合圖4.11,說明該方法的設(shè)計(jì)過程。1)確定DFD中的事務(wù)中心和加工路徑當(dāng)DFD中的某個(gè)加工具有明顯地將一個(gè)輸入數(shù)據(jù)流分解成多個(gè)發(fā)散的輸出數(shù)據(jù)流時(shí),該加工就是事務(wù)中心。從事務(wù)中心輻射出去的數(shù)據(jù)流為各個(gè)加工路徑。2)設(shè)計(jì)軟件結(jié)構(gòu)的頂層和第一層——事務(wù)結(jié)構(gòu)設(shè)計(jì)一個(gè)頂層模塊,它是一個(gè)主模塊,有兩個(gè)功能,一是接收數(shù)據(jù),二是根據(jù)事務(wù)類型調(diào)度相應(yīng)的處理模塊。事務(wù)型軟件結(jié)構(gòu)應(yīng)包括接收分支和發(fā)送分支兩個(gè)部分。4.5.4事務(wù)分析設(shè)計(jì)對于具有事務(wù)型特征的圖4.11事務(wù)分析設(shè)計(jì)舉例圖4.11事務(wù)分析設(shè)計(jì)舉例(1)接收分支:負(fù)責(zé)接收數(shù)據(jù),它的設(shè)計(jì)與變換型DFD的輸入部分設(shè)計(jì)方法相同。(2)發(fā)送分支:通常包含一個(gè)調(diào)度模塊,它控制管理所有的下層的事務(wù)處理模塊。當(dāng)事務(wù)類型不多時(shí),調(diào)度模塊可與主模塊合并。3)事務(wù)結(jié)構(gòu)中、下層模塊的設(shè)計(jì)、優(yōu)化等工作同變換結(jié)構(gòu)。(1)接收分支:負(fù)責(zé)接收數(shù)據(jù),它的設(shè)計(jì)4.5.5設(shè)計(jì)優(yōu)化由設(shè)計(jì)的工作流程可知,經(jīng)過變換分析或事務(wù)分析設(shè)計(jì),形成軟件結(jié)構(gòu)并經(jīng)過優(yōu)化和改進(jìn)后,還要做以下工作:(1)為每個(gè)模塊寫一份處理說明:從設(shè)計(jì)的角度描述模塊的主要處理任務(wù)、條件抉擇等,以需求分析階段產(chǎn)生的加工邏輯的描述為參考。這里的說明應(yīng)該是清晰、無二義性的。(2)為每個(gè)模塊提供一份接口說明:包括通過參數(shù)表傳遞的數(shù)據(jù)、外部的輸入/輸出和訪問全局?jǐn)?shù)據(jù)區(qū)的信息等,并指出它的下屬模塊與上屬模塊。為清晰易讀,對以上兩個(gè)說明可用設(shè)計(jì)階段常采用的圖形工具——IPO圖來表示。4.5.5設(shè)計(jì)優(yōu)化由設(shè)計(jì)的工作流程可知,經(jīng)(3)數(shù)據(jù)結(jié)構(gòu)說明:軟件結(jié)構(gòu)確定之后,必須定義全局的和局部的數(shù)據(jù)結(jié)構(gòu),因?yàn)樗鼘γ總€(gè)模塊的過程細(xì)節(jié)有著深遠(yuǎn)的影響。數(shù)據(jù)結(jié)構(gòu)的描述可用偽碼(如PDL語言、類Pascal語言)或Warnier圖、Jackson圖等形式表達(dá)。(4)給出設(shè)計(jì)約束或限制:如數(shù)據(jù)類型和格式的限制,內(nèi)存容量的限制,時(shí)間的限制,數(shù)據(jù)的邊界值,個(gè)別模塊的特殊要求等。(5)進(jìn)行設(shè)計(jì)評審:軟件設(shè)計(jì)階段,不可避免地會(huì)引入人為的錯(cuò)誤,如果不及時(shí)糾正,就會(huì)傳播到開發(fā)的后續(xù)階段中去,并在后續(xù)階段引入更多的錯(cuò)誤。(3)數(shù)據(jù)結(jié)構(gòu)說明:軟件結(jié)構(gòu)確定之后,必須因此一旦設(shè)計(jì)文檔完成以后,就可進(jìn)行評審,有效的評審可以顯著地降低后續(xù)開發(fā)階段和維護(hù)階段的費(fèi)用。在評審中應(yīng)著重評審軟件需求是否得到滿足,即軟件結(jié)構(gòu)的質(zhì)量、接口說明、數(shù)據(jù)結(jié)構(gòu)說明、實(shí)現(xiàn)和測試的可行性以及可維護(hù)性等。(6)設(shè)計(jì)優(yōu)化:應(yīng)貫穿整個(gè)設(shè)計(jì)的過程。設(shè)計(jì)的開始就可以給出幾種可選方案,進(jìn)行比較與修改,找出最好的。設(shè)計(jì)中途的每一步處處考慮軟件結(jié)構(gòu)的簡明、合理及高效等性能,以及盡量簡單的數(shù)據(jù)結(jié)構(gòu)。因此一旦設(shè)計(jì)文檔完成以后,就可進(jìn)行評審,有效軟件工程信息技術(shù)學(xué)部陳曦軟件工程信息技術(shù)學(xué)部

4.1總體設(shè)計(jì)的過程4.2表示軟件結(jié)構(gòu)的圖形工具4.3軟件設(shè)計(jì)的概念和原理4.4軟件結(jié)構(gòu)設(shè)計(jì)優(yōu)化準(zhǔn)則4.5面向數(shù)據(jù)流的設(shè)計(jì)方法

第4章總體設(shè)計(jì)4.1總體設(shè)計(jì)的過程第4章總體設(shè)計(jì)4.1總體設(shè)計(jì)的過程經(jīng)過可行性分析階段,我們弄清了系統(tǒng)開發(fā)出來的可行性,在需求分析階段,我們弄清了系統(tǒng)到底要“做什么?”,接著進(jìn)入設(shè)計(jì)階段,我們開始考慮“怎么做?”的問題。前面提到過,軟件設(shè)計(jì)階段分為總體設(shè)計(jì)和詳細(xì)設(shè)計(jì)。即首先考慮軟件的總體結(jié)構(gòu),在全局的高度上分析對比多種可能實(shí)現(xiàn)系統(tǒng)的方案和結(jié)構(gòu),從中選出最佳方案,然后再進(jìn)行進(jìn)一步的設(shè)計(jì)。4.1總體設(shè)計(jì)的過程經(jīng)過可行性分析階段,為了實(shí)現(xiàn)目標(biāo)系統(tǒng),最終必須設(shè)計(jì)出組成這個(gè)系統(tǒng)的所有程序和數(shù)據(jù)庫(文件),對于程序,則首先進(jìn)行結(jié)構(gòu)設(shè)計(jì),具體方法如下:(1)采用某種設(shè)計(jì)方法,將一個(gè)復(fù)雜的系統(tǒng)按功能劃分成模塊。(2)確定每個(gè)模塊的功能。(3)確定模塊之間的調(diào)用關(guān)系。(4)確定模塊之間的接口,即模塊之間傳遞的信息。(5)評價(jià)模塊結(jié)構(gòu)的質(zhì)量。1.設(shè)計(jì)軟件系統(tǒng)結(jié)構(gòu)(簡稱軟件結(jié)構(gòu))為了實(shí)現(xiàn)目標(biāo)系統(tǒng),最終必須設(shè)計(jì)出組成這從以上內(nèi)容看,軟件結(jié)構(gòu)的設(shè)計(jì)是以模塊為基礎(chǔ)的,在需求分析階段,通過某種分析方法把系統(tǒng)分解成層次結(jié)構(gòu)。在設(shè)計(jì)階段,以需求分析的結(jié)果為依據(jù),從實(shí)現(xiàn)的角度劃分模塊,并組成模塊的層次結(jié)構(gòu)。軟件結(jié)構(gòu)的設(shè)計(jì)是概要設(shè)計(jì)關(guān)鍵的一步,直接影響到詳細(xì)設(shè)計(jì)與編碼的工作。軟件系統(tǒng)的質(zhì)量及一些整體特性都在軟件結(jié)構(gòu)的設(shè)計(jì)中決定。因此,應(yīng)由經(jīng)驗(yàn)豐富的軟件人員擔(dān)任,采用一定的設(shè)計(jì)方法,選取合理的設(shè)計(jì)方案。從以上內(nèi)容看,軟件結(jié)構(gòu)的設(shè)計(jì)是以模塊為基礎(chǔ)的2.數(shù)據(jù)結(jié)構(gòu)及數(shù)據(jù)庫設(shè)計(jì)1)數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)對于大型數(shù)據(jù)處理的軟件系統(tǒng),除了系統(tǒng)結(jié)構(gòu)設(shè)計(jì)外,數(shù)據(jù)結(jié)構(gòu)與數(shù)據(jù)庫設(shè)計(jì)也是重要的。逐步細(xì)化的方法也適用于數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)。在需求分析階段,可通過數(shù)據(jù)字典對數(shù)據(jù)的組成、操作約束和數(shù)據(jù)之間的關(guān)系等方面進(jìn)行描述,確定數(shù)據(jù)的結(jié)構(gòu)特性,在概要設(shè)計(jì)階段要加以細(xì)化,詳細(xì)設(shè)計(jì)則規(guī)定具體的實(shí)現(xiàn)細(xì)節(jié)。在概要設(shè)計(jì)階段,宜使用抽象的數(shù)據(jù)類型。如“棧”是數(shù)據(jù)結(jié)構(gòu)的概念模型,在詳細(xì)設(shè)計(jì)中可用線性表和鏈表來實(shí)現(xiàn)“?!?。設(shè)計(jì)有效的數(shù)據(jù)結(jié)構(gòu),將大大簡化軟件模塊處理過程的設(shè)計(jì)。2.數(shù)據(jù)結(jié)構(gòu)及數(shù)據(jù)庫設(shè)計(jì)1)數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)2)數(shù)據(jù)庫的設(shè)計(jì)概念設(shè)計(jì)。一般用ER模型來表示數(shù)據(jù)模型,這是一個(gè)概念模型。ER模型既是設(shè)計(jì)數(shù)據(jù)庫的基礎(chǔ),也是設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)。IDEF1x技術(shù)也支持概念模式,用IDEF1x方法建立系統(tǒng)的信息模型,使模型具有一致性、可擴(kuò)展性和可變性等特性,同樣,該模型可作為數(shù)據(jù)庫設(shè)計(jì)的主要依據(jù)。數(shù)據(jù)庫的設(shè)計(jì)指數(shù)據(jù)存儲(chǔ)文件的設(shè)計(jì),其主要包括以下幾方面的設(shè)計(jì):在數(shù)據(jù)分析的基礎(chǔ)上,從用戶角度采用自底向上的方法進(jìn)行視圖設(shè)計(jì)。2)數(shù)據(jù)庫的設(shè)計(jì)概念設(shè)計(jì)。一般用ER模型來(2)邏輯設(shè)計(jì)。ER模型或IDEF1x模型是獨(dú)立于數(shù)據(jù)庫管理系統(tǒng)(DBMS)的,要結(jié)合具體的DBMS特征來建立數(shù)據(jù)庫的邏輯結(jié)構(gòu)。對于關(guān)系型的DBMS來說,將概念結(jié)構(gòu)轉(zhuǎn)換為數(shù)據(jù)模式、子模式并進(jìn)行規(guī)范,要給出數(shù)據(jù)結(jié)構(gòu)的定義,即定義所含的數(shù)據(jù)項(xiàng)、類型、長度及它們之間的層次或相互關(guān)系的表格等。(2)邏輯設(shè)計(jì)。ER模型或IDEF(3)物理設(shè)計(jì)。對于不同的DBMS,物理環(huán)境不同,提供的存儲(chǔ)結(jié)構(gòu)與存取方法各不相同。物理設(shè)計(jì)就是設(shè)計(jì)數(shù)據(jù)模式的一些物理細(xì)節(jié),如數(shù)據(jù)項(xiàng)存儲(chǔ)要求、存取方式和索引的建立等。(3)物理設(shè)計(jì)。對于不同的DBMS,物理3.編寫概要設(shè)計(jì)文檔編寫概要設(shè)計(jì)文檔的內(nèi)容如下:(1)概要設(shè)計(jì)說明書。(2)數(shù)據(jù)庫設(shè)計(jì)說明書:主要給出所使用的DBMS簡介,數(shù)據(jù)庫的概念模型、邏輯設(shè)計(jì)和結(jié)果。(3)用戶手冊:對需求分析階段編寫的用戶手冊進(jìn)行補(bǔ)充。(4)修訂測試計(jì)劃:對測試策略、方法和步驟提出明確要求。3.編寫概要設(shè)計(jì)文檔編寫概要設(shè)計(jì)文檔的內(nèi)容如下:(1)概4.評審在該階段,對設(shè)計(jì)部分是否完整地實(shí)現(xiàn)了需求中規(guī)定的功能、性能等要求,設(shè)計(jì)方案的可行性、關(guān)鍵的處理及內(nèi)外部接口定義正確性、有效性以及各部分之間的一致性等,都一一進(jìn)行評審。4.評審在該階段,對設(shè)計(jì)部分是否完整地實(shí)現(xiàn)4.2表示軟件結(jié)構(gòu)的圖形工具前面說過,總體設(shè)計(jì)的任務(wù)是要從宏觀的角度把握整個(gè)系統(tǒng)的結(jié)構(gòu),那么如何用“可量化”的方式來表示系統(tǒng)的整體結(jié)構(gòu)呢?這里便需要用到一些工具來幫助設(shè)計(jì)人員從宏觀上表示整個(gè)系統(tǒng)的結(jié)構(gòu),這里的工具主要是圖形工具,包括:層次圖、HIPO圖和結(jié)構(gòu)圖。4.2.1層次圖和HIPO圖層次圖類似于系統(tǒng)流程圖,其圖形符號主要有矩形框和直線。矩形框代表模塊,框內(nèi)寫上模塊的名字;連線表示調(diào)用關(guān)系,即一個(gè)模塊的功能是通過調(diào)用下層模塊實(shí)現(xiàn)的。4.2表示軟件結(jié)構(gòu)的圖形工具前面說過,總體HIPO圖HIPO圖(HierarchyPlusInput/Processing/Output)是美國IBM公司70年代發(fā)展起來的表示軟件系統(tǒng)結(jié)構(gòu)的工具。它既可以描述軟件總的模塊層次結(jié)構(gòu)——H圖(層次圖),又可以描述每個(gè)模塊輸入/輸出數(shù)據(jù)、處理功能及模塊調(diào)用的詳細(xì)情況——IPO圖。HIPO圖以模塊分解的層次性以及模塊內(nèi)部輸入、處理及輸出三大基本部分為基礎(chǔ)建立的。當(dāng)然,繪制HIPO圖同樣要遵循軟件設(shè)計(jì)的基本原理。

1.HIPO圖的H圖該圖用于描述軟件的層次結(jié)構(gòu),矩形框表示一個(gè)模塊,矩形框之間的直線表示模塊之間的調(diào)用關(guān)系,同結(jié)構(gòu)圖一樣未指明調(diào)用順序。HIPO圖HIPO圖(HierarchyP現(xiàn)以某企業(yè)的銷售系統(tǒng)為例,說明HIPO圖的H圖。企業(yè)銷售管理的描述如下:(1)接受顧客的訂單,檢驗(yàn)訂單。若庫存有貨,則進(jìn)行供貨處理,即修改庫存,給倉庫開備貨單,并且將訂單留底;若庫存量不足,則將缺貨訂單登入缺貨記錄。(2)根據(jù)缺貨記錄進(jìn)行缺貨處理,將缺貨通知單發(fā)給采購部分,以便采購。(3)根據(jù)采購部門發(fā)來的進(jìn)貨通知單處理進(jìn)貨,即修改庫存,并從缺貨記錄中取出缺貨訂單進(jìn)行供貨處理。(4)根據(jù)留底的訂單進(jìn)行銷售統(tǒng)計(jì),打印統(tǒng)計(jì)表給經(jīng)理。圖4.1即為該系統(tǒng)HIPO圖的H圖。現(xiàn)以某企業(yè)的銷售系統(tǒng)為例,說明HIPO圖的H圖。圖4.1銷售管理系統(tǒng)的H圖圖4.1銷售管理系統(tǒng)的H圖2.IPO圖H圖只說明了軟件系統(tǒng)由哪些模塊組成及其控制層次結(jié)構(gòu),并未說明模塊間的信息傳遞及模塊內(nèi)部的處理。因此對一些重要模塊還必須根據(jù)數(shù)據(jù)流圖、數(shù)據(jù)字典及H圖繪制具體的IPO圖,圖4.2為“確定能否供貨”的IPO圖?!按_定能否供貨”是圖4.1中的一個(gè)模塊。2.IPO圖H圖只說明了軟件系統(tǒng)由哪些模塊4.2“確定能否供貨系統(tǒng)”的IPO圖4.2“確定能否供貨系統(tǒng)”的IPO圖4.2.2結(jié)構(gòu)圖軟件結(jié)構(gòu)圖是軟件系統(tǒng)的模塊層次結(jié)構(gòu),反映了整個(gè)系統(tǒng)的功能實(shí)現(xiàn),即將來程序的控制層次體系。對于一個(gè)“問題”,可用不同的軟件結(jié)構(gòu)來解決,不同的設(shè)計(jì)方法和不同的劃分和組織,可得出不同的軟件結(jié)構(gòu)。軟件結(jié)構(gòu)往往用樹狀或網(wǎng)狀結(jié)構(gòu)的圖形來表示。軟件工程中,一般采用70年代中期美國Yourdon等提出的稱為結(jié)構(gòu)圖(StructureChart,簡稱SC)的工具來表示軟件結(jié)構(gòu)。結(jié)構(gòu)圖的主要內(nèi)容有:4.2.2結(jié)構(gòu)圖軟件結(jié)構(gòu)圖是軟件系統(tǒng)的模塊(1)模塊:用方框表示,并用名字標(biāo)識(shí)該模塊,名字應(yīng)體現(xiàn)該模塊的功能。(2)模塊的控制關(guān)系:兩個(gè)模塊間用單向箭頭或直線連接起來表示它們的控制關(guān)系,如圖4.3所示。按照慣例,總是圖中位于上方的模塊調(diào)用下方的模塊,所以不用箭頭也不會(huì)產(chǎn)生二義性。調(diào)用模塊和被調(diào)用模塊的關(guān)系稱為上屬與下屬的關(guān)系,或者稱為“統(tǒng)率”與“從屬”的關(guān)系。如圖4.5所示,模塊M統(tǒng)率模塊A、B、C,模塊D從屬于模塊A,也從屬于M。(3)模塊間的信息傳遞:模塊間還經(jīng)常用帶注釋的短箭頭表示模塊調(diào)用過程中來回傳遞的信息。有時(shí)箭頭尾部帶空心圓的表示傳遞的是數(shù)據(jù),帶實(shí)心圓的表示傳遞的是控制信息,如圖4.3所示。(1)模塊:用方框表示,并用名字標(biāo)識(shí)該模塊圖4.3模塊間的控制關(guān)系及信息傳遞圖4.3模塊間的控制關(guān)系及信息傳遞(4)兩個(gè)附加符號:表示模塊有選擇調(diào)用或循環(huán)調(diào)用,如圖4.4所示。(5)結(jié)構(gòu)圖的形態(tài)特征。結(jié)構(gòu)圖的形態(tài)特征包括:①深度:指結(jié)構(gòu)圖控制的層次,也是模塊的層數(shù),見圖4.5,結(jié)構(gòu)圖的深度為5。②寬度:指一層中最大的模塊個(gè)數(shù),如圖4.5所示,寬度為8。③扇出:一個(gè)模塊直接下屬模塊的個(gè)數(shù),如圖4.5所示,模塊M的扇出為3。④扇入:指一個(gè)模塊直接上屬模塊的個(gè)數(shù),如圖4.5所示,模塊T的扇入為4。(4)兩個(gè)附加符號:表示模塊有選擇調(diào)用或4.4選擇調(diào)用和循環(huán)調(diào)用的表示(a)選擇調(diào)用;(b)循環(huán)調(diào)用4.4選擇調(diào)用和循環(huán)調(diào)用的表示圖4.5結(jié)構(gòu)圖示例圖4.5結(jié)構(gòu)圖示例(6)畫結(jié)構(gòu)圖應(yīng)注意的事項(xiàng)如下:①同一名字的模塊在結(jié)構(gòu)圖中僅出現(xiàn)一次。②調(diào)用關(guān)系只能從上到下。③不嚴(yán)格表示模塊的調(diào)用次序,習(xí)慣上從左到右。有時(shí)為了減少連線的交叉,適當(dāng)?shù)卣{(diào)整同一層模塊左右位置,以保持結(jié)構(gòu)圖的清晰性。(6)畫結(jié)構(gòu)圖應(yīng)注意的事項(xiàng)如下:①同一名字4.3軟件設(shè)計(jì)的概念和原理3.2.1模塊化模塊化的概念在程序設(shè)計(jì)技術(shù)中就出現(xiàn)了。何為模塊?模塊在程序中是數(shù)據(jù)說明、可執(zhí)行語句等程序?qū)ο蟮募?,或者是單?dú)命名和編址的元素,如高級語言中的過程、函數(shù)和子程序等。在軟件的體系結(jié)構(gòu)中,模塊是可組合、分解和更換的單元。模塊具有以下幾種基本屬性:(1)接口:指模塊的輸入與輸出。(2)功能:指模塊實(shí)現(xiàn)什么功能。(3)邏輯:描述內(nèi)部如何實(shí)現(xiàn)要求的功能及所需的數(shù)據(jù)。(4)狀態(tài):指該模塊的運(yùn)行環(huán)境,即模塊的調(diào)用與被調(diào)用關(guān)系。4.3軟件設(shè)計(jì)的概念和原理3.2.1模塊化功能、狀態(tài)與接口反映模塊的外部特性,邏輯反映它的內(nèi)部特性。模塊化是指解決一個(gè)復(fù)雜問題時(shí)自頂向下逐層把軟件系統(tǒng)劃分成若干模塊的過程。每個(gè)模塊完成一個(gè)特定的子功能,所有的模塊按某種方法組裝起來,成為一個(gè)整體,完成整個(gè)系統(tǒng)所要求的功能。在面向?qū)ο笤O(shè)計(jì)中,模塊和模塊化的概念將進(jìn)一步擴(kuò)充。模塊化是軟件解決復(fù)雜問題所具備的手段,為了說明這一點(diǎn),可將問題的復(fù)雜性和工作量的關(guān)系進(jìn)行推理。功能、狀態(tài)與接口反映模塊的外部特性,邏輯反映設(shè)問題x,表示它的復(fù)雜性函數(shù)為C(x),解決它所需的工作量函數(shù)為E(x)。對于問題P1和P2;如果C(P1)>C(P2)即P1比P2復(fù)雜,那么E(P1)>E(P2)即問題越復(fù)雜,所需要的工作量越大。根據(jù)解決一般問題的經(jīng)驗(yàn),規(guī)律為:C(P1+P2)>C(P1)+C(P2)即一個(gè)問題由兩個(gè)問題組合而成的復(fù)雜度大于分別考慮每個(gè)問題的復(fù)雜度之和。這樣,可以推出:E(P1+P2)>E(P1)+E(P2)設(shè)問題x,表示它的復(fù)雜性函數(shù)為C(x),由此可知,開發(fā)一個(gè)大而復(fù)雜的軟件系統(tǒng),將它進(jìn)行適當(dāng)?shù)姆纸?,不但可降低其?fù)雜性,還可減少開發(fā)工作量,從而降低開發(fā)成本,提高軟件生產(chǎn)率,這就是模塊化的依據(jù)。但是否將系統(tǒng)無限制分割,最后開發(fā)軟件的工作量就會(huì)趨于零?事實(shí)上模塊劃分越多,塊內(nèi)的工作量減少,但模塊之間接口的工作量增加了,如圖4.6所示。從圖看出,存在著一個(gè)使軟件開發(fā)成本最小區(qū)域的模塊數(shù)M,雖然目前還不能確定M的準(zhǔn)確數(shù)值,但在劃分模塊時(shí),避免數(shù)目過多或過少,一個(gè)模塊的規(guī)模應(yīng)當(dāng)取決于它的功能和用途。同時(shí),應(yīng)減少接口的代價(jià),提高模塊的獨(dú)立性。由此可知,開發(fā)一個(gè)大而復(fù)雜的軟件系統(tǒng),將它進(jìn)圖4.6模塊與開發(fā)軟件成本圖4.6模塊與開發(fā)軟件成本4.3.2抽象抽象是認(rèn)識(shí)復(fù)雜現(xiàn)象過程中使用的思維工具,即抽出事物本質(zhì)的共同特性而暫不考慮它的細(xì)節(jié),不考慮其他因素。抽象的概念被廣泛應(yīng)用于計(jì)算機(jī)軟件領(lǐng)域,在軟件工程學(xué)中更是如此。軟件工程實(shí)施中的每一步都可以看作是對軟件抽象層次的一次細(xì)化。在系統(tǒng)定義階段,軟件可作為整個(gè)計(jì)算機(jī)系統(tǒng)的一個(gè)元素來對待;在軟件需求分析階段,軟件的解決方案是使用問題環(huán)境中的術(shù)語來描述;從概要設(shè)計(jì)到詳細(xì)設(shè)計(jì)階段,提象的層次逐步降低,將面向問題的術(shù)語與面向?qū)崿F(xiàn)的術(shù)語結(jié)合起來描述解決方法,直到產(chǎn)生源程序時(shí)到達(dá)最低的抽象層次。這是軟件工程整個(gè)過程的抽象層次。具體到軟件設(shè)計(jì)階段,又有不同的抽象層次,在進(jìn)行軟件設(shè)計(jì)時(shí),抽象與逐步求精、模塊化密切相關(guān),可幫助定義軟件結(jié)構(gòu)中模塊的實(shí)體,由抽象到具體地分析和構(gòu)造出軟件的層次結(jié)構(gòu),提高軟件的可理解性。4.3.2抽象抽象是認(rèn)識(shí)復(fù)雜現(xiàn)象過程中使用4.3.3信息隱蔽通過抽象,可以確定組成軟件的過程實(shí)體。通過信息隱蔽,可以定義和實(shí)施對模塊的過程細(xì)節(jié)和局部數(shù)據(jù)結(jié)構(gòu)的存取限制。所謂信息隱蔽,是指在設(shè)計(jì)和確定模塊時(shí),使得一個(gè)模塊內(nèi)包含的信息(過程或數(shù)據(jù)),對于不需要這些信息的其他模塊來說,是不能訪問的;“隱蔽”的意思是,有效的模塊化通過定義一組相互獨(dú)立的模塊來實(shí)現(xiàn),這些獨(dú)立的模塊彼此之間僅僅交換那些為了完成系統(tǒng)功能所必需的信息,而將那些自身的實(shí)現(xiàn)細(xì)節(jié)與數(shù)據(jù)“隱藏”起來。一個(gè)軟件系統(tǒng)在整個(gè)生存期中要經(jīng)過多次修改,信息隱蔽為軟件系統(tǒng)的修改、測試及以后的維護(hù)都帶來好處。因此,在劃分模塊時(shí)要采取措施,如采用局部數(shù)據(jù)結(jié)構(gòu),使得大多數(shù)過程(即實(shí)現(xiàn)細(xì)節(jié))和數(shù)據(jù)對軟件的其他部分是隱藏的,這樣,修改軟件時(shí)偶然引入的錯(cuò)誤所造成的影響只局限在一個(gè)或少量幾個(gè)模塊內(nèi)部,不波及其他部分。4.3.3信息隱蔽通過抽象,可以確定組成軟4.3.4模塊獨(dú)立性為了降低軟件系統(tǒng)的復(fù)雜性,提高可理解性、可維護(hù)性,必須把系統(tǒng)劃分成為多個(gè)模塊,但模塊不能任意劃分,應(yīng)盡量保持其獨(dú)立性。模塊獨(dú)立性指每個(gè)模塊只完成系統(tǒng)要求的獨(dú)立的子功能,并且與其他模塊的聯(lián)系最少且接口簡單。模塊獨(dú)立性概念是模塊化、抽象及信息隱蔽這些軟件工程基本原理的直接產(chǎn)物。只有符合和遵守這些原則才能得到高度獨(dú)立的模塊。良好的模塊獨(dú)立性能使開發(fā)的軟件具有較高的質(zhì)量。由于模塊獨(dú)立性強(qiáng),信息隱藏性能好,并完成獨(dú)立的功能,且它的可理解性、可維護(hù)性及可測試性好,必然導(dǎo)致軟件的可靠性高。另外,接口簡單、功能獨(dú)立的模塊易開發(fā),且可并行工作,有效地提高了軟件的生產(chǎn)率。4.3.4模塊獨(dú)立性為了降低軟件系統(tǒng)的復(fù)雜如何衡量軟件的獨(dú)立性呢?根據(jù)模塊的外部特征和內(nèi)部特征,提出了兩個(gè)定性的度量標(biāo)準(zhǔn)——耦合性和內(nèi)聚性。

1.耦合性(Coupling)耦合性也稱塊間聯(lián)系,指軟件系統(tǒng)結(jié)構(gòu)中各模塊間相互聯(lián)系緊密程度的一種度量。模塊之間聯(lián)系越緊密,其耦合性就越強(qiáng),模塊的獨(dú)立性則越差。模塊間耦合高低取決于模塊間接口的復(fù)雜性、調(diào)用的方式及傳遞的信息。模塊的耦合性有以下幾種類型:無直接耦合、數(shù)據(jù)耦合、標(biāo)記耦合、控制耦合、公共耦合、內(nèi)容耦合如何衡量軟件的獨(dú)立性呢?根據(jù)模塊的外部特征(1)無直接耦合:指兩個(gè)模塊之間沒有直接的關(guān)系,它們分別從屬于不同模塊的控制與調(diào)用,它們之間不傳遞任何信息。因此,模塊間的這種耦合性最弱,模塊獨(dú)立性最高。(2)數(shù)據(jù)耦合:指兩個(gè)模塊之間有調(diào)用關(guān)系,傳遞的是簡單的數(shù)據(jù)值,相當(dāng)于高級語言中的值傳遞。這種耦合程度較低,模塊的獨(dú)立性較高。(3)標(biāo)記耦合:指兩個(gè)模塊之間傳遞的是數(shù)據(jù)結(jié)構(gòu),如高級語言中的數(shù)組名、記錄名和文件名等這些名字即為標(biāo)記,其實(shí)傳遞的是這個(gè)數(shù)據(jù)結(jié)構(gòu)的地址。兩個(gè)模塊必須清楚這些數(shù)據(jù)結(jié)構(gòu),并按要求對其進(jìn)行操作,這樣降低了可理解性??刹捎谩靶畔㈦[蔽”的方法,把該數(shù)據(jù)結(jié)構(gòu)以及在其上的操作全部集中在一個(gè)模塊,就可消除這種耦合,但有時(shí)因?yàn)檫€有其他功能的緣故,標(biāo)記耦合是不可避免的。(1)無直接耦合:指兩個(gè)模塊之間沒有直接的(4)控制耦合:指一個(gè)模塊調(diào)用另一個(gè)模塊時(shí),傳遞的是控制變量(如開關(guān)、標(biāo)志等),被調(diào)模塊通過該控制變量的值有選擇地執(zhí)行塊內(nèi)某一功能。因此被調(diào)模塊內(nèi)應(yīng)具有多個(gè)功能,哪個(gè)功能起作用受其調(diào)用模塊的控制。控制耦合增加了理解與編程及修改的復(fù)雜性,調(diào)用模塊必須知道被調(diào)模塊內(nèi)部的邏輯關(guān)系,即被調(diào)模塊處理細(xì)節(jié)不能“信息隱藏”,降低了模塊的獨(dú)立性。在大多數(shù)情況下,模塊間的控制耦合并不是必需的,可以將被調(diào)模塊內(nèi)的判定上移到調(diào)用模塊中去,同時(shí)將被調(diào)模塊按其功能分解為若干單一功能的模塊,將控制耦合改變?yōu)閿?shù)據(jù)耦合。(4)控制耦合:指一個(gè)模塊調(diào)用另一個(gè)模塊時(shí)(5)公共耦合:指通過一個(gè)公共數(shù)據(jù)環(huán)境相互作用的那些模塊間的耦合。公共數(shù)據(jù)環(huán)境可以是全程變量或數(shù)據(jù)結(jié)構(gòu)、共享的通信區(qū)、內(nèi)存的公共覆蓋區(qū)及任何存儲(chǔ)介質(zhì)上的文件和物理設(shè)備等(也有將共享外部設(shè)備分類為外部耦合的)。公共耦合的復(fù)雜程度隨耦合模塊的個(gè)數(shù)增加而增加。如果只有兩個(gè)模塊之間有公共數(shù)據(jù)環(huán)境,那么這種公共耦合就有兩種情況:①一個(gè)模塊只是給公共數(shù)據(jù)環(huán)境送數(shù)據(jù),另一個(gè)模塊只是從公共環(huán)境中取數(shù)據(jù),這只是數(shù)據(jù)耦合的一種形式,是比較松散的公共耦合;②兩個(gè)模塊都既往公共數(shù)據(jù)環(huán)境中送數(shù)據(jù),又從里面取數(shù)據(jù),這是緊密的公共耦合。(5)公共耦合:指通過一個(gè)公共數(shù)據(jù)環(huán)境相互如果在模塊之間共享的數(shù)據(jù)很多,且通過參數(shù)的傳遞很不方便時(shí),才使用公共耦合,因?yàn)楣柴詈蠒?huì)引起以下問題:①耦合的復(fù)雜程度隨模塊的個(gè)數(shù)增加而增加,無法控制各個(gè)模塊對公共數(shù)據(jù)的存取,若某個(gè)模塊有錯(cuò),可通過公共區(qū)將錯(cuò)誤延伸到其他模塊,則會(huì)影響到軟件的可靠性。②使軟件的可維護(hù)性變差。若某一模塊修改了公共區(qū)的數(shù)據(jù),則會(huì)影響到與此有關(guān)的所有模塊。③降低了軟件的可理解性。因?yàn)楦鱾€(gè)模塊使用公共區(qū)的數(shù)據(jù),使用方式往往是隱含的,某些數(shù)據(jù)被哪些模塊共享,不易很快搞清。如果在模塊之間共享的數(shù)據(jù)很多,且通過參數(shù)的傳遞(6)內(nèi)容耦合:是最高程度的耦合,也是最差的耦合。當(dāng)一個(gè)模塊直接使用另一個(gè)模塊的內(nèi)部數(shù)據(jù),或通過非正常入口而轉(zhuǎn)入另一個(gè)模塊內(nèi)部時(shí),這種模塊之間的耦合便為內(nèi)容耦合。這種情況往往出現(xiàn)在匯編程序設(shè)計(jì)中。以上6種由低到高的耦合類型,為設(shè)計(jì)軟件、劃分模塊提供了決策準(zhǔn)則。提高模塊獨(dú)立性、建立模塊間盡可能松散的系統(tǒng),是模塊化設(shè)計(jì)的目標(biāo)。(6)內(nèi)容耦合:是最高程度的耦合,也是最差的為了降低模塊間的耦合度,可采取以下幾點(diǎn)措施:在耦合方式上降低模塊間接口的復(fù)雜性。模塊間接口的復(fù)雜性包括模塊的接口方式、接口信息的結(jié)構(gòu)和數(shù)量。接口方式不采用直接引用(內(nèi)容耦合),而采用調(diào)用方式(如過程語句調(diào)用方式)。接口信息通過參數(shù)傳遞且傳遞信息的結(jié)構(gòu)盡量簡單,不用復(fù)雜參數(shù)結(jié)構(gòu)(如過程、指針等類型參數(shù)),參數(shù)的個(gè)數(shù)也不宜太多,如果很多,可考慮模塊的功能是否龐大復(fù)雜。(2)在傳遞信息類型上盡量使用數(shù)據(jù)耦合,避免控制耦合,慎用或有控制地使用公共耦合。這只是原則,耦合類型的選擇要根據(jù)實(shí)際情況綜合地考慮。為了降低模塊間的耦合度,可采取以下幾點(diǎn)措施:在耦合方式上降低2.內(nèi)聚性(Cohesion)內(nèi)聚性也稱塊內(nèi)聯(lián)系,指模塊的功能強(qiáng)度的度量,即一個(gè)模塊內(nèi)部各個(gè)元素彼此結(jié)合的緊密程度的度量。若一個(gè)模塊內(nèi)各元素(語句之間、程序段之間)聯(lián)系的越緊密,則它的內(nèi)聚性就越高。內(nèi)聚性有以下幾種類型:偶然內(nèi)聚、邏輯內(nèi)聚、時(shí)間內(nèi)聚、通信內(nèi)聚、順序內(nèi)聚、功能內(nèi)聚。2.內(nèi)聚性(Cohesion)內(nèi)聚性也稱塊偶然內(nèi)聚:指一個(gè)模塊內(nèi)的各處理元素之間沒有任何聯(lián)系。例如,有一些無聯(lián)系的處理序列在程序中多次出現(xiàn)或在幾個(gè)模塊中都出現(xiàn),如:ReaddiskFile;Calculatecurrentvalues;Produceuseroutput;…為了節(jié)省存儲(chǔ),把它們抽出來組成一個(gè)新的模塊,這個(gè)模塊就屬于偶然內(nèi)聚。這樣的模塊不易理解也不易修改,這是最差的內(nèi)聚情況。偶然內(nèi)聚:指一個(gè)模塊內(nèi)的各處理元素之間沒有任(2)邏輯內(nèi)聚:指模塊內(nèi)執(zhí)行幾個(gè)邏輯上相似的功能,通過參數(shù)確定該模塊完成哪一個(gè)功能。如產(chǎn)生各種類型錯(cuò)誤的信息輸出放在一個(gè)模塊,或從不同設(shè)備上的輸入放在一個(gè)模塊,這是一個(gè)單入口多功能模塊。這種模塊內(nèi)聚程度有所提高,各部分之間在功能上有相互關(guān)系,但不易修改;當(dāng)某個(gè)調(diào)用模塊要求修改此模塊公用代碼時(shí),而另一些調(diào)用模塊又不要求修改。另外,調(diào)用時(shí)需要進(jìn)行控制參數(shù)的傳遞,造成模塊間的控制耦合,調(diào)用此模塊時(shí),不用的部分也占據(jù)了主存,降低了系統(tǒng)效率。(2)邏輯內(nèi)聚:指模塊內(nèi)執(zhí)行幾個(gè)邏輯上相(3)時(shí)間內(nèi)聚:把需要同時(shí)執(zhí)行的動(dòng)作組合在一起形成的模塊為時(shí)間內(nèi)聚模塊。如初始化一組變量,同時(shí)打開若干文件,同時(shí)關(guān)閉文件等,都與特定時(shí)間有關(guān)。時(shí)間內(nèi)聚比

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論