《軟件工程與項目管理》課件-第5章_第1頁
《軟件工程與項目管理》課件-第5章_第2頁
《軟件工程與項目管理》課件-第5章_第3頁
《軟件工程與項目管理》課件-第5章_第4頁
《軟件工程與項目管理》課件-第5章_第5頁
已閱讀5頁,還剩116頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第5章軟件的總體設(shè)計

5.1總體設(shè)計的目標和任務(wù)5.2設(shè)計的概念和原則5.3描繪軟件結(jié)構(gòu)的圖形工具5.4結(jié)構(gòu)化設(shè)計5.5數(shù)據(jù)庫設(shè)計及設(shè)計原則5.6接口設(shè)計5.7總體設(shè)計說明書的編寫5.8實戰(zhàn)訓(xùn)練

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

5.1.1總體設(shè)計的目標

在軟件設(shè)計階段應(yīng)達到的目標是提高可靠性、可維護性、可理解性和效率,如圖5.1所示。圖5.1軟件設(shè)計的目標軟件設(shè)計的目標必須達到以下要求:

(1)軟件實體有明顯的層次結(jié)構(gòu),利于軟件元素間的控制。

(2)軟件實體應(yīng)該是模塊化的,模塊具有獨立功能。

(3)軟件實體與環(huán)境的界面清晰。

(4)設(shè)計規(guī)格說明清晰、簡潔、完整并無二義性。5.1.2總體設(shè)計的任務(wù)和步驟

在總體設(shè)計過程中要先進行系統(tǒng)設(shè)計,復(fù)審系統(tǒng)計劃與需求分析,確定系統(tǒng)具體的實施方案,然后進行結(jié)構(gòu)設(shè)計,確定軟件結(jié)構(gòu)??傮w設(shè)計的一般步驟如下:

(1)設(shè)計系統(tǒng)方案。

(2)選取一組合理的方案。

(3)推薦最佳實施方案。

(4)功能分解。

(5)設(shè)計軟件結(jié)構(gòu)。

(6)設(shè)計數(shù)據(jù)庫和文件結(jié)構(gòu)。

(7)制定測試計劃。

(8)編寫概要設(shè)計文檔。

(9)審查與復(fù)審概要設(shè)計文檔。圖5.2總體設(shè)計的流程示意圖 5.2設(shè)計的概念和原則

5.2.1模塊化

模塊是數(shù)據(jù)說明、可執(zhí)行語句等程序?qū)ο蟮募?,它是單獨命名的,而且可通過名字來訪問。例如,過程、函數(shù)、對象、類等都可作為模塊。

模塊化是指解決一個復(fù)雜問題時自頂向下,逐步求精,把軟件系統(tǒng)劃分成若干模塊的過程。為了解決復(fù)雜問題,在軟件設(shè)計中必須把整個問題進行分解,將一個復(fù)雜問題變成多個簡單的問題,這樣便降低了問題的復(fù)雜度,使得設(shè)計過程較容易,設(shè)計出的軟件也容易閱讀和理解。模塊化是開發(fā)復(fù)雜的大型軟件系統(tǒng)必須采用的方法。模塊化可以使軟件結(jié)構(gòu)清晰,減少開發(fā)工作量,降低開發(fā)成本,提高軟件生產(chǎn)率,但是“模塊化”并不意味著模塊越多,劃分得越細就越好。模塊越多,模塊之間的接口就會越復(fù)雜,從而增加成本,降低效率。因此模塊數(shù)要適中。

事實上,模塊數(shù)目與成本存在如圖5.3所示的關(guān)系。

為了使復(fù)雜的大型程序能被人的智力所管理,模塊化應(yīng)是軟件必須具備的屬性。一個大型程序如果僅由一個模塊組成,將很難被人所理解。實際上,模塊化的依據(jù)是把復(fù)雜問題分解成許多容易解決的小問題,從而使原來的問題變得容易解決。如果無限地分割軟件,最后為了開發(fā)軟件而需要的工作量也就小得可以忽略了。但是還有一個因素在起作用,從而使得上述結(jié)論不能成立。如圖5.3所示,當模塊數(shù)目增加時每個模塊的規(guī)模將減小,開發(fā)單個模塊需要的成本(工作量)確實減少了。但是,隨著模塊的增加,設(shè)計模塊間接口所需要的工作量也將增加。根據(jù)這兩個因素得出圖5.3中的總成本曲線。從圖中可見,每個程序相應(yīng)地有一個最適當?shù)哪K數(shù)目M,使得系統(tǒng)的開發(fā)成本最小。雖然目前還不能精確地決定M的數(shù)值,但是在考慮模塊化的時候總成本曲線確實是有用的指南。圖5.3軟件數(shù)目與模塊成本的關(guān)系模塊化使程序錯誤通常局限在有關(guān)的模塊及它們之間的接口中,這使軟件容易測試和調(diào)試,因而有助于提高軟件的可靠性;修改軟件時變動往往也只涉及少數(shù)模塊,能夠提高軟件的可維護性。模塊化還有助于軟件開發(fā)工程的組織管理,一個復(fù)雜的大型程序可以由若干程序員分工編寫不同的模塊,并可進一步分配技術(shù)熟練的程序員編寫困難的模塊。5.2.2抽象

人類在認識復(fù)雜現(xiàn)象的過程中最強有力的思維工具是抽象。人們在實踐中認識到,現(xiàn)實世界中一定事物、狀態(tài)或過程之間總存在著某些共性。把這些共性集中和概括起來,暫時忽略它們之間的差異,這就是抽象。

由于人類思維能力的限制,如果每次面臨的因素太多,是不能做出精確思維的。處理復(fù)雜系統(tǒng)的唯一有效的方法是用層次的方式構(gòu)造和分析它。一個復(fù)雜的動態(tài)系統(tǒng)首先可以用一些高級的抽象概念構(gòu)造和理解,這些高級概念又可以用一些較低級的概念構(gòu)造和理解,如此進行下去,直至最低層次的具體元素。這種層次式的思維和解題方式必須反映在定義動態(tài)系統(tǒng)的程序結(jié)構(gòu)之中,每級的一個概念將以某種方式對應(yīng)于程序的一組成分。當考慮對任何問題的模塊化解法時,可以提出許多不同的抽象層次。在最高層次使用問題環(huán)境的語言,以概括的方式敘述問題的解法。在中間層次采用更過程化的方法,把面向問題術(shù)語和面向?qū)崿F(xiàn)術(shù)語結(jié)合起來敘述問題解法。在最低抽象層次用可以直接實現(xiàn)的方式敘述問題的解法。軟件開發(fā)過程的每一步都是對軟件解法的抽象層次的一次精化。在問題定義研究階段,軟件是系統(tǒng)的一個完整部件;在需求分析期間,軟件解法是使用在問題環(huán)境內(nèi)的方式描述;當由總體設(shè)計向詳細設(shè)計過渡時,抽象的程度也隨之減少了;最后,當源程序?qū)懗鰜硪院?,也就到達了抽象的最低層。5.2.3逐步求精

