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

下載本文檔

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

文檔簡(jiǎn)介

第4章

軟件詳細(xì)設(shè)計(jì)4.1結(jié)構(gòu)化程序設(shè)計(jì)4.2用戶(hù)界面設(shè)計(jì)4.3程序算法設(shè)計(jì)工具4.4面向數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)方法4.5程序復(fù)雜度的概念及度量方法4.6小結(jié)習(xí)題4

知識(shí)點(diǎn)

結(jié)構(gòu)化程序設(shè)計(jì),用戶(hù)界面設(shè)計(jì),程序算法設(shè)計(jì)工具,面向數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)方法,程序復(fù)雜程度的定量度量。

難點(diǎn)

用戶(hù)界面設(shè)計(jì),面向數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)方法,程序的環(huán)形復(fù)雜度計(jì)算。

基于工作過(guò)程的教學(xué)任務(wù)

通過(guò)本章的學(xué)習(xí),了解軟件詳細(xì)設(shè)計(jì)的任務(wù)、結(jié)構(gòu)化程序設(shè)計(jì)的基本原理,掌握人機(jī)界面的設(shè)計(jì)中需要解決的問(wèn)題,掌握程序算法設(shè)計(jì)工具,并能在實(shí)際開(kāi)發(fā)軟件的過(guò)程中應(yīng)用所學(xué)到的方法。另外,還要求掌握面向數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)方法。熟悉掌握對(duì)程序復(fù)雜程序的定量度量的估計(jì)方法。

總體設(shè)計(jì)是詳細(xì)設(shè)計(jì)的基礎(chǔ),必須經(jīng)復(fù)查確認(rèn)后才可以開(kāi)始詳細(xì)設(shè)計(jì)。總體設(shè)計(jì)的重點(diǎn)是確定構(gòu)成系統(tǒng)的模塊及其之間的聯(lián)系,詳細(xì)設(shè)計(jì)則是根據(jù)總體設(shè)計(jì)提供的文檔,對(duì)各模塊給出詳細(xì)的過(guò)程性描述及其他具體設(shè)計(jì)等。

在程序過(guò)程設(shè)計(jì)階段,要決定各個(gè)模塊的實(shí)現(xiàn)算法,并精確地表達(dá)這些算法。表達(dá)程序處理過(guò)程的工具叫做詳細(xì)設(shè)計(jì)工具,也稱(chēng)作程序算法設(shè)計(jì)工具。它可以分為以下三類(lèi):

(1)圖形工具:如程序流程圖。

(2)表格工具:如判定表、判定樹(shù)。

(3)語(yǔ)言工具:如過(guò)程設(shè)計(jì)語(yǔ)言(PDL)。

軟件詳細(xì)設(shè)計(jì)的目標(biāo)是對(duì)目標(biāo)系統(tǒng)做出精確的設(shè)計(jì)描述,其主要任務(wù)包括:模塊的程序算法設(shè)計(jì)、模塊內(nèi)的數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)、模塊接口設(shè)計(jì)、模塊測(cè)試用例設(shè)計(jì)、編寫(xiě)詳細(xì)設(shè)計(jì)說(shuō)明書(shū)、詳細(xì)設(shè)計(jì)評(píng)審。

詳細(xì)設(shè)計(jì)是為后續(xù)具體編程實(shí)現(xiàn)做準(zhǔn)備,其處理過(guò)程應(yīng)簡(jiǎn)明易懂,并選擇恰當(dāng)?shù)拿枋龉ぞ弑硎瞿K算法。

軟件詳細(xì)設(shè)計(jì)的結(jié)果將成為程序?qū)崿F(xiàn)的依據(jù)。需要注意的是,詳細(xì)設(shè)計(jì)結(jié)果不僅要求邏輯上正確,還要求對(duì)處理過(guò)程的設(shè)計(jì)應(yīng)該盡可能簡(jiǎn)明易懂,以方便在對(duì)程序進(jìn)行測(cè)試、維護(hù)時(shí),程序具有可讀性并容易理解。可以說(shuō),詳細(xì)設(shè)計(jì)的結(jié)果基本上決定了最終的程序代碼的質(zhì)量。另外,考慮程序代碼的質(zhì)量時(shí)必須注意,程序的“讀者”有兩個(gè),那就是計(jì)算機(jī)和程序員。

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

結(jié)構(gòu)化程序的基本特征是程序的任何位置都是單入口、單出口的。因此,結(jié)構(gòu)化程序設(shè)計(jì)中,GOTO語(yǔ)句的使用受到了限制(原因是GOTO語(yǔ)句具有的隨意指向特性有可能破壞結(jié)構(gòu)化程序所要求的單入口和單出口特征),并且程序控制也要求采用結(jié)構(gòu)化的控制結(jié)構(gòu),以確保程序的單入口和單出口特性。

4.1.1結(jié)構(gòu)化的控制結(jié)構(gòu)

結(jié)構(gòu)化程序設(shè)計(jì)思想最早由E.W.Dijkstra提出,他在1965年的一次會(huì)議上指出:程序的質(zhì)量與程序中所包含的GOTO語(yǔ)句的數(shù)量成反比,因此有必要從高級(jí)語(yǔ)言中取消GOTO語(yǔ)句。1966年,Bohm和Jacopini又證明了,只需使用圖4-1所示的“順序”、“選擇”和“循環(huán)”這三種基本的控制結(jié)構(gòu)就能實(shí)現(xiàn)任何復(fù)雜的程序計(jì)算問(wèn)題。1972年,IBM公司的Mills進(jìn)一步提出,結(jié)構(gòu)化程序必須具有單入口和單出口的特征。

圖4-1三種基本控制結(jié)構(gòu)

結(jié)構(gòu)化程序設(shè)計(jì)本質(zhì)上并不是無(wú)GOTO語(yǔ)句的編程方法,而是一種使程序代碼容易閱讀、容易理解的編程方法。在多數(shù)情況下,無(wú)GOTO語(yǔ)句的代碼確實(shí)是容易閱讀、容易理解的代碼,但是,在某些情況下,為了達(dá)到容易閱讀和容易理解的目的,反而需要使用GOTO語(yǔ)句。因此,下述的結(jié)構(gòu)化程序設(shè)計(jì)的定義是對(duì)經(jīng)典定義的進(jìn)一步補(bǔ)充:“結(jié)構(gòu)程序設(shè)計(jì)是盡可能少用GOTO語(yǔ)句的程序設(shè)計(jì)方法。最好僅在檢測(cè)出錯(cuò)誤時(shí)才使用GOTO語(yǔ)句,而且應(yīng)該總是使用前向GOTO語(yǔ)句?!?/p>

雖然從理論上說(shuō)只用上述三種基本控制結(jié)構(gòu)就可以實(shí)現(xiàn)任何單入口單出口的程序,但是為了實(shí)際使用方便,常常還允許使用擴(kuò)展的控制結(jié)構(gòu),包括DO-UNTIL和多分支選擇(DO-CASE)結(jié)構(gòu)兩種控制結(jié)構(gòu),它們的流程圖分別如圖4-2(a)和圖4-2(b)所示。

圖4-2擴(kuò)展的控制結(jié)構(gòu)

4.1.2結(jié)構(gòu)化程序設(shè)計(jì)的實(shí)現(xiàn)方法

結(jié)構(gòu)化程序設(shè)計(jì)的實(shí)現(xiàn)方法包括兩個(gè)方面:一是將復(fù)雜問(wèn)題的解法分解和細(xì)化成由若干個(gè)模塊組成的層次結(jié)構(gòu);二是將每個(gè)模塊的功能逐步分解細(xì)化為一系列的處理。可以說(shuō),結(jié)構(gòu)化程序設(shè)計(jì)的基本途徑就是對(duì)程序問(wèn)題自頂向下、逐步求精。

具體而言,對(duì)于某一個(gè)要解決的問(wèn)題,在尋求它的解法過(guò)程中,首先從問(wèn)題的整體(最頂層)出發(fā),將它分解成獨(dú)立而互不交叉的若干個(gè)子問(wèn)題,每個(gè)子問(wèn)題解決整體問(wèn)題的一部分或一種情況。針對(duì)每個(gè)子問(wèn)題,仍采用對(duì)待整體問(wèn)題解的思路,繼續(xù)對(duì)其進(jìn)行分解(求精),得到該子問(wèn)題解法的分解步驟,即更低一層次的子問(wèn)題。如此下去,直到最低層的每個(gè)子問(wèn)題都能用計(jì)算機(jī)語(yǔ)言表示出來(lái)或都能明顯寫(xiě)出解法為止,這樣便找到了解決整個(gè)問(wèn)題的算法了。經(jīng)過(guò)不斷的細(xì)化、求精過(guò)程,問(wèn)題的解法會(huì)不斷清晰、明了。

上述的求精過(guò)程中的每一步,即分解某一具體問(wèn)題時(shí),主要用到如下四種求精技術(shù):

(1)順序連接的求精技術(shù);

(2)分支、選擇的求精技術(shù);

(3)循環(huán)的求精技術(shù);

(4)遞歸的求精技術(shù)。

當(dāng)問(wèn)題的子解具有前后關(guān)系時(shí),采用第一種求精技術(shù),將問(wèn)題分解成互不相交的幾個(gè)子問(wèn)題順序執(zhí)行。當(dāng)問(wèn)題是分不同情況而應(yīng)該進(jìn)行不同處理時(shí),采用第二種求精技術(shù),構(gòu)造分支。這時(shí)要注意分支的條件一定要正確。

當(dāng)具有往解的方向更進(jìn)一步細(xì)化的方法,且不斷重復(fù)該步驟即能解決問(wèn)題,最終達(dá)到完全解,則應(yīng)該采用循環(huán)的求精技術(shù)(構(gòu)造循環(huán))。這時(shí)一定要弄清循環(huán)的初始條件、結(jié)束條件和有限進(jìn)展的每一步都是什么。

當(dāng)問(wèn)題的某步解法與前邊高層次的某步解法具有相同性質(zhì),只是某些參數(shù)不同時(shí),可采用遞歸的求精技術(shù)。這時(shí)應(yīng)注意遞歸的參數(shù)變化規(guī)律以及遞歸出口。

自頂向下、逐步求精的方法曾被應(yīng)用于總體設(shè)計(jì)之中,由此可以把一個(gè)復(fù)雜的軟件問(wèn)題分解和細(xì)化成由許多模塊組成的具有層次結(jié)構(gòu)的軟件系統(tǒng)。而在詳細(xì)設(shè)計(jì)或編碼階段,通過(guò)自頂向下、逐步求精,則可以把一個(gè)模塊的功能進(jìn)一步分解細(xì)化為一系列具體的處理步驟,直到對(duì)應(yīng)為某種高級(jí)語(yǔ)言的語(yǔ)句。

4.1.3結(jié)構(gòu)化程序設(shè)計(jì)的特點(diǎn)

