軟件工程與項目管理(第2版) 課件 (王素芬)第5、6章 軟件的總體設計、軟件詳細設計_第1頁
軟件工程與項目管理(第2版) 課件 (王素芬)第5、6章 軟件的總體設計、軟件詳細設計_第2頁
軟件工程與項目管理(第2版) 課件 (王素芬)第5、6章 軟件的總體設計、軟件詳細設計_第3頁
軟件工程與項目管理(第2版) 課件 (王素芬)第5、6章 軟件的總體設計、軟件詳細設計_第4頁
軟件工程與項目管理(第2版) 課件 (王素芬)第5、6章 軟件的總體設計、軟件詳細設計_第5頁
已閱讀5頁,還剩96頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

5.1總體設計的目標和任務

5.2設計的概念和原則

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

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

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

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

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

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

6.2詳細設計的原則

6.3詳細設計的方法

6.4詳細設計可采用的工具

6.5詳細設計工具的選擇

6.6接口設計

6.7詳細設計說明書6.1詳細設計的任務詳細設計首先要對系統(tǒng)的模塊做概要性的說明,設計詳細的算法、每個模塊之間的關系以及如何實現(xiàn)算法等。詳細設計的主要任務有以下幾點:(1)模塊的算法設計。確定每個模塊采用的算法,選擇適當?shù)墓ぞ呙枋鏊惴?,包括公式、邊界和特殊條件,甚至包括參考資料、引用的出處等。(2)確定每個模塊的內(nèi)部數(shù)據(jù)結(jié)構(gòu)及數(shù)據(jù)庫的物理結(jié)構(gòu)。(3)確定模塊接口的具體細節(jié),包括對系統(tǒng)外部的接口和用戶界面,對系統(tǒng)內(nèi)部其他模塊的接口,以及模塊輸入數(shù)據(jù)、輸出數(shù)據(jù)及局部數(shù)據(jù)的全部細節(jié)。(4)為每個模塊設計一組測試用例,以便在編碼階段對模塊代碼進行預定的測試。模塊的測試用例是軟件測試計劃的重要組成部分,通常包括輸入數(shù)據(jù)、預期結(jié)果等內(nèi)容。(5)編寫詳細設計說明書,參加復審。6.2詳細設計的原則為了能夠使模塊的邏輯描述清晰準確,在詳細設計階段應遵循下列原則:(1)將保證程序的清晰度放在首位。由于詳細設計的文檔很重要,因此模塊的邏輯描述要清晰易讀、正確可靠。(2)設計過程中應采用逐步細化的實現(xiàn)方法,自頂向下逐步細化。(3)選擇適當?shù)谋磉_工具。6.3詳細設計的方法詳細設計(也叫過程設計)中采用的典型方法是結(jié)構(gòu)化程序設計(SP)方法,最早是由E.W.Dijkstra在20世紀60年代中期提出的。詳細設計并不是具體地編程序,而是細化出很容易從中產(chǎn)生程序的圖紙。詳細設計的結(jié)果基本上決定了最終程序的質(zhì)量。為了提高軟件的質(zhì)量,延長軟件的生存期,必須保證軟件具有可測試性和可維護性。軟件的可測試性、可維護性與程序的易讀性有很大關系。詳細設計的目標不僅是邏輯上正確地實現(xiàn)每個模塊的功能,還應使設計出的處理過程清晰易讀。結(jié)構(gòu)化程序設計是實現(xiàn)該目標的關鍵技術之一,它指導人們用良好的思想方法開發(fā)易于理解、易于驗證的程序。結(jié)構(gòu)化程序設計方法有以下幾個基本要點。1.采用自頂向下、逐步求精的程序設計方法在需求分析、總體設計中都采用了自頂向下、逐層細化的方法。在詳細設計中,雖然處于“具體”設計階段,但在設計某個模塊內(nèi)部的處理過程時,仍可以逐步求精,降低處理細節(jié)的復雜度。2.使用3種基本控制結(jié)構(gòu)構(gòu)造程序任何程序都可由順序、選擇及循環(huán)3種基本控制結(jié)構(gòu)構(gòu)造。這3種基本結(jié)構(gòu)的共同點是單入口、單出口。它不但能有效地限制使用GOTO語句,還創(chuàng)立了一種新的程序設計思想、方法和風格,同時為自頂向下、逐步求精的設計方法提供了具體的實施手段。對一個模塊處理過程細化時,開始是模糊的,可以用下面3種方式對模糊過程進行分解:(1)用順序方式對過程分解,確定各部分的執(zhí)行順序; (2)用選擇方式對過程分解,確定某個部分的執(zhí)行條件;(3)用循環(huán)方式對過程分解,確定某個部分進行循環(huán)的開始和結(jié)束的條件。對處理過程仍然模糊的部分反復使用以上分解方法,最終可將所有細節(jié)確定下來。3.主程序員的組織形式主程序員的組織形式是指開發(fā)程序的人員應以一個主程序員(負責全部技術活動)、一個后備程序員(協(xié)調(diào)、支持主程序員)和一個程序管理員(負責事務性工作,如收集、記錄數(shù)據(jù),管理文檔資料等)為核心,再加上一些專家(如通信專家、數(shù)據(jù)庫專家)和其他技術人員組成。這種組織形式突出了主程序員的領導,設計責任集中在少數(shù)人身上,有利于提高軟件質(zhì)量,并且能有效地提高軟件生產(chǎn)率。這種組織形式最先由IBM公司實施,隨后其他軟件公司也紛紛采用主程序員制的工作方式。6.4詳細設計可采用的工具1.程序流程圖程序流程圖是最早出現(xiàn)且使用較為廣泛的算法表達工具之一,它能夠有效地描述問題求解過程中的邏輯結(jié)構(gòu)。程序流程圖中的方框表示一個處理過程,菱形代表一個邏輯判斷,箭頭代表控制流。程序流程圖中經(jīng)常使用的基本符號見圖6.1。為使程序流程圖支持結(jié)構(gòu)化程序設計,限制在程序流程圖中只能使用下列5種基本控制結(jié)構(gòu)。1)順序型順序型由幾個連續(xù)的處理步驟依次排列構(gòu)成,如圖6.2所示。2)選擇型選擇型是指由某個邏輯判斷式的取值決定選擇兩個處理中的哪一個,如圖6.3所示。3)多分支型選擇結(jié)構(gòu)多分支型選擇結(jié)構(gòu)列舉出多種處理,根據(jù)判定條件的取值,選擇其一執(zhí)行,如圖6.4所示。4)?WHILE型循環(huán)WHILE型循環(huán)(也稱“當型”循環(huán))是先判定型循環(huán),在循環(huán)控制條件成立時,重復執(zhí)行特定的處理,如圖6.5所示。5)?UNTIL型循環(huán)UNTIL型循環(huán)(也稱直到型循環(huán))是后判定型循環(huán),重復執(zhí)行某些特定的處理,直到控制條件成立為止,如圖6.6所示。程序流程圖的主要優(yōu)點在于對程序的控制流程描述直觀、清晰,使用靈活,便于閱讀和掌握。但隨著程序設計方法的發(fā)展,程序流程圖的許多缺點逐漸暴露出來。程序流程圖的主要缺點如下:(1)程序流程圖中可以隨心所欲地使用流程線,容易造成程序控制結(jié)構(gòu)的混亂,與結(jié)構(gòu)化程序設計的思想相違背。(2)程序流程圖難以描述逐步求精的過程,容易導致程序員過早地考慮程序的控制流程而忽略程序全局結(jié)構(gòu)的設計。(3)程序流程圖難以表示系統(tǒng)中的數(shù)據(jù)結(jié)構(gòu)。正是由于程序流程圖存在這些缺點,因此越來越多的軟件設計人員放棄了對它的使用,而去選擇其他一些更有利于結(jié)構(gòu)化設計的表達工具,下面所介紹的N-S圖和PAD圖就是其中的兩種圖形工具。2.?N-S圖N-S圖又稱為盒圖,它是為了保證結(jié)構(gòu)化程序設計而由Nassi和Shneiderman共同提出的一種圖形工具。在N-S圖中,所有的程序結(jié)構(gòu)均使用矩形框表示,它可以清晰地表示結(jié)構(gòu)中的嵌套及模塊的層次關系。由于N-S圖中沒有流程線,不可能隨意轉(zhuǎn)移控制,因而表達出的程序結(jié)構(gòu)必然符合結(jié)構(gòu)化程序設計的思想,有利于培養(yǎng)軟件設計人員的良好設計風格。但當所描述的程序嵌套層次較多時,N-S圖的內(nèi)層方框會越畫越小,不僅影響可讀性而且不易修改。N-S圖中,為了表示5種基本控制結(jié)構(gòu),也規(guī)定了5種圖形構(gòu)件。1)順序型在順序型結(jié)構(gòu)中,先執(zhí)行A,后執(zhí)行B,如圖6.8所示。2)選擇型在選擇型結(jié)構(gòu)中,如果條件成立,則可執(zhí)行T下面A的內(nèi)容,當條件不成立時,則執(zhí)行F下B的內(nèi)容,如圖6.9所示。3)多分支選擇型判斷CASE條件,與值1匹配上,執(zhí)行CASE1部分,與值2匹配上,執(zhí)行CASE2部分,依次類推,如圖6.10所示。4)?WHILE重復型在WHILE型循環(huán)結(jié)構(gòu)中,先判斷EXP的值,再執(zhí)行S。其中EXP是循環(huán)條件,S是循環(huán)體,如圖6.11所示。5)?UNTIL重復型在UNTIL型循環(huán)結(jié)構(gòu)中,先執(zhí)行S,后判斷EXP的值,如圖6.12所示。3.?PADPAD是問題分析圖(ProblemAnalysisDiagram)的英文縮寫,是1973年由日本日立公司提出的。PAD是用結(jié)構(gòu)化程序設計思想表現(xiàn)程序邏輯結(jié)構(gòu)的圖形工具,現(xiàn)已被ISO認可。PAD用二維樹形結(jié)構(gòu)的圖來表示程序的控制流,也設置了5種基本控制結(jié)構(gòu)的圖示,并允許遞歸使用。(1)順序型。按順序先執(zhí)行A,再執(zhí)行B,如圖6.14所示。(2)選擇型。圖6.15給出了判斷條件為P的選擇型結(jié)構(gòu)。當P為真值時,執(zhí)行上面的S1框中的內(nèi)容;P取假值時,執(zhí)行下面的S2框中的內(nèi)容。如果這種選擇型結(jié)構(gòu)只有S1框,沒有S2框,則表示該選擇結(jié)構(gòu)中只有THEN后面有可執(zhí)行語句S1,沒有ELSE部分。(3)多分支型選擇結(jié)構(gòu)。如圖6.16所示,多分支選擇型是CASE型結(jié)構(gòu)。當判定條件P等于1時,執(zhí)行A1框的內(nèi)容,P等于2時,執(zhí)行A2框的內(nèi)容……P等于n時執(zhí)行An框的內(nèi)容。(4)?WHILE型循環(huán)結(jié)構(gòu)。如圖6.17所示,P是循環(huán)判斷條件,S是循環(huán)體。循環(huán)判斷條件框的右端為雙縱線,表示該矩形域是循環(huán)條件,以區(qū)別于一般的矩形功能域。(5)?UNTIL型循環(huán)結(jié)構(gòu)。如圖6.18所示,P是循環(huán)判斷條件,S是循環(huán)體。循環(huán)判斷條件框的右端為雙縱線,表示該矩形域是循環(huán)條件,以區(qū)別于一般的矩形功能域。隨著程序?qū)哟蔚脑黾?,PAD逐漸向右展開,有時可能會超過一頁紙。為解決此問題,PAD增加了一種如圖6.19所示的擴充形式。當模塊A較復雜時,可在圖6.19中該模式相應位置的矩形框中簡記為“NAMEA”,再在另外一張紙上詳細描述A的細節(jié),格式為def加雙下畫線,意為“定義A”或“對A細化”。PAD采用了易于使用的樹形結(jié)構(gòu)圖形符號,既利于清晰地表達程序結(jié)構(gòu),又利于修改。PAD的主要優(yōu)點如下:(1)使用PAD描述的程序結(jié)構(gòu)層次清晰,邏輯結(jié)構(gòu)關系直觀、易讀、易記、易修改。使用表示結(jié)構(gòu)化的PAD符號設計出來的程序必然是結(jié)構(gòu)化程序。(2)?PAD為多種常用高級語言提供了相應的圖形符號,每種控制語句都與一個專門的圖形符號相對應,易于PAD向高級語言源程序轉(zhuǎn)換。這種轉(zhuǎn)換可用軟件工具自動完成,從而可省去人工編碼的工作,有利于提高軟件的可靠性和軟件生產(chǎn)率。(3)支持自頂向下、逐步求精的設計過程。開始時設計者可以定義一個抽象的程序,然后隨著設計工作的深入而使用def符號逐步增加細節(jié),直至完成詳細設計。(4)既能夠描述程序的邏輯結(jié)構(gòu),又能夠描述系統(tǒng)中的數(shù)據(jù)結(jié)構(gòu)。4.?PDL過程設計語言(ProcessDesignLanguage,PDL)是一種用于描述程序算法和定義結(jié)構(gòu)的偽代碼。PDL的構(gòu)成與用于描述加工的結(jié)構(gòu)化語言相似,是一種兼有自然語言和結(jié)構(gòu)化程序設計語言語法的“混合型”語言。采用自然語言使算法的描述靈活自由、清晰易懂,采用結(jié)構(gòu)化程序設計語言使控制結(jié)構(gòu)的表達具有固定的形式且符合結(jié)構(gòu)化設計的思想。PDL與結(jié)構(gòu)化語言的主要區(qū)別在于:由于PDL表達的算法是編碼的直接依據(jù),因此其語法結(jié)構(gòu)更加嚴格并且處理過程更加具體詳細。PDL的主要特點如下:(1)各種定義語句及控制結(jié)構(gòu)的表達都具有嚴格的語法形式,使程序結(jié)構(gòu)、數(shù)據(jù)說明等更加清晰。(2)提供了數(shù)據(jù)說明機制,可用于定義簡單及復雜的數(shù)據(jù)結(jié)構(gòu)。(3)提供了模塊的定義和調(diào)用機制,方便了程序模塊化的表達。PDL的主要定義語句及基本控制結(jié)構(gòu)的表達如下:(1)定義語句。①數(shù)據(jù)定義:DECLARE屬性變量名……屬性包括:整型、實型、雙精度型、字符型、指針、數(shù)組、結(jié)構(gòu)等類型。②模塊定義:PROCEDURE模塊名(參數(shù))RETURNEND(2)基本控制結(jié)構(gòu)。①順序控制結(jié)構(gòu)。順序結(jié)構(gòu)的語句序列采用自然語言進行描述:語句序列S1語句序列S2 ?語句序列Sn ?②選擇結(jié)構(gòu): ?IF…ELSE結(jié)構(gòu): IF條件IF條件 語句序列Sl或語句序列S ELSEENDIF語句序列S2 ENDIF ?多分支結(jié)構(gòu):IF條件1語句序列Sl ELSEIF條件2語句序列S2 ?ELSE語句序列SnENDIF ?CASE結(jié)構(gòu):CASE表達式OFCASE取值1語句序列S1CASE取值2語句序列S2ELSE語句序列Sn ?ENDCASE③循環(huán)結(jié)構(gòu)。 ?FOR結(jié)構(gòu):?FOR循環(huán)變量?=?初值TO終值循環(huán)體S?ENDFOR