逐步求精與模塊化以及抽象有著密切的聯(lián)系。在問題分解過程中,人們常采用逐步求精的做法。逐步求精既是人類解決復(fù)雜問題時采用的基本技術(shù)之一,也是軟件工程技術(shù)的基礎(chǔ)。所謂逐步求精,是“為了能集中精力解決主要問題而盡量推遲問題細節(jié)的考慮”??梢园阎鸩角缶暈橐环N技術(shù),即將在一個時期內(nèi)必須解決的各種問題按優(yōu)先級排序的技術(shù)。逐步求精應(yīng)確保每一個問題在適當?shù)臅r候得到解決。5.2.4信息隱藏和局部化

信息隱藏是指:在設(shè)計和確定模塊時,使得一個模塊內(nèi)包含的信息(過程和數(shù)據(jù))對于不需要這些信息的模塊來說是不能訪問的。

軟件設(shè)計應(yīng)該降低模塊與外部環(huán)境間的連接復(fù)雜性。為此,D.L.Parnas提出了信息隱藏的基本原則,其基本思想是:

(1)模塊內(nèi)部的數(shù)據(jù)和過程,對于那些不需要這些信息的模塊不可訪問;

(2)每一個模塊只完成一個相對獨立的特定功能;

(3)模塊之間只交換那些完成系統(tǒng)功能必須交換的信息。將信息隱藏作為模塊化系統(tǒng)設(shè)計的標準,為軟件測試和維護提供了極大的便利。由于信息被隱藏在模塊內(nèi)部,一個模塊變更時所引起的錯誤不易傳播到軟件的其他模塊。

局部化的概念和信息隱藏概念是密切相關(guān)的。局部化是指把一些關(guān)系密切的軟件元素物理地放得很近。模塊中使用局部數(shù)據(jù)元素是局部化的一個例子。顯然,局部化有助于實現(xiàn)信息隱藏?!半[藏”意味著有效的模塊化可以通過定義一組獨立的模塊來實現(xiàn),這些獨立的模塊彼此只交換那些為了完成系統(tǒng)功能而必須交換的信息。5.2.5模塊獨立性

所謂模塊的獨立性,是指軟件系統(tǒng)中每個模塊只涉及軟件要求的具體的子功能,而和軟件系統(tǒng)中其他模塊的接口是簡單的。若一個模塊只具有單一的功能且與其他模塊沒有太多的聯(lián)系,那么,我們則稱此模塊具有模塊獨立性。

一般采用兩個準則度量模塊獨立性,即模塊的內(nèi)聚性和模塊間的耦合性。

1.內(nèi)聚性

內(nèi)聚性是對模塊功能強度(一個模塊內(nèi)部各個元素彼此結(jié)合的緊密程度)的度量。一個內(nèi)聚程度高的模塊(在理想情況下)應(yīng)當只做一件事。一般模塊的內(nèi)聚性分為七種類型,如圖5.4所示。圖5.4內(nèi)聚性的分類從上面的關(guān)系中可以看到,位于高端的幾種內(nèi)聚類型最好,位于中端的幾種內(nèi)聚類型是可以接受的,但位于低端的內(nèi)聚類型很不好,一般不能使用。因此,人們總是希望一個模塊的內(nèi)聚類型向高的方向靠。模塊的內(nèi)聚性在系統(tǒng)的模塊化設(shè)計中是一個關(guān)鍵的因素。

(1)巧合內(nèi)聚(偶然內(nèi)聚)。當幾個模塊內(nèi)湊巧有一些程序段的代碼相同,又沒有明確表現(xiàn)出獨立的功能時,把這些代碼獨立出來建立的模塊即為巧合內(nèi)聚模塊。它是內(nèi)聚程度最低的模塊。其缺點是模塊的內(nèi)容不易理解,模塊不易修改和維護。

(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)聚程度又稍高一些。在一般情況下,時間內(nèi)聚模塊各部分可以以任意的順序執(zhí)行,所以它的內(nèi)部邏輯更簡單。

(4)過程內(nèi)聚。使用流程圖作為工具設(shè)計程序時,常常通過流程圖來確定模塊劃分。把流程圖中的某一部分劃出組成模塊,就得到過程內(nèi)聚模塊。這類模塊的內(nèi)聚程度比時間內(nèi)聚模塊的內(nèi)聚程度更強一些。

(5)通信內(nèi)聚。如果一個模塊內(nèi)各功能部分都使用了相同的輸入數(shù)據(jù)或產(chǎn)生了相同的輸出數(shù)據(jù),則稱之為通信內(nèi)聚模塊。通常,通信內(nèi)聚模塊是通過數(shù)據(jù)流圖來定義的,如圖5.5所示。圖5.5通信內(nèi)聚模塊

(6)信息內(nèi)聚(順序內(nèi)聚)。這種模塊完成多個功能,各個功能都在同一數(shù)據(jù)結(jié)構(gòu)上操作,每一項功能有一個唯一的入口點。例如,圖5.6所示的模塊具有4個功能,由于模塊的所有功能都基于同一個數(shù)據(jù)結(jié)構(gòu)(符號表),因此,它是一個信息內(nèi)聚的模塊。

信息內(nèi)聚模塊可以看成是多個功能內(nèi)聚模塊的組合,而且達到了信息的隱藏,即把某個數(shù)據(jù)結(jié)構(gòu)、資源或設(shè)備隱藏在一個模塊內(nèi),不為別的模塊所知曉。當把程序某些方面的細節(jié)隱藏在一個模塊中時,就增加了模塊的獨立性。圖5.6信息內(nèi)聚模塊

(7)功能內(nèi)聚。若一個模塊中各個部分都是為完成一項具體功能而協(xié)同工作、緊密聯(lián)系、不可分割的,則稱該模塊為功能內(nèi)聚模塊。功能內(nèi)聚模塊是內(nèi)聚性最強的模塊。

2.耦合性

耦合性是對模塊之間的相對獨立性(互相連接的緊密程度)的度量。它取決于各個模塊之間接口的復(fù)雜程度、調(diào)用模塊的方式以及哪些信息通過接口。

一般模塊之間可能的連接方式有七種,構(gòu)成耦合性的七種類型。不同類型耦合的強弱關(guān)系如圖5.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所示。圖5.8公共耦合

(3)外部耦合。若一組模塊都訪問同一全局簡單變量而不是同一全局數(shù)據(jù)結(jié)構(gòu),而且不是通過參數(shù)表傳遞該全局變量的信息,則這些模塊間的耦合稱為外部耦合。

(4)控制耦合。如果一個模塊通過傳送開關(guān)、標志、名字等控制信息,明顯地控制選擇另一模塊的功能,則它們之間的耦合稱為控制耦合,如圖5.9所示。

(5)標記耦合。如果一組模塊通過參數(shù)表傳遞記錄信息,則它們之間的耦合稱為標記耦合。事實上,這組模塊共享了某一數(shù)據(jù)結(jié)構(gòu)的子結(jié)構(gòu),而不是簡單變量。這就要求這些模塊都必須清楚該記錄的結(jié)構(gòu),并按結(jié)構(gòu)要求對記錄進行操作。圖5.9控制耦合

(6)數(shù)據(jù)耦合。如果一個模塊訪問另一個模塊時,彼此之間通過數(shù)據(jù)參數(shù)(不是控制參數(shù)、公共數(shù)據(jù)結(jié)構(gòu)或外部變量)來交換輸入、輸出信息,而且交換的信息僅限于數(shù)據(jù),則稱這種耦合為數(shù)據(jù)耦合。數(shù)據(jù)耦合是松散的耦合,模塊之間的獨立性比較強。

(7)非直接耦合。如果兩個模塊之間沒有直接關(guān)系,它們之間的聯(lián)系完全是通過主模塊的控制和調(diào)用來實現(xiàn)的,那它們之間就是非直接耦合。這種耦合的模塊獨立性最強。

實際上,開始時兩個模塊之間的耦合不只是一種類型,而是多種類型的混合。這就要求設(shè)計人員進行分析、比較,逐步加以改進,以提高模塊的獨立性。 5.3描繪軟件結(jié)構(gòu)的圖形工具

5.3.1HIPO圖

HIPO圖(HierachicalInputProcessOutput,分層的輸入處理輸出圖)是由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.10是一個層次圖的例子。為了使HIPO圖具有可追蹤性,在H圖里除了頂層的方框之外,每個圖框都加了編號。例如,把圖5.10加了編號之后得到圖5.11。層次圖適合于在自頂向下設(shè)計軟件的過程中使用。圖5.10考務(wù)管理系統(tǒng)的H圖圖5.11加編號的考務(wù)管理系統(tǒng)的H圖

2.IPO圖

IPO圖是輸入/處理/輸出圖的簡稱,它是用來描繪加工說明的圖形工具。IPO圖包括三個矩形框,左邊框列出所有輸入數(shù)據(jù),中間框列出主要處理,右邊框列出輸出數(shù)據(jù),三個框中間用空心箭頭指出數(shù)據(jù)通信情況。如圖5.12中給出了主文件更新的IPO圖。圖5.12IPO圖實例

IPO圖能夠方便、清晰地描繪出模塊的輸入數(shù)據(jù)、加工和輸出數(shù)據(jù)之間的關(guān)系。與H圖中的每個圖框相對應(yīng),應(yīng)該有一張IPO圖描述這個圖框代表的模塊的處理過程,作為對層次圖中內(nèi)容的補充說明。每張IPO圖內(nèi)都應(yīng)該明顯地標出它所描繪的模塊在H圖中的編號,以便確定這個模塊在軟件結(jié)構(gòu)中的位置。

IPO圖的基本形式為:在圖中左邊的框中列出模塊涉及的所有輸入數(shù)據(jù),在中間的框中列出主要的加工,在右邊的框中列出處理后產(chǎn)生的輸出數(shù)據(jù);圖中的箭頭用于指明輸入數(shù)據(jù)、加工和輸出結(jié)果之間的關(guān)系。考務(wù)管理系統(tǒng)中的考務(wù)處理模塊的IPO圖如圖5.13所示。圖5.13考務(wù)管理系統(tǒng)中的考務(wù)處理模塊的IPO圖5.3.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é)果。