結(jié)構(gòu)化程序設(shè)計(jì)技術(shù),具有以下主要特點(diǎn):

(1)自頂而下,逐步求精。

逐步求精的思想符合人類(lèi)解決復(fù)雜問(wèn)題的普遍規(guī)律,可以顯著提高軟件開(kāi)發(fā)的效率。而且這種思想還體現(xiàn)了先全局、后局部,先抽象、后具體的方法,使開(kāi)發(fā)的程序?qū)哟谓Y(jié)構(gòu)清晰,易讀、易理解,還易驗(yàn)證,因而提高了程序的質(zhì)量。

將程序自頂向下逐步細(xì)化的分解過(guò)程用一個(gè)樹(shù)型結(jié)構(gòu)來(lái)描述,如圖4-3所示。

圖4-3自頂而下的逐步求精

(2)單入口和單出口的控制結(jié)構(gòu)。

結(jié)構(gòu)化程序僅由順序、選擇、循環(huán)三種基本控制結(jié)構(gòu)組成,既保證了程序結(jié)構(gòu)清晰,又提高了程序代碼的可重用性。這三種基本結(jié)構(gòu)可以組成所有的各種復(fù)雜程序。

4.2用戶(hù)界面設(shè)計(jì)

在計(jì)算機(jī)應(yīng)用中,用戶(hù)與計(jì)算機(jī)都要以適當(dāng)?shù)男问桨严鬟f給對(duì)方,稱(chēng)為人機(jī)交互(HumanComputerInterface,HCI)。交互是通過(guò)界面進(jìn)行的,這種界面既存在于用戶(hù)與計(jì)算機(jī)硬件之間,也存在于用戶(hù)與一切軟件(包括系統(tǒng)軟件與應(yīng)用軟件)之間,所以現(xiàn)在常把“用戶(hù)界面”簡(jiǎn)稱(chēng)為“HCI”。

用戶(hù)界面設(shè)計(jì)是接口設(shè)計(jì)的一個(gè)重要的組成部分。用戶(hù)界面的設(shè)計(jì)質(zhì)量,直接影響用戶(hù)對(duì)軟件產(chǎn)品的評(píng)價(jià),從而影響軟件產(chǎn)品的競(jìng)爭(zhēng)力和壽命。用戶(hù)界面“好不好”主要看它是否“容易使用”和“美觀”,而且軟件是否易用、是否美觀要讓用戶(hù)來(lái)評(píng)價(jià)。

1.用戶(hù)界面應(yīng)具備的特性

(1)可使用性:使用簡(jiǎn)單(輸入畫(huà)面盡可能接近實(shí)際);用戶(hù)界面中的術(shù)語(yǔ)標(biāo)準(zhǔn)且有一致性,便于用戶(hù)學(xué)習(xí);擁有HELP幫助功能;快速的系統(tǒng)響應(yīng)和低的系統(tǒng)成本;具有容錯(cuò)能力。

(2)靈活性:寧可讓程序多干,不可讓用戶(hù)多干。

(3)簡(jiǎn)單可靠:在完成預(yù)定功能的前提下,用戶(hù)界面越簡(jiǎn)單越好;能保證用戶(hù)正確、可靠地使用系統(tǒng),保證有關(guān)程序和數(shù)據(jù)的安全性。

2.界面設(shè)計(jì)的基本類(lèi)型

從用戶(hù)與計(jì)算機(jī)交互的角度來(lái)看,用戶(hù)界面設(shè)計(jì)的類(lèi)型主要有問(wèn)題描述語(yǔ)言、數(shù)據(jù)表格、圖形與圖表、菜單、對(duì)話以及窗口等。

3.圖形用戶(hù)界面(GUI)的特點(diǎn)

早期的用戶(hù)界面大多是基于命令方式的,界面外觀簡(jiǎn)單,一般由軟件設(shè)計(jì)人員獨(dú)立完成?,F(xiàn)今的用戶(hù)界面則大多是圖形用戶(hù)界面(GUI),并具有以下幾方面的特點(diǎn):

(1)容易學(xué)習(xí)和使用,沒(méi)有計(jì)算機(jī)基礎(chǔ)的用戶(hù)經(jīng)過(guò)短期培訓(xùn)就能學(xué)會(huì)使用這種界面;

(2)用戶(hù)可利用多屏幕(窗口)與系統(tǒng)進(jìn)行交互,并可通過(guò)任務(wù)窗方便地由一個(gè)任務(wù)轉(zhuǎn)換到另一個(gè)任務(wù);

(3)可以實(shí)現(xiàn)快速、全屏的交互,能很快在屏幕上的任何地方進(jìn)行操作。

4.2.1黃金規(guī)則

1997年,TheoMandel在其關(guān)于界面設(shè)計(jì)的著作中提出了三條用于用戶(hù)界面設(shè)計(jì)的“黃金規(guī)則”:

置用戶(hù)操作于控制之下;

減少用戶(hù)的記憶負(fù)擔(dān);

保持界面一致。

1.置用戶(hù)操作于控制之下

(1)以不強(qiáng)迫用戶(hù)進(jìn)入不必要的或不希望的動(dòng)作的方式來(lái)定義交互方式。交互模式是界面的當(dāng)前狀態(tài)。例如,用戶(hù)在字處理菜單中選擇拼寫(xiě)檢查,軟件將轉(zhuǎn)移到拼音檢查模式。如果用戶(hù)在這種情況下又希望進(jìn)行一些文本編輯,則沒(méi)有理由強(qiáng)迫用戶(hù)停留在拼寫(xiě)檢查模式,用戶(hù)能夠幾乎不需做如何動(dòng)作就進(jìn)入和退出該模式。

(2)提供靈活的交互方式。不同用戶(hù)有不同的偏好,界面中應(yīng)該給用戶(hù)提供不同的選擇。例如,允許用戶(hù)通過(guò)鍵盤(pán)命令、鼠標(biāo)移動(dòng)、多觸摸屏或語(yǔ)音識(shí)別命令等方式進(jìn)行交互。

(3)用戶(hù)交互可以被中斷和撤消。當(dāng)陷入到一系列動(dòng)作之中時(shí),用戶(hù)應(yīng)該能夠中斷動(dòng)作序列去做某些其他事情。用戶(hù)應(yīng)該能夠“撤銷(xiāo)”任何動(dòng)作。

(4)允許用戶(hù)與出現(xiàn)在屏幕上的對(duì)象直接交互。當(dāng)用戶(hù)能夠操縱界面上的對(duì)象,并且操縱時(shí)可以獲得操縱一個(gè)真實(shí)物理對(duì)象的體驗(yàn)時(shí),用戶(hù)就會(huì)有一種控制感。

2.減少用戶(hù)的記憶負(fù)擔(dān)

(1)減少對(duì)短期記憶的要求。當(dāng)用戶(hù)陷入復(fù)雜的任務(wù)中時(shí),短期記憶的要求將會(huì)很大。界面設(shè)計(jì)應(yīng)該盡量不要求記住過(guò)去的動(dòng)作、輸入和結(jié)果。

(2)建立有意義的缺省。初始的缺省集合應(yīng)該對(duì)一般的用戶(hù)有意義,同時(shí),用戶(hù)可以設(shè)定個(gè)人的偏好。應(yīng)提供“reset(重置)”選項(xiàng),可便于重新定義初始缺省值。

(3)定義直觀的快捷方式。當(dāng)使用助記符來(lái)完成系統(tǒng)功能時(shí),助記符應(yīng)該以容易記憶的方式聯(lián)系到相關(guān)動(dòng)作。

(4)界面的視覺(jué)布局應(yīng)該基于真實(shí)世界。例如,一個(gè)賬單支付系統(tǒng)應(yīng)該在界面顯示可視化的支票簿和支票登記簿來(lái)指導(dǎo)用戶(hù)完成賬單支付過(guò)程,這樣用戶(hù)只需依賴(lài)直觀可視提示,而不必記憶復(fù)雜難懂的交互序列。

3.保持界面一致

界面應(yīng)該以一致的方式展示和獲取信息,這意味著:按照統(tǒng)一的標(biāo)準(zhǔn)設(shè)計(jì)屏幕顯示及組織可視信息;從一個(gè)任務(wù)到另一個(gè)任務(wù)的引導(dǎo)機(jī)制應(yīng)統(tǒng)一定義和實(shí)現(xiàn)。保持界面一致性的基本設(shè)計(jì)原則有以下三條:

(1)允許用戶(hù)將當(dāng)前任務(wù)放入有意義的環(huán)境中。當(dāng)需要通過(guò)使用數(shù)十個(gè)屏幕圖像來(lái)實(shí)現(xiàn)復(fù)雜的交互層次時(shí),提供指示器(如窗口標(biāo)題、圖標(biāo)、一致的顏色編碼)幫助用戶(hù)知道當(dāng)前工作環(huán)境是十分重要的。

(2)保持應(yīng)用系統(tǒng)的一致性。同一應(yīng)用系統(tǒng)(或一組產(chǎn)品)都應(yīng)按相同的設(shè)計(jì)規(guī)則來(lái)實(shí)現(xiàn),以保持交互方式的一致性。這方面,微軟的Office系列產(chǎn)品是一個(gè)很好的例子。

(3)如果用戶(hù)已經(jīng)習(xí)慣某種交互模式,除非有不得已的理由,否則不要改變,以免導(dǎo)致混淆。

4.2.2用戶(hù)界面的分析與設(shè)計(jì)

用戶(hù)界面分析和設(shè)計(jì)的過(guò)程始于創(chuàng)建不同的系統(tǒng)功能模型(從外部看對(duì)系統(tǒng)的感覺(jué))。用以完成系統(tǒng)功能的任務(wù)被分為面向人的和面向計(jì)算機(jī)的;考慮那些應(yīng)用到界面設(shè)計(jì)中的各種設(shè)計(jì)問(wèn)題,各種工具被用于建造原型和最終實(shí)現(xiàn)設(shè)計(jì)模型;最后由最終用戶(hù)從質(zhì)量的角度對(duì)結(jié)果進(jìn)行評(píng)估。

1.用戶(hù)界面分析和設(shè)計(jì)模型

分析和設(shè)計(jì)用戶(hù)界面時(shí)要考慮四種模型:由工程師(或者軟件工程師)創(chuàng)建的用戶(hù)模型;軟件工程師創(chuàng)建設(shè)計(jì)模型;最終用戶(hù)在腦海里對(duì)系統(tǒng)界面產(chǎn)生的映像(稱(chēng)為用戶(hù)的心理模型或系統(tǒng)感覺(jué));系統(tǒng)的實(shí)現(xiàn)者創(chuàng)建實(shí)現(xiàn)模型。不幸的是,這四種模型可能會(huì)相差甚遠(yuǎn),界面設(shè)計(jì)人員的任務(wù)就是消除這些差距,導(dǎo)出一致的界面表示。

