版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第6章詳細(xì)設(shè)計(jì)6.1結(jié)構(gòu)程序設(shè)計(jì)6.2人機(jī)界面設(shè)計(jì)6.3過(guò)程設(shè)計(jì)的工具6.4面向數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)方法6.5程序復(fù)雜程度的定量度量6.6小結(jié)習(xí)題本章要求理解結(jié)構(gòu)化程序設(shè)計(jì)方法的特點(diǎn)掌握人機(jī)界面設(shè)計(jì)的內(nèi)容、過(guò)程和指南掌握用流程框圖、NS圖、PAD圖、判定表和判定樹(shù)以及PDL語(yǔ)言來(lái)描述算法掌握J(rèn)ackson程序設(shè)計(jì)方法掌握程序復(fù)雜度的定量和度量詳細(xì)設(shè)計(jì)階段的根本目標(biāo)是確定應(yīng)該怎樣具體地實(shí)現(xiàn)所要求的系統(tǒng),也就是說(shuō),經(jīng)過(guò)這個(gè)階段的設(shè)計(jì)工作,應(yīng)該得出對(duì)目標(biāo)系統(tǒng)的精確描述,從而在編碼階段可以把這個(gè)描述直接翻譯成用某種程序設(shè)計(jì)語(yǔ)言書(shū)寫(xiě)的程序。
詳細(xì)設(shè)計(jì)階段的任務(wù)包括數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)、數(shù)據(jù)庫(kù)設(shè)計(jì)、算法設(shè)計(jì)、界面設(shè)計(jì)、其他設(shè)計(jì)、編寫(xiě)設(shè)計(jì)說(shuō)明書(shū)、評(píng)審。還不是具體地編寫(xiě)程序,而是要設(shè)計(jì)出程序的“藍(lán)圖”。
衡量程序的質(zhì)量不僅要看它的邏輯是否正確,性能是否滿足要求,更主要的是要看它是否容易閱讀和理解。6.1結(jié)構(gòu)程序設(shè)計(jì)結(jié)構(gòu)程序設(shè)計(jì)的概念最早由E.W.Dijkstra提出。1965年他在一次會(huì)議上指出:“可以從高級(jí)語(yǔ)言中取消GOTO語(yǔ)句”,“程序的質(zhì)量與程序中所包含的GOTO語(yǔ)句的數(shù)量成反比”。
1966年Bohm和Jacopini證明了,只用3種基本的控制結(jié)構(gòu)就能實(shí)現(xiàn)任何單入口單出口的程序。這3種基本的控制結(jié)構(gòu)是“順序”、“選擇”和“循環(huán)”,它們的流程圖分別為圖6.1(a),6.1(b)和6.1(c)。實(shí)際上用順序結(jié)構(gòu)和循環(huán)結(jié)構(gòu)(又稱(chēng)DO-WHILE結(jié)構(gòu))完全可以實(shí)現(xiàn)選擇結(jié)構(gòu)(又稱(chēng)IF-THEN-ELSE結(jié)構(gòu)),因此,理論上最基本的控制結(jié)構(gòu)只有兩種。Bohm和Jacopini的證明給結(jié)構(gòu)程序設(shè)計(jì)技術(shù)奠定了理論基礎(chǔ)。6.13種基本的控制結(jié)構(gòu)習(xí)題:6-1假設(shè)只有SEQUENCE和DO-WHILE兩種控制結(jié)構(gòu),怎樣利用它們完成IF-THEN-ELSE操作?6-2假設(shè)只允許使用SEQUENCE和IF-THEN-ELSE兩種控制結(jié)構(gòu),怎樣利用它們完成DO-WHILE操作?
結(jié)構(gòu)程序設(shè)計(jì)的經(jīng)典定義如下所述:“如果一個(gè)程序的代碼塊僅僅通過(guò)順序、選擇和循環(huán)這3種基本控制結(jié)構(gòu)進(jìn)行連接,并且每個(gè)代碼塊只有一個(gè)入口和一個(gè)出口,則稱(chēng)這個(gè)程序是結(jié)構(gòu)化的?!比绻辉试S使用順序、IF-THEN-ELSE型分支和DO-WHILE型循環(huán)這3種基本控制結(jié)構(gòu),則稱(chēng)為經(jīng)典的結(jié)構(gòu)程序設(shè)計(jì);如果除了上述3種基本控制結(jié)構(gòu)之外,還允許使用DO-CASE型多分支結(jié)構(gòu)和DO-UNTIL型循環(huán)結(jié)構(gòu),則稱(chēng)為擴(kuò)展的結(jié)構(gòu)程序設(shè)計(jì);如果再加上允許使用LEAVE(或BREAK)結(jié)構(gòu),則稱(chēng)為修正的結(jié)構(gòu)程序設(shè)計(jì)。
圖6.2其他常用的控制結(jié)構(gòu)習(xí)題:6-4圖6.18給出的程序流程圖代表一個(gè)非結(jié)構(gòu)化的程序,請(qǐng)問(wèn):(1)為什么說(shuō)它是非結(jié)構(gòu)化的?(2)設(shè)計(jì)一個(gè)等價(jià)的結(jié)構(gòu)化程序。(3)在(2)題的設(shè)計(jì)中你使用附加的標(biāo)志變量flag了嗎?若沒(méi)用,請(qǐng)?jiān)僭O(shè)計(jì)一個(gè)使用flag的程序;若用了,再設(shè)計(jì)一個(gè)不用flag的程序。圖6.18一個(gè)非結(jié)構(gòu)化程序6.2人機(jī)界面設(shè)計(jì)人機(jī)界面設(shè)計(jì)是接口設(shè)計(jì)的一個(gè)重要的組成部分。對(duì)于交互式系統(tǒng)來(lái)說(shuō),人機(jī)界面設(shè)計(jì)和數(shù)據(jù)設(shè)計(jì)、體系結(jié)構(gòu)設(shè)計(jì)及過(guò)程設(shè)計(jì)一樣重要。近年來(lái),人機(jī)界面在系統(tǒng)中所占的比例越來(lái)越大,在個(gè)別系統(tǒng)中人機(jī)界面的設(shè)計(jì)工作量甚至占總設(shè)計(jì)量的一半以上。人機(jī)界面的設(shè)計(jì)質(zhì)量,直接影響用戶(hù)對(duì)軟件產(chǎn)品的評(píng)價(jià),從而影響軟件產(chǎn)品的競(jìng)爭(zhēng)力和壽命,因此,必須對(duì)人機(jī)界面設(shè)計(jì)給予足夠重視。6.2.1設(shè)計(jì)問(wèn)題
在設(shè)計(jì)人機(jī)界面的過(guò)程中,幾乎總會(huì)遇到下述4個(gè)問(wèn)題:系統(tǒng)響應(yīng)時(shí)間、用戶(hù)幫助設(shè)施、出錯(cuò)信息處理和命令交互。不幸的是,許多設(shè)計(jì)者直到設(shè)計(jì)過(guò)程后期才開(kāi)始考慮這些問(wèn)題,這樣做往往導(dǎo)致出現(xiàn)不必要的設(shè)計(jì)反復(fù)、項(xiàng)目延期和用戶(hù)產(chǎn)生挫折感。最好在設(shè)計(jì)初期就把這些問(wèn)題作為重要的設(shè)計(jì)問(wèn)題來(lái)考慮,這時(shí)修改比較容易,代價(jià)也低。系統(tǒng)響應(yīng)時(shí)間是許多交互式系統(tǒng)用戶(hù)經(jīng)常抱怨的問(wèn)題。一般說(shuō)來(lái),系統(tǒng)響應(yīng)時(shí)間指從用戶(hù)完成某個(gè)控制動(dòng)作(例如,按回車(chē)鍵或點(diǎn)擊鼠標(biāo)),到軟件給出預(yù)期的響應(yīng)(輸出信息或做動(dòng)作)之間的這段時(shí)間。
系統(tǒng)響應(yīng)時(shí)間有兩個(gè)重要屬性,分別是長(zhǎng)度和易變性。如果系統(tǒng)響應(yīng)時(shí)間過(guò)長(zhǎng),用戶(hù)就會(huì)感到緊張和沮喪。系統(tǒng)響應(yīng)時(shí)間過(guò)短也不好,這會(huì)迫使用戶(hù)加快操作節(jié)奏,從而可能會(huì)犯錯(cuò)誤。
易變性指系統(tǒng)響應(yīng)時(shí)間相對(duì)于平均響應(yīng)時(shí)間的偏差,在許多情況下,這是系統(tǒng)響應(yīng)時(shí)間的更重要的屬性。即使系統(tǒng)響應(yīng)時(shí)間較長(zhǎng),響應(yīng)時(shí)間易變性低也有助于用戶(hù)建立起穩(wěn)定的工作節(jié)奏。1.系統(tǒng)響應(yīng)時(shí)間2.用戶(hù)幫助設(shè)施幾乎交互式系統(tǒng)的每個(gè)用戶(hù)都需要幫助,當(dāng)遇到復(fù)雜問(wèn)題時(shí)甚至需要查看用戶(hù)手冊(cè)以尋找答案。大多數(shù)現(xiàn)代軟件都提供聯(lián)機(jī)幫助設(shè)施,這使得用戶(hù)無(wú)須離開(kāi)用戶(hù)界面就能解決自己的問(wèn)題。
常見(jiàn)的幫助設(shè)施可分為集成的和附加的兩類(lèi)。集成的幫助設(shè)施從一開(kāi)始就設(shè)計(jì)在軟件里面,附加的幫助設(shè)施是在系統(tǒng)建成后再添加到軟件中的,集成的幫助設(shè)施優(yōu)于附加的幫助設(shè)施。(1)在用戶(hù)與系統(tǒng)交互期間,是否在任何時(shí)候都能獲得關(guān)于系統(tǒng)任何功能的幫助信息?有兩種選擇:提供部分功能的幫助信息和提供全部功能的幫助信息。(2)用戶(hù)怎樣請(qǐng)求幫助?有3種選擇:幫助菜單,特殊功能鍵和HELP命令。(3)怎樣顯示幫助信息?有3種選擇:在獨(dú)立的窗口中,指出參考某個(gè)文檔(不理想)和在屏幕固定位置顯示簡(jiǎn)短提示。(4)用戶(hù)怎樣返回到正常的交互方式中?有兩種選擇:屏幕上的返回按鈕和功能鍵。(5)怎樣組織幫助信息?有3種選擇:平面結(jié)構(gòu),信息的層次結(jié)構(gòu)和超文本結(jié)構(gòu)。具體設(shè)計(jì)幫助設(shè)施時(shí),必須解決下述的一系列問(wèn)題:出錯(cuò)信息和警告信息,是出現(xiàn)問(wèn)題時(shí)交互式系統(tǒng)給出的“壞消息”。出錯(cuò)信息設(shè)計(jì)得不好,將向用戶(hù)提供無(wú)用的甚至誤導(dǎo)的信息,反而會(huì)加重用戶(hù)的挫折感。交互式系統(tǒng)給出的出錯(cuò)信息或警告信息,應(yīng)該具有下述屬性。(1)信息應(yīng)該用用戶(hù)可以理解的術(shù)語(yǔ)描述問(wèn)題。(2)信息應(yīng)該提供有助于從錯(cuò)誤中恢復(fù)的建設(shè)性意見(jiàn)。(3)信息應(yīng)該指出錯(cuò)誤可能導(dǎo)致哪些負(fù)面后果(例如,破壞數(shù)據(jù)文件),以便用戶(hù)檢查是否出現(xiàn)了這些問(wèn)題,并在確實(shí)出現(xiàn)問(wèn)題時(shí)及時(shí)解決。(4)信息應(yīng)該伴隨著聽(tīng)覺(jué)上或視覺(jué)上的提示,例如,在顯示信息時(shí)同時(shí)發(fā)出警告鈴聲,或者信息用閃爍方式顯示,或者信息用明顯表示出錯(cuò)的顏色顯示。(5)信息不能帶有指責(zé)色彩,也就是說(shuō),不能責(zé)怪用戶(hù)。3.出錯(cuò)信息處理命令行曾經(jīng)是用戶(hù)和系統(tǒng)軟件交互的最常用的方式,并且也曾經(jīng)廣泛地用于各種應(yīng)用軟件中。現(xiàn)在,面向窗口的、點(diǎn)擊和拾取方式的界面已經(jīng)減少了用戶(hù)對(duì)命令行的依賴(lài),但是,許多高級(jí)用戶(hù)仍然偏愛(ài)面向命令行的交互方式。在多數(shù)情況下,用戶(hù)既可以從菜單中選擇軟件功能,也可以通過(guò)鍵盤(pán)命令序列調(diào)用軟件功能。在提供命令交互方式時(shí),必須考慮下列設(shè)計(jì)問(wèn)題。(1)是否每個(gè)菜單選項(xiàng)都有對(duì)應(yīng)的命令?(2)采用何種命令形式?有3種選擇:控制序列(例如,Ctrl+P),功能鍵和鍵入命令。(3)學(xué)習(xí)和記憶命令的難度有多大?忘記了命令怎么辦?(4)用戶(hù)是否可以定制或縮寫(xiě)命令?4.命令交互在越來(lái)越多的應(yīng)用軟件中,人機(jī)界面設(shè)計(jì)者都提供了“命令宏機(jī)制”,利用這種機(jī)制用戶(hù)可以用自己定義的名字代表一個(gè)常用的命令序列。需要使用這個(gè)命令序列時(shí),用戶(hù)無(wú)須依次鍵入每個(gè)命令,只需輸入命令宏的名字就可以順序執(zhí)行它所代表的全部命令。在理想的情況下,所有應(yīng)用軟件都有一致的命令使用方法。如果在一個(gè)應(yīng)用軟件中命令Ctrl+D表示復(fù)制一個(gè)圖形對(duì)象,而在另一個(gè)應(yīng)用軟件中Ctrl+D命令的含義是刪除一個(gè)圖形對(duì)象,顯然會(huì)使用戶(hù)感到困惑,并且往往會(huì)導(dǎo)致用錯(cuò)命令。6.2.2設(shè)計(jì)過(guò)程用戶(hù)界面設(shè)計(jì)是一個(gè)迭代的過(guò)程,也就是說(shuō),通常先創(chuàng)建設(shè)計(jì)模型,再用原型實(shí)現(xiàn)這個(gè)設(shè)計(jì)模型,并由用戶(hù)試用和評(píng)估,然后根據(jù)用戶(hù)意見(jiàn)進(jìn)行修改。
一旦建立起用戶(hù)界面的原型,就必須對(duì)它進(jìn)行評(píng)估,以確定其是否滿足用戶(hù)的需求。評(píng)估可以是非正式的.
用戶(hù)界面的評(píng)估周期如下所述:完成初步設(shè)計(jì)之后就創(chuàng)建第一級(jí)原型;用戶(hù)試用并評(píng)估該原型,直接向設(shè)計(jì)者表述對(duì)界面的評(píng)價(jià);設(shè)計(jì)者根據(jù)用戶(hù)意見(jiàn)修改設(shè)計(jì)并實(shí)現(xiàn)下一級(jí)原型。上述評(píng)估過(guò)程持續(xù)進(jìn)行下去,直到用戶(hù)感到滿意,不需要再修改界面設(shè)計(jì)時(shí)為止。在創(chuàng)建了用戶(hù)界面的設(shè)計(jì)模型之后,可以運(yùn)用下述評(píng)估標(biāo)準(zhǔn)對(duì)設(shè)計(jì)進(jìn)行早期復(fù)審。(1)系統(tǒng)及其界面的規(guī)格說(shuō)明書(shū)的長(zhǎng)度和復(fù)雜程度,預(yù)示了用戶(hù)學(xué)習(xí)使用該系統(tǒng)所需要的工作量。(2)命令或動(dòng)作的數(shù)量、命令的平均參數(shù)個(gè)數(shù)或動(dòng)作中單個(gè)操作的個(gè)數(shù),預(yù)示了系統(tǒng)的交互時(shí)間和總體效率。(3)設(shè)計(jì)模型中包含的動(dòng)作、命令和系統(tǒng)狀態(tài)的數(shù)量,預(yù)示了用戶(hù)學(xué)習(xí)使用該系統(tǒng)時(shí)需要記憶的內(nèi)容的多少。(4)界面風(fēng)格、幫助設(shè)施和出錯(cuò)處理協(xié)議,預(yù)示了界面的復(fù)雜程度及用戶(hù)接受該界面的程度。6.2.3人機(jī)界面設(shè)計(jì)指南用戶(hù)界面設(shè)計(jì)主要依靠設(shè)計(jì)者的經(jīng)驗(yàn)??偨Y(jié)眾多設(shè)計(jì)者的經(jīng)驗(yàn)得出的設(shè)計(jì)指南,有助于設(shè)計(jì)者設(shè)計(jì)出友好、高效的人機(jī)界面。下面介紹3類(lèi)人機(jī)界面設(shè)計(jì)指南。1.一般交互指南2.信息顯示指南3.數(shù)據(jù)輸入指南
一般交互指南涉及信息顯示、數(shù)據(jù)輸入和系統(tǒng)整體控制,因此,這類(lèi)指南是全局性的,忽略它們將承擔(dān)較大風(fēng)險(xiǎn)。
(1)保持一致性。應(yīng)該為人機(jī)界面中的菜單選擇、命令輸入、數(shù)據(jù)顯示以及眾多的其他功能,使用一致的格式。(2)提供有意義的反饋。應(yīng)向用戶(hù)提供視覺(jué)的和聽(tīng)覺(jué)的反饋,以保證在用戶(hù)和系統(tǒng)之間建立雙向通信。(3)在執(zhí)行有較大破壞性的動(dòng)作之前要求用戶(hù)確認(rèn)。如果用戶(hù)要?jiǎng)h除一個(gè)文件,或覆蓋一些重要信息,或終止一個(gè)程序的運(yùn)行,應(yīng)該給出“您是否確實(shí)要……”的信息,以請(qǐng)求用戶(hù)確認(rèn)他的命令。(4)允許取消絕大多數(shù)操作。UNDO或REVERSE功能曾經(jīng)使眾多終端用戶(hù)避免了大量時(shí)間浪費(fèi)。每個(gè)交互式系統(tǒng)都應(yīng)該能方便地取消已完成的操作。1.一般交互指南(5)減少在兩次操作之間必須記憶的信息量。不應(yīng)該期望用戶(hù)能記住在下一步操作中需使用的一大串?dāng)?shù)字或標(biāo)識(shí)符。應(yīng)該盡量減少記憶量。(6)提高對(duì)話、移動(dòng)和思考的效率。應(yīng)該盡量減少用戶(hù)擊鍵的次數(shù),設(shè)計(jì)屏幕布局時(shí)應(yīng)該考慮盡量減少鼠標(biāo)移動(dòng)的距離,應(yīng)該盡量避免出現(xiàn)用戶(hù)問(wèn)“這是什么意思?”的情況。(7)允許犯錯(cuò)誤。系統(tǒng)應(yīng)該能保護(hù)自己不受?chē)?yán)重錯(cuò)誤的破壞。(8)按功能對(duì)動(dòng)作分類(lèi),并據(jù)此設(shè)計(jì)屏幕布局。下拉菜單的一個(gè)主要優(yōu)點(diǎn)就是能按動(dòng)作類(lèi)型組織命令。實(shí)際上,設(shè)計(jì)者應(yīng)該盡力提高命令和動(dòng)作組織的“內(nèi)聚性”。(9)提供對(duì)用戶(hù)工作內(nèi)容敏感的幫助設(shè)施(參見(jiàn)6.2.1節(jié))。(10)用簡(jiǎn)單動(dòng)詞或動(dòng)詞短語(yǔ)作為命令名。過(guò)長(zhǎng)的命令名難于識(shí)別和記憶,也會(huì)占用過(guò)多的菜單空間。
如果人機(jī)界面顯示的信息是不完整的、含糊的或難于理解的,則該應(yīng)用系統(tǒng)顯然不能滿足用戶(hù)的需求??梢杂枚喾N不同方式“顯示”信息:用文字、圖形和聲音;按位置、移動(dòng)和大??;使用顏色、分辨率和省略。下面是關(guān)于信息顯示的設(shè)計(jì)指南。(1)只顯示與當(dāng)前工作內(nèi)容有關(guān)的信息。用戶(hù)在獲得有關(guān)系統(tǒng)的特定功能的信息時(shí),不必看到與之無(wú)關(guān)的數(shù)據(jù)、菜單和圖形。(2)不要用數(shù)據(jù)淹沒(méi)用戶(hù),應(yīng)該用便于用戶(hù)迅速吸取信息的方式來(lái)表示數(shù)據(jù)。例如,可以用圖形或圖表來(lái)取代龐大的表格。(3)使用一致的標(biāo)記、標(biāo)準(zhǔn)的縮寫(xiě)和可預(yù)知的顏色。顯示的含義應(yīng)該非常明確,用戶(hù)無(wú)須參照其他信息源就能理解。2.信息顯示指南(4)允許用戶(hù)保持可視化的語(yǔ)境。如果對(duì)所顯示的圖形進(jìn)行縮放,原始的圖像應(yīng)該一直顯示著(以縮小的形式放在顯示屏的一角),以使用戶(hù)知道當(dāng)前看到的圖像部分在原圖中所處的相對(duì)位置。(5)產(chǎn)生有意義的出錯(cuò)信息(參見(jiàn)6.2.1節(jié))。(6)使用大小寫(xiě)、縮進(jìn)和文本分組以幫助理解。人機(jī)界面顯示的信息大部分是文字,文字的布局和形式對(duì)用戶(hù)從中提取信息的難易程度有很大影響。(7)使用窗口分隔不同類(lèi)型的信息。利用窗口用戶(hù)能夠方便地“保存”多種不同類(lèi)型的信息。(8)使用“模擬”顯示方式表示信息,以使信息更容易被用戶(hù)提取。例如,顯示煉油廠儲(chǔ)油罐的壓力時(shí),如果簡(jiǎn)單地用數(shù)字表示壓力,則不易引起用戶(hù)注意。但是,如果用類(lèi)似溫度計(jì)的形式來(lái)表示壓力,用垂直移動(dòng)和顏色變化來(lái)指示危險(xiǎn)的壓力狀況,就容易引起用戶(hù)的警覺(jué),因?yàn)檫@樣做為用戶(hù)提供了絕對(duì)和相對(duì)兩方面的信息。(9)高效率地使用顯示屏。當(dāng)使用多窗口時(shí),應(yīng)該有足夠的空間使得每個(gè)窗口至少都能顯示出一部分。此外,屏幕大小應(yīng)該選得和應(yīng)用系統(tǒng)的類(lèi)型相配套(這實(shí)際上是一個(gè)系統(tǒng)工程問(wèn)題)。
用戶(hù)的大部分時(shí)間用在選擇命令、鍵入數(shù)據(jù)和向系統(tǒng)提供輸入。在許多應(yīng)用系統(tǒng)中,鍵盤(pán)仍然是主要的輸入介質(zhì),但是,鼠標(biāo)、數(shù)字化儀和語(yǔ)音識(shí)別系統(tǒng)正迅速地成為重要的輸入手段。下面是關(guān)于數(shù)據(jù)輸入的設(shè)計(jì)指南。(1)盡量減少用戶(hù)的輸入動(dòng)作。最重要的是減少擊鍵次數(shù),這可以用下列方法實(shí)現(xiàn):用鼠標(biāo)從預(yù)定義的一組輸入中選一個(gè);用“滑動(dòng)標(biāo)尺”在給定的值域中指定輸入值;利用宏把一次擊鍵轉(zhuǎn)變成更復(fù)雜的輸入數(shù)據(jù)集合。(2)保持信息顯示和數(shù)據(jù)輸入之間的一致性。顯示的視覺(jué)特征應(yīng)該與輸入域一致。3.數(shù)據(jù)輸入指南(3)允許用戶(hù)自定義輸入。專(zhuān)家級(jí)的用戶(hù)可能希望定義自己專(zhuān)用的命令或略去某些類(lèi)型的警告信息和動(dòng)作確認(rèn),人機(jī)界面應(yīng)該為用戶(hù)提供這樣做的機(jī)制。(4)交互應(yīng)該是靈活的,并且可調(diào)整成用戶(hù)最喜歡的輸入方式。用戶(hù)類(lèi)型與喜好的輸入方式有關(guān),例如,秘書(shū)可能非常喜歡鍵盤(pán)輸入,而經(jīng)理可能更喜歡使用鼠標(biāo)之類(lèi)的點(diǎn)擊設(shè)備。(5)使在當(dāng)前動(dòng)作語(yǔ)境中不適用的命令不起作用。這可使得用戶(hù)不去做那些肯定會(huì)導(dǎo)致錯(cuò)誤的動(dòng)作。(6)讓用戶(hù)控制交互流。用戶(hù)應(yīng)該能夠跳過(guò)不必要的動(dòng)作,改變所需做的動(dòng)作的順序(在應(yīng)用環(huán)境允許的前提下),以及在不退出程序的情況下從錯(cuò)誤狀態(tài)中恢復(fù)正常。(7)對(duì)所有輸入動(dòng)作都提供幫助(參見(jiàn)6.2.1節(jié))。(8)消除冗余的輸入。除非可能發(fā)生誤解,否則不要要求用戶(hù)指定輸入數(shù)據(jù)的單位;盡可能提供默認(rèn)值;絕對(duì)不要要求用戶(hù)提供程序可以自動(dòng)獲得或計(jì)算出來(lái)的信息。6.3過(guò)程設(shè)計(jì)的工具程序流程圖又稱(chēng)為程序框圖,它是歷史最悠久、使用最廣泛的描述過(guò)程設(shè)計(jì)的方法,然而它也是用得最混亂的一種方法。
6.3.1程序流程圖圖6.3程序流程圖中使用的符號(hào)從20世紀(jì)40年代末到70年代中期,程序流程圖一直是軟件設(shè)計(jì)的主要工具。它的主要優(yōu)點(diǎn)是對(duì)控制流程的描繪很直觀,便于初學(xué)者掌握。由于程序流程圖歷史悠久,為最廣泛的人所熟悉,盡管它有種種缺點(diǎn),許多人建議停止使用它,但至今仍在廣泛使用著。不過(guò)總的趨勢(shì)是越來(lái)越多的人不再使用程序流程圖了。程序流程圖的主要缺點(diǎn)如下:(1)程序流程圖本質(zhì)上不是逐步求精的好工具,它誘使程序員過(guò)早地考慮程序的控制流程,而不去考慮程序的全局結(jié)構(gòu)。(2)程序流程圖中用箭頭代表控制流,因此程序員不受任何約束,可以完全不顧結(jié)構(gòu)程序設(shè)計(jì)的精神,隨意轉(zhuǎn)移控制。(3)程序流程圖不易表示數(shù)據(jù)結(jié)構(gòu)。6.3.2盒圖(N-S圖)出于要有一種不允許違背結(jié)構(gòu)程序設(shè)計(jì)精神的圖形工具的考慮,Nassi和Shneiderman提出了盒圖,又稱(chēng)為N-S圖。它有下述特點(diǎn):(1)功能域(即,一個(gè)特定控制結(jié)構(gòu)的作用域)明確,可以從盒圖上一眼就看出來(lái)。(2)不可能任意轉(zhuǎn)移控制。(3)很容易確定局部和全程數(shù)據(jù)的作用域。(4)很容易表現(xiàn)嵌套關(guān)系,也可以表示模塊的層次結(jié)構(gòu)。圖6.4給出了結(jié)構(gòu)化控制結(jié)構(gòu)的盒圖表示,也給出了調(diào)用子程序的盒圖表示方法。盒圖沒(méi)有箭頭,因此不允許隨意轉(zhuǎn)移控制。堅(jiān)持使用盒圖作為詳細(xì)設(shè)計(jì)的工具,可以使程序員逐步養(yǎng)成用結(jié)構(gòu)化的方式思考問(wèn)題和解決問(wèn)題的習(xí)慣。圖6.4盒圖的基本符號(hào)6.3.3PAD圖PAD是問(wèn)題分析圖(problemanalysisdiagram)的英文縮寫(xiě),自1973年由日本日立公司發(fā)明以后,已得到一定程度的推廣。它用二維樹(shù)形結(jié)構(gòu)的圖來(lái)表示程序的控制流,將這種圖翻譯成程序代碼比較容易。圖6.5給出PAD圖的基本符號(hào)。圖6.5PAD圖的基本符號(hào)(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)率。PAD圖的主要優(yōu)點(diǎn)如下:(5)即可用于表示程序邏輯,也可用于描繪數(shù)據(jù)結(jié)構(gòu)。(6)PAD圖的符號(hào)支持自頂向下、逐步求精方法的使用。開(kāi)始時(shí)設(shè)計(jì)者可以定義一個(gè)抽象的程序,隨著設(shè)計(jì)工作的深入而使用def符號(hào)逐步增加細(xì)節(jié),直至完成詳細(xì)設(shè)計(jì),如圖6.6所示。圖6.6使用PAD圖提供的定義功能來(lái)逐步求精的例子6.3.4判定表當(dāng)算法中包含多重嵌套的條件選擇時(shí),用程序流程圖、盒圖、PAD圖或后面即將介紹的過(guò)程設(shè)計(jì)語(yǔ)言(PDL)都不易清楚地描述。然而判定表卻能夠清晰地表示復(fù)雜的條件組合與應(yīng)做的動(dòng)作之間的對(duì)應(yīng)關(guān)系。一張判定表由4部分組成:左上部列出所有條件左下部是所有可能做的動(dòng)作右上部是表示各種條件組合的一個(gè)矩陣右下部是和每種條件組合相對(duì)應(yīng)的動(dòng)作。判定表右半部的每一列實(shí)質(zhì)上是一條規(guī)則,規(guī)定了與特定的條件組合相對(duì)應(yīng)的動(dòng)作。下面以行李托運(yùn)費(fèi)的算法為例說(shuō)明判定表的組織方法。假設(shè)某航空公司規(guī)定,乘客可以免費(fèi)托運(yùn)重量不超過(guò)30kg的行李。當(dāng)行李重量超過(guò)30kg時(shí),對(duì)頭等艙的國(guó)內(nèi)乘客超重部分每公斤收費(fèi)4元,對(duì)其他艙的國(guó)內(nèi)乘客超重部分每公斤收費(fèi)6元,對(duì)外國(guó)乘客超重部分每公斤收費(fèi)比國(guó)內(nèi)乘客多一倍,對(duì)殘疾乘客超重部分每公斤收費(fèi)比正常乘客少一半。用判定表可以清楚地表示與上述每種條件組合相對(duì)應(yīng)的計(jì)算行李費(fèi)的算法,如表6.1(見(jiàn)書(shū)118頁(yè))所示。從上面這個(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ù)等處理特性。6.3.5判定樹(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í)(例如,6.3.4例子中假設(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ì)的工具。圖6.7是和表6.1等價(jià)的判定樹(shù)。圖6.7用判定樹(shù)表示計(jì)算行李費(fèi)的算法6.3.6過(guò)程設(shè)計(jì)語(yǔ)言過(guò)程設(shè)計(jì)語(yǔ)言(PDL)也稱(chēng)為偽碼,這是一個(gè)籠統(tǒng)的名稱(chēng),現(xiàn)在有許多種不同的過(guò)程設(shè)計(jì)語(yǔ)言在使用。它是用正文形式表示數(shù)據(jù)和處理過(guò)程的設(shè)計(jì)工具。PDL具有嚴(yán)格的關(guān)鍵字外部語(yǔ)法,用于定義控制結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu);另一方面,PDL表示實(shí)際操作和條件的內(nèi)部語(yǔ)法通常又是靈活自由的,可以適應(yīng)各種工程項(xiàng)目的需要。因此,一般說(shuō)來(lái),PDL是一種“混雜”語(yǔ)言,它使用一種語(yǔ)言的詞匯,同時(shí)卻使用另一種語(yǔ)言(某種結(jié)構(gòu)化的程序設(shè)計(jì)語(yǔ)言)的語(yǔ)法。(1)關(guān)鍵字的固定語(yǔ)法,它提供了結(jié)構(gòu)化控制結(jié)構(gòu)、數(shù)據(jù)說(shuō)明和模塊化的特點(diǎn)。為了使結(jié)構(gòu)清晰和可讀性好,通常在所有可能嵌套使用的控制結(jié)構(gòu)的頭和尾都有關(guān)鍵字,例如,if…fi(或endif)等等。(2)自然語(yǔ)言的自由語(yǔ)法,它描述處理特點(diǎn)。(3)數(shù)據(jù)說(shuō)明的手段。應(yīng)該既包括簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu)(例如純量和數(shù)組),又包括復(fù)雜的數(shù)據(jù)結(jié)構(gòu)(例如,鏈表或?qū)哟蔚臄?shù)據(jù)結(jié)構(gòu))。(4)模塊定義和調(diào)用的技術(shù),應(yīng)該提供各種接口描述模式。PDL應(yīng)該具有下述特點(diǎn):(1)可以作為注釋直接插在源程序中間。這樣做能促使維護(hù)人員在修改程序代碼的同時(shí)也相應(yīng)地修改PDL注釋?zhuān)虼擞兄诒3治臋n和程序的一致性,提高了文檔的質(zhì)量。(2)可以使用普通的正文編輯程序或文字處理系統(tǒng),很方便地完成PDL的書(shū)寫(xiě)和編輯工作。(3)已經(jīng)有自動(dòng)處理程序存在,而且可以自動(dòng)由PDL生成程序代碼。PDL的缺點(diǎn)是不如圖形工具形象直觀,描述復(fù)雜的條件組合與動(dòng)作間的對(duì)應(yīng)關(guān)系時(shí),不如判定表清晰簡(jiǎn)單。PDL作為一種設(shè)計(jì)工具有如下一些優(yōu)點(diǎn):6.4面向數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)方法層次的數(shù)據(jù)組織通常和使用這些數(shù)據(jù)的程序的層次結(jié)構(gòu)十分相似。面向數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)方法的最終目標(biāo)是得出對(duì)程序處理過(guò)程的描述。在完成了軟件結(jié)構(gòu)設(shè)計(jì)之后,可以使用面向數(shù)據(jù)結(jié)構(gòu)的方法來(lái)設(shè)計(jì)每個(gè)模塊的處理過(guò)程。Jackson方法和Warnier方法是最著名的兩個(gè)面向數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)方法,使用面向數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)方法,當(dāng)然首先需要分析確定數(shù)據(jù)結(jié)構(gòu),并且用適當(dāng)?shù)墓ぞ咔逦孛枥L數(shù)據(jù)結(jié)構(gòu)。6.4.1Jackson圖雖然程序中實(shí)際使用的數(shù)據(jù)結(jié)構(gòu)種類(lèi)繁多,但是它們的數(shù)據(jù)元素彼此間的邏輯關(guān)系卻只有順序、選擇和重復(fù)3類(lèi),因此,邏輯數(shù)據(jù)結(jié)構(gòu)也只有這3類(lèi)。1.順序結(jié)構(gòu)順序結(jié)構(gòu)的數(shù)據(jù)由一個(gè)或多個(gè)數(shù)據(jù)元素組成,每個(gè)元素按確定次序出現(xiàn)一次。圖6.8是表示順序結(jié)構(gòu)的Jackson圖的一個(gè)例子。圖6.8A由B、C、D3個(gè)元素順序組成2.選擇結(jié)構(gòu)選擇結(jié)構(gòu)的數(shù)據(jù)包含兩個(gè)或多個(gè)數(shù)據(jù)元素,每次使用這個(gè)數(shù)據(jù)時(shí)按一定條件從這些數(shù)據(jù)元素中選擇一個(gè)。圖6.9是表示3個(gè)中選1個(gè)結(jié)構(gòu)的Jackson圖。圖6.9根據(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)成。圖6.10是表示重復(fù)結(jié)構(gòu)的Jackson圖。圖6.10A由B出現(xiàn)N次(N≥0)組成便于表示層次結(jié)構(gòu),而且是對(duì)結(jié)構(gòu)進(jìn)行自頂向下分解的有力工具;形象直觀可讀性好;既能表示數(shù)據(jù)結(jié)構(gòu)也能表示程序結(jié)構(gòu)(因?yàn)榻Y(jié)構(gòu)程序設(shè)計(jì)也只使用上述3種基本控制結(jié)構(gòu))。Jackson圖有下述優(yōu)點(diǎn):6.4.2改進(jìn)的Jackson圖上一小節(jié)介紹的Jackson圖的缺點(diǎn)是,用這種圖形工具表示選擇或重復(fù)結(jié)構(gòu)時(shí),選擇條件或循環(huán)結(jié)束條件不能直接在圖上表示出來(lái),影響了圖的表達(dá)能力,也不易直接把圖翻譯成程序,此外,框間連線為斜線,不易在行式打印機(jī)上輸出。為了解決上述問(wèn)題,本書(shū)建議使用圖6.11中給出的改進(jìn)的Jackson圖。圖6.11改進(jìn)的Jackson圖6.4.3Jackson方法Jackson結(jié)構(gòu)程序設(shè)計(jì)方法基本上由下述5個(gè)步驟組成:(1)分析并確定輸入數(shù)據(jù)和輸出數(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)系是指有直接的因果關(guān)系,在程序中可以同時(shí)處理的數(shù)據(jù)單元(對(duì)于重復(fù)出現(xiàn)的數(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)的處理框??傊枥L程序結(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)的,下面是和3種基本結(jié)構(gòu)對(duì)應(yīng)的偽碼。和圖6.11(a)所示的順序結(jié)構(gòu)對(duì)應(yīng)的偽碼,其中‘seq’和‘end’是關(guān)鍵字: A seq
B C D A end和圖6.11(b)所示的選擇結(jié)構(gòu)對(duì)應(yīng)的偽碼,其中‘select’、‘or’和‘end’是關(guān)鍵字,cond1、cond2和cond3分別是執(zhí)行B、C或D的條件: A select cond1 B A or cond2 C A or cond3 D A end和圖6.11(d)所示重復(fù)結(jié)構(gòu)對(duì)應(yīng)的偽碼,其中‘iter’、‘until’、‘while’和‘end’是關(guān)鍵字,cond是條件: A iteruntil(或while)cond
B A end[例]一個(gè)正文文件由若干個(gè)記錄組成,每個(gè)記錄是一個(gè)字符串。要求統(tǒng)計(jì)每個(gè)記錄中空格字符的個(gè)數(shù),以及文件中空格字符的總個(gè)數(shù)。要求的輸出數(shù)據(jù)格式是,每復(fù)制一行輸入字符串之后,另起一行印出這個(gè)字符串中的空格數(shù),最后印出文件中空格的總個(gè)數(shù)。圖6.12表示輸入輸出數(shù)據(jù)結(jié)構(gòu)的Jackson圖對(duì)于這個(gè)簡(jiǎn)單例子而言,輸入和輸出數(shù)據(jù)的結(jié)構(gòu)很容易確定。圖6.12是用Jackson圖描繪的輸入輸出數(shù)據(jù)結(jié)構(gòu)。確定了輸入輸出數(shù)據(jù)結(jié)構(gòu)之后,第二步是分析確定在輸入數(shù)據(jù)結(jié)構(gòu)和輸出數(shù)據(jù)結(jié)構(gòu)中有對(duì)應(yīng)關(guān)系的數(shù)據(jù)單元。在這個(gè)例子中哪些數(shù)據(jù)單元有對(duì)應(yīng)關(guān)系呢?輸出數(shù)據(jù)總是通過(guò)對(duì)輸入數(shù)據(jù)的處理而得到的,因此在輸入輸出數(shù)據(jù)結(jié)構(gòu)最高層次的兩個(gè)單元總是有對(duì)應(yīng)關(guān)系的。這一對(duì)單元將和程序結(jié)構(gòu)圖中最頂層的方框(代表程序)相對(duì)應(yīng),也就是說(shuō)經(jīng)過(guò)程序的處理由正文文件得到輸出表格。因?yàn)槊刻幚磔斎霐?shù)據(jù)中一個(gè)“字符串”之后,就可以得到輸出數(shù)據(jù)中一個(gè)“串信息”,它們都是重復(fù)出現(xiàn)的數(shù)據(jù)單元,而且出現(xiàn)次序和重復(fù)次數(shù)都完全相同,因此,“字符串”和“串信息”也是一對(duì)有對(duì)應(yīng)關(guān)系的單元。還有其他有對(duì)應(yīng)關(guān)系的單元嗎?為了回答這個(gè)問(wèn)題依次考察輸入數(shù)據(jù)結(jié)構(gòu)中余下的每個(gè)數(shù)據(jù)單元?!白址辈豢赡芎投鄠€(gè)字符組成的“字符串”對(duì)應(yīng),和輸出數(shù)據(jù)結(jié)構(gòu)中其他數(shù)據(jù)單元也不能對(duì)應(yīng)?!翱崭瘛蹦芎汀翱崭駭?shù)”對(duì)應(yīng)嗎?顯然,單個(gè)空格并不能決定一個(gè)記錄中包含的空格個(gè)數(shù),因此沒(méi)有對(duì)應(yīng)關(guān)系。通過(guò)類(lèi)似的考察發(fā)現(xiàn),輸入數(shù)據(jù)結(jié)構(gòu)中余下的任何一個(gè)單元在輸出數(shù)據(jù)結(jié)構(gòu)中都找不到對(duì)應(yīng)的單元,也就是說(shuō),在這個(gè)例子中輸入輸出數(shù)據(jù)結(jié)構(gòu)中只有上述兩對(duì)有對(duì)應(yīng)關(guān)系的單元。在圖6.12中用一對(duì)虛線箭頭把有對(duì)應(yīng)關(guān)系的數(shù)據(jù)單元連接起來(lái),以突出表明這種對(duì)應(yīng)關(guān)系。Jackson程序設(shè)計(jì)方法的第三步是從數(shù)據(jù)結(jié)構(gòu)圖導(dǎo)出程序結(jié)構(gòu)圖。按照前面已經(jīng)講述過(guò)的規(guī)則,這個(gè)步驟的大致過(guò)程是:首先,在描繪程序結(jié)構(gòu)的Jackson圖的最頂層畫(huà)一個(gè)處理框“統(tǒng)計(jì)空格”,它與“正文文件”和“輸出表格”這對(duì)最頂層的數(shù)據(jù)單元相對(duì)應(yīng)。但是接下來(lái)還不能立即畫(huà)與另一對(duì)數(shù)據(jù)單元(“字符串”和“串信息”)相對(duì)應(yīng)的處理框,因?yàn)樵谳敵鰯?shù)據(jù)結(jié)構(gòu)中“串信息”的上層還有“表格體”和“空格總數(shù)”兩個(gè)數(shù)據(jù)單元,在程序結(jié)構(gòu)圖的第二層應(yīng)該有與這兩個(gè)單元對(duì)應(yīng)的處理框——“程序體”和“印總數(shù)”。因此,在程序結(jié)構(gòu)圖的第三層才是與“字符串”和“串信息”相對(duì)應(yīng)的處理框——“處理字符串”。在程序結(jié)構(gòu)圖的第四層似乎應(yīng)該是和“字符串”、“字符”及“空格數(shù)”等數(shù)據(jù)單元對(duì)應(yīng)的處理框“印字符串”、“分析字符”及“印空格數(shù)”,這3個(gè)處理是順序執(zhí)行的。但是,“字符”是重復(fù)出現(xiàn)的數(shù)據(jù)單元,因此“分析字符”也應(yīng)該是重復(fù)執(zhí)行的處理。改進(jìn)的Jackson圖規(guī)定順序執(zhí)行的處理中不允許混有重復(fù)執(zhí)行或選擇執(zhí)行的處理,所以在“分析字符”這個(gè)處理框上面又增加了一個(gè)處理框“分析字符串”。最后得到的程序結(jié)構(gòu)圖為圖6.13。圖6.13描繪統(tǒng)計(jì)空格程序結(jié)構(gòu)的Jackson圖Jackson程序設(shè)計(jì)方法的第四步是列出所有操作和條件,并且把它們分配到程序結(jié)構(gòu)圖的適當(dāng)位置。首先,列出統(tǒng)計(jì)空格個(gè)數(shù)需要的全部操作和條件。(1)停止 (2)打開(kāi)文件(3)關(guān)閉文件 (4)印出字符串(5)印出空格數(shù)目 (6)印出空格總數(shù)(7)sum;=sum+1 (8)totalsum:=totalsum+
sum(9)讀入字符串 (10)sumz=O(11)totalsumz=O (12)pointer:=1
(13)pointer:=pointer+1 I(1)文件結(jié)束I(2)字符串結(jié)束 S(3)字符是空格經(jīng)過(guò)簡(jiǎn)單分析不難把這些操作和條件分配到程序結(jié)構(gòu)圖的適當(dāng)位置,結(jié)果為圖6.14。圖6.14把操作和條件分配到程序結(jié)構(gòu)圖的適當(dāng)位置統(tǒng)計(jì)空格seq
打開(kāi)文件 讀入字符串 totalsum∶=0
程序體iteruntil文件結(jié)束 處理字符串seq
印字符串seq
印出字符串 印字符串end
sum∶=0
pointer∶=1
分析字符串iteruntil字符串結(jié)束 分析字符select字符是空格Jackson方法的最后一步是用偽碼表示程序處理過(guò)程。因?yàn)镴ackson使用的偽碼和Jackson圖之間存在簡(jiǎn)單的對(duì)應(yīng)關(guān)系,所以從圖6.14很容易得出下面的偽碼: 處理空格seq
sum∶=sum+1 pointer∶=pointer+1
處理空格end
分析字符or字符不是空格 處理非空格seq
pointer∶=pointer+1
處理非空格end
分析字符end
分析字符串end
印空格數(shù)seq
印出空格數(shù)目 印空格數(shù)end
totalsum∶=totalsum+sum
讀入字符串 處理字符串end
程序體end
印總數(shù)seq
印出空格總數(shù) 印總數(shù)end
關(guān)閉文件 停止統(tǒng)計(jì)空格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ù),詳細(xì)介紹這些技術(shù)已經(jīng)超出本書(shū)的范圍。6.5程序復(fù)雜程度的定量度量定量度量程序復(fù)雜程度的方法很有價(jià)值:把程序的復(fù)雜程度乘以適當(dāng)常數(shù)即可估算出軟件中錯(cuò)誤的數(shù)量以及軟件開(kāi)發(fā)需要用的工作量,定量度量的結(jié)果可以用來(lái)比較兩個(gè)不同的設(shè)計(jì)或兩個(gè)不同算法的優(yōu)劣;程序的定量的復(fù)雜程度可以作為模塊規(guī)模的精確限度。下面著重介紹使用得比較廣泛的McCabe方法和Halstead方法。6.5.1McCabe方法1.流圖McCabe方法根據(jù)程序控制流的復(fù)雜程度定量度量程序的復(fù)雜程度,這樣度量出的結(jié)果稱(chēng)為程序的環(huán)形復(fù)雜度。為了突出表示程序的控制流,人們通常使用流圖(也稱(chēng)為程序圖)。所謂流圖實(shí)質(zhì)上是“退化了的”程序流程圖,它僅僅描繪程序的控制流程,完全不表現(xiàn)對(duì)數(shù)據(jù)的具體操作以及分支或循環(huán)的具體條件。在流圖中用圓表示結(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)該包括圖外部未被圍起來(lái)的那個(gè)區(qū)域。(a)程序流程圖(b)流圖用任何方法表示的過(guò)程設(shè)計(jì)結(jié)果,都可以翻譯成流圖。圖6.16是用PDL表示的處理過(guò)程及與之對(duì)應(yīng)的流圖。圖6.16由PDL翻譯成的流圖當(dāng)過(guò)程設(shè)計(jì)中包含復(fù)合條件時(shí),生成流圖的方法稍微復(fù)雜一些。所謂復(fù)合條件,就是在條件中包含了一個(gè)或多個(gè)布爾運(yùn)算符(邏輯OR,AND,NAND,NOR)。在這種情況下,應(yīng)該把復(fù)合條件分解為若干個(gè)簡(jiǎn)單條件,每個(gè)簡(jiǎn)單條件對(duì)應(yīng)流圖中一個(gè)結(jié)點(diǎn)。包含條件的結(jié)點(diǎn)稱(chēng)為判定節(jié)點(diǎn),從每個(gè)判定結(jié)點(diǎn)引出兩條或多條邊。圖6.17是由包含復(fù)合條件的PDL片斷翻譯成的流圖。圖6.17由包含復(fù)合條件的PDL映射成的流圖環(huán)形復(fù)雜度定量度量程序的邏輯復(fù)雜度。有了描繪程序控制流的流圖之后,可以用下述3種方法中的任何一種來(lái)計(jì)算環(huán)形復(fù)雜度。(1)流圖中的區(qū)域數(shù)等于環(huán)形復(fù)雜度。(2)流圖G的環(huán)形復(fù)雜度V(G)=E-N+2,其中,E是流圖中邊的條數(shù),N是結(jié)點(diǎn)數(shù)。(3)流圖G的環(huán)形復(fù)雜度V(G)=P+1,其中,P是流圖中判定結(jié)點(diǎn)的數(shù)目。2.計(jì)算環(huán)形復(fù)雜度的方法圖6.16所示流圖的環(huán)形復(fù)雜度為4.(1)區(qū)域數(shù)=4(2)V(G)=E-N+2=11-9+2=4(3)V(G)=P+1=3+1程序的環(huán)形復(fù)雜度取決于程序控制流的復(fù)雜程度,也即是取決于程序結(jié)構(gòu)的復(fù)雜程度。當(dāng)程序內(nèi)分支數(shù)或循環(huán)個(gè)數(shù)增加時(shí),環(huán)形復(fù)雜度也隨之增加,因此它是對(duì)測(cè)試難度的一種定量度量,也能對(duì)軟件最終的可靠性給出某種預(yù)測(cè)。McCabe研究大量程序后發(fā)現(xiàn),環(huán)形復(fù)雜度高的程序往往是最困難、最容易出問(wèn)題的程序。實(shí)踐表明,模塊規(guī)模以V(G)≤10為宜,也就是說(shuō),V(G)=10是模塊規(guī)模的一個(gè)更科學(xué)更精確的上限。3.環(huán)形復(fù)雜度的用途6.5.2Halstead方法Halstead方法是另一個(gè)著名的方法,它根據(jù)程序中運(yùn)算符和操作數(shù)的總數(shù)來(lái)度量程序的復(fù)雜程度。1.程序長(zhǎng)度,即預(yù)測(cè)的Halstead長(zhǎng)度
令N1為程序中運(yùn)算符出現(xiàn)的總次數(shù),N2為操作數(shù)出現(xiàn)的總次數(shù),程序長(zhǎng)度N定義為:N=N1+N2詳細(xì)設(shè)計(jì)完成之后,可以知道程序中使用的不同運(yùn)算符(包括關(guān)鍵字)的個(gè)數(shù)n1,以及不同操作數(shù)(變量和常數(shù))的個(gè)數(shù)n2。Halstead給出預(yù)測(cè)程序長(zhǎng)度的公式如下:H=n1log2
n1+n2log2n2多次驗(yàn)證都表明,預(yù)測(cè)的長(zhǎng)度H與實(shí)際長(zhǎng)度N非常接近。圖9-5-2是用FORTRAN語(yǔ)言寫(xiě)出的交換排序的例子預(yù)測(cè)程序長(zhǎng)度:H=n1·log2n1+n2·log2n2=10·log210+7·log27=52.87程序長(zhǎng)度:N=N1+N2=28+22=50
Halstead還給出了預(yù)測(cè)程序中包含錯(cuò)誤的個(gè)數(shù)的公式如下:E=Nlog2(n1+n2)/3000有人曾對(duì)從300條到12000條語(yǔ)句范圍內(nèi)的程序核實(shí)了上述公式,發(fā)現(xiàn)預(yù)測(cè)的錯(cuò)誤數(shù)與實(shí)際錯(cuò)誤數(shù)相比誤差在8%之內(nèi)。例如
,一個(gè)程序?qū)?5個(gè)數(shù)據(jù)庫(kù)項(xiàng)共訪問(wèn)1300次,對(duì)150個(gè)運(yùn)算符共使用了1200次,那么預(yù)測(cè)該程序的錯(cuò)誤數(shù):
B=(1300+1200)·log2(75+150)∕3000=6.5
即預(yù)測(cè)該程序中可能包含6~7個(gè)錯(cuò)誤。2.程序的潛在錯(cuò)誤3.程序量V
V=(N1+N2)·log2(n1+n2)
4.程序量比率(語(yǔ)言的抽象級(jí)別)
L=(2∕n1)·(n2∕N2)
5.程序員工作量
E=V∕L6
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024商場(chǎng)美食節(jié)臨時(shí)攤位租賃合同
- 2024年度健身器材購(gòu)銷(xiāo)合同
- 2024年度國(guó)際貿(mào)易仲裁與訴訟合同
- 2024年定制LED高炮廣告牌建設(shè)合同
- 2024乙公司向甲方提供跨境電商服務(wù)的詳細(xì)合同條款
- 2024年度grc材料研發(fā)與技術(shù)轉(zhuǎn)讓合同
- 航天英雄課件教學(xué)課件
- 2024年住宅租賃協(xié)議:個(gè)人與房東間的權(quán)利義務(wù)規(guī)定
- 04版0千伏電力施工合同樣本
- 2024年工程招投標(biāo)合同管理實(shí)操手冊(cè)
- 道路運(yùn)輸企業(yè)職業(yè)安全健康管理工作臺(tái)帳(全版通用)參考模板范本
- 中國(guó)小學(xué)生生命教育調(diào)查問(wèn)卷
- 通用模板-封條模板
- 集團(tuán)公司后備人才選拔培養(yǎng)暫行辦法
- 第五章旅游餐飲設(shè)計(jì)ppt課件
- 從馬克思主義視角看當(dāng)前高房?jī)r(jià)
- 長(zhǎng)沙市某辦公建筑的冰蓄冷空調(diào)系統(tǒng)的設(shè)計(jì)畢業(yè)設(shè)計(jì)
- 不抱怨的世界(課堂PPT)
- 企業(yè)盈利能力分析——以青島啤酒股份有限公司為例
- 消火栓滅火器檢查記錄表
- 岸墻、翼墻及導(dǎo)水墻砼澆筑方案
評(píng)論
0/150
提交評(píng)論