軟件工程與項目管理(第2版) 課件 第5章 軟件的總體設(shè)計_第1頁
軟件工程與項目管理(第2版) 課件 第5章 軟件的總體設(shè)計_第2頁
軟件工程與項目管理(第2版) 課件 第5章 軟件的總體設(shè)計_第3頁
軟件工程與項目管理(第2版) 課件 第5章 軟件的總體設(shè)計_第4頁
軟件工程與項目管理(第2版) 課件 第5章 軟件的總體設(shè)計_第5頁
已閱讀5頁,還剩53頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

5.1總體設(shè)計的目標(biāo)和任務(wù)

5.2設(shè)計的概念和原則

5.3控制層次與結(jié)構(gòu)劃分

5.4針對有效模塊化的設(shè)計啟發(fā)

5.5描繪軟件結(jié)構(gòu)的圖形工具

5.6結(jié)構(gòu)化設(shè)計

5.7數(shù)據(jù)庫設(shè)計

5.8總體設(shè)計說明書的編寫5.1總體設(shè)計的目標(biāo)和任務(wù)5.1.1總體設(shè)計的目標(biāo)在軟件設(shè)計階段應(yīng)達(dá)到的目標(biāo)是提高可靠性、提高可維護(hù)性、提高可理解性和提高效率,如圖5.1所示。軟件設(shè)計必須達(dá)到以下要求:(1)軟件實體有明顯的層次結(jié)構(gòu),利于軟件元素間的控制。(2)軟件實體應(yīng)該是模塊化的,模塊具有獨立功能。(3)軟件實體與環(huán)境的界面清晰。(4)設(shè)計規(guī)格說明清晰、簡潔、完整并無二義性。5.1.2總體設(shè)計的任務(wù)和步驟在總體設(shè)計過程中要先進(jìn)行系統(tǒng)設(shè)計,復(fù)審系統(tǒng)計劃與需求分析,確定系統(tǒng)具體的實施方案,然后進(jìn)行結(jié)構(gòu)設(shè)計,確定軟件結(jié)構(gòu)??傮w設(shè)計的一般步驟如下:(1)設(shè)計系統(tǒng)方案;(2)選取一組合理的方案;(3)推薦最佳實施方案;(4)功能分解;(5)軟件結(jié)構(gòu)設(shè)計;(6)數(shù)據(jù)庫設(shè)計、文件結(jié)構(gòu)的設(shè)計;(7)制訂測試計劃;(8)編寫概要設(shè)計文檔;(9)審查與復(fù)審概要設(shè)計文檔??傮w設(shè)計流程示意圖如圖5.2所示。5.2設(shè)計的概念和原則5.2.1模塊化模塊是數(shù)據(jù)說明、可執(zhí)行語句等程序?qū)ο蟮募?,它是單獨命名的而且可通過名字來訪問。例如,過程、函數(shù)、對象、類等都可作為模塊。模塊化是指解決一個復(fù)雜問題時自頂向下,逐步求精,把軟件系統(tǒng)劃分成若干模塊的過程。為了解決復(fù)雜問題,在軟件設(shè)計中必須把整個問題進(jìn)行分解來降低復(fù)雜性,這樣就可以將一個復(fù)雜問題,變成多個簡單的問題,既易設(shè)計也容易閱讀和理解,是開發(fā)復(fù)雜的大型軟件系統(tǒng)必須采用的方法。模塊化可以使軟件結(jié)構(gòu)清晰,減少開發(fā)工作量、低開發(fā)成本、提高軟件生產(chǎn)率,但是“模塊化”并不意味著模塊越多,劃分得越細(xì)越好。模塊越多,模塊之間的接口就會越復(fù)雜,從而增加成本,降低效率。因此模塊數(shù)要適中。事實上,模塊數(shù)目與成本存在如圖5.3所示的關(guān)系。為了使復(fù)雜大型程序能被人的智力所管理,模塊化是軟件應(yīng)該具備的唯一屬性。一個大型程序如僅由一個模塊組成,將很難以被人所理解。實際上,模塊化的依據(jù)是把復(fù)雜問題分解成許多容易解決的小問題,從而使原來的問題變得容易解決。如果無限地分割軟件,則最后為了開發(fā)軟件而需要的工作量也就小得可以忽略了。但是還有一個因素在起作用,從而使得上述結(jié)論不能成立。如圖5.3所示,當(dāng)模塊數(shù)目增加時,每個模塊的規(guī)模將減小,開發(fā)單個模塊需要的成本(工作量)確實減少了。但是,隨著模塊的增加,設(shè)計模塊間接口所需要的工作量也將增加。根據(jù)這兩個因素得出圖5.3中的總成本曲線。從圖5.3中可見,每個程序相應(yīng)地有一個最適當(dāng)?shù)哪K數(shù)目M,使得系統(tǒng)的開發(fā)成本最小。雖然目前還不能精確地決定M的數(shù)值,但是在考慮模塊化的時候總成本曲線確實是有用的指南。模塊化使程序錯誤通常局限在有關(guān)的模塊及它們之間的接口中,使軟件容易測試和調(diào)試,因而有助于提高軟件的可靠性。變動往往只涉及少數(shù)模塊,能夠提高軟件的可維護(hù)性。模塊化也有助于軟件開發(fā)工程的組織管理,一個復(fù)雜的大型程序可以由若干程序員分工編寫不同的模塊,并可進(jìn)一步分配技術(shù)熟練的程序員編寫困難的模塊。5.2.2抽象人類在認(rèn)識復(fù)雜現(xiàn)象的過程中最強(qiáng)有力的思維工具是抽象。人們在實踐中認(rèn)識到,現(xiàn)實世界中的一定事物、狀態(tài)或過程之間總存在著某些共性。把這些共性集中和概括起來,暫時忽略它們之間的差異,這就是抽象。由于人類思維能力的限制,因此如果人類每次面臨的因素太多,就不能進(jìn)行精確的思維。處理復(fù)雜系統(tǒng)的唯一有效的方法是用層次的方式構(gòu)造和分析它。一個復(fù)雜的動態(tài)系統(tǒng)首先可以用一些高級的抽象概念構(gòu)造和理解,這些高級概念又可以用一些較低級的概念構(gòu)造和理解,如此進(jìn)行下去,直至最低層次的具體元素。這種層次的思維和解題方式必須反映在定義動態(tài)系統(tǒng)的程序結(jié)構(gòu)之中,每級的一個概念將以某種方式對應(yīng)于程序的一組成分。當(dāng)考慮對任何問題的模塊化解法時,可以提出許多抽象的層次。在最高層次使用問題環(huán)境的語言中,以概括的方式敘述問題的解法。在中間層次采用更過程化的方法,把面向問題術(shù)語和面向?qū)崿F(xiàn)術(shù)語結(jié)合起來敘述問題解法。在最低的抽象層次用可以直接實現(xiàn)的方式敘述問題的解法。軟件開發(fā)過程的每一步都是對軟件解法的抽象層次的一次精化。在問題定義研究階段,軟件作為系統(tǒng)的一個完整部件;在需求分析期間,軟件解法是使用在問題環(huán)境內(nèi)熟悉的方式描述;當(dāng)由總體設(shè)計向詳細(xì)設(shè)計過渡時,抽象的程度也就隨之減少了;最后,當(dāng)源程序?qū)懗鰜硪院?,也就到達(dá)了抽象的最底層。5.2.3逐步求精逐步求精與模塊化以及抽象有著密切的聯(lián)系。在問題分解過程中,人們常采用逐步求精的做法,逐步求精既是人類解決復(fù)雜問題時采用的基本技術(shù)之一,也是軟件工程技術(shù)的基礎(chǔ)。所謂逐步求精是“為了能集中精力解決主要問題而盡量推遲問題細(xì)節(jié)的考慮”??梢园阎鸩角缶暈橐环N技術(shù),即在一個時期內(nèi)必須解決種種問題按優(yōu)先級排序的技術(shù)。逐步求精是確保每一個問題在適當(dāng)?shù)臅r候得到解決。5.2.4信息隱藏和局部化信息隱藏是指:應(yīng)該設(shè)計和確定模塊,使得一個模塊內(nèi)包含的信息(過程和數(shù)據(jù))對于不需要這些信息的模塊來說,是不能訪問的。局部化的概念和信息隱藏概念是密切相關(guān)的。局部化是指把一些關(guān)系密切的軟件元素物理地放得很近。模塊中使用局部數(shù)據(jù)元素是局部化的一個例子。顯然,局部化有助于實現(xiàn)信息隱藏。“隱藏”意味著有效的模塊化可以通過定義一組獨立的模塊而實現(xiàn),這些獨立的模塊彼此只交換那些為了完成系統(tǒng)功能而必須交換的信息。如果在測試期間和以后的軟件維護(hù)期間需要修改軟件,那么使用信息隱藏原理作為模塊化系統(tǒng)設(shè)計的標(biāo)準(zhǔn)就會帶來極大的好處。因為絕大多數(shù)數(shù)據(jù)和過程對于軟件的其他部分而言是隱藏的,所以在修改期間由于疏忽而引入的錯誤就不易傳播到軟件的其他部分。軟件設(shè)計應(yīng)該降低模塊與外部環(huán)境間的連接復(fù)雜性。為此,D.L.Parnas提出了信息隱藏的基本原則,其基本思想是:(1)模塊內(nèi)部的數(shù)據(jù)和過程,對于那些不需要這些信息的模塊不可訪問;(2)每一個模塊只完成一個相對獨立的特定功能;(3)模塊之間只交換那些完成系統(tǒng)功能必須交換的信息。將信息隱藏作為模塊化系統(tǒng)設(shè)計的標(biāo)準(zhǔn),為軟件測試和維護(hù)提供了極大的便利。由于信息被隱藏在模塊內(nèi)部,因此一個模塊變更時引起的錯誤不易傳播到軟件的其他模塊。5.2.5模塊獨立性所謂模塊的獨立性,是指軟件系統(tǒng)中每個模塊只涉及軟件要求的具體的子功能,而和軟件系統(tǒng)中其他模塊的接口是簡單的。例如,若一個模塊只具有單一的功能且與其他模塊沒有太多的聯(lián)系,那么稱此模塊具有模塊獨立性。一般采用兩個準(zhǔn)則度量模塊獨立性,即模塊內(nèi)的內(nèi)聚性和模塊間的耦合性。1.內(nèi)聚性內(nèi)聚是模塊功能強(qiáng)度(一個模塊內(nèi)部各個元素彼此結(jié)合的緊密程度)的度量。一個內(nèi)聚程度高的模塊(在理想情況下)應(yīng)當(dāng)只做一件事。一般模塊的內(nèi)聚性分為7種類型,如圖5.4所示。在上面的關(guān)系中可以看到,位于高端的幾種內(nèi)聚類型最好,位于中端的幾種內(nèi)聚類型是可以接受的,但位于低端的內(nèi)聚類型很不好,一般不能使用。因此,人們總是希望一個模塊的內(nèi)聚類型向高的方向靠。模塊的內(nèi)聚在系統(tǒng)的模塊化設(shè)計中是一個關(guān)鍵的因素。(1)巧合內(nèi)聚(偶然內(nèi)聚):當(dāng)幾個模塊內(nèi)湊巧有一些程序段代碼相同,又沒有明確表現(xiàn)出獨立的功能時,把這些代碼獨立出來建立的模塊即為巧合內(nèi)聚模塊。它是內(nèi)聚程度最低的模塊。其缺點是模塊的內(nèi)容不易理解,不易修改和維護(hù)。(2)邏輯內(nèi)聚:這種模塊把幾種相關(guān)的功能組合在一起,每次被調(diào)用時,由傳送給模塊的控制型參數(shù)來確定該模塊應(yīng)執(zhí)行哪一種功能。邏輯內(nèi)聚模塊比巧合內(nèi)聚模塊的內(nèi)聚程度要高。因為它表明了各部分之間在功能上的相關(guān)關(guān)系。(3)時間內(nèi)聚(經(jīng)典內(nèi)聚):這種模塊大多為多功能模塊,但要求模塊的各個功能必須在同一時間段內(nèi)執(zhí)行。例如初始化模塊和終止模塊。時間內(nèi)聚模塊比邏輯內(nèi)聚模塊的內(nèi)聚程度又稍高一些。在一般情形下,各部分可以以任意的順序執(zhí)行,所以它的內(nèi)部邏輯更簡單。(4)過程內(nèi)聚:使用流程圖作為工具設(shè)計程序的時候,常常通過流程圖來確定模塊劃分。把流程圖中的某一部分劃出組成模塊,就得到過程內(nèi)聚模塊。這類模塊的內(nèi)聚程度比時間內(nèi)聚模塊的內(nèi)聚程度更強(qiáng)一些。(5)通信內(nèi)聚:如果一個模塊內(nèi)各功能部分都使用了相同的輸入數(shù)據(jù),或產(chǎn)生了相同的輸出數(shù)據(jù),則稱之為通信內(nèi)聚模塊。通常,通信內(nèi)聚模塊是通過數(shù)據(jù)流圖來定義的,如圖5.5所示。(6)信息內(nèi)聚(順序內(nèi)聚):這種模塊完成多個功能,各個功能都在同一數(shù)據(jù)結(jié)構(gòu)上操作,每一項功能有一個唯一的入口點。例如,圖5.6所示的模塊具有4個功能,由于模塊的所有功能都基于同一個數(shù)據(jù)結(jié)構(gòu)(符號表),因此,它是一個信息內(nèi)聚的模塊。信息內(nèi)聚模塊可以看成是多個功能內(nèi)聚模塊的組合,并且達(dá)到信息的隱藏,即把某個數(shù)據(jù)結(jié)構(gòu)、資源或設(shè)備隱藏在一個模塊內(nèi),不為別的模塊所知曉。當(dāng)把程序某些方面細(xì)節(jié)隱藏在一個模塊中時,就增加了模塊的獨立性。(7)功能內(nèi)聚:如果一個模塊中各個部分都是為完成一項具體功能而協(xié)同工作,緊密聯(lián)系,不可分割的,則稱該模塊為功能內(nèi)聚模塊。功能內(nèi)聚模塊是內(nèi)聚性最強(qiáng)的模塊。2.耦合性耦合是模塊之間的相對獨立性(互相連接的緊密程度)的度量。它取決于各個模塊之間接口的復(fù)雜程度、調(diào)用模塊的方式以及哪些信息通過接口。一般模塊之間可能的連接方式有7種,構(gòu)成耦合性的7種類型,如圖5.7所示。(1)內(nèi)容耦合:如果一個模塊直接訪問另一個模塊的內(nèi)部數(shù)據(jù),或者一個模塊不通過正常入口轉(zhuǎn)到另一模塊內(nèi)部,或者兩個模塊有一部分程序代碼重疊,或者一個模塊有多個入口,則兩個模塊之間就發(fā)生了內(nèi)容耦合。在內(nèi)容耦合的情形下,被訪問模塊的任何變更,或者用不同的編譯器對它再編譯,都會造成程序出錯。這種耦合是模塊獨立性最弱的耦合。(2)公共耦合:若一組模塊都訪問同一個公共數(shù)據(jù)環(huán)境,則它們之間的耦合就稱為公共耦合,如圖5.8所示。(3)外部耦合:若一組模塊都訪問同一全局簡單變量而不是同一全局?jǐn)?shù)據(jù)結(jié)構(gòu),而且不是通過參數(shù)表傳遞該全局變量的信息,則稱之為外部耦合。(4)控制耦合:如果一個模塊通過傳送開關(guān)、標(biāo)志、名字等控制信息,明顯地控制選擇另一模塊的功能,就是控制耦合,如圖5.9所示。(5)標(biāo)記耦合:如果一組模塊通過參數(shù)表傳遞記錄信息,就是標(biāo)記耦合。事實上,這組模塊共享了某一數(shù)據(jù)結(jié)構(gòu)的子結(jié)構(gòu),而不是簡單變量。這要求這些模塊都必須清楚該記錄的結(jié)構(gòu),并按結(jié)構(gòu)要求對記錄進(jìn)行操作。(6)數(shù)據(jù)耦合:如果一個模塊訪問另一個模塊時,彼此之間是通過數(shù)據(jù)參數(shù)(不是控制參數(shù)、公共數(shù)據(jù)結(jié)構(gòu)或外部變量)來交換輸入、輸出信息,而且交換的信息僅限于數(shù)據(jù),則稱這種耦合為數(shù)據(jù)耦合。數(shù)據(jù)耦合是松散的耦合,模塊之間的獨立性比較強(qiáng)。(7)非直接耦合:如果兩個模塊之間沒有直接關(guān)系,它們之間的聯(lián)系完全是通過主模塊的控制和調(diào)用來實現(xiàn)的,這就是非直接耦合。這種耦合的模塊獨立性最強(qiáng)。實際上,開始時兩個模塊之間的耦合不只是一種類型,而是多種類型的混合。這就要求設(shè)計人員進(jìn)行分析、比較,逐步加以改進(jìn),以提高模塊的獨立性。模塊之間的連接越緊密,聯(lián)系越多,耦合性就越高,而其模塊獨立性就越弱。一個模塊內(nèi)部各個元素之間的聯(lián)系越緊密,則它的內(nèi)聚性就越高,相對地,它與其他模塊之間的耦合性就會降低,而模塊獨立性就越強(qiáng)。因此,模塊獨立性比較強(qiáng)的模塊應(yīng)是高內(nèi)聚低耦合的模塊。5.3控制層次與結(jié)構(gòu)劃分5.3.1控制層次控制層次也稱作程序結(jié)構(gòu),它代表了程序構(gòu)件(模塊)的組織(常常是結(jié)構(gòu)化的)并暗示了控制的層次結(jié)構(gòu),例如進(jìn)程序列、事件或決策的順序或操作的重復(fù),它也不一定可應(yīng)用于所有的體系結(jié)構(gòu)風(fēng)格。不同的符號體系被用來表示那些符合這種表示的體系結(jié)構(gòu)風(fēng)格的控制層次,最普遍的是表示調(diào)用和返回體系結(jié)構(gòu)的層次控制的樹形圖,如圖5.10所示。模塊間的控制關(guān)系是通過下述方法表達(dá)的:控制其他模塊的模塊被稱作上級模塊;相對地被其他模塊控制的模塊被稱作控制者的從屬模塊??刂茖哟芜€代表了兩種略有不同的軟件體系結(jié)構(gòu)特征:可見性和連接性??梢娦灾该骺梢员徽{(diào)用或被給定構(gòu)件用作數(shù)據(jù)的一組程序構(gòu)件,即使是通過間接方式實現(xiàn)的。例如,在面向?qū)ο笙到y(tǒng)中的一個模塊可以訪問它所繼承的很多屬性,但只能使用其中的一小部分,所有這些屬性對該模塊都是可見的。連接性指明被給定構(gòu)件直接調(diào)用或用作數(shù)據(jù)的一組構(gòu)件,例如,直接導(dǎo)致另一個模塊開始執(zhí)行的模塊是連接到該模塊的。5.3.2結(jié)構(gòu)劃分如果系統(tǒng)的體系結(jié)構(gòu)風(fēng)格是層次式的,則程序結(jié)構(gòu)可以被水平劃分和垂直劃分。如圖5.11(a)所示,水平劃分為每個主要程序功能定義了分離的模塊結(jié)構(gòu)分支,用深色陰影表示的控制模塊被用來協(xié)調(diào)程序功能之間的通信和執(zhí)行。最簡單的水平劃分方法定義了三個部分——輸入、數(shù)據(jù)變換和輸出。對體系結(jié)構(gòu)進(jìn)行水平劃分提供了許多特殊的優(yōu)點:(1)軟件易于測試;(2)軟件易于維護(hù);(3)更少的副作用傳播;(4)軟件易于擴(kuò)展。由于主要的功能相互分離,因此變更變得更加簡單,而對系統(tǒng)的擴(kuò)展往往變得更加容易完成而且沒有副作用。在消極的方面,水平劃分常常通過模塊接口傳遞更多的數(shù)據(jù),因而可能會使程序流的整體控制復(fù)雜化。垂直劃分如圖5.11(b)所示。其常常被稱作因子化,它要求在程序體系結(jié)構(gòu)中控制(決策)和工作應(yīng)該自頂向下分布,頂層模塊應(yīng)該執(zhí)行控制功能而少做實際處理工作,在層次結(jié)構(gòu)中位于低層的模塊應(yīng)該是工作者,它們完成所有的輸入、計算和輸出任務(wù)。程序結(jié)構(gòu)中變化的性質(zhì)證明了垂直劃分的必要性,如圖5.11(b)所示,(高層的)控制模塊的變化很可能將副作用傳播到下層的從屬模塊,對工作者模塊的修改,由于它在結(jié)構(gòu)中位于下層,就不太可能引起副作用的傳播。通常情況下,對計算機(jī)程序的修改會在輸入、計算或輸出的修改間循環(huán),程序的整體控制結(jié)構(gòu)(例如,它的基本行為)不太可能變更,由于這個原因,垂直劃分的體系結(jié)構(gòu)在做變更時更不容易受到副作用的影響,因而更加易于維護(hù)——這是一項關(guān)鍵的質(zhì)量因素。5.4針對有效模塊化的設(shè)計啟發(fā)一旦開發(fā)了程序結(jié)構(gòu),就可以通過應(yīng)用本章前面介紹的設(shè)計概念實現(xiàn)有效的模塊化。程序結(jié)構(gòu)是根據(jù)本節(jié)描述的一組啟發(fā)法(指導(dǎo)原則)來處理的。(1)評估程序結(jié)構(gòu)的“第一次迭代”以降低耦合并提高內(nèi)聚。一旦開發(fā)了程序結(jié)構(gòu),為了增強(qiáng)模塊獨立性可以對模塊進(jìn)行外向或內(nèi)向的突破,一個向外突破后的模塊變成最終程序結(jié)構(gòu)中的兩個或多個模塊,一個向內(nèi)突破的模塊是組合兩個或多個模塊隱含的處理的產(chǎn)物。當(dāng)兩個或多個模塊中存在共同的處理構(gòu)件時,可以將該構(gòu)件重新定義成一個內(nèi)聚的模塊,這時常常形成外爆的模塊。在期望高耦合時,可以將模塊內(nèi)爆,從而減少控制傳遞、對全局變量的引用和接口的復(fù)雜性。(2)將模塊的影響范圍限制在模塊的控制范圍內(nèi)。模塊e的影響范圍定義成所有受模塊e中決策影響的其他模塊,模塊e的控制范圍是模塊e的所有從屬及最終的從屬模塊,如圖5.12(a)所示,如果模塊e作出的決策影響了模塊r,則違反了本規(guī)則,因為模塊r位于模塊e的控制范圍之外。(3)試圖用高扇出使結(jié)構(gòu)最小化;當(dāng)深度增加時爭取提高扇入。圖5.12(b)所示的結(jié)構(gòu)沒有有效地利用因子化,所有的模塊都“平鋪”在單個控制模塊下,圖5.12(a)的結(jié)構(gòu)通常顯示出更合理的控制分布,結(jié)構(gòu)采用橢圓外形,指明一系列控制層次以及低層的高度實用性的模塊。(4)評估模塊接口以降低復(fù)雜度和冗余并提高一致性。模塊接口復(fù)雜性是軟件錯誤的首要原因,接口應(yīng)該設(shè)計成簡單地傳遞信息并且應(yīng)該同模塊的功能保持一致,接口不一致性是低內(nèi)聚的表現(xiàn)。有問題的模塊應(yīng)該重新評估。(5)定義功能可以預(yù)期的模塊,但要避免過分限制性的模塊。當(dāng)模塊可以作為黑盒對待時就是可預(yù)期的;也就是說,同樣的外部數(shù)據(jù)可以在不考慮內(nèi)部處理細(xì)節(jié)的情況下生成。具有內(nèi)部“存儲器”的模塊可能是不可預(yù)期的,使用時加以注意。將處理限制在單個子功能中的模塊體現(xiàn)出高內(nèi)聚,而且為設(shè)計者所支持。然而任意限制局部數(shù)據(jù)結(jié)構(gòu)大小、控制流內(nèi)選項或外部接口模式的模塊將不可避免地需要維護(hù)以清除這些限制。(6)力爭“受控入口”模塊,避免“病態(tài)連接”。這條設(shè)計原則針對內(nèi)容耦合提出警告,當(dāng)模塊接口受到約束和控制時,軟件易于理解,因而易于維護(hù)。病態(tài)連接是指指向模塊中間的分支或引用。5.5描繪軟件結(jié)構(gòu)的圖形工具5.5.1HIPO圖HIPO(分層的輸入處理輸出)圖是由IBM公司發(fā)明的,它是用于描述軟件結(jié)構(gòu)的圖形工具。它實質(zhì)上是在描述軟件總體模塊結(jié)構(gòu)的層次圖(H圖)的基礎(chǔ)上,加入了用于描述每個模塊輸入/輸出數(shù)據(jù)和處理功能的IPO圖,因此它的中文全名為層次圖加輸入/處理/輸出圖。1.層次圖(H圖)層次圖(H圖)用于描繪軟件的層次結(jié)構(gòu),層次圖中一個矩形框代表一個模塊,框間的連線表示調(diào)用關(guān)系,位于上方的矩形框所代表的模塊調(diào)用位于下方的矩形框所代表的模塊,圖5.13是一個層次圖的例子。為了使HIPO圖具有可追蹤性,在H圖里除了頂層的方框之外,每個圖框都加了編號。層次圖適于在自頂向下設(shè)計軟件的過程中使用。2.?IPO圖IPO圖是輸入/處理/輸出圖的簡稱,它是用來描繪加工說明的圖形工具,包括三個矩形框,左邊框列出所有輸入數(shù)據(jù),中間框列出主要處理,右邊框列出輸出數(shù)據(jù),三個框中間用粗箭頭指出數(shù)據(jù)通信情況。如圖5.15中給出了主文件更新的IPO圖。IPO圖能夠方便、清晰地描繪出模塊的輸入數(shù)據(jù)、加工和輸出數(shù)據(jù)之間的關(guān)系。與H圖中的每個圖框相對應(yīng),應(yīng)該有一張IPO圖描述這個圖框代表的模塊的處理過程,作為對層次圖中內(nèi)容的補(bǔ)充說明。每張IPO圖內(nèi)都應(yīng)該明顯地標(biāo)出它所描繪的模塊在H圖中的編號,以便確定這個模塊在軟件結(jié)構(gòu)中的位置。IPO圖的基本形式為:在圖中左邊的框中列出模塊涉及的所有輸入數(shù)據(jù),在中間的框中列出主要的加工,在右邊的框中列出處理后產(chǎn)生的輸出數(shù)據(jù);圖中的箭頭用于指明輸入數(shù)據(jù)、加工和輸出結(jié)果之間的關(guān)系。書寫文檔時,通常用層次圖描繪軟件結(jié)構(gòu)而不是結(jié)構(gòu)圖,因為結(jié)構(gòu)圖上包含的信息太多,所以其清晰程度有時反倒不如層次圖。5.5.2系統(tǒng)結(jié)構(gòu)圖系統(tǒng)結(jié)構(gòu)圖(SC)是描繪系統(tǒng)結(jié)構(gòu)的圖形工具,它描述了系統(tǒng)由哪些模塊組成,程序中模塊之間的調(diào)用關(guān)系,每個模塊“做什么”以及每個模塊的輸入和輸出。結(jié)構(gòu)圖是結(jié)構(gòu)化設(shè)計中的一個十分重要的結(jié)果。結(jié)構(gòu)圖中的基本符號和含義如表5.1所示。5.6結(jié)?構(gòu)?化?設(shè)?計從系統(tǒng)設(shè)計的角度出發(fā),軟件設(shè)計方法可以分為三大類。第一類是根據(jù)系統(tǒng)的數(shù)據(jù)流進(jìn)行設(shè)計,稱為面向數(shù)據(jù)流的設(shè)計或者過程驅(qū)動的設(shè)計,以結(jié)構(gòu)化設(shè)計方法為代表。第二類是根據(jù)系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)進(jìn)行設(shè)計,稱為面向數(shù)據(jù)結(jié)構(gòu)的設(shè)計或者數(shù)據(jù)驅(qū)動的設(shè)計,以程序邏輯構(gòu)造(LCP)方法、Jackson系統(tǒng)開發(fā)方法和數(shù)據(jù)結(jié)構(gòu)化系統(tǒng)開發(fā)(DSSD)方法為代表。第三類設(shè)計方法即面向?qū)ο蟮脑O(shè)計。結(jié)構(gòu)化設(shè)計方法是在模塊化、自頂向下細(xì)化、結(jié)構(gòu)化程序設(shè)計等程序設(shè)計技術(shù)基礎(chǔ)上發(fā)展起來的。該方法實施的要點是:①建立數(shù)據(jù)流的類型;②指明流的邊界;③將數(shù)據(jù)流圖映射到程序結(jié)構(gòu);④用“因子化”方法定義控制的層次結(jié)構(gòu);⑤用設(shè)計測量和一些啟發(fā)式規(guī)則對結(jié)構(gòu)進(jìn)行細(xì)化。面向數(shù)據(jù)流設(shè)計的流程圖如圖5.17所示。5.6.1系統(tǒng)結(jié)構(gòu)圖中的模塊在系統(tǒng)結(jié)構(gòu)圖中不能再分解的底層模塊為原子模塊。如果一個軟件系統(tǒng)的全部實際加工(數(shù)據(jù)計算或處理)都由底層的原子模塊來完成,而其他所有非原子模塊僅僅執(zhí)行控制或協(xié)調(diào)功能,則這樣的系統(tǒng)就是完全因子分解的系統(tǒng)。如果系統(tǒng)結(jié)構(gòu)圖是完全因子分解的,就是最好的系統(tǒng)。一般地,在系統(tǒng)結(jié)構(gòu)圖中有4種類型的模塊,如圖5.18所示。5.6.2變換流與變換型系統(tǒng)結(jié)構(gòu)變換型數(shù)據(jù)處理問題的工作過程大致分為3步,即取得數(shù)據(jù)、變換數(shù)據(jù)和給出數(shù)據(jù),如圖5.19所示。這3步反映了變換型問題數(shù)據(jù)流的基本思想。其中,變換數(shù)據(jù)是數(shù)據(jù)處理過程的核心工作,而取得數(shù)據(jù)只不過是為它做準(zhǔn)備,給出數(shù)據(jù)則是對變換后的數(shù)據(jù)進(jìn)行處理工作。變換型系統(tǒng)結(jié)構(gòu)圖如圖5.20所示,相應(yīng)于取得數(shù)據(jù)、變換數(shù)據(jù)和給出數(shù)據(jù),系統(tǒng)的結(jié)構(gòu)圖由輸入、中心變換和輸出3部分組成。在變換型數(shù)據(jù)流圖中,取得數(shù)據(jù)可以由一路或多路處理構(gòu)成,變換數(shù)據(jù)流也可以包含多個處理,給出數(shù)據(jù)的處理也可以是一路或多路,如圖5.21所示。5.6.3變換分析變換分析是一系列設(shè)計步驟的總稱,經(jīng)過這些步驟把具有變換型的數(shù)據(jù)流圖按預(yù)先確定的模式映射成軟件結(jié)構(gòu)。在變換型的數(shù)據(jù)流圖中,變換中心輸入端的數(shù)據(jù)流為系統(tǒng)的邏輯輸入;變換中心輸出端為邏輯輸出,而系統(tǒng)輸入端的數(shù)據(jù)流為物理輸入,輸出端為物理輸出。從輸入設(shè)備獲得物理輸入一般要經(jīng)過一系列的輔助性加工,才能變成純邏輯輸入送給變換(主加工);同理,純邏輯輸出一般也要經(jīng)過一系列的輔助性加工才能變成物理輸出,最后從系統(tǒng)輸出。變換型的數(shù)據(jù)流導(dǎo)出相應(yīng)的軟件結(jié)構(gòu)圖一般要經(jīng)過以下幾個步驟。1.確定DFD(數(shù)據(jù)流圖)中的變換中心、邏輯輸入和邏輯輸出通常幾股數(shù)據(jù)流的匯合處就是系統(tǒng)的變換中心。還可用以下方法確定變換中心:從物理輸入(出)端開始,沿(逆)數(shù)據(jù)流方向向系統(tǒng)中心尋找,直到有這樣的數(shù)據(jù)流,它不能再被看作是系統(tǒng)的輸入(出)時,則它的前一數(shù)據(jù)流就是系統(tǒng)的邏輯輸入(出)。介于邏輯輸入和邏輯輸出間的加工就是中心,如圖5.22所示。2.設(shè)計軟件結(jié)構(gòu)的頂層和一層——變換結(jié)構(gòu)頂層就是主控模塊的位置,是總的控制模塊,其功能是完成對所有模塊的控制,其名稱就是系統(tǒng)名稱,對其他模塊的調(diào)用取決于它的控制邏輯(順序、選擇或重復(fù));第一層一般至少有輸入、變換、輸出3種功能模塊。為每個邏輯輸入設(shè)計一個輸入模塊,為每個邏輯輸出設(shè)計一個輸出模塊,其功能是分別為主模塊提供數(shù)據(jù)的輸入或輸出;為變換中心設(shè)計一個變換模塊,此時將中心抽象地看作是一個整體,它的功能是接收輸入,進(jìn)行變換加工,再輸出。這些模塊間的數(shù)據(jù)傳送應(yīng)與數(shù)據(jù)流圖相對應(yīng),如圖5.22所示,數(shù)據(jù)流圖的變換結(jié)構(gòu)如圖5.23所示。3.設(shè)計中、下層模塊對第一層模塊按如下3部分自頂向下逐層分解。1)輸入模塊下屬模塊的設(shè)計由于輸入模塊的功能是向它的調(diào)用者提供數(shù)據(jù),因此必須要有數(shù)據(jù)來源,這樣輸入模塊應(yīng)由兩部分組成。一部分接受輸入數(shù)據(jù),另一部分是將數(shù)據(jù)按調(diào)用者的要求加工后提供給調(diào)用者。因此,為每個輸入模塊設(shè)計兩個下屬模塊,一個接收數(shù)據(jù),一個將數(shù)據(jù)轉(zhuǎn)換為調(diào)用模塊所需的信息。用類似的方法一直分解下去,直至物理輸入端,如圖5.24所示。2)輸出模塊下屬模塊的設(shè)計為每個輸出模塊設(shè)計兩個下屬模塊,一個將數(shù)據(jù)轉(zhuǎn)換成下屬模塊所需的信息,一個發(fā)送數(shù)據(jù)。用類似的方法一直分解下去,下至物理輸出端,如圖5.25所示。3)變換模塊下屬模塊獨立性原則為每個基本加工建立一個功能模塊,圖5.23所示數(shù)據(jù)流圖的變換模塊下屬模塊的設(shè)計如圖5.26所示。通過以上步驟導(dǎo)出5.21所示的數(shù)據(jù)流圖的初始結(jié)構(gòu),如圖5.27所示。4.設(shè)計優(yōu)化根據(jù)優(yōu)化準(zhǔn)則對初始結(jié)構(gòu)進(jìn)行細(xì)化和改進(jìn)。如對模塊進(jìn)行合并和調(diào)整,為每個物理輸入和物理輸出設(shè)計專門模塊,以體現(xiàn)系統(tǒng)的外部接口。在運(yùn)用變換分析方法建立系統(tǒng)的結(jié)構(gòu)圖時應(yīng)當(dāng)注意的問題如下:(1)在選擇模塊設(shè)計的次序時,不一定要沿一條分支路徑向下,直到該分支的最底層模塊設(shè)計完成后,才開始對另一條分支路徑的下層模塊進(jìn)行設(shè)計。但是,必須對一個模塊的全部直接下屬模塊都設(shè)計完成之后,才能轉(zhuǎn)向另一個模塊的下屬模塊的設(shè)計,參見圖5.28。如果已設(shè)計了主模塊和第一層A、B、C模塊,下一步要分解模塊A,那么應(yīng)當(dāng)先設(shè)計模塊A的直接下屬D、E模塊,然后才可以去設(shè)計模塊B和C的直接下屬模塊。(2)在設(shè)計下層模塊時,應(yīng)考慮模塊的內(nèi)聚和耦合問題,提高初始結(jié)構(gòu)圖的質(zhì)量。(3)注意抽象和逐步求精技術(shù)的使用。在設(shè)計當(dāng)前模塊時,先把這個模塊的所有下層模塊抽象成“黑盒”,并在系統(tǒng)設(shè)計中利用它們,而暫不考慮它們的內(nèi)部結(jié)構(gòu)和實現(xiàn)方法。在這一步定義好的“黑盒”,由于已確定了它的功能和輸入、輸出,因此在下一步可以對它們進(jìn)行設(shè)計和加工。這樣,又會導(dǎo)致更多的“黑盒”,最后直至全部“黑盒”的內(nèi)容和結(jié)構(gòu)完全被確定。5.6.4事務(wù)流與事務(wù)型系統(tǒng)結(jié)構(gòu)圖事務(wù)型數(shù)據(jù)處理問題的工作機(jī)理是接受一項事務(wù),根據(jù)事務(wù)處理的特點和性質(zhì),選擇分派一個適當(dāng)?shù)奶幚韱卧?,然后給出結(jié)果。我們把完成選擇分派任務(wù)的部分叫做事務(wù)處理中心(或叫分派部件)。這種事務(wù)型數(shù)據(jù)處理問題的數(shù)據(jù)流圖如圖5.34所示。其中,輸入數(shù)據(jù)流在事務(wù)中心處做出選擇,激活某一種事務(wù)處理加工。D1~D4是并列的供選擇的事務(wù)處理加工。5.6.5事務(wù)分析在事務(wù)型系統(tǒng)結(jié)構(gòu)圖中,事務(wù)中心模塊按所接受的事務(wù)的類型,選擇某一個事務(wù)處理模塊執(zhí)行。各個事務(wù)處理模塊是并列的,依賴于一定的選擇條件,分別完成不同的事務(wù)處理工作。每個事務(wù)處理模塊可能要調(diào)用若干個操作模塊,而操作模塊又可能調(diào)用若干個細(xì)節(jié)模塊。不同的事務(wù)處理模塊可以共享一些操作模塊。同樣,不同的操作模塊又可以共享一些細(xì)節(jié)模塊。事務(wù)型系統(tǒng)結(jié)構(gòu)圖在數(shù)據(jù)處理中經(jīng)常遇到,與變換分析一樣,事務(wù)分析也是從分析數(shù)據(jù)流圖開始,自頂向下,逐步分解,建立系統(tǒng)結(jié)構(gòu)圖,主要差別僅在于由數(shù)據(jù)流圖到軟件結(jié)構(gòu)的映射方法不同。下面給出一個典型的具有事務(wù)型特征的數(shù)據(jù)流圖,如圖5.34所示。圖5.34中數(shù)據(jù)流A是一個帶有“請求”性質(zhì)的信息,即為事務(wù)源。而加工T具有“事務(wù)中心”的功能,它后繼的4個加工D1、D2、D3和D4是并列的,在加工T的選擇控制下完成不同功能的處理。最后,經(jīng)過加工O將某一加工處理的結(jié)果整理輸出。其設(shè)計過程如下:(1)確定DFD中的事務(wù)中心和加工路徑。通常當(dāng)DFD中的某個加工具有明顯地將一個輸入數(shù)據(jù)流分解成多個發(fā)散的輸出數(shù)據(jù)流功能時,該加工就是系統(tǒng)的事務(wù)中心,從事務(wù)中心輻射出去的數(shù)據(jù)流就是各個加工路徑。(2)設(shè)計軟件結(jié)構(gòu)的頂層和一層——事務(wù)結(jié)構(gòu)。首先建立一個主控模塊,它位于P-層(主層),用以代表整個加工。其功能是接收數(shù)據(jù),并根據(jù)事務(wù)類型調(diào)度相應(yīng)的處理模塊,最后給出結(jié)果。所以第一層模塊包括3類:取得事務(wù)、處理事務(wù)和輸出結(jié)果。其中取得事務(wù)、處理事務(wù)構(gòu)成事務(wù)型軟件結(jié)構(gòu)的主要部分——接收分支和發(fā)送分支。依據(jù)圖5.34并列的4個加工,在調(diào)度模塊之下建立了4個事務(wù)模塊,分別完成D1、D2、D3和D4的工作,并在調(diào)度模塊的下沿以菱形引出對這4個事務(wù)模塊的選擇。調(diào)度模塊和這些事務(wù)模塊,以及對應(yīng)于加工T和O的“取得A”模塊和“給出H”模塊構(gòu)成事務(wù)層,稱為T-層,如圖5.35所示。(3)設(shè)計中、下層模塊并優(yōu)化。設(shè)計各個事務(wù)模塊下層的操作模塊。事務(wù)模塊下層的操作模塊包括:操作模塊即A-層(操作層)和細(xì)節(jié)模塊即D-層(細(xì)節(jié)層)。由于不同的事務(wù)處理模塊可能有共同的操作,因此某些事務(wù)模塊共享一些操作模塊;同理,不同的操作模塊可能有共同的細(xì)節(jié),所以某些操作模塊共享一些細(xì)節(jié)模塊。如此分解擴(kuò)展,直至完成整個結(jié)構(gòu)圖,如圖5.35所示。在運(yùn)用事務(wù)分析方法建立系統(tǒng)的結(jié)構(gòu)圖時應(yīng)當(dāng)注意如下問題:(1)事務(wù)源的識別。利用數(shù)據(jù)流圖和數(shù)據(jù)詞典,從問題定義和需求分析的結(jié)果中找各種需要處理的事務(wù)。通常,事務(wù)來自物理輸入裝置,而在變換型系統(tǒng)的上層模塊設(shè)計出來之后,設(shè)計人員還必須區(qū)別系統(tǒng)輸入、中心加工和輸出中產(chǎn)生的事務(wù)。對于系統(tǒng)內(nèi)部產(chǎn)生的事務(wù),必須仔細(xì)地定義它們的操作。(2)注意利用公用模塊。在事務(wù)分析的過程中,如果不同事務(wù)的一些中間模塊可由具有類似的語法和語義的若干個低層模塊組成,則可以把這些低層模塊構(gòu)造成公用模塊。(3)建立必要的事務(wù)處理模塊。如果發(fā)現(xiàn)在系統(tǒng)中有相似的事務(wù),或聯(lián)系密切的一組事務(wù),則可以把它們組成一個事務(wù)處理模塊。但如果組合后的模塊是低內(nèi)聚的,則應(yīng)該再打散重新考慮。(4)下層操作模塊和細(xì)節(jié)模塊的共享。下層操作模塊的分解方法類似于變換分析,但要注意事務(wù)處理模塊共享公用(操作)模塊的情況。對于大型系統(tǒng)的復(fù)雜事務(wù)處理,還可能有若干層細(xì)節(jié)模塊,應(yīng)盡可能使類似的操作模塊共享公用的細(xì)節(jié)模塊。(5)結(jié)構(gòu)圖的形式。事務(wù)型系統(tǒng)的結(jié)構(gòu)圖可能有多種形式,如有多層操作層,也可能沒有操作層。另外還可將調(diào)度功能歸入事務(wù)中心模塊,簡化結(jié)構(gòu)圖如圖5.36所示。5.6.6“黑箱”技術(shù)的使用在設(shè)計當(dāng)前模塊時,先把這個模塊的所有下層模塊定義成“黑箱”,并在系統(tǒng)設(shè)計中利用它們,暫時不考慮它們的內(nèi)部結(jié)構(gòu)和實現(xiàn)方法。在這一步定義好的“黑箱”,由于已確定了它的功能和輸入、輸出,因此在下一步就可以對它們進(jìn)行設(shè)計和加工。這樣,又會導(dǎo)致更多的“黑箱”。最后,全部“黑箱”的內(nèi)容和結(jié)構(gòu)應(yīng)完全被確定。這就是我們所說的自頂向下、逐步求精的過程。使用黑箱技術(shù)的主要好處是使設(shè)計人員可以只關(guān)心當(dāng)前的有關(guān)問題,暫時不必考慮進(jìn)一步的瑣碎的次要的細(xì)節(jié),待進(jìn)一步分解時才去關(guān)心它們的內(nèi)部細(xì)節(jié)與結(jié)構(gòu)。5.6.7混合結(jié)構(gòu)分析變換分析是軟件系統(tǒng)結(jié)構(gòu)設(shè)計的主要方法,因為大部分軟件系統(tǒng)都可以應(yīng)用變換分析進(jìn)行設(shè)計。但是,由于很多數(shù)據(jù)處理系統(tǒng)屬于事務(wù)型系統(tǒng),因此僅使用變換分析是不夠的,還需使用事務(wù)處理方法補(bǔ)充。一般而言,一個大型的軟件系統(tǒng)是變換型結(jié)構(gòu)和事務(wù)型結(jié)構(gòu)的混合結(jié)構(gòu)。通常利用以變換分析為主、事務(wù)分析為輔的方式進(jìn)行軟件結(jié)構(gòu)設(shè)計。在系統(tǒng)結(jié)構(gòu)設(shè)計時,首先利用變換分析方法把軟件系統(tǒng)分為輸入、中心變換和輸出3個部分,設(shè)計上層模塊,即主模塊和第一層模塊。然后根據(jù)數(shù)據(jù)流圖各部分的結(jié)構(gòu)特點,適當(dāng)?shù)乩米儞Q分析或事務(wù)分析,即可得到初始系統(tǒng)結(jié)構(gòu)圖的一個方案。5.7數(shù)?據(jù)?庫?設(shè)?計5.7.1數(shù)據(jù)庫設(shè)計的原則數(shù)據(jù)庫是整個系統(tǒng)的核心,它的設(shè)計直接關(guān)系到系統(tǒng)執(zhí)行的效率和系統(tǒng)的穩(wěn)定性。因此在軟件系統(tǒng)開發(fā)中,數(shù)據(jù)庫設(shè)計應(yīng)遵循必要的數(shù)據(jù)庫范式理論,以減少冗余、保證數(shù)據(jù)的完整性與正確性。只有在合適的數(shù)據(jù)庫產(chǎn)品上設(shè)計出合理的數(shù)據(jù)庫模型,才能降低整個系統(tǒng)的編程和維護(hù)難度,提高系統(tǒng)的實際運(yùn)行效率。雖然對于小型項目或中等規(guī)模的項目開發(fā)人員可以很容易地利用范式理論設(shè)計出一套符合要求的數(shù)據(jù)庫,但對于一個包含大型數(shù)據(jù)庫的軟件項目,就必須有一套完整的設(shè)計原則與技巧。1.成立數(shù)據(jù)小組大型數(shù)據(jù)庫數(shù)據(jù)元素多,在設(shè)計上有必要成立專門的數(shù)據(jù)小組。由于數(shù)據(jù)庫設(shè)計者不一定是使用者,對系統(tǒng)設(shè)計中的數(shù)據(jù)元素不可能考慮周全,數(shù)據(jù)庫設(shè)計出來后,往往難以找到所需的庫表,因此數(shù)據(jù)小組最好由熟悉業(yè)務(wù)的項目骨干組成。數(shù)據(jù)小組的職能并非是設(shè)計數(shù)據(jù)庫,而是通過需求分析,在參考其他相似系統(tǒng)的基礎(chǔ)上,提取系統(tǒng)的基本數(shù)據(jù)元素,擔(dān)負(fù)對數(shù)據(jù)庫的審核。審核內(nèi)容包括:審核新的數(shù)據(jù)庫元素是否完全、能否實現(xiàn)全部業(yè)務(wù)需求;對舊數(shù)據(jù)庫(如果存在舊系統(tǒng))進(jìn)行分析及數(shù)據(jù)轉(zhuǎn)換;對數(shù)據(jù)庫設(shè)計進(jìn)行審核、控制及必要調(diào)整。2.設(shè)計原則數(shù)據(jù)庫設(shè)計應(yīng)遵循以下設(shè)計原則:(1)規(guī)范命名。所有的庫名、表名、域名必須遵循統(tǒng)一的命名規(guī)則,并進(jìn)行必要說明,以方便設(shè)計、維護(hù)和查詢。(2)控制字段的引用。在設(shè)計時,可以選擇適當(dāng)?shù)臄?shù)據(jù)庫設(shè)計管理工具,以方便開發(fā)人員的分布式設(shè)計和數(shù)據(jù)小組的集中審核管理。采用統(tǒng)一的命名規(guī)則,如果設(shè)計的字段已經(jīng)存在,則可直接引用;否則,應(yīng)重新設(shè)計。(3)庫表重復(fù)控制。在設(shè)計過程中,如果發(fā)現(xiàn)大部分字段都已存在,則開發(fā)人員應(yīng)懷疑所設(shè)計的庫表是否已存在。通過對字段所在庫表及相應(yīng)設(shè)計人員的查詢,可以確認(rèn)庫表是否確實重復(fù)。(4)并發(fā)控制。設(shè)計中應(yīng)進(jìn)行并發(fā)控制,即對于同一個庫表,在同一時間只有一個人有控制權(quán),其他人只能進(jìn)行查詢。(5)必要的討論。數(shù)據(jù)庫設(shè)計完成后,數(shù)據(jù)小組應(yīng)與相關(guān)人員進(jìn)行討論,通過討論來熟悉數(shù)據(jù)庫,從而對設(shè)計中存在的問題進(jìn)行控制或從中獲取數(shù)據(jù)庫設(shè)計的必要信息。(6)數(shù)據(jù)小組的審核。庫表的定版、修改,最終都要通過數(shù)據(jù)小組的審核,以保證符合必要的要求。(7)頭文件處理。每次數(shù)據(jù)修改后,數(shù)據(jù)小組要對相應(yīng)的頭文件進(jìn)行修改(可由管理軟件自動完成)并通知相關(guān)的開發(fā)人員,以便進(jìn)行相應(yīng)的程序修改。3.設(shè)計技巧數(shù)據(jù)庫設(shè)計有以下設(shè)計技巧:(1)分類拆分?jǐn)?shù)據(jù)量大的表。(2)索引設(shè)計。(3)數(shù)據(jù)操作的優(yōu)化。(4)數(shù)據(jù)庫參數(shù)的調(diào)整。(5)必要的工具。(6)避免長事務(wù)。(7)適當(dāng)超前。5.7.2數(shù)據(jù)庫設(shè)計過程數(shù)據(jù)庫設(shè)計的主要過程可分為6個階段:需求分析階段、概念結(jié)構(gòu)設(shè)計階段、邏輯結(jié)構(gòu)設(shè)計階段、數(shù)據(jù)庫物理設(shè)計階段、數(shù)據(jù)庫實施階段以及數(shù)據(jù)庫運(yùn)行和維護(hù)階段。每個階段的任務(wù)如圖5.40所示。1.概念結(jié)構(gòu)設(shè)計概念結(jié)構(gòu)設(shè)計要借助于某種方便又直觀的描述工具。E-R(實體-聯(lián)系)圖是設(shè)計概念模型的有力工具。E-R圖用于表示應(yīng)用領(lǐng)域中的實體及其相互關(guān)系。實體指的是一切事物,如學(xué)生、課程、教師、機(jī)器、零件等。聯(lián)系是指實現(xiàn)世界中事物之間的相互聯(lián)系。在信息領(lǐng)域中,像學(xué)生和課程這樣的實體被稱為客觀實體,而事物之間的聯(lián)系被稱為聯(lián)系實體??陀^實體和聯(lián)系實體都擁有自己的性質(zhì),被稱為屬性。無論客觀實體還是聯(lián)系實體,在關(guān)系模型中都用關(guān)系的一個元組表示。一旦完成了E-R圖,就能很容易甚至機(jī)械地變換成關(guān)系模型中的一些關(guān)系模式結(jié)構(gòu)。在E-R圖中,用3種圖形分別表示實體、屬性和實體之間的聯(lián)系,其規(guī)定如下:(1)用矩形框表示實體,框內(nèi)標(biāo)明實體名。(2)用橢圓形框表示實體的屬性,框內(nèi)標(biāo)明屬性名。(3)用菱形框表示實體間的聯(lián)系,框內(nèi)標(biāo)明聯(lián)系名。(4)實體與其屬性之間以無向邊連接,菱形框與相關(guān)實體之間也用無向邊連接,并在無向邊旁邊標(biāo)明聯(lián)系的類型。用E-R圖可以簡單明了地描述實體及其相互之間的聯(lián)系。實體與實體之間的聯(lián)系可分為3種類型,即“一對一”的聯(lián)系、“一對多”的聯(lián)系及“多對多”的聯(lián)系。用E-R圖還可以方便地描述多個實體集之間的聯(lián)系和一個實體集內(nèi)部實體之間的聯(lián)系。當(dāng)實際問題比較復(fù)雜時,要選擇合適的層次來建立分E-R圖。利用E-R圖可以很方便地進(jìn)行概念結(jié)構(gòu)設(shè)計。概念結(jié)構(gòu)設(shè)計是對實體的抽象過程,這個過程一般通過以下3個步驟來完成。1)建立分E-R圖建立分E-R圖的主要工作是對需求分析階段收集到的數(shù)據(jù)進(jìn)行分類、組織,劃分實體和屬性,確定實體之間的聯(lián)系。實體和屬性之間在形式上并沒有可以截然劃分的界限,而常常是現(xiàn)實對它們的存在所作的大概的自然劃分。這種劃分隨應(yīng)用環(huán)境的不同而不同,在給定的應(yīng)用環(huán)境下,劃分實體和屬性的原則如下:(1)屬性與其所描述的實體之間的聯(lián)系只能是一對多的。(2)屬性本身不能再具有需要描述的性質(zhì)或與其他事物具有聯(lián)系。根據(jù)以上原則劃分屬性時,對于能作為屬性的應(yīng)盡量作為屬性而不劃分為實體,以簡化E-R圖。2)設(shè)計初步E-R圖建立了各分E-R圖以后,要對它們進(jìn)行綜合,即把各分E-R圖連接在一起。這一步的主要工作是找出各分E-R圖之間的聯(lián)系,而在確定各分E-R圖的聯(lián)系時,可能會遇到相互之間不一致的問題,稱之為沖

溫馨提示

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

評論

0/150

提交評論