用戶(hù)模型確立了系統(tǒng)最終用戶(hù)的輪廓。為了建立有效的用戶(hù)界面,開(kāi)始設(shè)計(jì)之前,必須對(duì)預(yù)期用戶(hù)加以了解,包括年齡、性別、身體狀況、教育、文化和種族背景、動(dòng)機(jī)、目標(biāo)以及性格。此外,還應(yīng)將用戶(hù)分為以下三類(lèi)來(lái)考慮:

(1)新手。對(duì)系統(tǒng)沒(méi)有任何了解,并且對(duì)應(yīng)用或計(jì)算機(jī)的一般用法幾乎沒(méi)有掌握什么語(yǔ)義知識(shí)(這里指應(yīng)用程序的內(nèi)在含義,即對(duì)執(zhí)行的功能、輸入/輸出的含義、系統(tǒng)目標(biāo)的理解)。

(2)對(duì)系統(tǒng)有部分了解的中級(jí)用戶(hù)。掌握適度的應(yīng)用語(yǔ)義知識(shí),但對(duì)使用界面所必需的語(yǔ)法信息的了解還比較少。

(3)熟練型用戶(hù)。對(duì)應(yīng)用有很好的語(yǔ)義知識(shí)和語(yǔ)法知識(shí)(這里指有效地使用界面所需要的交互機(jī)制)了解,這些用戶(hù)經(jīng)常尋找捷徑和簡(jiǎn)短的交互模式。

整個(gè)系統(tǒng)的設(shè)計(jì)模型應(yīng)考慮軟件數(shù)據(jù)的表示、體系結(jié)構(gòu)、界面形式和程序的實(shí)現(xiàn)方式,用戶(hù)需求規(guī)格說(shuō)明對(duì)系統(tǒng)提出了一定的要求,可以用來(lái)幫助定義系統(tǒng)的用戶(hù),界面的設(shè)計(jì)則往往是設(shè)計(jì)模型的附帶結(jié)果。

用戶(hù)的心理模型是最終用戶(hù)在腦海里對(duì)系統(tǒng)產(chǎn)生的印象,例如,請(qǐng)某個(gè)特定頁(yè)面風(fēng)格布局系統(tǒng)的用戶(hù)描述其操作,那么系統(tǒng)感覺(jué)將會(huì)引導(dǎo)用戶(hù)的回答,明確的回答取決于用戶(hù)的經(jīng)驗(yàn)和用戶(hù)對(duì)應(yīng)用領(lǐng)域軟件的熟悉程度。

實(shí)現(xiàn)模型包括計(jì)算機(jī)系統(tǒng)的外在表現(xiàn)(界面的感覺(jué)),以及所有用來(lái)描述系統(tǒng)信息(書(shū)、手冊(cè),錄像帶、幫助文件等)。當(dāng)系統(tǒng)實(shí)現(xiàn)模型和用戶(hù)心理模型一致的時(shí)候,用戶(hù)通常就比較容易接受該系統(tǒng),使用起來(lái)也比較有效。為了將這些模型融合起來(lái),設(shè)計(jì)模型中必須包含用戶(hù)模型中的一些信息,而實(shí)現(xiàn)模型必須準(zhǔn)確地反映界面的語(yǔ)法和語(yǔ)義信息。

這四種模型是“對(duì)用戶(hù)在使用交互式系統(tǒng)時(shí)的所做所想,或其他用戶(hù)所做所想的抽象”。從本質(zhì)上看,這四種模型使得界面設(shè)計(jì)人員滿(mǎn)足用戶(hù)界面設(shè)計(jì)中最重要原則的關(guān)鍵元素就是—了解用戶(hù),了解任務(wù)。

2.用戶(hù)界面分析和設(shè)計(jì)過(guò)程

用戶(hù)界面的分析和設(shè)計(jì)過(guò)程是迭代的,可以用類(lèi)似于第1章討論過(guò)的螺旋模型表示。如圖4-4所示,用戶(hù)界面分析和設(shè)計(jì)過(guò)程包括四個(gè)不同的框架活動(dòng):①界面分析和建模;②界面設(shè)計(jì);③界面構(gòu)造;④界面確認(rèn)。

圖4-4用戶(hù)界面分析和設(shè)計(jì)過(guò)程

圖4-4中的螺旋意味著每一個(gè)活動(dòng)都將多次出現(xiàn),每繞螺旋一周表示需求和設(shè)計(jì)的進(jìn)一步精化。在大多數(shù)情況下,實(shí)現(xiàn)活動(dòng)涉及原型開(kāi)發(fā)——這是唯一實(shí)用的確認(rèn)設(shè)計(jì)結(jié)果的方式。

界面分析和建?;顒?dòng)的重點(diǎn)在于了解及確定系統(tǒng)用戶(hù)的基本情況,通過(guò)確定用戶(hù)的操作水平、業(yè)務(wù)理解以及對(duì)新系統(tǒng)的一般感悟,來(lái)定義不同的用戶(hù)類(lèi)型。并在此基礎(chǔ)上針對(duì)每一個(gè)用戶(hù)類(lèi)別進(jìn)行需求誘導(dǎo)。本質(zhì)上,在這個(gè)活動(dòng)中,軟件工程師的任務(wù)就是了解每類(lèi)用戶(hù)并理解每類(lèi)用戶(hù)對(duì)系統(tǒng)的感覺(jué)。

用戶(hù)環(huán)境的分析著重于物理工作環(huán)境。需要了解問(wèn)題有:界面的物理定位如何?用戶(hù)是否將坐著、站著或完成其他與界面無(wú)關(guān)的任務(wù)?界面硬件是否適應(yīng)空間、光線或噪音的約束?是否存在由環(huán)境因素驅(qū)動(dòng)的特殊人性因素考慮?

界面設(shè)計(jì)的目標(biāo)是定義一組界面對(duì)象和相應(yīng)的動(dòng)作,用戶(hù)能夠使用這些界面對(duì)象和相應(yīng)動(dòng)作完成相應(yīng)的任務(wù)。

正常情況下,界面構(gòu)造活動(dòng)始于創(chuàng)建可供評(píng)估使用的界面原型。隨著迭代設(shè)計(jì)過(guò)程的繼續(xù),可使用用戶(hù)界面開(kāi)發(fā)工具完成及完善用戶(hù)界面。

界面確認(rèn)活動(dòng)著重于要確認(rèn):(1)界面正確地實(shí)現(xiàn)每個(gè)用戶(hù)任務(wù)的能力,界面適應(yīng)任務(wù)變更的能力以及滿(mǎn)足一般用戶(hù)需求的能力;(2)界面使用和學(xué)習(xí)的難易程度;(3)用戶(hù)對(duì)界面的接受程度。

4.2.3界面分析

在設(shè)計(jì)用戶(hù)界面時(shí),需要隨時(shí)想到用戶(hù)。例如,如何才能使用戶(hù)在沒(méi)有專(zhuān)門(mén)指導(dǎo)的情況下,自己發(fā)現(xiàn)應(yīng)用程序的各種功能?當(dāng)有錯(cuò)誤發(fā)生時(shí),應(yīng)用程序具有哪些容錯(cuò)措施能夠讓用戶(hù)從錯(cuò)誤陷阱中跳出來(lái)?界面是否具有藝術(shù)美感,從而使用戶(hù)感覺(jué)舒適?當(dāng)用戶(hù)需要幫助時(shí),能夠通過(guò)哪些方式獲得這些幫助?

實(shí)際上,設(shè)計(jì)用戶(hù)界面時(shí)會(huì)受諸多來(lái)源于用戶(hù)的因素的影響,這些因素主要體現(xiàn)在以下幾個(gè)方面。

1.用戶(hù)工作環(huán)境與工作習(xí)慣

用戶(hù)界面要解決的是用戶(hù)與軟件系統(tǒng)的交互問(wèn)題,因此,用戶(hù)在使用軟件時(shí)需要完成的工作將直接決定著用戶(hù)界面的基本格局。對(duì)此,需要考慮以下方面的問(wèn)題。

(1)用戶(hù)的工作環(huán)境。用戶(hù)界面中的元素及其操作應(yīng)該與用戶(hù)的工作環(huán)境盡量貼近。例如,某電路控制系統(tǒng)的界面,其界面元素就應(yīng)該是控制開(kāi)關(guān)、控制線路,相關(guān)操作則應(yīng)該是通電、斷電、合閘、拉閘等。

(2)用戶(hù)的工作習(xí)慣。界面設(shè)計(jì)應(yīng)該考慮到用戶(hù)工作中已經(jīng)形成的習(xí)慣。例如不要與用戶(hù)原有的業(yè)務(wù)流程發(fā)生沖突,使用用戶(hù)熟悉的領(lǐng)域術(shù)語(yǔ)等。

2.用戶(hù)操作定勢(shì)

用戶(hù)操作定勢(shì)是指用戶(hù)在使用系統(tǒng)時(shí)形成的一種思維定勢(shì)。如果某個(gè)操作引起某種變化,那么他就有理由相信另一個(gè)相似的操作所能夠帶來(lái)相似的結(jié)果,如果產(chǎn)生了完全不同的結(jié)果,用戶(hù)就會(huì)吃驚,并會(huì)感到困惑。

為了滿(mǎn)足用戶(hù)操作上形成的思維定勢(shì),界面設(shè)計(jì)者必須盡量使類(lèi)似的操作能夠具有類(lèi)似的效果。

3.界面一致性

界面一致性是指系統(tǒng)界面具有一致的風(fēng)格。例如,系統(tǒng)中的各個(gè)界面具有相同的命令格式,具有相似的菜單與工具欄構(gòu)造,相似的操作具有非常接近的觸發(fā)方式等。

4.界面動(dòng)作感

動(dòng)作感是一種感覺(jué),它能夠帶來(lái)操作線索。例如,錄音機(jī)上的按鈕,一看到它的外形就可以想到它所帶來(lái)的操作及用途。

用戶(hù)界面設(shè)計(jì)也存在動(dòng)作感。例如,命令按鈕往往被設(shè)置為三維立體效果,這可以使得這些按鈕看上去像是可以被按下去的東西。相比之下,如果命令按鈕被設(shè)計(jì)成平面邊框,它的動(dòng)作感就會(huì)下降。文本框也有動(dòng)作感,用戶(hù)可能習(xí)慣性地認(rèn)為,可編輯的文本框是帶有邊框和白色背景的框。

很顯然,界面設(shè)計(jì)中控件的動(dòng)作感是非常有用的輔助提示信息,可以使界面更容易被用戶(hù)理解,界面設(shè)計(jì)者應(yīng)該充分利用。

5.界面信息反饋

界面信息反饋是界面向用戶(hù)提供的有關(guān)界面操作方面的信息,可使得用戶(hù)知道當(dāng)前將要進(jìn)行的操作會(huì)產(chǎn)生什么結(jié)果,執(zhí)行進(jìn)度如何。因此,界面設(shè)計(jì)者應(yīng)該考慮如何在系統(tǒng)工作過(guò)程中為每個(gè)用戶(hù)建立必要的信息提示。

