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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

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

6.2詳細(xì)設(shè)計(jì)的原則

6.3詳細(xì)設(shè)計(jì)的方法

6.4詳細(xì)設(shè)計(jì)可采用的工具

6.5詳細(xì)設(shè)計(jì)工具的選擇

6.6接口設(shè)計(jì)

6.7詳細(xì)設(shè)計(jì)說明書6.1詳細(xì)設(shè)計(jì)的任務(wù)詳細(xì)設(shè)計(jì)首先要對系統(tǒng)的模塊做概要性的說明,設(shè)計(jì)詳細(xì)的算法、每個(gè)模塊之間的關(guān)系以及如何實(shí)現(xiàn)算法等。詳細(xì)設(shè)計(jì)的主要任務(wù)有以下幾點(diǎn):(1)模塊的算法設(shè)計(jì)。確定每個(gè)模塊采用的算法,選擇適當(dāng)?shù)墓ぞ呙枋鏊惴?,包括公式、邊界和特殊條件,甚至包括參考資料、引用的出處等。(2)確定每個(gè)模塊的內(nèi)部數(shù)據(jù)結(jié)構(gòu)及數(shù)據(jù)庫的物理結(jié)構(gòu)。(3)確定模塊接口的具體細(xì)節(jié),包括對系統(tǒng)外部的接口和用戶界面,對系統(tǒng)內(nèi)部其他模塊的接口,以及模塊輸入數(shù)據(jù)、輸出數(shù)據(jù)及局部數(shù)據(jù)的全部細(xì)節(jié)。(4)為每個(gè)模塊設(shè)計(jì)一組測試用例,以便在編碼階段對模塊代碼進(jìn)行預(yù)定的測試。模塊的測試用例是軟件測試計(jì)劃的重要組成部分,通常包括輸入數(shù)據(jù)、預(yù)期結(jié)果等內(nèi)容。(5)編寫詳細(xì)設(shè)計(jì)說明書,參加復(fù)審。6.2詳細(xì)設(shè)計(jì)的原則為了能夠使模塊的邏輯描述清晰準(zhǔn)確,在詳細(xì)設(shè)計(jì)階段應(yīng)遵循下列原則:(1)將保證程序的清晰度放在首位。由于詳細(xì)設(shè)計(jì)的文檔很重要,因此模塊的邏輯描述要清晰易讀、正確可靠。(2)設(shè)計(jì)過程中應(yīng)采用逐步細(xì)化的實(shí)現(xiàn)方法,自頂向下逐步細(xì)化。(3)選擇適當(dāng)?shù)谋磉_(dá)工具。6.3詳細(xì)設(shè)計(jì)的方法詳細(xì)設(shè)計(jì)(也叫過程設(shè)計(jì))中采用的典型方法是結(jié)構(gòu)化程序設(shè)計(jì)(SP)方法,最早是由E.W.Dijkstra在20世紀(jì)60年代中期提出的。詳細(xì)設(shè)計(jì)并不是具體地編程序,而是細(xì)化出很容易從中產(chǎn)生程序的圖紙。詳細(xì)設(shè)計(jì)的結(jié)果基本上決定了最終程序的質(zhì)量。為了提高軟件的質(zhì)量,延長軟件的生存期,必須保證軟件具有可測試性和可維護(hù)性。軟件的可測試性、可維護(hù)性與程序的易讀性有很大關(guān)系。詳細(xì)設(shè)計(jì)的目標(biāo)不僅是邏輯上正確地實(shí)現(xiàn)每個(gè)模塊的功能,還應(yīng)使設(shè)計(jì)出的處理過程清晰易讀。結(jié)構(gòu)化程序設(shè)計(jì)是實(shí)現(xiàn)該目標(biāo)的關(guān)鍵技術(shù)之一,它指導(dǎo)人們用良好的思想方法開發(fā)易于理解、易于驗(yàn)證的程序。結(jié)構(gòu)化程序設(shè)計(jì)方法有以下幾個(gè)基本要點(diǎn)。1.采用自頂向下、逐步求精的程序設(shè)計(jì)方法在需求分析、總體設(shè)計(jì)中都采用了自頂向下、逐層細(xì)化的方法。在詳細(xì)設(shè)計(jì)中,雖然處于“具體”設(shè)計(jì)階段,但在設(shè)計(jì)某個(gè)模塊內(nèi)部的處理過程時(shí),仍可以逐步求精,降低處理細(xì)節(jié)的復(fù)雜度。2.使用3種基本控制結(jié)構(gòu)構(gòu)造程序任何程序都可由順序、選擇及循環(huán)3種基本控制結(jié)構(gòu)構(gòu)造。這3種基本結(jié)構(gòu)的共同點(diǎn)是單入口、單出口。它不但能有效地限制使用GOTO語句,還創(chuàng)立了一種新的程序設(shè)計(jì)思想、方法和風(fēng)格,同時(shí)為自頂向下、逐步求精的設(shè)計(jì)方法提供了具體的實(shí)施手段。對一個(gè)模塊處理過程細(xì)化時(shí),開始是模糊的,可以用下面3種方式對模糊過程進(jìn)行分解:(1)用順序方式對過程分解,確定各部分的執(zhí)行順序; (2)用選擇方式對過程分解,確定某個(gè)部分的執(zhí)行條件;(3)用循環(huán)方式對過程分解,確定某個(gè)部分進(jìn)行循環(huán)的開始和結(jié)束的條件。對處理過程仍然模糊的部分反復(fù)使用以上分解方法,最終可將所有細(xì)節(jié)確定下來。3.主程序員的組織形式主程序員的組織形式是指開發(fā)程序的人員應(yīng)以一個(gè)主程序員(負(fù)責(zé)全部技術(shù)活動(dòng))、一個(gè)后備程序員(協(xié)調(diào)、支持主程序員)和一個(gè)程序管理員(負(fù)責(zé)事務(wù)性工作,如收集、記錄數(shù)據(jù),管理文檔資料等)為核心,再加上一些專家(如通信專家、數(shù)據(jù)庫專家)和其他技術(shù)人員組成。這種組織形式突出了主程序員的領(lǐng)導(dǎo),設(shè)計(jì)責(zé)任集中在少數(shù)人身上,有利于提高軟件質(zhì)量,并且能有效地提高軟件生產(chǎn)率。這種組織形式最先由IBM公司實(shí)施,隨后其他軟件公司也紛紛采用主程序員制的工作方式。6.4詳細(xì)設(shè)計(jì)可采用的工具1.程序流程圖程序流程圖是最早出現(xiàn)且使用較為廣泛的算法表達(dá)工具之一,它能夠有效地描述問題求解過程中的邏輯結(jié)構(gòu)。程序流程圖中的方框表示一個(gè)處理過程,菱形代表一個(gè)邏輯判斷,箭頭代表控制流。程序流程圖中經(jīng)常使用的基本符號(hào)見圖6.1。為使程序流程圖支持結(jié)構(gòu)化程序設(shè)計(jì),限制在程序流程圖中只能使用下列5種基本控制結(jié)構(gòu)。1)順序型順序型由幾個(gè)連續(xù)的處理步驟依次排列構(gòu)成,如圖6.2所示。2)選擇型選擇型是指由某個(gè)邏輯判斷式的取值決定選擇兩個(gè)處理中的哪一個(gè),如圖6.3所示。3)多分支型選擇結(jié)構(gòu)多分支型選擇結(jié)構(gòu)列舉出多種處理,根據(jù)判定條件的取值,選擇其一執(zhí)行,如圖6.4所示。4)?WHILE型循環(huán)WHILE型循環(huán)(也稱“當(dāng)型”循環(huán))是先判定型循環(huán),在循環(huán)控制條件成立時(shí),重復(fù)執(zhí)行特定的處理,如圖6.5所示。5)?UNTIL型循環(huán)UNTIL型循環(huán)(也稱直到型循環(huán))是后判定型循環(huán),重復(fù)執(zhí)行某些特定的處理,直到控制條件成立為止,如圖6.6所示。程序流程圖的主要優(yōu)點(diǎn)在于對程序的控制流程描述直觀、清晰,使用靈活,便于閱讀和掌握。但隨著程序設(shè)計(jì)方法的發(fā)展,程序流程圖的許多缺點(diǎn)逐漸暴露出來。程序流程圖的主要缺點(diǎn)如下:(1)程序流程圖中可以隨心所欲地使用流程線,容易造成程序控制結(jié)構(gòu)的混亂,與結(jié)構(gòu)化程序設(shè)計(jì)的思想相違背。(2)程序流程圖難以描述逐步求精的過程,容易導(dǎo)致程序員過早地考慮程序的控制流程而忽略程序全局結(jié)構(gòu)的設(shè)計(jì)。(3)程序流程圖難以表示系統(tǒng)中的數(shù)據(jù)結(jié)構(gòu)。正是由于程序流程圖存在這些缺點(diǎn),因此越來越多的軟件設(shè)計(jì)人員放棄了對它的使用,而去選擇其他一些更有利于結(jié)構(gòu)化設(shè)計(jì)的表達(dá)工具,下面所介紹的N-S圖和PAD圖就是其中的兩種圖形工具。2.?N-S圖N-S圖又稱為盒圖,它是為了保證結(jié)構(gòu)化程序設(shè)計(jì)而由Nassi和Shneiderman共同提出的一種圖形工具。在N-S圖中,所有的程序結(jié)構(gòu)均使用矩形框表示,它可以清晰地表示結(jié)構(gòu)中的嵌套及模塊的層次關(guān)系。由于N-S圖中沒有流程線,不可能隨意轉(zhuǎn)移控制,因而表達(dá)出的程序結(jié)構(gòu)必然符合結(jié)構(gòu)化程序設(shè)計(jì)的思想,有利于培養(yǎng)軟件設(shè)計(jì)人員的良好設(shè)計(jì)風(fēng)格。但當(dāng)所描述的程序嵌套層次較多時(shí),N-S圖的內(nèi)層方框會(huì)越畫越小,不僅影響可讀性而且不易修改。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)容,當(dāng)條件不成立時(shí),則執(zhí)行F下B的內(nèi)容,如圖6.9所示。3)多分支選擇型判斷CASE條件,與值1匹配上,執(zhí)行CASE1部分,與值2匹配上,執(zhí)行CASE2部分,依次類推,如圖6.10所示。4)?WHILE重復(fù)型在WHILE型循環(huán)結(jié)構(gòu)中,先判斷EXP的值,再執(zhí)行S。其中EXP是循環(huán)條件,S是循環(huán)體,如圖6.11所示。5)?UNTIL重復(fù)型在UNTIL型循環(huán)結(jié)構(gòu)中,先執(zhí)行S,后判斷EXP的值,如圖6.12所示。3.?PADPAD是問題分析圖(ProblemAnalysisDiagram)的英文縮寫,是1973年由日本日立公司提出的。PAD是用結(jié)構(gòu)化程序設(shè)計(jì)思想表現(xiàn)程序邏輯結(jié)構(gòu)的圖形工具,現(xiàn)已被ISO認(rèn)可。PAD用二維樹形結(jié)構(gòu)的圖來表示程序的控制流,也設(shè)置了5種基本控制結(jié)構(gòu)的圖示,并允許遞歸使用。(1)順序型。按順序先執(zhí)行A,再執(zhí)行B,如圖6.14所示。(2)選擇型。圖6.15給出了判斷條件為P的選擇型結(jié)構(gòu)。當(dāng)P為真值時(shí),執(zhí)行上面的S1框中的內(nèi)容;P取假值時(shí),執(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)。當(dāng)判定條件P等于1時(shí),執(zhí)行A1框的內(nèi)容,P等于2時(shí),執(zhí)行A2框的內(nèi)容……P等于n時(shí)執(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ū)哟蔚脑黾樱琍AD逐漸向右展開,有時(shí)可能會(huì)超過一頁紙。為解決此問題,PAD增加了一種如圖6.19所示的擴(kuò)充形式。當(dāng)模塊A較復(fù)雜時(shí),可在圖6.19中該模式相應(yīng)位置的矩形框中簡記為“NAMEA”,再在另外一張紙上詳細(xì)描述A的細(xì)節(jié),格式為def加雙下畫線,意為“定義A”或“對A細(xì)化”。PAD采用了易于使用的樹形結(jié)構(gòu)圖形符號(hào),既利于清晰地表達(dá)程序結(jié)構(gòu),又利于修改。PAD的主要優(yōu)點(diǎn)如下:(1)使用PAD描述的程序結(jié)構(gòu)層次清晰,邏輯結(jié)構(gòu)關(guān)系直觀、易讀、易記、易修改。使用表示結(jié)構(gòu)化的PAD符號(hào)設(shè)計(jì)出來的程序必然是結(jié)構(gòu)化程序。(2)?PAD為多種常用高級(jí)語言提供了相應(yīng)的圖形符號(hào),每種控制語句都與一個(gè)專門的圖形符號(hào)相對應(yīng),易于PAD向高級(jí)語言源程序轉(zhuǎn)換。這種轉(zhuǎn)換可用軟件工具自動(dòng)完成,從而可省去人工編碼的工作,有利于提高軟件的可靠性和軟件生產(chǎn)率。(3)支持自頂向下、逐步求精的設(shè)計(jì)過程。開始時(shí)設(shè)計(jì)者可以定義一個(gè)抽象的程序,然后隨著設(shè)計(jì)工作的深入而使用def符號(hào)逐步增加細(xì)節(jié),直至完成詳細(xì)設(shè)計(jì)。(4)既能夠描述程序的邏輯結(jié)構(gòu),又能夠描述系統(tǒng)中的數(shù)據(jù)結(jié)構(gòu)。4.?PDL過程設(shè)計(jì)語言(ProcessDesignLanguage,PDL)是一種用于描述程序算法和定義結(jié)構(gòu)的偽代碼。PDL的構(gòu)成與用于描述加工的結(jié)構(gòu)化語言相似,是一種兼有自然語言和結(jié)構(gòu)化程序設(shè)計(jì)語言語法的“混合型”語言。采用自然語言使算法的描述靈活自由、清晰易懂,采用結(jié)構(gòu)化程序設(shè)計(jì)語言使控制結(jié)構(gòu)的表達(dá)具有固定的形式且符合結(jié)構(gòu)化設(shè)計(jì)的思想。PDL與結(jié)構(gòu)化語言的主要區(qū)別在于:由于PDL表達(dá)的算法是編碼的直接依據(jù),因此其語法結(jié)構(gòu)更加嚴(yán)格并且處理過程更加具體詳細(xì)。PDL的主要特點(diǎn)如下:(1)各種定義語句及控制結(jié)構(gòu)的表達(dá)都具有嚴(yán)格的語法形式,使程序結(jié)構(gòu)、數(shù)據(jù)說明等更加清晰。(2)提供了數(shù)據(jù)說明機(jī)制,可用于定義簡單及復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。(3)提供了模塊的定義和調(diào)用機(jī)制,方便了程序模塊化的表達(dá)。PDL的主要定義語句及基本控制結(jié)構(gòu)的表達(dá)如下:(1)定義語句。①數(shù)據(jù)定義:DECLARE屬性變量名……屬性包括:整型、實(shí)型、雙精度型、字符型、指針、數(shù)組、結(jié)構(gòu)等類型。②模塊定義:PROCEDURE模塊名(參數(shù))RETURNEND(2)基本控制結(jié)構(gòu)。①順序控制結(jié)構(gòu)。順序結(jié)構(gòu)的語句序列采用自然語言進(jìn)行描述:語句序列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表達(dá)式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詳細(xì)設(shè)計(jì)工具的選擇為滿足過程描述易于理解、復(fù)審和維護(hù)進(jìn)而過程描述能夠自然地轉(zhuǎn)換成代碼,并保證詳細(xì)設(shè)計(jì)與代碼完全一致的原則,要求設(shè)計(jì)工具具有下述屬性。(1)模塊化:支持模塊化軟件的開發(fā),并提供描述接口的機(jī)制。(2)簡潔:設(shè)計(jì)描述易學(xué)、易用和易讀。(3)便于編輯:支持后續(xù)設(shè)計(jì)和維護(hù)以及在維護(hù)階段對設(shè)計(jì)進(jìn)行的修改。(4)機(jī)器可讀性:設(shè)計(jì)描述能夠直接輸入,并且很容易被計(jì)算機(jī)輔助設(shè)計(jì)工具識(shí)別。(5)可維護(hù)性:詳細(xì)設(shè)計(jì)應(yīng)能夠支持各種軟件配置項(xiàng)的維護(hù)。(6)自動(dòng)生成報(bào)告:設(shè)計(jì)者通過分析詳細(xì)設(shè)計(jì)的結(jié)果來改進(jìn)設(shè)計(jì)。通過自動(dòng)處理器產(chǎn)生有關(guān)的分析報(bào)告,進(jìn)而增強(qiáng)設(shè)計(jì)者在這方面的能力。(7)強(qiáng)制結(jié)構(gòu)化:詳細(xì)設(shè)計(jì)工具能夠強(qiáng)制設(shè)計(jì)者采用結(jié)構(gòu)化構(gòu)件,有助于采用優(yōu)秀的設(shè)計(jì)。(8)數(shù)據(jù)表示:詳細(xì)設(shè)計(jì)具備表示局部數(shù)據(jù)和全局?jǐn)?shù)據(jù)的能力。(9)邏輯驗(yàn)證:軟件測試的最高目標(biāo)是能夠自動(dòng)檢驗(yàn)設(shè)計(jì)邏輯的正確性,所以設(shè)計(jì)描述應(yīng)易于進(jìn)行邏輯驗(yàn)證,進(jìn)而增強(qiáng)可測試性。(10)編碼能力:可編碼能力是一種設(shè)計(jì)描述,研究代碼自動(dòng)轉(zhuǎn)換技術(shù)可以提高軟件效率和減少出錯(cuò)率。6.6接口設(shè)計(jì)6.6.1用戶界面設(shè)計(jì)的意義及任務(wù)用戶界面也稱為人機(jī)界面,是用戶與計(jì)算機(jī)或手機(jī)等終端設(shè)備交流的媒介。用戶只能通過顯示屏界面了解并掌控操作運(yùn)行的系統(tǒng),人機(jī)界面設(shè)計(jì)非常重要。界面設(shè)計(jì)主要包括界面對話設(shè)計(jì)、數(shù)據(jù)輸入界面設(shè)計(jì)、屏幕顯示設(shè)計(jì)、控制界面設(shè)計(jì)等,是計(jì)算機(jī)科學(xué)、心理學(xué)、視覺藝術(shù)等多門學(xué)科的綜合。用戶界面設(shè)計(jì)的分析設(shè)計(jì)應(yīng)與軟件需求分析同步進(jìn)行。其主要任務(wù)如下:(1)用戶特性分析,主要是建立用戶模型,了解所有用戶的技能和經(jīng)驗(yàn),針對用戶能力設(shè)計(jì)或更改界面??蓮膬煞矫娣治觯阂皇怯脩纛愋?,通常分為外行型、初學(xué)型、熟練型、專家型;二是用戶特性度量,與用戶使用模式和用戶群體能力有關(guān),包括用戶使用頻度、用戶用機(jī)能力、用戶的知識(shí)和思維能力等。(2)界面的功能任務(wù)分析。建立任務(wù)模型數(shù)據(jù)流圖(DataFlowDiagram,DFD),對系統(tǒng)內(nèi)部活動(dòng)的分解,不僅要進(jìn)行功能分解(用DFD描述),還要包括與人相關(guān)的活動(dòng),每個(gè)加工即一個(gè)功能或任務(wù)。(3)確定用戶界面類型,并根據(jù)其特點(diǎn)借助工具具體進(jìn)行分析與設(shè)計(jì)。6.6.2用戶界面設(shè)計(jì)的主要問題在設(shè)計(jì)用戶界面的過程中,一般經(jīng)常會(huì)遇到4個(gè)問題:系統(tǒng)響應(yīng)時(shí)間、用戶幫助設(shè)施、出錯(cuò)信息處理和命令交互。但是,許多設(shè)計(jì)者直到設(shè)計(jì)過程后期才開始考慮這些問題,這樣往往導(dǎo)致不必要的反復(fù)、項(xiàng)目延期以及使用戶產(chǎn)生挫折感。最好在設(shè)計(jì)初期就考慮這些問題,這樣易修改,代價(jià)也低。1.系統(tǒng)響應(yīng)時(shí)間一般來說,系統(tǒng)響應(yīng)時(shí)間是指從用戶完成某個(gè)控制動(dòng)作,到軟件給出預(yù)期的響應(yīng)(輸出或做動(dòng)作)之間的這段時(shí)間。系統(tǒng)響應(yīng)時(shí)間過長是許多交互式系統(tǒng)用戶常抱怨的問題。系統(tǒng)響應(yīng)時(shí)間有兩個(gè)重要屬性:長度和易變性。如果系統(tǒng)響應(yīng)時(shí)間過長,用戶就會(huì)感到緊張和沮喪。但是,當(dāng)用戶的工作速度是由人機(jī)界面決定的時(shí)候,如果系統(tǒng)響應(yīng)時(shí)間過短,就會(huì)迫使用戶加快操作節(jié)奏,從而可能犯錯(cuò)誤。易變性指系統(tǒng)響應(yīng)時(shí)間相對于平均響應(yīng)時(shí)間的偏差,在許多情況下,這是系統(tǒng)響應(yīng)時(shí)間的更重要的屬性。即使系統(tǒng)響應(yīng)時(shí)間較長,響應(yīng)時(shí)間易變性低也有助于用戶建立起穩(wěn)定的工作節(jié)奏。用戶往往比較敏感,他們總是擔(dān)心響應(yīng)時(shí)間的變化暗示系統(tǒng)工作出現(xiàn)異常。2.用戶幫助設(shè)施交互式系統(tǒng)的每個(gè)用戶幾乎都需要幫助,當(dāng)遇到復(fù)雜問題時(shí)甚至需要查看用戶手冊以得到答案。大多數(shù)現(xiàn)代軟件都提供聯(lián)機(jī)幫助設(shè)施,這使得用戶可以不離開用戶界面就解決自己的問題。常見的幫助設(shè)施有兩類:集成的和附加的。集成的幫助設(shè)施從一開始就設(shè)計(jì)在軟件里面,它通常對用戶工作是敏感的,因此用戶可以從與剛剛完成的操作有關(guān)的主題中選擇一個(gè),請求幫助。顯然,這可以縮短用戶獲取幫助的時(shí)間,增加界面的友好性。附加的幫助設(shè)施是在系統(tǒng)建成后再添加到軟件中的,大多數(shù)情況下,它實(shí)際上是一種查詢能力有限的聯(lián)機(jī)用戶手冊。事實(shí)表明,集成的幫助設(shè)施優(yōu)于附加的幫助設(shè)施。具體設(shè)計(jì)幫助設(shè)施時(shí),必須解決以下問題:(1)在用戶與系統(tǒng)交互期間,是否在任何時(shí)間都能獲得關(guān)于系統(tǒng)任何功能的幫助信息。它有兩種選擇:提供部分功能的幫助信息和提供全部功能的幫助信息。(2)用戶怎樣請求幫助,有3種選擇:幫助菜單、特殊功能鍵和Help命令。(3)怎樣顯示幫助信息,有3種選擇:在獨(dú)立的窗口中顯示、指出參考某個(gè)文檔(不理想)和在屏幕固定位置顯示簡短提示。(4)用戶怎樣返回到正常的交互方式,有兩種選擇:屏幕上的返回按鈕和功能鍵。(5)怎樣組織幫助信息,有3種選擇:平面結(jié)構(gòu)(所有信息都通過關(guān)鍵字訪問)、信息的層次結(jié)構(gòu)(用戶可在該結(jié)構(gòu)中查到更詳細(xì)的信息)和超文本結(jié)構(gòu)。3.出錯(cuò)信息處理出錯(cuò)信息和警告信息是出現(xiàn)問題時(shí)交互式系統(tǒng)給出的“壞消息”。出錯(cuò)信息設(shè)計(jì)得不好,將向用戶提供無用的或誤導(dǎo)的信息,反而會(huì)增加用戶的挫折感。一般來說,交互式系統(tǒng)給出的出錯(cuò)信息或警告信息應(yīng)該具有以下屬性:(1)信息應(yīng)該以用戶可以理解的術(shù)語描述問題。(2)信息應(yīng)該提供有助于從錯(cuò)誤中恢復(fù)的建設(shè)性意見。(3)信息應(yīng)該指出錯(cuò)誤可能導(dǎo)致哪些負(fù)面后果,以便用戶檢查是否出現(xiàn)了這些問題,并在確實(shí)出現(xiàn)問題時(shí)予以改正。(4)信息應(yīng)該伴隨著聽覺上或視覺上的提示,即在顯示信息時(shí)應(yīng)該同時(shí)發(fā)出警告聲,或者用閃爍方式顯示,或者用明顯表示出錯(cuò)的顏色顯示。(5)信息不能帶有指責(zé)色彩,即不能指責(zé)用戶。當(dāng)出現(xiàn)問題時(shí),有效的出錯(cuò)信息能夠提高交互式系統(tǒng)的質(zhì)量,減少用戶的挫折感。4.命令交互命令行曾是用戶和系統(tǒng)軟件交互的最常用方式,而且也曾廣泛地用于各種應(yīng)用軟件中?,F(xiàn)在面向窗口的、點(diǎn)擊和拾取方式的界面已經(jīng)減少了用戶對命令行的依賴,但許多高級(jí)用戶仍偏愛面向命令的交互方式。在多數(shù)情況下,用戶既可以從菜單中選擇軟件功能,也可通過鍵盤命令序列調(diào)用軟件功能。在提供命令交互方式時(shí),必須考慮以下設(shè)計(jì)問題:(1)是否每個(gè)菜單選項(xiàng)都有對應(yīng)的命令。(2)采用何種命令形式,共有3種選擇:快捷鍵(如Ctrl?+?P)、功能鍵和鍵入命令。(3)學(xué)習(xí)和記憶命令的難度有多大,忘記了命令怎么辦?(4)用戶是否可以定制或縮寫命令。在越來越多的應(yīng)用軟件中,界面設(shè)計(jì)者都提供了“命令宏機(jī)制”,使用這種機(jī)制用戶可以用自己定義的名字代表一個(gè)常用的命令序列。需要使用這個(gè)命令序列時(shí),用戶無須依次鍵入每個(gè)命令,只需輸入命令宏的名字就可以順序執(zhí)行它所代表的全部命令。在理想情況下,所有應(yīng)用軟件都有一致的命令使用方法。如果在一個(gè)應(yīng)用軟件中,命令Ctrl?+?D表示復(fù)制一個(gè)圖形對象,而在另一個(gè)應(yīng)用軟件中Ctrl?+?D命令的含義是刪除一個(gè)圖形對象,則用戶會(huì)感到困惑,并往往導(dǎo)致錯(cuò)誤。一般情況下,在常用的應(yīng)用軟件中采用了一致的快捷鍵來完成相同的功能,如用Ctrl?+?C表示復(fù)制,用Ctrl?+?V表示粘貼,用Ctrl?+?S表示保存,用Ctrl?+?O表示打開。因此,所設(shè)計(jì)的軟件就不要?jiǎng)e出心裁,另搞一套,這樣會(huì)使用戶感到無所適從。6.6.3用戶界面需求分析用戶界面需求分析應(yīng)以用戶為中心。深受用戶歡迎的界面設(shè)計(jì),應(yīng)在需求分析階段就被重視和開始。用戶界面設(shè)計(jì)主要是為了滿足用戶需求,首先要弄清將要使用這個(gè)界面的用戶類型。用戶界面不同于功能需求分析,其需求具有很大的主觀性。不同的用戶對軟件界面有不同的要求,表達(dá)需求的方式也不盡相同,而且界面要求通常不如業(yè)務(wù)功能需求那樣容易明確。調(diào)查用戶的界面需求,必須先從調(diào)查用戶自身特征開始,將不同特征用戶群體的要求進(jìn)行綜合處理,并有針對性地分析其界面需求。建立用戶界面的原型是一種有效的方法。利用界面原型可以將界面需求調(diào)查的周期盡量縮短,并盡可能滿足用戶的要求。利用可供用戶選擇的界面原型模板等,用戶可以直觀并感性地認(rèn)識(shí)到未來系統(tǒng)的界面風(fēng)格、特點(diǎn)結(jié)構(gòu)、操作方式等,從而迅速地判斷軟件系統(tǒng)是否符合感官期望、操作習(xí)慣、工作的需要。需求分析人員利用界面原型,引導(dǎo)用戶修正自己的理想系統(tǒng),提出新的界面要求。6.6.4用戶界面的特性及設(shè)計(jì)原則1.用戶界面應(yīng)具有的特性用戶界面設(shè)計(jì)的類型,從用戶角度出發(fā)主要有菜單、對話框、窗口、問題描述語言、數(shù)據(jù)表格、圖形與圖標(biāo)等。每一種類型都有不同的特點(diǎn)和性能,需要根據(jù)具體情況進(jìn)行具體設(shè)計(jì)和實(shí)現(xiàn)。通常,用戶界面設(shè)計(jì)完成后可借助工具實(shí)現(xiàn)。界面設(shè)計(jì)需要考慮3個(gè)特性。(1)可使用性。它主要包括這幾個(gè)方面:使用簡單,用戶界面中所用術(shù)語的標(biāo)準(zhǔn)化及一致性,具有幫助功能、快速的系統(tǒng)響應(yīng)、低系統(tǒng)成本和較好的容錯(cuò)能力。(2)靈活性。它主要指3個(gè)方面:考慮用戶的特點(diǎn)、能力和知識(shí)水平,提供不同的系統(tǒng)響應(yīng)信息,能根據(jù)用戶需求制定和修改界面。(3)界面的復(fù)雜性與可靠性。復(fù)雜性指界面規(guī)模及組織的復(fù)雜程度,應(yīng)該越簡單越好??煽啃允侵笩o故障使用的時(shí)間間隔。用戶界面應(yīng)該能夠保證用戶正確、可靠地使用系統(tǒng),以及系統(tǒng)和數(shù)據(jù)的安全。2.用戶界面設(shè)計(jì)的原則通常,用戶界面設(shè)計(jì)應(yīng)遵循以下4項(xiàng)基本原則:(1)界面的合適性。界面的合適性是界面設(shè)計(jì)的首要因素,在實(shí)現(xiàn)界面功能特點(diǎn)的情況下,不要片面追求外觀而導(dǎo)致華而不實(shí)。界面的合適性既提倡外美內(nèi)秀,又強(qiáng)調(diào)恰如其分。(2)簡便易操作。界面設(shè)計(jì)盡量簡潔,便于操作,減少用戶記憶,并能減少用戶發(fā)生錯(cuò)誤的可能性。應(yīng)考慮人腦處理信息的限度,如屏幕劃分的合理性,多種窗口的設(shè)計(jì)方式,可移動(dòng)、縮放、重疊和分離的設(shè)計(jì),有序整齊的界面會(huì)給用戶帶來方便。(3)便于交互控制。交互常會(huì)跨越邊界進(jìn)入信息顯示、數(shù)據(jù)輸入和整體系統(tǒng)控制,應(yīng)提供視覺和聽覺的反饋,在用戶和界面間建立雙向聯(lián)系。對用戶操作做出反應(yīng)及信息提示,幫助處理問題,并允許交互式應(yīng)用進(jìn)行“恢復(fù)”操作。(4)媒體組合恰當(dāng)。文本、圖形、動(dòng)畫、視頻影像、語音等媒體都有其優(yōu)勢及特定范圍,媒體資源也并非愈多愈好,媒體的選擇應(yīng)注意結(jié)合與互補(bǔ),恰當(dāng)選用。6.6.5人機(jī)界面設(shè)計(jì)過程用戶界面設(shè)計(jì)是一個(gè)迭代的過程,如圖6.21所示。通常先創(chuàng)建設(shè)計(jì)模型,再用原型實(shí)現(xiàn)這個(gè)模型,并由用戶試用和評估,然后根據(jù)用戶的意見進(jìn)行修改,如此反復(fù)直至最后完成界面設(shè)計(jì)。1.任務(wù)分析與創(chuàng)建設(shè)計(jì)模型在人機(jī)界面設(shè)計(jì)過程中先后涉及4個(gè)模型:設(shè)計(jì)者創(chuàng)建的設(shè)計(jì)模型、用戶模型、終端用戶對系統(tǒng)的假想和系統(tǒng)實(shí)現(xiàn)后的系統(tǒng)映像。這4個(gè)模型之間存在較多差異,設(shè)計(jì)界面時(shí)必須充分協(xié)調(diào),導(dǎo)出一致的界面。建立設(shè)計(jì)模型應(yīng)充分考慮用戶模型中給出的信息,如用戶的年齡、性別、心理情況、所受教育、文化、種族背景、動(dòng)機(jī)、目的、個(gè)性等;系統(tǒng)映像盡量與系統(tǒng)假想相吻合,還必須準(zhǔn)確地反映系統(tǒng)的語法和語義信息。設(shè)計(jì)模型源于設(shè)計(jì)者對人機(jī)界面設(shè)計(jì)任務(wù)的分析。

溫馨提示

  • 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

提交評論