系統(tǒng)結(jié)構(gòu)圖中的基本符號和含義如表5.1所示。

表5.1系統(tǒng)結(jié)構(gòu)圖中的基本符號和含義 5.4結(jié)?構(gòu)?化?設(shè)?計

從系統(tǒng)設(shè)計的角度出發(fā),軟件設(shè)計方法可以分為三大類:第一類根據(jù)系統(tǒng)的數(shù)據(jù)流進行設(shè)計,稱為面向數(shù)據(jù)流的設(shè)計或者過程驅(qū)動的設(shè)計,以結(jié)構(gòu)化設(shè)計(StructuredDesign,SD)方法為代表;第二類根據(jù)系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)進行設(shè)計,稱為面向數(shù)據(jù)結(jié)構(gòu)的設(shè)計或者數(shù)據(jù)驅(qū)動的設(shè)計,以LCP(程序邏輯構(gòu)造)方法、Jackson系統(tǒng)開發(fā)方法和數(shù)據(jù)結(jié)構(gòu)化系統(tǒng)開發(fā)(DSSD)方法為代表;第三類設(shè)計方法即面向?qū)ο蟮脑O(shè)計。結(jié)構(gòu)化設(shè)計方法是在模塊化、自頂向下逐步細化、結(jié)構(gòu)化程序設(shè)計等程序設(shè)計技術(shù)基礎(chǔ)上發(fā)展起來的。該方法實施的要點是:①建立數(shù)據(jù)流的類型;②指明流的邊界;③將數(shù)據(jù)流圖映射為程序結(jié)構(gòu);④用“因子化”方法定義控制的層次結(jié)構(gòu);⑤用設(shè)計測量和一些啟發(fā)式規(guī)則對結(jié)構(gòu)進行細化。圖5.14面向數(shù)據(jù)流設(shè)計的流程圖5.4.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)。一般地,在系統(tǒng)結(jié)構(gòu)圖中有4種類型的模塊(見圖5.15):

■傳入模塊:從下屬模塊取得數(shù)據(jù),經(jīng)過某些處理,再將其傳送給上級模塊。

■傳出模塊:從上級模塊獲得數(shù)據(jù),進行某些處理,再將其傳送給下屬模塊?!鲎儞Q模塊:加工模塊。它從上級模塊取得數(shù)據(jù),進行特定的處理,轉(zhuǎn)換成其他形式,再傳送回上級模塊。大多數(shù)計算模塊(原子模塊)屬于這一類。

■協(xié)調(diào)模塊:對所有下屬模塊進行協(xié)調(diào)和管理的模塊。在系統(tǒng)的輸入/輸出部分或數(shù)據(jù)加工部分可以找到這樣的模塊。在一個好的系統(tǒng)結(jié)構(gòu)圖中,協(xié)調(diào)模塊應(yīng)在較高層出現(xiàn)。

在實際系統(tǒng)中,有些模塊屬于上述某一類型,還有一些模塊是上述各種類型的組合。圖5.15系統(tǒng)結(jié)構(gòu)圖的四種模塊類型5.4.2變換型數(shù)據(jù)流與變換型系統(tǒng)結(jié)構(gòu)

變換型數(shù)據(jù)流處理問題的工作過程大致分為三步,即取得數(shù)據(jù)、變換數(shù)據(jù)和給出數(shù)據(jù),如圖5.16所示。這三步反映了變換型問題數(shù)據(jù)流的基本思想。其中,變換數(shù)據(jù)是數(shù)據(jù)處理過程的核心工作,而取得數(shù)據(jù)只不過是為它做準備,給出數(shù)據(jù)則是對變換后的數(shù)據(jù)進行處理工作。圖5.16變換型數(shù)據(jù)流變換型系統(tǒng)結(jié)構(gòu)如圖5.17所示,對應(yīng)于取得數(shù)據(jù)、變換數(shù)據(jù)、給出數(shù)據(jù),系統(tǒng)的結(jié)構(gòu)圖由輸入、中心變換和輸出等三部分組成。圖5.17變換型系統(tǒng)結(jié)構(gòu)圖5.4.3事務(wù)流與事務(wù)型系統(tǒng)結(jié)構(gòu)