在大多數(shù)情況下,一個(gè)沙漏或一個(gè)等待指示器就提供了足夠的反饋來(lái)顯示程序正處于執(zhí)行狀態(tài)。但對(duì)那些可能需要較長(zhǎng)時(shí)間才能完成的操作,則需要一個(gè)更生動(dòng)的反饋形式,例如,進(jìn)度指示器。

6.個(gè)性化

個(gè)性化是指用戶(hù)可對(duì)界面外觀進(jìn)行特別的設(shè)置。如設(shè)置界面的背景色、字體、界面中子窗口的布局等,用戶(hù)可以將這些設(shè)置保存起來(lái),以作為他的個(gè)人偏好,當(dāng)下一次程序激活時(shí),界面將出現(xiàn)他所需要的界面外觀。

7.容錯(cuò)性

容錯(cuò)性是指用戶(hù)界面應(yīng)該可以容忍用戶(hù)的操作錯(cuò)誤并允許用戶(hù)進(jìn)行實(shí)驗(yàn)性操作,例如界面應(yīng)能夠自動(dòng)修正用戶(hù)在文本框中輸入的不正確的數(shù)據(jù)格式或給出錯(cuò)誤提示;允許用戶(hù)進(jìn)行操作試探,用戶(hù)選擇錯(cuò)誤的執(zhí)行路徑時(shí),能夠在需要的時(shí)候能“轉(zhuǎn)回”到開(kāi)始點(diǎn)。

容錯(cuò)性還隱含著可以進(jìn)行多級(jí)取消操作。但是并非任何時(shí)候都可以實(shí)現(xiàn)多級(jí)取消,尤其是在多用戶(hù)數(shù)據(jù)庫(kù)的應(yīng)用中。例如從銀行賬號(hào)中進(jìn)行轉(zhuǎn)出資金操作,這時(shí)對(duì)數(shù)據(jù)庫(kù)的操作就無(wú)法直接取消,而必須通過(guò)在另一次事務(wù)中將資金存入賬戶(hù)的方式來(lái)改正這個(gè)問(wèn)題。

8.審美性與可用性

審美性是界面視覺(jué)上的吸引力,而可用性則指界面在使用上是否方便、簡(jiǎn)單、有效以及可靠和高效。它們是兩個(gè)不同方面的問(wèn)題,但兩者相互關(guān)聯(lián),都將影響用戶(hù)對(duì)界面的滿(mǎn)意度。在考慮界面的美學(xué)特性的時(shí)候,需要考慮的問(wèn)題包括人眼睛的凝視和移動(dòng)、顏色的使用、平衡和對(duì)稱(chēng)的感覺(jué)、元素的排比和間隔、比例的感覺(jué)、相關(guān)元素的分組等。

界面中元素之間一致的間隔以及垂直與水平方向元素的對(duì)齊也可以使設(shè)計(jì)更具可用性。就像雜志中的文本那樣,行列整齊,行距一致的界面會(huì)顯得更加清晰。

界面設(shè)計(jì)中還需要考慮元素的位置。人的一般閱讀習(xí)慣是從上到下、從左到右,對(duì)于計(jì)算機(jī)屏幕也如此。大多數(shù)用戶(hù)的眼睛會(huì)首先注視屏幕的左上部位,所以最重要的或必須最先操作的元素一般也就應(yīng)當(dāng)放在屏幕的左上位置,而最不重要或需要最后操作的元素則一般放在屏幕的右下位置。

為了提高界面的審美性與可用性,界面設(shè)計(jì)中還需要考慮如何使用顏色,以增加對(duì)人的視覺(jué)影響。但是顏色不能濫用,目前的顯示器一般都具有了顯示上千萬(wàn)種顏色的能力,面對(duì)著許多的顏色,如果在設(shè)計(jì)時(shí)不做仔細(xì)地考慮,顏色也會(huì)像界面中的其他元素一樣出現(xiàn)許多問(wèn)題。

綜上因素考慮,可以將界面設(shè)計(jì)規(guī)則歸納為以下幾類(lèi):

(1)數(shù)據(jù)顯示的規(guī)則。

只顯示必要的數(shù)據(jù);

在一起使用的數(shù)據(jù)顯示在一起;

顯示出的數(shù)據(jù)應(yīng)與用戶(hù)執(zhí)行的任務(wù)有關(guān);

每一屏數(shù)據(jù)的數(shù)量不應(yīng)超過(guò)整個(gè)屏幕面積的30%。

(2)屏幕布局規(guī)則。

屏幕顯示中盡量少用代碼和縮寫(xiě);

多個(gè)顯示畫(huà)面,應(yīng)采用統(tǒng)一的顯示格式;

提供明了的標(biāo)題、標(biāo)欄及其他提示信息;

遵循用戶(hù)習(xí)慣;

采用顏色、字符大小、下劃線、不同字體等方式強(qiáng)化重要數(shù)據(jù)。

(3)數(shù)據(jù)輸入的設(shè)計(jì)規(guī)則。

在軟件設(shè)計(jì)的范圍內(nèi),可以通過(guò)以下方法來(lái)減少用戶(hù)輸入的工作量。

使用代碼或縮寫(xiě);

對(duì)相同的輸入內(nèi)容設(shè)置默認(rèn)值(缺省值);

自動(dòng)填入已輸入過(guò)的內(nèi)容或需要重復(fù)輸入的內(nèi)容;

如果輸入內(nèi)容是來(lái)自一個(gè)有限的備選集,則可以采用列表選擇。

(4)數(shù)據(jù)輸入對(duì)話設(shè)計(jì)的一般規(guī)則。

明確的輸入。只有當(dāng)用戶(hù)按下輸入的確認(rèn)鍵時(shí),才確認(rèn)輸入。這有助于在輸入過(guò)程中一旦出現(xiàn)錯(cuò)誤能及時(shí)糾錯(cuò)。

明確的動(dòng)作。在表格項(xiàng)之間自動(dòng)地跳躍/轉(zhuǎn)換并不總是可取的,尤其是對(duì)于不熟練的用戶(hù),往往會(huì)被搞得無(wú)所適從。

明確的取消。如果用戶(hù)中斷了一個(gè)輸入序列,已經(jīng)輸入的數(shù)據(jù)不要馬上丟棄。這樣才能對(duì)一個(gè)也許是錯(cuò)誤的取消動(dòng)作進(jìn)行重新思考。

確認(rèn)刪除。為避免錯(cuò)誤的刪除動(dòng)作可能造成的損失,在鍵入刪除命令后,必須進(jìn)行確認(rèn),然后才執(zhí)行刪除操作。

提供反饋。若一個(gè)屏幕上可容納若干輸入內(nèi)容,可將用戶(hù)先前輸入的內(nèi)容仍保留在屏幕上,以便用戶(hù)能夠隨時(shí)查看,明確下一步應(yīng)做的操作。

(5)輸入表格設(shè)計(jì)(這也就是所謂的“所見(jiàn)即所得”設(shè)計(jì))。

要輸入一個(gè)表格時(shí),可在屏幕上顯示一張表格,供用戶(hù)以填表方式,向計(jì)算機(jī)內(nèi)輸入數(shù)據(jù)。

4.2.4界面設(shè)計(jì)步驟

一旦界面分析完成,最終用戶(hù)的所有要求都已詳細(xì)確定之后,就可以開(kāi)始界面設(shè)計(jì)活動(dòng)。與所有軟件設(shè)計(jì)一樣,界面設(shè)計(jì)是一個(gè)迭代的過(guò)程。每個(gè)用戶(hù)界面設(shè)計(jì)步驟都要進(jìn)行很多次,每次細(xì)化和精化所依據(jù)的信息都來(lái)源于前面的設(shè)計(jì)步驟。

成熟的用戶(hù)界面設(shè)計(jì)模型很多,但不論使用哪種模型,建模時(shí)都建議遵循以下原則:

使用界面分析中獲得的信息定義界面對(duì)象和行為(操

作);

識(shí)別并確認(rèn)導(dǎo)致用戶(hù)界面狀態(tài)發(fā)生變化的事件(用戶(hù)動(dòng)作),對(duì)這個(gè)行為建模;

描述每一個(gè)界面狀態(tài),使其與最終用戶(hù)實(shí)際看到的界面一致;

簡(jiǎn)要說(shuō)明用戶(hù)如何通過(guò)界面提供的信息來(lái)了解系統(tǒng)狀態(tài)。

在某些情況下,界面設(shè)計(jì)可以從每個(gè)界面的狀態(tài)草圖開(kāi)始(即確定各種環(huán)境下用戶(hù)界面的外觀),然后再定義對(duì)象、動(dòng)作和其他重要的設(shè)計(jì)信息。不管設(shè)計(jì)任務(wù)的順序如何,設(shè)計(jì)師必須做到遵循前面討論的黃金規(guī)則(見(jiàn)本書(shū)4.2.1節(jié)),模擬界面的實(shí)現(xiàn)過(guò)程,考慮將要使用的環(huán)境(如顯示技術(shù)、操作系統(tǒng)、開(kāi)發(fā)工具)。

1.應(yīng)用界面設(shè)計(jì)步驟

界面設(shè)計(jì)的一個(gè)重要步驟是定義界面對(duì)象和作用于其上的行為,也就是說(shuō),要撰寫(xiě)用例的描述。描述中的名詞(對(duì)象)和動(dòng)詞(行為)被分離出來(lái)后,形成對(duì)象和行為列表。

一旦完成對(duì)象和動(dòng)作定義及迭代細(xì)化,就可以將對(duì)象按類(lèi)型分類(lèi),將目標(biāo)、源和應(yīng)用對(duì)象標(biāo)識(shí)出來(lái)。如把源對(duì)象拖放到目標(biāo)對(duì)象上,這意味著該動(dòng)作要產(chǎn)生一個(gè)硬拷貝的報(bào)告。界面中的應(yīng)用對(duì)象代表應(yīng)用特有的數(shù)據(jù),不能在屏幕交互過(guò)程中被直接操縱。例如,一個(gè)郵件列表被用于存放郵件的名字。該列表本身可以進(jìn)行排序、合并或清除(基于菜單的動(dòng)作),但是,不能通過(guò)用戶(hù)的交互而拖動(dòng)和刪除。

設(shè)計(jì)者確認(rèn)已經(jīng)定義了所有的重要對(duì)象和動(dòng)作(對(duì)一次設(shè)計(jì)迭代而言)后,即可開(kāi)始屏幕布局。和其他界面設(shè)計(jì)活動(dòng)一樣,屏幕布局是一個(gè)交互過(guò)程,其中包括:圖標(biāo)的圖形設(shè)計(jì)和放置、屏幕描述性文字的定義、窗口的規(guī)格說(shuō)明和標(biāo)題以及各類(lèi)主要和次要菜單項(xiàng)的定義等。