?WHILE結(jié)構(gòu):?WHILE條件循環(huán)體S?ENDWHILE ?UNTIL結(jié)構(gòu):?REPEAT循環(huán)體S?UNTL條件④輸入/輸出語句。 ?輸入語句:?GET(輸入變量表)?輸出語句:?PUT(輸出變量表)⑤模塊調(diào)用語句。?CALL模塊名(參數(shù))6.5詳細設計工具的選擇為滿足過程描述易于理解、復審和維護進而過程描述能夠自然地轉(zhuǎn)換成代碼,并保證詳細設計與代碼完全一致的原則,要求設計工具具有下述屬性。(1)模塊化:支持模塊化軟件的開發(fā),并提供描述接口的機制。(2)簡潔:設計描述易學、易用和易讀。(3)便于編輯:支持后續(xù)設計和維護以及在維護階段對設計進行的修改。(4)機器可讀性:設計描述能夠直接輸入,并且很容易被計算機輔助設計工具識別。(5)可維護性:詳細設計應能夠支持各種軟件配置項的維護。(6)自動生成報告:設計者通過分析詳細設計的結(jié)果來改進設計。通過自動處理器產(chǎn)生有關的分析報告,進而增強設計者在這方面的能力。(7)強制結(jié)構(gòu)化:詳細設計工具能夠強制設計者采用結(jié)構(gòu)化構(gòu)件,有助于采用優(yōu)秀的設計。(8)數(shù)據(jù)表示:詳細設計具備表示局部數(shù)據(jù)和全局數(shù)據(jù)的能力。(9)邏輯驗證:軟件測試的最高目標是能夠自動檢驗設計邏輯的正確性,所以設計描述應易于進行邏輯驗證,進而增強可測試性。(10)編碼能力:可編碼能力是一種設計描述,研究代碼自動轉(zhuǎn)換技術可以提高軟件效率和減少出錯率。6.6接口設計6.6.1用戶界面設計的意義及任務用戶界面也稱為人機界面,是用戶與計算機或手機等終端設備交流的媒介。用戶只能通過顯示屏界面了解并掌控操作運行的系統(tǒng),人機界面設計非常重要。界面設計主要包括界面對話設計、數(shù)據(jù)輸入界面設計、屏幕顯示設計、控制界面設計等,是計算機科學、心理學、視覺藝術等多門學科的綜合。用戶界面設計的分析設計應與軟件需求分析同步進行。其主要任務如下:(1)用戶特性分析,主要是建立用戶模型,了解所有用戶的技能和經(jīng)驗,針對用戶能力設計或更改界面。可從兩方面分析:一是用戶類型,通常分為外行型、初學型、熟練型、專家型;二是用戶特性度量,與用戶使用模式和用戶群體能力有關,包括用戶使用頻度、用戶用機能力、用戶的知識和思維能力等。(2)界面的功能任務分析。建立任務模型數(shù)據(jù)流圖(DataFlowDiagram,DFD),對系統(tǒng)內(nèi)部活動的分解,不僅要進行功能分解(用DFD描述),還要包括與人相關的活動,每個加工即一個功能或任務。(3)確定用戶界面類型,并根據(jù)其特點借助工具具體進行分析與設計。6.6.2用戶界面設計的主要問題在設計用戶界面的過程中,一般經(jīng)常會遇到4個問題:系統(tǒng)響應時間、用戶幫助設施、出錯信息處理和命令交互。但是,許多設計者直到設計過程后期才開始考慮這些問題,這樣往往導致不必要的反復、項目延期以及使用戶產(chǎn)生挫折感。最好在設計初期就考慮這些問題,這樣易修改,代價也低。1.系統(tǒng)響應時間一般來說,系統(tǒng)響應時間是指從用戶完成某個控制動作,到軟件給出預期的響應(輸出或做動作)之間的這段時間。系統(tǒng)響應時間過長是許多交互式系統(tǒng)用戶常抱怨的問題。系統(tǒng)響應時間有兩個重要屬性:長度和易變性。如果系統(tǒng)響應時間過長,用戶就會感到緊張和沮喪。但是,當用戶的工作速度是由人機界面決定的時候,如果系統(tǒng)響應時間過短,就會迫使用戶加快操作節(jié)奏,從而可能犯錯誤。易變性指系統(tǒng)響應時間相對于平均響應時間的偏差,在許多情況下,這是系統(tǒng)響應時間的更重要的屬性。即使系統(tǒng)響應時間較長,響應時間易變性低也有助于用戶建立起穩(wěn)定的工作節(jié)奏。用戶往往比較敏感,他們總是擔心響應時間的變化暗示系統(tǒng)工作出現(xiàn)異常。2.用戶幫助設施交互式系統(tǒng)的每個用戶幾乎都需要幫助,當遇到復雜問題時甚至需要查看用戶手冊以得到答案。大多數(shù)現(xiàn)代軟件都提供聯(lián)機幫助設施,這使得用戶可以不離開用戶界面就解決自己的問題。常見的幫助設施有兩類:集成的和附加的。集成的幫助設施從一開始就設計在軟件里面,它通常對用戶工作是敏感的,因此用戶可以從與剛剛完成的操作有關的主題中選擇一個,請求幫助。顯然,這可以縮短用戶獲取幫助的時間,增加界面的友好性。附加的幫助設施是在系統(tǒng)建成后再添加到軟件中的,大多數(shù)情況下,它實際上是一種查詢能力有限的聯(lián)機用戶手冊。事實表明,集成的幫助設施優(yōu)于附加的幫助設施。具體設計幫助設施時,必須解決以下問題:(1)在用戶與系統(tǒng)交互期間,是否在任何時間都能獲得關于系統(tǒng)任何功能的幫助信息。它有兩種選擇:提供部分功能的幫助信息和提供全部功能的幫助信息。(2)用戶怎樣請求幫助,有3種選擇:幫助菜單、特殊功能鍵和Help命令。(3)怎樣顯示幫助信息,有3種選擇:在獨立的窗口中顯示、指出參考某個文檔(不理想)和在屏幕固定位置顯示簡短提示。(4)用戶怎樣返回到正常的交互方式,有兩種選擇:屏幕上的返回按鈕和功能鍵。(5)怎樣組織幫助信息,有3種選擇:平面結(jié)構(gòu)(所有信息都通過關鍵字訪問)、信息的層次結(jié)構(gòu)(用戶可在該結(jié)構(gòu)中查到更詳細的信息)和超文本結(jié)構(gòu)。3.出錯信息處理出錯信息和警告信息是出現(xiàn)問題時交互式系統(tǒng)給出的“壞消息”。出錯信息設計得不好,將向用戶提供無用的或誤導的信息,反而會增加用戶的挫折感。一般來說,交互式系統(tǒng)給出的出錯信息或警告信息應該具有以下屬性:(1)信息應該以用戶可以理解的術語描述問題。(2)信息應該提供有助于從錯誤中恢復的建設性意見。(3)信息應該指出錯誤可能導致哪些負面后果,以便用戶檢查是否出現(xiàn)了這些問題,并在確實出現(xiàn)問題時予以改正。(4)信息應該伴隨著聽覺上或視覺上的提示,即在顯示信息時應該同時發(fā)出警告聲,或者用閃爍方式顯示,或者用明顯表示出錯的顏色顯示。(5)信息不能帶有指責色彩,即不能指責用戶。當出現(xiàn)問題時,有效的出錯信息能夠提高交互式系統(tǒng)的質(zhì)量,減少用戶的挫折感。4.命令交互命令行曾是用戶和系統(tǒng)軟件交互的最常用方式,而且也曾廣泛地用于各種應用軟件中?,F(xiàn)在面向窗口的、點擊和拾取方式的界面已經(jīng)減少了用戶對命令行的依賴,但許多高級用戶仍偏愛面向命令的交互方式。在多數(shù)情況下,用戶既可以從菜單中選擇軟件功能,也可通過鍵盤命令序列調(diào)用軟件功能。在提供命令交互方式時,必須考慮以下設計問題:(1)是否每個菜單選項都有對應的命令。(2)采用何種命令形式,共有3種選擇:快捷鍵(如Ctrl?+?P)、功能鍵和鍵入命令。(3)學習和記憶命令的難度有多大,忘記了命令怎么辦?(4)用戶是否可以定制或縮寫命令。在越來越多的應用軟件中,界面設計者都提供了“命令宏機制”,使用這種機制用戶可以用自己定義的名字代表一個常用的命令序列。需要使用這個命令序列時,用戶無須依次鍵入每個命令,只需輸入命令宏的名字就可以順序執(zhí)行它所代表的全部命令。在理想情況下,所有應用軟件都有一致的命令使用方法。如果在一個應用軟件中,命令Ctrl?+?D表示復制一個圖形對象,而在另一個應用軟件中Ctrl?+?D命令的含義是刪除一個圖形對象,則用戶會感到困惑,并往往導致錯誤。一般情況下,在常用的應用軟件中采用了一致的快捷鍵來完成相同的功能,如用Ctrl?+?C表示復制,用Ctrl?+?V表示粘貼,用Ctrl?+?S表示保存,用Ctrl?+?O表示打開。因此,所設計的軟件就不要別出心裁,另搞一套,這樣會使用戶感到無所適從。6.6.3用戶界面需求分析用戶界面需求分析應以用戶為中心。深受用戶歡迎的界面設計,應在需求分析階段就被重視和開始。用戶界面設計主要是為了滿足用戶需求,首先要弄清將要使用這個界面的用戶類型。用戶界面不同于功能需求分析,其需求具有很大的主觀性。不同的用戶對軟件界面有不同的要求,表達需求的方式也不盡相同,而且界面要求通常不如業(yè)務功能需求那樣容易明確。調(diào)查用戶的界面需求,必須先從調(diào)查用戶自身特征開始,將不同特征用戶群體的要求進行綜合處理,并有針對性地分析其界面需求。建立用戶界面的原型是一種有效的方法。利用界面原型可以將界面需求調(diào)查的周期盡量縮短,并盡可能滿足用戶的要求。利用可供用戶選擇的界面原型模板等,用戶可以直觀并感性地認識到未來系統(tǒng)的界面風格、特點結(jié)構(gòu)、操作方式等,從而迅速地判斷軟件系統(tǒng)是否符合感官期望、操作習慣、工作的需要。需求分析人員利用界面原型,引導用戶修正自己的理想系統(tǒng),提出新的界面要求。6.6.4用戶界面的特性及設計原則1.用戶界面應具有的特性用戶界面設計的類型,從用戶角度出發(fā)主要有菜單、對話框、窗口、問題描述語言、數(shù)據(jù)表格、圖形與圖標等。每一種類型都有不同的特點和性能,需要根據(jù)具體情況進行具體設計和實現(xiàn)。通常,用戶界面設計完成后可借助工具實現(xiàn)。界面設計需要考慮3個特性。(1)可使用性。它主要包括這幾個方面:使用簡單,用戶界面中所用術語的標準化及一致性,具有幫助功能、快速的系統(tǒng)響應、低系統(tǒng)成本和較好的容錯能力。(2)靈活性。它主要指3個方面:考慮用戶的特點、能力和知識水平,提供不同的系統(tǒng)響應信息,能根據(jù)用戶需求制定和修改界面。(3)界面的復雜性與可靠性。復雜性指界面規(guī)模及組織的復雜程度,應該越簡單越好。可靠性是指無故障使用的時間間隔。用戶界面應該能夠保證用戶正確、可靠地使用系統(tǒng),以及系統(tǒng)和數(shù)據(jù)的安全。2.用戶界面設計的原則通常,用戶界面設計應遵循以下4項基本原則:(1)界面的合適性。界面的合適性是界面設計的首要因素,在實現(xiàn)界面功能特點的情況下,不要片面追求外觀而導致華而不實。界面的合適性既提倡外美內(nèi)秀,又強調(diào)恰如其分。(2)簡便易操作。界面設計盡量簡潔,便于操作,減少用戶記憶,并能減少用戶發(fā)生錯誤的可能性。應考慮人腦處理信息的限度,如屏幕劃分的合理性,多種窗口的設計方式,可移動、縮放、重疊和分離的設計,有序整齊的界面會給用戶帶來方便。(3)便于交互控制。交互常會跨越邊界進入信息顯示、數(shù)據(jù)輸入和整體系統(tǒng)控制,應提供視覺和聽覺的反饋,在用戶和界面間建立雙向聯(lián)系。對用戶操作做出反應及信息提示,幫助處理問題,并允許交互式應用進行“恢復”操作。(4)媒體組合恰當。文本、圖形、動畫、視頻影像、語音等媒體都有其優(yōu)勢及特定范圍,媒體資源也并非愈多愈好,媒體的選擇應注意結(jié)合與互補,恰當選用。6.6.5人機界面設計過程用戶界面設計是一個迭代的過程,如圖6.21所示。通常先創(chuàng)建設計模型,再用原型實現(xiàn)這個模型,并由用戶試用和評估,然后根據(jù)用戶的意見進行修改,如此反復直至最后完成界面設計。1.任務分析與創(chuàng)建設計模型在人機界面設計過程中先后涉及4個模型:設計者創(chuàng)建的設計模型、用戶模型、終端用戶對系統(tǒng)的假想和系統(tǒng)實現(xiàn)后的系統(tǒng)映像。這4個模型之間存在較多差異,設計界面時必須充分協(xié)調(diào),導出一致的界面。建立設計模型應充分考慮用戶模型中給出的信息,如用戶的年齡、性別、心理情況、所受教育、文化、種族背景、動機、目的、個性等;系統(tǒng)映像盡量與系統(tǒng)假想相吻合,還必須準確地反映系統(tǒng)的語法和語義信息。設計模型源于設計者對人機界面設計任務的分析。

溫馨提示

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

評論

0/150

提交評論