事務(wù)型數(shù)據(jù)處理問題的工作機理是接受一項事務(wù),根據(jù)事務(wù)處理的特點和性質(zhì),選擇分派一個適當?shù)奶幚韱卧缓蠼o出結(jié)果。我們把完成選擇分派任務(wù)的部分叫做事務(wù)處理中心或分派部件。這種事務(wù)型數(shù)據(jù)處理問題的數(shù)據(jù)流圖如圖5.18所示。其中,輸入數(shù)據(jù)流在事務(wù)中心T處做出選擇,激活某一種事務(wù)處理加工。D1~D4是并列的供選擇的事務(wù)處理加工。

事務(wù)型數(shù)據(jù)流圖所對應(yīng)的系統(tǒng)結(jié)構(gòu)圖就是事務(wù)型系統(tǒng)結(jié)構(gòu)圖,如圖5.19所示。圖5.18事務(wù)型數(shù)據(jù)流圖圖5.19事務(wù)型系統(tǒng)結(jié)構(gòu)圖在事務(wù)型系統(tǒng)結(jié)構(gòu)圖中,事務(wù)中心模塊按所接收的事務(wù)的類型,選擇某一個事務(wù)處理模塊執(zhí)行。各個事務(wù)處理模塊是并列的,依賴于一定的選擇條件,分別完成不同的事務(wù)處理工作。每個事務(wù)處理模塊可能要調(diào)用若干個操作模塊,而操作模塊又可能調(diào)用若干個細節(jié)模塊。不同的事務(wù)處理模塊可以共享一些操作模塊。同樣,不同的操作模塊又可以共享一些細節(jié)模塊。

事務(wù)型系統(tǒng)結(jié)構(gòu)圖在數(shù)據(jù)處理中經(jīng)常遇到,但是更多的是變換型與事務(wù)型系統(tǒng)結(jié)構(gòu)圖的結(jié)合。例如,變換型系統(tǒng)結(jié)構(gòu)中的某個變換模塊本身又具有事務(wù)型的特點。5.4.4變換映射

變換映射是系統(tǒng)結(jié)構(gòu)設(shè)計的一種策略。運用變換映射方法建立初始的變換型系統(tǒng)結(jié)構(gòu)圖,然后對它做進一步的改進,最后得到系統(tǒng)的最終結(jié)構(gòu)圖。設(shè)計的步驟如下。

步驟1:復(fù)審基本系統(tǒng)模型(0層數(shù)據(jù)流圖和支持信息)。評估系統(tǒng)規(guī)格說明和軟件需求規(guī)格說明。

步驟2:復(fù)審和細化軟件的數(shù)據(jù)流圖。重畫數(shù)據(jù)流圖時,可以從物理輸入到物理輸出,或者相反;還可以從頂層加工框開始,逐層向下。步驟3:確定數(shù)據(jù)流圖中是含有變換流特征還是含有事務(wù)流特征。通常,系統(tǒng)的信息流總能表示為變換型,但其中也可能遇到明顯的事務(wù)流特征,這時可采用變換型為主,在局部范圍采用事務(wù)型的設(shè)計方法。

步驟4:區(qū)分輸入流、輸出流和中心變換部分,即標明流的邊界。不同的設(shè)計人員可能選擇不同的流邊界,這將導(dǎo)致不同的系統(tǒng)結(jié)構(gòu)圖。

步驟5:進行一級“因子化”分解,設(shè)計頂層和第一層模塊。首先設(shè)計主模塊,用程序名字為它命名,將它畫在與中心變換相對應(yīng)的位置上。作為系統(tǒng)的頂層,它調(diào)用下層模塊,完成系統(tǒng)所要做的各項工作。系統(tǒng)結(jié)構(gòu)第一層的設(shè)計方針是:為每一個邏輯輸入設(shè)計一個輸入模塊,它為主模塊提供數(shù)據(jù);為每一個邏輯輸出設(shè)計一個輸出模塊,它將主模塊提供的數(shù)據(jù)輸出;為中心變換設(shè)計一個變換模塊,它將邏輯輸入轉(zhuǎn)換成邏輯輸出。第一層模塊與主模塊之間傳送的數(shù)據(jù)應(yīng)與數(shù)據(jù)流圖相對應(yīng)。步驟6:進行二級“因子化”分解,設(shè)計中、下層模塊。這一步工作是自頂向下、逐層細化,為每一個輸入模塊、輸出模塊、變換模塊設(shè)計它們的從屬模塊。

輸入模塊要向調(diào)用它的上級模塊提供數(shù)據(jù),因而它必須有兩個下屬模塊。其中,一個用來接收數(shù)據(jù),另一個用來把這些數(shù)據(jù)變換成它的上級模塊所需的數(shù)據(jù)。輸出模塊是從調(diào)用它的上級模塊接收數(shù)據(jù),用以輸出,因而也應(yīng)當有兩個下屬模塊:一個用來將上級模塊提供的數(shù)據(jù)變換成輸出的形式;另一個用來將它們輸出。中心變換模塊的下層模塊沒有通用的設(shè)計方法,一般應(yīng)參照數(shù)據(jù)流圖的中心變換部分和功能分解的原則來考慮如何對中心變換模塊進行分解。步驟7:利用一些啟發(fā)式原則來改進系統(tǒng)的初始結(jié)構(gòu)圖,直到得到符合要求的結(jié)構(gòu)圖為止。這些啟發(fā)式原則大致如下:

(1)模塊功能的完善化。一個完整的功能模塊不僅應(yīng)能完成指定的功能,而且還應(yīng)當能夠告訴使用者完成任務(wù)的狀態(tài)以及不能完成的原因。

(2)消除重復(fù)功能,改善軟件結(jié)構(gòu)。在系統(tǒng)的初始結(jié)構(gòu)圖得出之后,應(yīng)當審查、分析這個結(jié)構(gòu)圖。如果發(fā)現(xiàn)幾個模塊的功能有相似之處,可以加以改進。

(3)模塊的作用范圍應(yīng)在控制范圍之內(nèi)。模塊的控制范圍包括它本身及其所有的從屬模塊。模塊的作用范圍是指模塊內(nèi)一個判定的作用范圍,凡是受這個判定影響的所有模塊都屬于這個判定的作用范圍。如果一個判定的作用范圍包含在這個判定所在模塊的控制范圍之內(nèi),則這種結(jié)構(gòu)是簡單的,否則,它的結(jié)構(gòu)是復(fù)雜的。

(4)盡可能減少高扇出結(jié)構(gòu)。經(jīng)驗證明,一個設(shè)計得很好的軟件模塊結(jié)構(gòu),通常其上層扇出比較高,中層扇出較少,底層扇入到有高扇入的公用模塊中。

(5)避免或減少使用病態(tài)連接。應(yīng)限制使用直接病態(tài)連接(內(nèi)容耦合)、公共數(shù)據(jù)域病態(tài)連接(公共耦合)和通過通信模塊連接這三種病態(tài)連接。

(6)模塊的大小要適中。限制模塊的大小是減少復(fù)雜性的手段之一,因而要求把模塊的大小限制在一定的范圍之內(nèi)。通常規(guī)定其語句行數(shù)在50~100之間,最多不超過500行。