2.用戶(hù)界面設(shè)計(jì)模式

圖形用戶(hù)界面已經(jīng)變得如此普遍,與之相對(duì)應(yīng),也涌現(xiàn)出各式各樣的用戶(hù)界面設(shè)計(jì)模式。Tidwell和vanWelie對(duì)用戶(hù)界面設(shè)計(jì)模式給出了分類(lèi),將其分為十類(lèi)。以下將描述每一類(lèi)的模式示例。

(1)完整用戶(hù)界面:為高層結(jié)構(gòu)和導(dǎo)航提供設(shè)計(jì)指導(dǎo)。

模式:高層導(dǎo)航。界面提供高層菜單,通常帶有一個(gè)圖標(biāo)或者定義一個(gè)圖像,能夠直接跳轉(zhuǎn)到任一個(gè)系統(tǒng)主要功能。

(2)頁(yè)面布局:負(fù)責(zé)頁(yè)面概要組織(用于站點(diǎn))或者清楚的屏幕顯示(用于需要進(jìn)行交互的應(yīng)用系統(tǒng))。

模式:層疊。界面呈現(xiàn)層疊狀的標(biāo)簽卡,伴隨著鼠標(biāo)的點(diǎn)擊選擇,顯示指定的子功能或者分類(lèi)內(nèi)容。

(3)表格和輸入:用于完成表格(Form)及輸入的各種設(shè)計(jì)方法。

模式:填充空格。畫(huà)出表格后,用戶(hù)在界面提供的“文本框”中填寫(xiě)文字與數(shù)字?jǐn)?shù)據(jù)。

(4)表(Table):為創(chuàng)建和操作各種列表數(shù)據(jù)提供設(shè)計(jì)指導(dǎo)。

模式:有序表。用來(lái)顯示長(zhǎng)記錄列表,可以在任意一列上選擇排序機(jī)制進(jìn)行排序。

(5)直接數(shù)據(jù)操作:解決數(shù)據(jù)編輯、數(shù)據(jù)修改和數(shù)據(jù)轉(zhuǎn)換問(wèn)題。

模式:面包屑導(dǎo)航(breadcrumbs,這個(gè)名字起源于童話故事“漢賽爾和格萊特”)。為層次結(jié)構(gòu)復(fù)雜的頁(yè)面或者屏幕時(shí),提供完全的導(dǎo)航路徑。

(6)導(dǎo)航:輔助用戶(hù)在層級(jí)菜單、Web頁(yè)面和交互顯示屏幕進(jìn)行操作。

模式:現(xiàn)場(chǎng)編輯。為顯示位置上的特定類(lèi)型內(nèi)容提供簡(jiǎn)單的文本編輯能力。

(7)搜索:對(duì)網(wǎng)站的信息或保存在存儲(chǔ)裝置中的數(shù)據(jù),能夠進(jìn)行特定內(nèi)容的搜索。

模式:搜索。提供在網(wǎng)站或者數(shù)據(jù)源中搜索由字符串描述的簡(jiǎn)單數(shù)據(jù)項(xiàng)的能力。

(8)頁(yè)面元素:實(shí)現(xiàn)Web頁(yè)面或者顯示屏的特定元素。

模式:操作向?qū)?。通過(guò)一系列的簡(jiǎn)單窗口顯示來(lái)指導(dǎo)操作,使得用戶(hù)能夠逐步地完成某個(gè)復(fù)雜的任務(wù)。

(9)電子商務(wù):主要針對(duì)于網(wǎng)站,這些模式實(shí)現(xiàn)了電子商務(wù)應(yīng)用中的重現(xiàn)元素。

模式:購(gòu)物車(chē)。提供一個(gè)要購(gòu)買(mǎi)的項(xiàng)目清單。

(10)其他。不能簡(jiǎn)單地歸類(lèi)到前面所述的任一類(lèi)中的其余模式,在某些情況下,這些模式與具體的應(yīng)用領(lǐng)域相關(guān)或者只對(duì)特定類(lèi)別的用戶(hù)適用。

模式:進(jìn)展指示器。為某一正在進(jìn)行的操作提供進(jìn)展指示。

3.設(shè)計(jì)問(wèn)題

在進(jìn)行用戶(hù)界面設(shè)計(jì)時(shí),幾乎總會(huì)遇到以下五個(gè)問(wèn)題:系統(tǒng)響應(yīng)時(shí)間、在線幫助、出錯(cuò)處理、菜單和命令標(biāo)記、應(yīng)用的可訪問(wèn)性。不幸的是,許多設(shè)計(jì)人員往往很晚才注意到這些問(wèn)題(有時(shí)在操作原型已經(jīng)建立起來(lái)后才發(fā)現(xiàn)有問(wèn)題),這往往會(huì)導(dǎo)致不必要的反復(fù)、項(xiàng)目滯后和用戶(hù)的挫折感,最好的辦法是在設(shè)計(jì)的初期就對(duì)這些問(wèn)題加以考慮,因?yàn)榇藭r(shí)修改比較容易,代價(jià)也低。

(1)系統(tǒng)響應(yīng)時(shí)間。系統(tǒng)響應(yīng)時(shí)間不能令人滿(mǎn)意是交互式系統(tǒng)用戶(hù)經(jīng)常抱怨的問(wèn)題。一般來(lái)說(shuō),系統(tǒng)響應(yīng)時(shí)間是指從用戶(hù)開(kāi)始執(zhí)行動(dòng)作(比如按回車(chē)鍵或點(diǎn)擊鼠標(biāo))到軟件以預(yù)期的輸出和動(dòng)作形式給出響應(yīng)。

(2)在線幫助。幾乎所有計(jì)算機(jī)交互式系統(tǒng)的用戶(hù)都時(shí)常需要幫助。有時(shí)一個(gè)簡(jiǎn)單的問(wèn)題問(wèn)一下同事就可以解決,但更復(fù)雜的問(wèn)題則需要細(xì)致地研究用戶(hù)手冊(cè)。在多數(shù)情況下,現(xiàn)代的軟件均提供在線聯(lián)機(jī)幫助,用戶(hù)可以不離開(kāi)用戶(hù)界面就得到幫助。

(3)出錯(cuò)處理。出錯(cuò)信息和警告是出現(xiàn)問(wèn)題時(shí)系統(tǒng)反饋給用戶(hù)的“壞消息”。如果考慮不周,出錯(cuò)信息和警告會(huì)給出無(wú)用和誤導(dǎo)的信息,這反而增加了用戶(hù)的沮喪感。

(4)菜單和命令標(biāo)記。鍵入命令曾經(jīng)是用戶(hù)和系統(tǒng)交互的主要方式,并廣泛用于各種應(yīng)用程序中?,F(xiàn)在,面向窗口的界面采用點(diǎn)擊(Point)和拾取(Pick)方式減少了用戶(hù)對(duì)鍵入命令的依賴(lài),但許多高級(jí)用戶(hù)仍然喜歡面向命令的交互方式。在提供命令交互方式時(shí),必須考慮以下問(wèn)題:

每一個(gè)菜單、選項(xiàng)是否都有對(duì)應(yīng)命令?

以何種方式提供命令?有三種選擇:控制序列、功能鍵或鍵入命令。

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

用戶(hù)是否可以定制和縮寫(xiě)命令?

在界面環(huán)境中菜單的名稱(chēng)是否是顧名思義的?

子菜單是否與主菜單項(xiàng)所指功能相一致?

如果在一個(gè)應(yīng)用系統(tǒng)中,Alt+D表示復(fù)制一個(gè)圖形對(duì)象,而在另一個(gè)應(yīng)用系統(tǒng)中表示刪除一個(gè)圖像,這就使用戶(hù)感到困惑并往往會(huì)導(dǎo)致錯(cuò)誤。

(5)應(yīng)用的可訪問(wèn)性。隨著計(jì)算機(jī)應(yīng)用系統(tǒng)變得無(wú)處不在,軟件工程師必須確保界面設(shè)計(jì)中包含使得有特殊要求的用戶(hù)易于訪問(wèn)的機(jī)制。

4.3程序算法設(shè)計(jì)工具

描述程序處理過(guò)程的工具稱(chēng)為過(guò)程設(shè)計(jì)工具,也稱(chēng)作程序算法設(shè)計(jì)工具。程序算法設(shè)計(jì)工具可以分為三類(lèi):圖形工具,表格工具,語(yǔ)言工具。無(wú)論采用哪類(lèi)工具,都需要對(duì)設(shè)計(jì)進(jìn)行清晰、無(wú)歧義的描述,描述中應(yīng)表明控制流程、系統(tǒng)功能、數(shù)據(jù)結(jié)構(gòu)等方面的細(xì)節(jié),以便在系統(tǒng)實(shí)現(xiàn)階段能根據(jù)詳細(xì)設(shè)計(jì)的描述直接編程。

4.3.1圖形化設(shè)計(jì)工具

圖形化設(shè)計(jì)工具包括有程序流程圖、盒圖(N-S圖)、問(wèn)題分析圖(PAD圖)。

1.程序流程圖

程序流程圖(ProgramFlowChart,PFC)又稱(chēng)為程序框圖,一直是軟件設(shè)計(jì)的主要工具。它是歷史最悠久、使用最廣泛的描述過(guò)程設(shè)計(jì)的方法,然而也是使用最混亂的一種方法。從20世紀(jì)40年代末到70年代中期,它一直是程序算法設(shè)計(jì)的主要工具。前面圖4-1中對(duì)控制結(jié)構(gòu)的圖示所采用的就是程序流程圖。圖4-5中列出了程序流程圖中使用的各種符號(hào)。

圖4-5程序流程圖的基本符號(hào)

程序流程圖獨(dú)立于任何一種程序設(shè)計(jì)語(yǔ)言,它的主要優(yōu)點(diǎn)是對(duì)控制流程的描繪很直觀,便于初學(xué)者掌握。由于程序流程圖歷史悠久,為最廣泛的人所熟悉,盡管它有種種缺點(diǎn),許多人建議停止使用它,但至今仍在廣泛使用著。不過(guò)總的趨勢(shì)是越來(lái)越多的人不再使用程序流程圖了。

程序流程圖的主要缺點(diǎn)如下:

(1)不能清晰地表達(dá)結(jié)構(gòu)化程序所具有的控制嵌套。當(dāng)控制嵌套比較復(fù)雜時(shí),程序流程圖會(huì)出現(xiàn)混亂。

(2)程序流程圖中的箭頭具有太大的隨意性,例如可以通過(guò)箭頭而從程序結(jié)構(gòu)嵌套的最內(nèi)層直接轉(zhuǎn)到最外層,由此會(huì)使結(jié)構(gòu)化程序所要求的單入口與單出口要求受到破壞。

(3)程序流程圖本質(zhì)上不是逐步求精的好工具,它誘使程序員過(guò)早地考慮程序的控制流程,而缺少對(duì)程序全局結(jié)構(gòu)的考慮。

(4)程序流程圖不易表示數(shù)據(jù)結(jié)構(gòu)。

下面舉一個(gè)例子,鍵盤(pán)輸入若干個(gè)整數(shù)X,求其中的最大值,當(dāng)X為-1時(shí)結(jié)束。圖4-6為該問(wèn)題的程序流程圖。

圖4-6求若干整數(shù)中最大值的程序流程圖

2.盒圖

為了滿(mǎn)足結(jié)構(gòu)化程序設(shè)計(jì)對(duì)算法設(shè)計(jì)工具的需要,Nassi和Shneiderman推出了盒圖,又稱(chēng)為N-S圖。它是一種嚴(yán)格符合結(jié)構(gòu)化程序設(shè)計(jì)原則的圖形描述工具。圖4-7給出了結(jié)構(gòu)化控制結(jié)構(gòu)的盒圖表示,也給出了調(diào)用子程序的盒圖表示方法。

圖4-7盒圖的基本符號(hào)

盒圖的基本元素是一些盒型框,每一個(gè)框由一些代表基本結(jié)構(gòu)的子框構(gòu)成。盒圖只有一個(gè)入口和一個(gè)出口,是一種不違背結(jié)構(gòu)程序設(shè)計(jì)精神的圖形工具。它有下述特點(diǎn):

(1)功能域(即一個(gè)特定控制結(jié)構(gòu)的作用域)明確,可以從盒圖上一眼就看出來(lái);

(2)不可能任意轉(zhuǎn)移控制;

(3)很容易確定局部和全程數(shù)據(jù)的作用域;

(4)很容易表現(xiàn)嵌套關(guān)系,也可以表示模塊的層次結(jié)構(gòu)。

任何一個(gè)N-S圖都是上面幾種基本控制結(jié)構(gòu)相互結(jié)合與嵌套的結(jié)果。圖4-8是一種N-S圖的嵌套型結(jié)構(gòu)。

圖4-8N-S圖的嵌套型結(jié)構(gòu)

盒圖的缺點(diǎn)是,對(duì)于一個(gè)現(xiàn)成的盒圖,要修改它比較困難,只能重畫(huà)。

圖4-9給出了一個(gè)實(shí)例。

圖4-9使用N-S盒圖設(shè)計(jì)程序算法

3.?PAD圖

PAD是問(wèn)題分析圖(ProblemAnalysisDiagram)的英文縮寫(xiě),由日本日立公司首先推出,并得到了廣泛的應(yīng)用。它是符合結(jié)構(gòu)化程序設(shè)計(jì)原則的圖形描述工具。圖4-10給出了PAD圖的基本符號(hào)。

圖4-10PAD圖的基本符號(hào)

PAD圖的基本特點(diǎn)是使用二維樹(shù)形結(jié)構(gòu)表示程序的控制流程,從上至下是程序進(jìn)程方向,從左至右是程序控制嵌套關(guān)系。應(yīng)該說(shuō),PAD圖與源代碼有比較一致的結(jié)構(gòu),因此,PAD圖有利于由程序算法設(shè)計(jì)往高級(jí)程序語(yǔ)言源代碼的轉(zhuǎn)換。

在圖4-10中,“定義”符號(hào)表示對(duì)某個(gè)處理進(jìn)行進(jìn)一步的細(xì)化。當(dāng)一個(gè)模塊的內(nèi)容非常大,在一頁(yè)紙上畫(huà)不下時(shí),可使用def符號(hào)在另一頁(yè)紙上詳細(xì)定義該模塊的內(nèi)容。PAD圖所描述程序的層次關(guān)系表現(xiàn)在縱線上,每條縱線表示一個(gè)層次。PAD圖的控制流程為自上而下、從左到右地執(zhí)行,如圖4-11所示。

圖4-11使用PAD圖提供的定義功能來(lái)逐步求精的例子

PAD圖的主要優(yōu)點(diǎn)如下:

(1)使用表示結(jié)構(gòu)化控制結(jié)構(gòu)的PAD符號(hào)所設(shè)計(jì)出來(lái)的程序必然是結(jié)構(gòu)化程序;

(2)?PAD圖所描繪的程序結(jié)構(gòu)十分清晰。圖中最左面的豎線是程序的主線,即第一層結(jié)構(gòu)。隨著程序?qū)哟蔚脑黾?,PAD圖逐漸向右延伸,每增加一個(gè)層次,圖形向右擴(kuò)展一條豎線。PAD圖中豎線的總條數(shù)就是程序的層次數(shù);

(3)用PAD圖表現(xiàn)程序邏輯,易讀、易懂、易記。PAD圖是二維樹(shù)形結(jié)構(gòu)的圖形,程序從圖中最左豎線上端的結(jié)點(diǎn)開(kāi)始執(zhí)行,自上而下、從左向右順序執(zhí)行,遍歷所有結(jié)點(diǎn);

(4)容易將PAD圖轉(zhuǎn)換成高級(jí)語(yǔ)言源程序,這種轉(zhuǎn)換可用軟件工具自動(dòng)完成,從而可省去人工編碼的工作,有利于提高軟件可靠性和軟件生產(chǎn)率;

(5)既可用于表示程序邏輯,也可用于描繪數(shù)據(jù)結(jié)構(gòu);

(6)?PAD圖的符號(hào)支持自頂向下、逐步求精方法的使用。設(shè)計(jì)者可使用def符號(hào)逐步增加細(xì)節(jié),直至完成詳細(xì)設(shè)計(jì)。

圖4-12給出了一個(gè)實(shí)例。圖4-12使用PAD圖設(shè)計(jì)程序算法

4.3.2表格式設(shè)計(jì)表示

表格式的過(guò)程設(shè)計(jì)工具包括判定表和判定樹(shù)。

1.判定表

判定表是算法設(shè)計(jì)輔助工具,專(zhuān)門(mén)用于對(duì)復(fù)雜的條件組合關(guān)系及其對(duì)應(yīng)的動(dòng)作行為等給出更加清晰的說(shuō)明,能夠簡(jiǎn)潔而又無(wú)歧義地描述涉及條件判斷的處理規(guī)則,并能夠配合程序流程圖、N-S圖、PAD圖或PDL偽碼等進(jìn)行程序算法描述。

應(yīng)該說(shuō),判定表并不是一種通用的設(shè)計(jì)工具,并不能對(duì)應(yīng)到某種具體的程序設(shè)計(jì)語(yǔ)言上去。但是,當(dāng)程序算法中出現(xiàn)多重嵌套中的條件選擇時(shí),往往需要用到判定表。

判定表一般由四個(gè)部分組成,如表4-1所示。其中,表的左上部分列出所有條件,表的左下部分是所有可能出現(xiàn)的動(dòng)作,表的右上部分用于表示各種可能的條件組合,表的右下部分則是和每種條件組合相對(duì)應(yīng)的動(dòng)作。這樣,判定表的右半部分的每一列實(shí)質(zhì)上就構(gòu)成了一條規(guī)則,它規(guī)定了與特定的條件組合相對(duì)應(yīng)的動(dòng)作。

下面以行李托運(yùn)費(fèi)的算法為例說(shuō)明判定表的組織方法。假設(shè)某航空公司規(guī)定,乘客可以免費(fèi)托運(yùn)重量不超過(guò)20kg的行李。當(dāng)行李重量超過(guò)20kg時(shí),對(duì)頭等艙的國(guó)內(nèi)乘客超重部分每千克收費(fèi)4元,對(duì)其他艙的國(guó)內(nèi)乘客超重部分每千克收費(fèi)6元,對(duì)殘疾乘客超重部分每千克收費(fèi)比正常乘客少一半。用判定表可以清楚地表示與上述每種條件組合相對(duì)應(yīng)的計(jì)算行李費(fèi)的算法,如表4-2所示。

從上面這個(gè)例子可以看出,判定表能夠簡(jiǎn)潔而又無(wú)歧義地描述處理規(guī)則。當(dāng)把判定表和布爾代數(shù)或卡諾圖結(jié)合起來(lái)使用時(shí),可以對(duì)判定表進(jìn)行校驗(yàn)或化簡(jiǎn)。但是,判定表并不適于作為一種通用的設(shè)計(jì)工具,沒(méi)有一種簡(jiǎn)單的方法能使它同時(shí)清晰地表示順序和重復(fù)等處理特性。

2.判定樹(shù)

判定表雖然能清晰地表示復(fù)雜的條件組合與應(yīng)做的動(dòng)作之間的對(duì)應(yīng)關(guān)系,但其含義卻不是一眼就能看出來(lái)的,初次接觸這種工具的人理解它需要有一個(gè)簡(jiǎn)短的學(xué)習(xí)過(guò)程。此外,當(dāng)數(shù)據(jù)元素的值多于兩個(gè)時(shí)(例如,表4-2例子中假設(shè)對(duì)機(jī)票需細(xì)分為頭等艙、二等艙和經(jīng)濟(jì)艙等多種級(jí)別時(shí)),判定表的簡(jiǎn)潔程度也將下降。

判定樹(shù)是判定表的變種,也能清晰地表示復(fù)雜的條件組合與應(yīng)做的動(dòng)作之間的對(duì)應(yīng)關(guān)系。判定樹(shù)的優(yōu)點(diǎn)在于,它的形式簡(jiǎn)單到不需任何說(shuō)明,一眼就可以看出其含義,因此易于掌握和使用。多年來(lái)判定樹(shù)一直受到人們的重視,是一種比較常用的系統(tǒng)分析和設(shè)計(jì)的工具。圖4-13是和表4-2等價(jià)的判定樹(shù)。我們可以看到判定樹(shù)較判定表直觀易讀,而判定樹(shù)的簡(jiǎn)潔性不如判定表。判定表和判定樹(shù)適用于算法中包含復(fù)雜的多重組合的情況,可將兩種工具結(jié)合起來(lái),先用判定表作底稿,然后產(chǎn)生判定樹(shù)。

圖4-13用判定樹(shù)表示計(jì)算行李費(fèi)的算法

4.3.3程序設(shè)計(jì)語(yǔ)言

PDL語(yǔ)言(ProcedureDesignLanguage,PDL)也稱(chēng)為偽碼,或過(guò)程設(shè)計(jì)語(yǔ)言,它一般是某種高級(jí)語(yǔ)言稍加改造后的產(chǎn)物。由于技術(shù)背景的不同,偽碼可以是類(lèi)PASCAL、類(lèi)C或是其他高級(jí)語(yǔ)言的變形??梢允褂闷胀ǖ恼木庉嬡浖蛭淖痔幚硐到y(tǒng)進(jìn)行PDL的書(shū)寫(xiě)和編輯。