(7)設(shè)計功能可預(yù)測的模塊,但要避免過分受限制的模塊。一個功能可預(yù)測的模塊不論內(nèi)部處理細節(jié)如何,對于相同的輸入數(shù)據(jù),總能產(chǎn)生同樣的結(jié)果。但是,如果模塊內(nèi)部蘊藏有一些特殊的鮮為人知的功能,這個模塊就可能是不可預(yù)測的。對于這種模塊,如果調(diào)用者不小心使用,其結(jié)果將不可預(yù)測。調(diào)用者無法控制這個模塊的執(zhí)行,或者不能預(yù)知將會引起什么后果,最終會造成混亂。為了能夠適應(yīng)將來的變更,軟件模塊中局部數(shù)據(jù)結(jié)構(gòu)的大小應(yīng)當是可控制的,調(diào)用者可以通過模塊接口上的參數(shù)表或一些預(yù)定義外部參數(shù)來規(guī)定或改變局部數(shù)據(jù)結(jié)構(gòu)的大小。另外,控制流的選擇對于調(diào)用者來說應(yīng)當是可預(yù)測的,而與外界的接口應(yīng)當是靈活的。也可以用改變某些參數(shù)的值來調(diào)整接口的信息,以適應(yīng)未來的變更。

(8)軟件包應(yīng)滿足設(shè)計約束和可移植性。5.4.5事務(wù)映射

在很多應(yīng)用中,存在某種作業(yè)數(shù)據(jù)流,它可以引發(fā)一個或多個處理,這種數(shù)據(jù)流就叫做事務(wù)。與變換映射類似,事務(wù)映射也是從分析數(shù)據(jù)流圖開始,自頂向下、逐步分解地建立系統(tǒng)結(jié)構(gòu)圖的,所不同的是它們由數(shù)據(jù)流圖映射成的系統(tǒng)結(jié)構(gòu)圖不同。

步驟1:復(fù)審基本系統(tǒng)模型。

步驟2:復(fù)審和細化軟件的數(shù)據(jù)流圖。

步驟3:確定數(shù)據(jù)流圖中含有變換流特征還是含有事務(wù)流特征。以上三步與變換映射中的相應(yīng)工作相同。

步驟4:識別事務(wù)中心和每一條操作路徑上的流特征。事務(wù)中心通常位于幾條操作路徑的起始點上,可以從數(shù)據(jù)流圖上直接找出來。輸入路徑必須與其他所有操作路徑區(qū)分開來。

步驟5:將數(shù)據(jù)流圖映射到事務(wù)型系統(tǒng)結(jié)構(gòu)圖上。事務(wù)流映射到包含一個輸入分支和一個分類事務(wù)處理分支的程序結(jié)構(gòu)上。輸入分支結(jié)構(gòu)的開發(fā)與變換流的方法類似。分類事務(wù)處理分支結(jié)構(gòu)包含一個調(diào)度模塊,它調(diào)度和控制下屬的操作模塊。步驟6:“因子化”分解、細化該事務(wù)結(jié)構(gòu)和每一條操作路徑的結(jié)構(gòu)。每一條操作路徑的數(shù)據(jù)流圖有它自己的信息流特征,可以是變換流也可以是事務(wù)流。與每一條操作路徑相關(guān)的子結(jié)構(gòu)可以依照前面介紹的設(shè)計步驟進行開發(fā)。

步驟7:利用一些啟發(fā)式原則來改進系統(tǒng)的初始結(jié)構(gòu)圖。5.4.6“黑盒”技術(shù)的使用

在設(shè)計當前模塊時,先把這個模塊的所有下層模塊定義成“黑盒”,并在系統(tǒng)設(shè)計中利用它們,暫時不考慮它們的內(nèi)部結(jié)構(gòu)和實現(xiàn)方法。在這一步定義好的“黑盒”,由于已確定了它的功能和輸入、輸出,在下一步就可以對它們進行設(shè)計和加工。這樣,又會導(dǎo)致更多的“黑盒”。最后,全部“黑盒”的內(nèi)容和結(jié)構(gòu)應(yīng)完全被確定。這就是我們所說的自頂向下、逐步求精的過程。使用黑盒技術(shù)的主要好處是使設(shè)計人員可以只關(guān)心當前的有關(guān)問題,暫時不必考慮進一步的瑣碎的次要細節(jié),待進一步分解時才去關(guān)心它們的內(nèi)部細節(jié)與結(jié)構(gòu)。 5.5數(shù)據(jù)庫設(shè)計及設(shè)計原則

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

數(shù)據(jù)庫結(jié)構(gòu)的設(shè)計是信息系統(tǒng)應(yīng)用開發(fā)的核心環(huán)節(jié)。數(shù)據(jù)庫結(jié)構(gòu)若設(shè)計合理,將會使操作數(shù)據(jù)庫的應(yīng)用程序具有穩(wěn)定性、靈活性,因而更容易開發(fā)。若設(shè)計的數(shù)據(jù)庫結(jié)構(gòu)不合理,在其基礎(chǔ)上開發(fā)的應(yīng)用程序?qū)⒕哂信c上述相反的結(jié)論。例如經(jīng)常有人將學(xué)生成績的關(guān)系模式設(shè)計為:

成績(學(xué)號、姓名、語文、數(shù)學(xué)、英語)

1.關(guān)系模式的設(shè)計

E-R圖用于表示應(yīng)用領(lǐng)域中的實體及其相互關(guān)系。實體指的是一切事物,例如學(xué)生、課程、教師、機器和零件等。聯(lián)系是指現(xiàn)實世界中事物之間的相互聯(lián)系。在信息領(lǐng)域,將學(xué)生和課程這樣的實體稱為客觀實體,而將事物之間的聯(lián)系又稱為聯(lián)系實體??陀^實體和聯(lián)系實體都擁有自己的性質(zhì),被稱為屬性。不論客觀實體還是聯(lián)系實體,在關(guān)系模型中都用關(guān)系的一個元組表示。一旦完成了E-R圖,就能很容易,甚至是機械地將其變換成關(guān)系模型中的一些關(guān)系模式結(jié)構(gòu)。在E-R圖中,實體用矩形表示,其中寫屬性名。在聯(lián)系上要注明實體之間的對應(yīng)關(guān)系是1對1、1對多還是多對多。圖5.20的E-R圖表明一個學(xué)生只能注冊在一個班級,一個班級可有多個學(xué)生;一個學(xué)生可學(xué)習(xí)多門功課,而一門課程可由多個學(xué)生學(xué)習(xí);一個教師可講授多個班級、多門課程,而一個班級、一門課程只能由一個老師講授。圖5.20教學(xué)環(huán)境簡化的E-R圖

E-R圖轉(zhuǎn)換成關(guān)系模式是機械式的,例如對于學(xué)生實體可得關(guān)系模式如下:

學(xué)生(學(xué)號、姓名、性別)

其中用下劃線標識的屬性為該關(guān)系的主關(guān)鍵字。對于聯(lián)系實體,如學(xué)習(xí)可得關(guān)系模式:

學(xué)習(xí)(學(xué)號、課號、學(xué)期、成績)