PDL語(yǔ)言的語(yǔ)法規(guī)則分外部語(yǔ)法和內(nèi)部語(yǔ)法。其中,外部語(yǔ)法用于定義程序中的控制結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu),具有比較嚴(yán)謹(jǐn)?shù)恼Z(yǔ)法規(guī)則,一般采用某種高級(jí)程序設(shè)計(jì)語(yǔ)言的語(yǔ)句構(gòu)造,可用于定義控制結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu);內(nèi)部語(yǔ)法則用于表示程序中的加工計(jì)算或條件,它一般采用比較通俗的自然語(yǔ)言進(jìn)行描述。因此,PDL是一種由高級(jí)程序設(shè)計(jì)語(yǔ)言的框架結(jié)構(gòu)和自然語(yǔ)言的細(xì)節(jié)描述混合而成的語(yǔ)言。

PDL語(yǔ)言一般包括以下成分:

(1)外部語(yǔ)法。由固定的關(guān)鍵字提供外部語(yǔ)法,它提供了結(jié)構(gòu)化控制結(jié)構(gòu)、數(shù)據(jù)說(shuō)明和模塊化的特點(diǎn)。為了使結(jié)構(gòu)清晰和可讀性好,通常在所有可能嵌套使用的控制結(jié)構(gòu)的頭和尾都有關(guān)鍵字。例如,If…EndIf、Loop…EndLoop、Dowhile…enddo。

(2)內(nèi)部語(yǔ)法。由自然語(yǔ)言提供內(nèi)部語(yǔ)法,用于描述程序中的加工計(jì)算。

(3)數(shù)據(jù)說(shuō)明。需要對(duì)數(shù)據(jù)進(jìn)行說(shuō)明,既包括簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu)(如變量、數(shù)組),也包括復(fù)雜的數(shù)據(jù)結(jié)構(gòu)(如結(jié)構(gòu)體、鏈表)。

(4)模塊說(shuō)明。需要對(duì)模塊功能、調(diào)用與接口等進(jìn)行說(shuō)明。

PDL的缺點(diǎn)是不如圖形工具形象直觀,描述復(fù)雜的條件組合與動(dòng)作間的對(duì)應(yīng)關(guān)系時(shí),不如判定表那樣清晰簡(jiǎn)單。因此,常常將PDL描述和一種圖形描述結(jié)合起來(lái)使用,加以彌補(bǔ)。

舉例:下面是判斷某個(gè)整數(shù)x是否為質(zhì)數(shù)的算法設(shè)計(jì)偽碼。

舉例:發(fā)貨流程PDL加工邏輯描述舉例。

4.3.4程序算法設(shè)計(jì)工具的比較

在圖形化設(shè)計(jì)中,程序流程圖對(duì)控制流程的描繪很直觀,便于初學(xué)者掌握。但是程序流程圖中用箭頭代表控制流,使得程序員不受任何約束,可以隨意轉(zhuǎn)移控制。盒圖和PAD圖設(shè)計(jì)出來(lái)的程序必然是結(jié)構(gòu)化程序。盒圖中沒(méi)有箭頭,不允許隨意轉(zhuǎn)移控制,可以使程序員逐步養(yǎng)成用結(jié)構(gòu)化的方式思考問(wèn)題和解決問(wèn)題的習(xí)慣。PAD圖表現(xiàn)程序邏輯,易讀、易懂、易記,圖中豎線的總條數(shù)就是程序的層次數(shù)。

表格設(shè)計(jì)工具中的判定表和判定樹(shù)能清晰地表示復(fù)雜的條件組合與應(yīng)做的動(dòng)作之間的對(duì)應(yīng)關(guān)系,常用在算法中包含多重嵌套的條件選擇。判定樹(shù)較判定表直觀易讀,而判定樹(shù)簡(jiǎn)潔性不如判定表,常常將兩種工具結(jié)合起來(lái),先用判定表作底稿,然后產(chǎn)生判定樹(shù)。

PDL是一種“混雜”語(yǔ)言,關(guān)鍵字是固定語(yǔ)法,其語(yǔ)法是自由靈活的自然語(yǔ)言。PDL可以作為注釋直接插在源程序中間。由于PDL不形象、不直觀,常常和一種圖形描述結(jié)合起來(lái)使用,加以彌補(bǔ)。

4.4面向數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)方法

面向數(shù)據(jù)流的設(shè)計(jì)方法,是基于描繪信息流動(dòng)和處理的數(shù)據(jù)流圖(DFD),從數(shù)據(jù)流圖出發(fā),根據(jù)數(shù)據(jù)流特性,劃分軟件模塊,建立軟件結(jié)構(gòu)。

面向數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)方法,是根據(jù)數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)程序處理過(guò)程。由于程序加工的是數(shù)據(jù)結(jié)構(gòu),程序表述的算法在很大程度上也依賴(lài)于作為基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu),所以數(shù)據(jù)結(jié)構(gòu)分層次,程序結(jié)構(gòu)也必然分層次。數(shù)據(jù)結(jié)構(gòu)既影響程序的結(jié)構(gòu)又影響程序的處理過(guò)程,面向數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)方法的最終目標(biāo)是得出對(duì)程序處理過(guò)程的描述。這種方法最適合于在詳細(xì)設(shè)計(jì)階段使用,也就是說(shuō),在完成了軟件結(jié)構(gòu)設(shè)計(jì)之后,可以使用面向數(shù)據(jù)結(jié)構(gòu)的方法來(lái)設(shè)計(jì)每個(gè)模塊的處理過(guò)程。

1975年由M.A.Jackson提出了一種以軟件中數(shù)據(jù)結(jié)構(gòu)為基本依據(jù)的程序算法設(shè)計(jì)方法。它是按照輸入、輸出和內(nèi)部信息的數(shù)據(jù)結(jié)構(gòu)進(jìn)行軟件設(shè)計(jì)的。因此,在以數(shù)據(jù)處理為主要內(nèi)容的信息系統(tǒng)開(kāi)發(fā)中,Jackson程序設(shè)計(jì)方法具有一定的應(yīng)用價(jià)值。

4.4.1Jackson數(shù)據(jù)結(jié)構(gòu)圖

Jackson程序設(shè)計(jì)方法的基本設(shè)計(jì)途徑是通過(guò)分析輸入數(shù)據(jù)與輸出數(shù)據(jù)的層次結(jié)構(gòu),由此對(duì)程序算法的層次結(jié)構(gòu)進(jìn)行推論。為了方便由數(shù)據(jù)結(jié)構(gòu)映射出程序結(jié)構(gòu),Jackson將軟件系統(tǒng)中所遇到的數(shù)據(jù)分為順序、選擇和重復(fù)三種結(jié)構(gòu),并需要使用圖形方式表示。

1.順序結(jié)構(gòu)

順序結(jié)構(gòu)的數(shù)據(jù)由一個(gè)或多個(gè)數(shù)據(jù)元素組成,每個(gè)元素按確定次序出現(xiàn)一次,上下層是“組成”關(guān)系。圖4-14(a)是表示順序結(jié)構(gòu)的Jackson圖的一個(gè)例子,A由B、C、D這三個(gè)基本元素順序組成,出現(xiàn)次序依次是B、C、D。

圖4-14Jackson圖的三種基本結(jié)構(gòu)

2.選擇結(jié)構(gòu)

選擇結(jié)構(gòu)的數(shù)據(jù)包含兩個(gè)或多個(gè)數(shù)據(jù)元素,每次使用這個(gè)數(shù)據(jù)時(shí)按一定條件從這些數(shù)據(jù)元素中選擇一個(gè)。圖4-14(b)是表示三個(gè)結(jié)構(gòu)中選1個(gè)的Jackson圖。注意,在B、C、D的右上角用圓圈做標(biāo)記,表示根據(jù)條件A是B或C或D中的某一個(gè)。

3.重復(fù)結(jié)構(gòu)

重復(fù)結(jié)構(gòu)的數(shù)據(jù),根據(jù)使用時(shí)的條件由一個(gè)數(shù)據(jù)元素出現(xiàn)零次或多次構(gòu)成。圖4-14(c)是表示重復(fù)結(jié)構(gòu)的Jackson圖。A由B出現(xiàn)N次(N≥0)組成,注意,在B的右上角有星號(hào)標(biāo)記。

Jackson圖有以下優(yōu)點(diǎn):

便于表示層次結(jié)構(gòu),而且是對(duì)結(jié)構(gòu)進(jìn)行自頂向下分解的有力工具;

形象直觀可讀性好;

既能表示數(shù)據(jù)結(jié)構(gòu)也能表示程序結(jié)構(gòu)。

4.4.2改進(jìn)的Jackson圖

上節(jié)介紹的Jackson圖的缺點(diǎn)是,用這種圖形工具表示選擇或重復(fù)結(jié)構(gòu)時(shí),選擇條件或循環(huán)結(jié)束條件不能直接在圖上表示出來(lái),影響了圖的表達(dá)能力,也不易直接把圖翻譯成程序,此外,框間連線為斜線,不易在行式打印機(jī)上輸出。為了解決上述問(wèn)題,建議使用圖4-15中給出的改進(jìn)的Jackson圖,其中S(i)表示分支條件編號(hào),I(i)表示循環(huán)結(jié)束條件編號(hào)。圖4-15(c)表示A或者是B或者不出現(xiàn)。

圖4-15改進(jìn)的Jackson圖

Jackson圖實(shí)質(zhì)上是對(duì)第2章2.9節(jié)中介紹的層次方框圖的一種精化。請(qǐng)讀者注意,雖然Jackson圖和描繪軟件結(jié)構(gòu)的層次圖形式相當(dāng)類(lèi)似,但是含義卻很不相同。層次圖中的一個(gè)方框通常代表一個(gè)模塊;而Jackson圖即使在描繪程序結(jié)構(gòu)時(shí),一個(gè)方框也并不代表一個(gè)模塊,通常一個(gè)方框只代表幾個(gè)語(yǔ)句。層次圖表現(xiàn)的是調(diào)用關(guān)系,通常一個(gè)模塊除了調(diào)用下級(jí)模塊外,還完成其他操作;而Jackson圖表現(xiàn)的是組成關(guān)系,也就是說(shuō),一個(gè)方框中包括的操作僅僅由它下層框中的那些操作組成。

4.4.3Jackson方法的設(shè)計(jì)過(guò)程

Jackson方法的基本設(shè)計(jì)步驟分為以下五個(gè)步驟。

(1)分析并確定輸入和輸出數(shù)據(jù)的邏輯結(jié)構(gòu),并用Jackson圖描繪這些數(shù)據(jù)結(jié)構(gòu)。

(2)找出輸入數(shù)據(jù)結(jié)構(gòu)和輸出數(shù)據(jù)結(jié)構(gòu)中有對(duì)應(yīng)關(guān)系的數(shù)據(jù)單元。所謂“對(duì)應(yīng)關(guān)系”指這些數(shù)據(jù)單元在數(shù)據(jù)內(nèi)容上、數(shù)據(jù)量上和順序上有直接的因果關(guān)系,對(duì)重復(fù)的數(shù)據(jù)單元,必須重復(fù)的次序和次數(shù)都相同才可能有對(duì)應(yīng)關(guān)系。

(3)使用下述3條規(guī)則從描繪數(shù)據(jù)結(jié)構(gòu)的Jackson圖導(dǎo)出描繪程序結(jié)構(gòu)的Jackson圖。

為每對(duì)有對(duì)應(yīng)關(guān)系的數(shù)據(jù)單元,按照它們?cè)跀?shù)據(jù)結(jié)構(gòu)圖中的層次在程序結(jié)構(gòu)圖的相應(yīng)層次畫(huà)一個(gè)處理框(注意,如果這對(duì)數(shù)據(jù)單元在輸入數(shù)據(jù)結(jié)構(gòu)和輸出數(shù)據(jù)結(jié)構(gòu)中所處的層次不同,則和它們對(duì)應(yīng)的處理框在程序結(jié)構(gòu)圖中所處的層次與它們之中在數(shù)據(jù)結(jié)構(gòu)圖中層次低的那個(gè)對(duì)應(yīng));

根據(jù)輸入數(shù)據(jù)結(jié)構(gòu)中剩余的每個(gè)數(shù)據(jù)單元所處的層次,在程序結(jié)構(gòu)圖的相應(yīng)層次分別為它們畫(huà)上對(duì)應(yīng)的處理框;

根據(jù)輸出數(shù)據(jù)結(jié)構(gòu)中剩余的每個(gè)數(shù)據(jù)單元所處的層次,在程序結(jié)構(gòu)圖的相應(yīng)層次分別為它們畫(huà)上對(duì)應(yīng)的處理框。

總之,描繪程序結(jié)構(gòu)的Jackson圖應(yīng)該綜合輸入數(shù)據(jù)結(jié)構(gòu)和輸出數(shù)據(jù)結(jié)構(gòu)的層次關(guān)系而導(dǎo)出來(lái)。在導(dǎo)出程序結(jié)構(gòu)圖的過(guò)程中,由于改進(jìn)的Jackson圖規(guī)定在構(gòu)成順序結(jié)構(gòu)的元素中不能有重復(fù)出現(xiàn)或選擇出現(xiàn)的元素,因此可能需要增加中間層次的處理框。

(4)列出所有操作和條件(包括分支條件和循環(huán)結(jié)束條件),并且把它們分配到程序結(jié)構(gòu)圖的適當(dāng)位置。

(5)用偽碼表示程序。Jackson方法中使用的偽碼和Jackson圖是完全對(duì)應(yīng)的。

以上五步對(duì)應(yīng)結(jié)構(gòu)化方法的需求分析、概要設(shè)計(jì)和詳細(xì)設(shè)計(jì)。下面舉例說(shuō)明設(shè)計(jì)過(guò)程。

例如,期末考試后將學(xué)生的基本情況文件(簡(jiǎn)稱(chēng)學(xué)籍文件)和學(xué)生成績(jī)文件(簡(jiǎn)稱(chēng)成績(jī)文件)合并成一個(gè)新文件。按照J(rèn)ackson方法的設(shè)計(jì)步驟如下:

(1)確定輸入和輸出數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)。經(jīng)分析找出并用Jackson圖描繪輸入/輸出數(shù)據(jù)結(jié)構(gòu)圖,如圖4-16所示。

圖4-16學(xué)生成績(jī)系統(tǒng)中輸入/輸出結(jié)構(gòu)的Jackson圖

(2)確定在輸入數(shù)據(jù)結(jié)構(gòu)和輸出數(shù)據(jù)結(jié)構(gòu)中有對(duì)應(yīng)關(guān)系的數(shù)據(jù)單元。學(xué)生學(xué)籍文件中的學(xué)生記錄與成績(jī)文件中的學(xué)生記錄的個(gè)數(shù)、排列次序是相同的。學(xué)生新文件中的學(xué)生記錄的內(nèi)容來(lái)自學(xué)籍文件和成績(jī)文件的相應(yīng)記錄。因此,可以說(shuō)輸入數(shù)據(jù)結(jié)構(gòu)中的“學(xué)生記錄”這個(gè)數(shù)據(jù)單元與輸出數(shù)據(jù)結(jié)構(gòu)中的“學(xué)生記錄”有對(duì)應(yīng)關(guān)系。在圖中用雙箭頭線標(biāo)出,如圖4-17所示。

圖4-17輸入/輸出結(jié)構(gòu)中有對(duì)應(yīng)關(guān)系的Jackson圖

(3)從數(shù)據(jù)結(jié)構(gòu)圖導(dǎo)出程序結(jié)構(gòu)圖。根據(jù)前面介紹的3條規(guī)則,由圖4-17畫(huà)出的程序結(jié)構(gòu)圖如圖4-18所示。

圖4-18程序結(jié)構(gòu)圖

(4)列出所有操作和條件,并且把它們分配到程序結(jié)構(gòu)圖的適當(dāng)位置。列出的操作和條件為:停止、打開(kāi)兩個(gè)輸入文件、建立輸出文件、從輸入文件中各讀一條記錄、生成一條新記錄、將新記錄寫(xiě)入輸出文件、關(guān)閉全部文件、文件結(jié)束。

把上述操作和條件分配到程序結(jié)構(gòu)圖的適當(dāng)位置。當(dāng)把操作2、3、4、7、1分配到第一層時(shí),改進(jìn)的Jackson圖規(guī)定順序執(zhí)行的處理中,不允許混有重復(fù)執(zhí)行或選擇執(zhí)行的處理。所以,在“處理學(xué)生記錄”這個(gè)處理框上面,又增加了一個(gè)處理框“分析學(xué)生記錄”。最后得到如圖4-19所示的程序結(jié)構(gòu)圖。

圖4-19把操作和條件分配到程序結(jié)構(gòu)圖的適當(dāng)位置

(5)用偽碼表示程序處理過(guò)程。下面是使用Jackson所使用的偽代碼寫(xiě)出的與圖4-19對(duì)應(yīng)的程序。

產(chǎn)生新文件seq

打開(kāi)兩個(gè)輸入文件

建立輸出文件

從輸入文件中各讀一條記錄

分析學(xué)生記錄iteruntil文件結(jié)束

處理學(xué)生記錄seq

產(chǎn)生學(xué)號(hào)

產(chǎn)生姓名

產(chǎn)生成績(jī)

產(chǎn)生地址

生成一條新記錄

將新記錄寫(xiě)入輸出文件

從輸入文件中各讀一條記錄

處理學(xué)生記錄end

關(guān)閉全部文件

停止

產(chǎn)生新文件end

以上簡(jiǎn)單介紹了由英國(guó)人M.Jackson提出的結(jié)構(gòu)程序設(shè)計(jì)方法。這個(gè)方法在設(shè)計(jì)比較簡(jiǎn)單的數(shù)據(jù)處理系統(tǒng)時(shí)特別方便,當(dāng)設(shè)計(jì)比較復(fù)雜的程序時(shí)常常遇到輸入數(shù)據(jù)可能有錯(cuò)、條件不能預(yù)先測(cè)試、數(shù)據(jù)結(jié)構(gòu)沖突等問(wèn)題。為了克服上述困難,把Jackson方法應(yīng)用到更廣闊的領(lǐng)域,需要采用一系列比較復(fù)雜的輔助技術(shù)。

4.5程序復(fù)雜度的概念及度量方法

在前一章中曾經(jīng)講述了軟件設(shè)計(jì)的基本原理和概念,經(jīng)過(guò)詳細(xì)設(shè)計(jì)之后每個(gè)模塊的內(nèi)容都非常具體了,因此可以使用這些原理進(jìn)一步仔細(xì)衡量它們的質(zhì)量。但是,這種衡量畢竟只能是定性的,人們希望能進(jìn)一步定量度量軟件的性質(zhì)。由于軟件工程還是一門(mén)很年輕的學(xué)科,目前許多定量度量方法還處在研究過(guò)程中。目前,程序復(fù)雜程度定量度量方法比較成熟的有兩種——代碼行度量法和McCabe度量法,其中McCabe度量法是比較著名的程序算法復(fù)雜性度量方法。本節(jié)將重點(diǎn)介紹McCabe度量法。

程序復(fù)雜性主要指模塊內(nèi)程序的復(fù)雜性。它直接關(guān)聯(lián)到軟件開(kāi)發(fā)費(fèi)用的多少,開(kāi)發(fā)周期的長(zhǎng)短和軟件內(nèi)部潛伏錯(cuò)誤的多少。比如把程序的復(fù)雜程度乘以適當(dāng)常數(shù)即可估算出軟件中錯(cuò)誤的數(shù)量以及軟件開(kāi)發(fā)需要用的工作量。定量度量的結(jié)果可以用來(lái)比較兩個(gè)不同的設(shè)計(jì)或兩個(gè)不同算法的優(yōu)劣;程序的定量的復(fù)雜程度可以作為模塊規(guī)模的精確限度。程序復(fù)雜度定量度量的目標(biāo)及其作用就是減少程序復(fù)雜性,可提高軟件的簡(jiǎn)單性和可理解性,并使軟件開(kāi)發(fā)費(fèi)用減少,開(kāi)發(fā)周期縮短,軟件內(nèi)部潛藏錯(cuò)誤減少。

McCabe度量法是在1976年由ThomasMcCabe提出的一種基于程序控制流的復(fù)雜性度量方法。McCabe度量法是通過(guò)計(jì)算程序中環(huán)路的個(gè)數(shù)來(lái)估算程序復(fù)雜程度的,因此為了使用McCabe方法來(lái)進(jìn)行程序算法復(fù)雜性度量,則首先需要畫(huà)出流圖。

1.流圖

所謂流圖,也就是退化了的傳統(tǒng)程序流程圖(也稱(chēng)為程序圖),其僅僅表現(xiàn)程序內(nèi)部的控制流程,而并不涉及對(duì)數(shù)據(jù)的具體操作以及分支或循環(huán)的具體條件,這樣度量出的結(jié)果稱(chēng)為程序的環(huán)形復(fù)雜度。

在流圖中用圓表示結(jié)點(diǎn),一個(gè)圓代表一條或多條語(yǔ)句。程序流程圖中的一個(gè)順序的處理框序列和一個(gè)菱形判定框,可以映射成流圖中的一個(gè)結(jié)點(diǎn)。流圖中的箭頭線稱(chēng)為邊,它和程序流程圖中的箭頭線類(lèi)似,代表控制流。在流圖中一條邊必須終止于一個(gè)結(jié)點(diǎn),即使這個(gè)結(jié)點(diǎn)并不代表任何語(yǔ)句(實(shí)際上相當(dāng)于一個(gè)空語(yǔ)句)。由邊和結(jié)點(diǎn)圍成的面積稱(chēng)為區(qū)域,當(dāng)計(jì)算區(qū)域數(shù)時(shí)應(yīng)該包

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論