其中主關(guān)鍵字為學(xué)號、課號、學(xué)期,稱為組合關(guān)鍵字,它由參與的實體的關(guān)鍵字和成績構(gòu)成。對于注冊這個聯(lián)系,由于其實體間對應(yīng)關(guān)系為1對多,因此該聯(lián)系將不生成一個獨立的關(guān)系模式,而是將班級實體的關(guān)鍵字加入到學(xué)生關(guān)系中,即在學(xué)生的關(guān)系模式中增加一個屬性:班號,用以表示這個聯(lián)系。在繪制E-R圖時應(yīng)該避免一種明顯的錯誤,即不能把計算或處理的名字作為聯(lián)系的名字?,F(xiàn)實世界中確實存在一些實體,它們之間存在某種計算的關(guān)系,即通過某種計算或處理而得到另一個實體。這種關(guān)系不應(yīng)畫成聯(lián)系,因為我們無法將其變換成一個關(guān)系,即它們的實質(zhì)是過程而不是數(shù)據(jù)。由于現(xiàn)實世界是復(fù)雜的,現(xiàn)行的E-R圖難以表達它們,例如學(xué)生中有三好學(xué)生,教師中有先進教師,這些數(shù)據(jù)的組織與表達超出了E-R圖的范圍。

在關(guān)系數(shù)據(jù)庫結(jié)構(gòu)設(shè)計過程中,一個重要問題就是要正確運用關(guān)系的規(guī)范化理論,至少保證每個關(guān)系模式都是第三范式,否則會導(dǎo)致數(shù)據(jù)庫中數(shù)據(jù)的不合理冗余,甚至導(dǎo)致數(shù)據(jù)庫中數(shù)據(jù)的不一致性。

2.共享數(shù)據(jù)庫設(shè)計

在信息系統(tǒng)應(yīng)用中,各子系統(tǒng)之間沒有控制聯(lián)系,各子系統(tǒng)之間的協(xié)調(diào)是通過對其共享數(shù)據(jù)庫的存取實現(xiàn)的。因此,共享數(shù)據(jù)庫的設(shè)計成為各子系統(tǒng)相互協(xié)調(diào)的基礎(chǔ)。共享數(shù)據(jù)庫設(shè)計的任務(wù)是在數(shù)據(jù)庫結(jié)構(gòu)設(shè)計的基礎(chǔ)上進一步確定哪些關(guān)系及屬性應(yīng)該是共享的,由哪個(或哪些)子系統(tǒng)共享,共享的方式是讀共享還是寫共享。這些內(nèi)容將作為用戶視圖設(shè)計的依據(jù),在實現(xiàn)階段中為每項需共享數(shù)據(jù)的子系統(tǒng)建立相應(yīng)的用戶視圖。確定共享數(shù)據(jù)庫的依據(jù)是每個子系統(tǒng)數(shù)據(jù)流圖的總體圖。在用戶需求分析階段已經(jīng)為每個子系統(tǒng)生成了用數(shù)據(jù)流圖表示的邏輯模型和物理模型,其中總體圖表明了該子系統(tǒng)與周圍環(huán)境的相互作用??傮w圖中的出弧數(shù)據(jù)流為提供給所指向子系統(tǒng)的共享數(shù)據(jù);入弧數(shù)據(jù)流表示從相應(yīng)子系統(tǒng)取得的共享數(shù)據(jù)。將這些信息綜合起來,去除矛盾的,補充遺漏的,就可以得到該應(yīng)用系統(tǒng)的共享數(shù)據(jù)庫的全部信息。5.5.2數(shù)據(jù)庫設(shè)計的原則

目前,計算機技術(shù)已經(jīng)廣泛地應(yīng)用于國民經(jīng)濟的各個領(lǐng)域中,在計算機硬件不斷微型化的同時,應(yīng)用系統(tǒng)也逐漸向著復(fù)雜化、大型化的方向發(fā)展。數(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)的編程和維護難度,提高系統(tǒng)的實際運行效率。雖然對于小項目或中等規(guī)模的項目,開發(fā)人員可以很容易地利用范式理論設(shè)計出一套符合要求的數(shù)據(jù)庫,但對于一個包含大型數(shù)據(jù)庫的軟件項目,就必須先成立數(shù)據(jù)小組,再按照一套完整的設(shè)計原則與技巧來設(shè)計數(shù)據(jù)庫。

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ù)元素,擔負對數(shù)據(jù)庫的審核。審核內(nèi)容包括:審核新的數(shù)據(jù)庫元素是否完全,能否實現(xiàn)全部業(yè)務(wù)需求;對舊數(shù)據(jù)庫(如果存在舊系統(tǒng))的分析及數(shù)據(jù)轉(zhuǎn)換;數(shù)據(jù)庫設(shè)計的審核、控制及必要的調(diào)整。

2.設(shè)計原則

(1)規(guī)范命名。所有的庫名、表名、域名必須遵循統(tǒng)一的命名規(guī)則,并進行必要說明,以方便設(shè)計、維護、查詢。

(2)控制字段的引用。在設(shè)計時,可以選擇適當?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è)計人員的查詢,可以確認庫表是否確實重復(fù)。

(4)并發(fā)控制。設(shè)計中應(yīng)進行并發(fā)控制,即對于同一個庫表,在同一時間只有一個用戶有控制權(quán),其他人只能進行查詢。

(5)必要的討論。數(shù)據(jù)庫設(shè)計完成后,數(shù)據(jù)小組應(yīng)與相關(guān)人員進行討論,通過討論來熟悉數(shù)據(jù)庫,從而對設(shè)計中存在的問題進行控制或從中獲取數(shù)據(jù)庫設(shè)計的必要信息。

(6)數(shù)據(jù)小組的審核。庫表的修改和確定最終都要通過數(shù)據(jù)小組的審核,以保證符合必要的要求。

(7)頭文件處理。每次修改數(shù)據(jù)后,數(shù)據(jù)小組要對相應(yīng)的頭文件進行修改(可由管理軟件自動完成),并通知相關(guān)的開發(fā)人員,以便進行相應(yīng)的程序修改。

3.設(shè)計技巧

(1)分類拆分數(shù)據(jù)量大的表。對于經(jīng)常使用的表(如某些參數(shù)表或代碼對照表),由于其使用頻率很高,要盡量減少表中的記錄數(shù)量。例如,若將銀行的戶主賬表設(shè)計成一張表,雖然可以方便程序的設(shè)計與維護,但經(jīng)過分析發(fā)現(xiàn),由于數(shù)據(jù)量太大,會影響數(shù)據(jù)的迅速定位。而若將戶主賬表分別設(shè)計為活期戶主賬、定期戶主賬及對公戶主賬等,則可以大大提高查詢效率。

(2)索引設(shè)計。對于大的數(shù)據(jù)庫表,合理的索引能夠提高整個數(shù)據(jù)庫的操作效率。在索引設(shè)計中,索引字段應(yīng)挑選重復(fù)值較少的字段;在對建有復(fù)合索引的字段進行檢索時,應(yīng)注意按照復(fù)合索引字段建立的順序進行。例如,對一個有5萬多條記錄的流水表,若以日期和流水號為序建立復(fù)合索引,由于在該表中日期的重復(fù)值接近整個表的記錄數(shù),用流水號進行查詢所用的時間接近3秒;而如果以流水號為索引字段建立索引進行相同的查詢,則所用時間不到1秒。因此在大型數(shù)據(jù)庫設(shè)計中,只有進行合理的索引字段選擇,才能有效提高整個數(shù)據(jù)庫的操作效率。

(3)數(shù)據(jù)操作的優(yōu)化。在大型數(shù)據(jù)庫中,如何提高數(shù)據(jù)操作效率值得關(guān)注。例如,每在數(shù)據(jù)庫流水表中增加一筆業(yè)務(wù),就必須從流水控制表中取出流水號,并將其流水號的數(shù)值加一。正常情況下,單筆操作的反應(yīng)速度尚屬正常,但當用它進行批量業(yè)務(wù)處理時,速度會明顯減慢。經(jīng)過分析發(fā)現(xiàn),每次對流水控制表中的流水號數(shù)值加1時都要鎖定該表,而該表卻是整個系統(tǒng)操作的核心,有可能在操作時被其他進程鎖定,因而使整個事務(wù)操作速度變慢。對這一問題的解決辦法是,根據(jù)批量業(yè)務(wù)的總筆數(shù)批量申請流水號,并對流水控制表進行一次更新,即可提高批量業(yè)務(wù)處理的速度。另一個例子是對插表的優(yōu)化。對于大批量的業(yè)務(wù)處理,如果在插入數(shù)據(jù)庫表時用普通的Insert語句,速度會很慢。其原因在于,每次插表都要進行一次I/O操作,需花費較長的時間。改進后,可以用Put語句以緩沖區(qū)形式等滿頁后再進行I/O操作,從而提高效率。對大的數(shù)據(jù)庫表進行刪除時,一般會直接用Delete語句,這個語句雖然可以進行小表操作,但對大表操作卻會因帶來大事務(wù)而導(dǎo)致刪除速度很慢甚至失敗。簡單的解決方法是去掉事務(wù),但更有效的辦法是對表先進行Drop操作,再進行重建。

(4)數(shù)據(jù)庫參數(shù)的調(diào)整。數(shù)據(jù)庫參數(shù)的調(diào)整是一個經(jīng)驗不斷積累的過程,應(yīng)由有經(jīng)驗的系統(tǒng)管理員完成。以Informix數(shù)據(jù)庫為例,記錄鎖的數(shù)目太少會造成鎖表的失??;邏輯日志的文件數(shù)目太少會造成插入大表失敗等,這些問題都應(yīng)根據(jù)實際情況進行必要的調(diào)整。

(5)必要的工具。在整個數(shù)據(jù)庫的開發(fā)與設(shè)計過程中,可以先開發(fā)一些小的應(yīng)用工具,如自動生成庫表的頭文件、插入數(shù)據(jù)的初始化、數(shù)據(jù)插入的函數(shù)封裝、錯誤跟蹤或自動顯示等,以此提高數(shù)據(jù)庫的設(shè)計與開發(fā)效率。

(6)避免長事務(wù)。對單個大表的刪除或插入操作會帶來長事務(wù),解決的辦法是對參數(shù)進行調(diào)整,也可以在插入時對文件進行分割。對于一個由一系列小事務(wù)順序操作共同構(gòu)成的長事務(wù)(如銀行交易系統(tǒng)的日終交易),可以由一系列操作完成整個事務(wù),但其缺點是有可能因整個事務(wù)太大而不能完成,或者由于偶然的意外而使事務(wù)重做所需的時間太長。較好的解決方法是,把整個事務(wù)分解成幾個較小的事務(wù),再由應(yīng)用程序控制整個系統(tǒng)的流程。這樣,如果其中某個事務(wù)不成功,則只需重做該事務(wù),這樣既可節(jié)約時間,又可避免長事務(wù)。

(7)適當超前。計算機技術(shù)發(fā)展日新月異,數(shù)據(jù)庫的設(shè)計必須具有一定的前瞻性,不但要滿足當前的應(yīng)用要求,還要考慮未來的業(yè)務(wù)發(fā)展,同時必須有利于擴展或增加應(yīng)用系統(tǒng)的處理功能。 5.6接口設(shè)計

5.6.1接口設(shè)計的描述

本節(jié)討論的接口設(shè)計主要包括以下三個方面:

(1)軟件構(gòu)件與構(gòu)件之間的接口設(shè)計,例如構(gòu)件之間的參數(shù)傳遞等。

(2)軟件內(nèi)部與協(xié)作系統(tǒng)之間的接口設(shè)計,例如構(gòu)件與其他外部實體的接口等。

(3)軟件與使用者之間的通信方式,例如用戶界面設(shè)計等。5.6.2用戶界面設(shè)計的主要問題

在設(shè)計用戶界面的過程中,一般總遇到下述四個問題:系統(tǒng)響應(yīng)時間、用戶幫助設(shè)施、出錯信息處理和命令交互。不幸的是,許多設(shè)計者直到設(shè)計過程后期才開始考慮這些問題,這樣往往導(dǎo)致不必要的反復(fù)、項目延期和用戶產(chǎn)生挫折感。最好在設(shè)計初期就考慮這些問題,這樣易修改,代價也低。

1.系統(tǒng)響應(yīng)時間

一般來說,系統(tǒng)響應(yīng)時間指從用戶完成某個控制動作(例如按回車鍵或點擊鼠標),到軟件給出預(yù)期的響應(yīng)(輸出或做動作)之間的這段時間。系統(tǒng)響應(yīng)時間過長是許多交互式系統(tǒng)用戶常抱怨的問題。

系統(tǒng)響應(yīng)時間有兩個重要屬性:長度和易變性。

如果系統(tǒng)響應(yīng)時間過長,用戶就會感到緊張和沮喪。但是,當用戶的工作速度是由人機界面決定的時候,系統(tǒng)響應(yīng)時間過短,會迫使用戶加快操作節(jié)奏,從而可能犯錯誤。易變性指系統(tǒng)響應(yīng)時間相對于平均響應(yīng)時間的偏差,在許多情況下,這是系統(tǒng)響應(yīng)時間的更重要的屬性。即使系統(tǒng)響應(yīng)時間較長,響應(yīng)時間易變性低也有助于用戶建立起穩(wěn)定的工作節(jié)奏。例如,穩(wěn)定時間在1s的響應(yīng)時間比從0.1~2.5s變化的響應(yīng)時間要好。用戶往往比較敏感,他們總是擔心響應(yīng)時間的變化暗示系統(tǒng)工作出現(xiàn)異常。

2.用戶幫助設(shè)施

交互式系統(tǒng)的每個用戶幾乎都需要幫助,當遇到復(fù)雜問題時甚至需要查看用戶手冊以得到答案。大多數(shù)現(xiàn)代軟件都提供聯(lián)機幫助設(shè)施,這使得用戶可以不離開用戶界面就能解決自己的問題。

常見的幫助設(shè)施有兩類:集成的和附加的。集成的幫助設(shè)施從一開始就設(shè)計在軟件里面,它通常對用戶工作是敏感的,因此用戶可以從與剛剛完成的操作有關(guān)的主題中選擇一個,請求幫助。顯然,這可以縮短用戶獲取幫助的時間,增加界面的友好性。附加的幫助設(shè)施是在系統(tǒng)建成后再添加到軟件中的,大多數(shù)情況下,它實際上是一種查詢能力有限的聯(lián)機用戶手冊。事實表明,集成的幫助設(shè)施優(yōu)于附加的幫助設(shè)施。具體設(shè)計幫助設(shè)施時,必須解決以下一系列問題:

(1)在用戶與系統(tǒng)交互期間,是否在任何時間都能獲得關(guān)于系統(tǒng)任何功能的幫助信息。有兩種選擇:提供部分功能的幫助信息和提供全部功能的幫助信息。

(2)用戶怎樣請求幫助,有三種選擇:幫助菜單、特殊功能鍵和Help命令。

(3)怎樣顯示幫助信息,有三種選擇:在獨立的窗口中顯示、指出參考某個文檔(不理想)和在屏幕固定位置顯示簡短提示。

(4)用戶怎樣返回到正常的交互方式,有兩種選擇:屏幕上的返回按鈕和功能鍵。

(5)怎樣組織幫助信息,有三種選擇:平面結(jié)構(gòu)(所有信息都通過關(guān)鍵字訪問)、信息的層次結(jié)構(gòu)(用戶可在該結(jié)構(gòu)中查到更詳細的信息)和超文本結(jié)構(gòu)。

3.出錯信息處理

出錯信息和警告信息是出現(xiàn)問題時交互式系統(tǒng)給出的“壞消息”。若出錯信息設(shè)計得不好,將向用戶提供無用的或誤導(dǎo)的信息,反而會增加用戶的挫折感。

一般來說,交互式系統(tǒng)給出的出錯信息或警告信息應(yīng)該具有以下屬性:

●信息應(yīng)該以用戶可以理解的術(shù)語描述問題。

●信息應(yīng)該提供有助于從錯誤中恢復(fù)的建設(shè)性意見。

●信息應(yīng)該指出錯誤可能導(dǎo)致哪些負面后果(例如破壞數(shù)據(jù)文件),以便用戶檢查是否出現(xiàn)了這些問題,并在確實出現(xiàn)問題時予以改正?!裥畔?yīng)該伴隨著聽覺上或視覺上的提示,也即在顯示信息時應(yīng)該同時發(fā)出警告聲,或者用閃爍方式顯示,或者用明顯表示出錯的顏色顯示。

●信息不能帶有指責色彩,即不能指責用戶。

當一旦出現(xiàn)問題時,有效的出錯信息能夠提高交互式系統(tǒng)的質(zhì)量,減少用戶的挫折感。

4.命令交互

命令行曾是用戶和系統(tǒng)軟件交互的最常用方式,而且也被廣泛地應(yīng)用于各種應(yīng)用軟件中?,F(xiàn)在面向窗口的、點擊和拾取方式的界面已經(jīng)減少了用戶對命令行的依賴,但許多高級用戶仍偏愛面向命令的交互方式。在多數(shù)情況下,用戶既可以從菜單中選擇軟件功能,也可通過鍵盤命令序列調(diào)用軟件功能。在提供命令交互方式時,必須考慮以下問題:

●是否每個菜單選項都有對應(yīng)的命令。

●采用何種命令形式,共有三種選擇:快捷鍵(例如Ctrl+P)、功能鍵和鍵入命令。

●學(xué)習(xí)和記憶命令的難度有多大,忘記了命令怎么辦。

●用戶是否可以定制或縮寫命令。在越來越多的應(yīng)用軟件中,界面設(shè)計者都提供了“命令宏機制”,使用這種機制用戶可以用自己定義的名字代表一個常用的命令序列。需要使用這個命令序列時,用戶無需依次鍵入每個命令,只需輸入命令宏的名字就可以順序執(zhí)行它所代表的全部命令。

在理想情況下,所有應(yīng)用軟件都有一致的命令使用方法。如果在一個應(yīng)用軟件中,命令Ctrl+D表示復(fù)制一個圖形對象,而在另一個應(yīng)用軟件中Ctrl+D命令的含義是刪除一個圖形對象,這顯然會使用戶感到困惑,并往往導(dǎo)致錯誤。一般情況下,在常用的應(yīng)用軟件中都采用了一致的快捷鍵來完成相同的功能,如用Ctrl+C表示復(fù)制,Ctrl+V表示粘貼,Ctrl+S表示保存,Ctrl+O表示打開。因此,所設(shè)計的軟件就不要別出心裁,另搞一套,這樣會使用戶感到無所適從。5.6.3人機界面設(shè)計過程

人機界面設(shè)計是一個迭代的過程,如圖5.21所示。通常先創(chuàng)建設(shè)計模型,再用原型實現(xiàn)這個模型,并由用戶試用和評估,然后根據(jù)用戶的意見進行修改,如此反復(fù)直至最后完成界面設(shè)計。圖5.21人機界面設(shè)計過程

1.任務(wù)分析與創(chuàng)建設(shè)計模型

在人機界面設(shè)計過程中先后涉及四個模型:設(shè)計者創(chuàng)建的設(shè)計模型、用戶模型、終端用戶對系統(tǒng)的假想和系統(tǒng)實現(xiàn)后的系統(tǒng)映像。這四個模型之間存在較多差異,設(shè)計界面時必須充分協(xié)調(diào),導(dǎo)出一致的界面。建立設(shè)計模型應(yīng)充分考慮用戶模型中給出的信息,如用戶的年齡、性別、心理情況、所受教育、文化、種族背景、動機、目的和個性等;系統(tǒng)映像盡量與系統(tǒng)假想相吻合,還必須準確地反映系統(tǒng)的語法和語義信息。設(shè)計模型源于設(shè)計者對人機界面設(shè)計任務(wù)的分析。逐步求精和面向?qū)ο蟮姆治黾夹g(shù)亦適用于人機界面設(shè)計的任務(wù)分析。逐步求精技術(shù)可把任務(wù)不斷劃分為子任務(wù),直至對每個任務(wù)的要求都十分清楚;而面向?qū)ο蠓治隹勺R別出與應(yīng)用有關(guān)的所有客觀的對象以及與對象關(guān)聯(lián)的動作。

一旦每個任務(wù)或動作定義清楚,界面設(shè)計即可開始。界面設(shè)計首先要完成下列工作:

(1)確定任務(wù)的目標和含義。

(2)將每個目標/含義映射為一系列特定的動作。

(3)說明這些動作將來在界面上執(zhí)行的順序。

(4)指明各個系統(tǒng)狀態(tài),即上述各動作序列中每個動作在界面上執(zhí)行時界面呈現(xiàn)的

形式。

(5)定義控制機制,以便用戶修改系統(tǒng)狀態(tài)的一些設(shè)置和操作。

(6)說明控制機制怎樣作用于系統(tǒng)狀態(tài)。

(7)指明用戶應(yīng)怎樣根據(jù)界面上反映出的信息解釋系統(tǒng)的狀態(tài)。

2.利用工具構(gòu)造原型

確定了界面設(shè)計模型,就可利用原型開發(fā)工具創(chuàng)建原型。這些工具被稱為用戶界面工具箱或用戶界面開發(fā)系統(tǒng)(UIDS),它們?yōu)楹喕翱?、菜單、設(shè)備交互、出錯信息、命令及交互環(huán)境的許多其他元素的創(chuàng)建提供了各種例程或?qū)ο?。這些工具所提供的功能

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論