第6章詳細設計_第1頁
第6章詳細設計_第2頁
第6章詳細設計_第3頁
第6章詳細設計_第4頁
第6章詳細設計_第5頁
已閱讀5頁,還剩85頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

第6章詳細設計6.1結構程序設計6.2人機界面設計6.3過程設計的工具6.4面向數據結構的設計方法6.5程序復雜程度的定量度量6.6小結習題本章要求理解結構化程序設計方法的特點掌握人機界面設計的內容、過程和指南掌握用流程框圖、NS圖、PAD圖、判定表和判定樹以及PDL語言來描述算法掌握Jackson程序設計方法掌握程序復雜度的定量和度量詳細設計階段的根本目標是確定應該怎樣具體地實現所要求的系統,也就是說,經過這個階段的設計工作,應該得出對目標系統的精確描述,從而在編碼階段可以把這個描述直接翻譯成用某種程序設計語言書寫的程序。

詳細設計階段的任務包括數據結構設計、數據庫設計、算法設計、界面設計、其他設計、編寫設計說明書、評審。還不是具體地編寫程序,而是要設計出程序的“藍圖”。

衡量程序的質量不僅要看它的邏輯是否正確,性能是否滿足要求,更主要的是要看它是否容易閱讀和理解。6.1結構程序設計結構程序設計的概念最早由E.W.Dijkstra提出。1965年他在一次會議上指出:“可以從高級語言中取消GOTO語句”,“程序的質量與程序中所包含的GOTO語句的數量成反比”。

1966年Bohm和Jacopini證明了,只用3種基本的控制結構就能實現任何單入口單出口的程序。這3種基本的控制結構是“順序”、“選擇”和“循環”,它們的流程圖分別為圖6.1(a),6.1(b)和6.1(c)。實際上用順序結構和循環結構(又稱DO-WHILE結構)完全可以實現選擇結構(又稱IF-THEN-ELSE結構),因此,理論上最基本的控制結構只有兩種。Bohm和Jacopini的證明給結構程序設計技術奠定了理論基礎。6.13種基本的控制結構習題:6-1假設只有SEQUENCE和DO-WHILE兩種控制結構,怎樣利用它們完成IF-THEN-ELSE操作?6-2假設只允許使用SEQUENCE和IF-THEN-ELSE兩種控制結構,怎樣利用它們完成DO-WHILE操作?

結構程序設計的經典定義如下所述:“如果一個程序的代碼塊僅僅通過順序、選擇和循環這3種基本控制結構進行連接,并且每個代碼塊只有一個入口和一個出口,則稱這個程序是結構化的。”如果只允許使用順序、IF-THEN-ELSE型分支和DO-WHILE型循環這3種基本控制結構,則稱為經典的結構程序設計;如果除了上述3種基本控制結構之外,還允許使用DO-CASE型多分支結構和DO-UNTIL型循環結構,則稱為擴展的結構程序設計;如果再加上允許使用LEAVE(或BREAK)結構,則稱為修正的結構程序設計。

圖6.2其他常用的控制結構習題:6-4圖6.18給出的程序流程圖代表一個非結構化的程序,請問:(1)為什么說它是非結構化的?(2)設計一個等價的結構化程序。(3)在(2)題的設計中你使用附加的標志變量flag了嗎?若沒用,請再設計一個使用flag的程序;若用了,再設計一個不用flag的程序。圖6.18一個非結構化程序6.2人機界面設計人機界面設計是接口設計的一個重要的組成部分。對于交互式系統來說,人機界面設計和數據設計、體系結構設計及過程設計一樣重要。近年來,人機界面在系統中所占的比例越來越大,在個別系統中人機界面的設計工作量甚至占總設計量的一半以上。人機界面的設計質量,直接影響用戶對軟件產品的評價,從而影響軟件產品的競爭力和壽命,因此,必須對人機界面設計給予足夠重視。6.2.1設計問題

在設計人機界面的過程中,幾乎總會遇到下述4個問題:系統響應時間、用戶幫助設施、出錯信息處理和命令交互。不幸的是,許多設計者直到設計過程后期才開始考慮這些問題,這樣做往往導致出現不必要的設計反復、項目延期和用戶產生挫折感。最好在設計初期就把這些問題作為重要的設計問題來考慮,這時修改比較容易,代價也低。系統響應時間是許多交互式系統用戶經常抱怨的問題。一般說來,系統響應時間指從用戶完成某個控制動作(例如,按回車鍵或點擊鼠標),到軟件給出預期的響應(輸出信息或做動作)之間的這段時間。

系統響應時間有兩個重要屬性,分別是長度和易變性。如果系統響應時間過長,用戶就會感到緊張和沮喪。系統響應時間過短也不好,這會迫使用戶加快操作節奏,從而可能會犯錯誤。

易變性指系統響應時間相對于平均響應時間的偏差,在許多情況下,這是系統響應時間的更重要的屬性。即使系統響應時間較長,響應時間易變性低也有助于用戶建立起穩定的工作節奏。1.系統響應時間2.用戶幫助設施幾乎交互式系統的每個用戶都需要幫助,當遇到復雜問題時甚至需要查看用戶手冊以尋找答案。大多數現代軟件都提供聯機幫助設施,這使得用戶無須離開用戶界面就能解決自己的問題。

常見的幫助設施可分為集成的和附加的兩類。集成的幫助設施從一開始就設計在軟件里面,附加的幫助設施是在系統建成后再添加到軟件中的,集成的幫助設施優于附加的幫助設施。(1)在用戶與系統交互期間,是否在任何時候都能獲得關于系統任何功能的幫助信息?有兩種選擇:提供部分功能的幫助信息和提供全部功能的幫助信息。(2)用戶怎樣請求幫助?有3種選擇:幫助菜單,特殊功能鍵和HELP命令。(3)怎樣顯示幫助信息?有3種選擇:在獨立的窗口中,指出參考某個文檔(不理想)和在屏幕固定位置顯示簡短提示。(4)用戶怎樣返回到正常的交互方式中?有兩種選擇:屏幕上的返回按鈕和功能鍵。(5)怎樣組織幫助信息?有3種選擇:平面結構,信息的層次結構和超文本結構。具體設計幫助設施時,必須解決下述的一系列問題:出錯信息和警告信息,是出現問題時交互式系統給出的“壞消息”。出錯信息設計得不好,將向用戶提供無用的甚至誤導的信息,反而會加重用戶的挫折感。交互式系統給出的出錯信息或警告信息,應該具有下述屬性。(1)信息應該用用戶可以理解的術語描述問題。(2)信息應該提供有助于從錯誤中恢復的建設性意見。(3)信息應該指出錯誤可能導致哪些負面后果(例如,破壞數據文件),以便用戶檢查是否出現了這些問題,并在確實出現問題時及時解決。(4)信息應該伴隨著聽覺上或視覺上的提示,例如,在顯示信息時同時發出警告鈴聲,或者信息用閃爍方式顯示,或者信息用明顯表示出錯的顏色顯示。(5)信息不能帶有指責色彩,也就是說,不能責怪用戶。3.出錯信息處理命令行曾經是用戶和系統軟件交互的最常用的方式,并且也曾經廣泛地用于各種應用軟件中。現在,面向窗口的、點擊和拾取方式的界面已經減少了用戶對命令行的依賴,但是,許多高級用戶仍然偏愛面向命令行的交互方式。在多數情況下,用戶既可以從菜單中選擇軟件功能,也可以通過鍵盤命令序列調用軟件功能。在提供命令交互方式時,必須考慮下列設計問題。(1)是否每個菜單選項都有對應的命令?(2)采用何種命令形式?有3種選擇:控制序列(例如,Ctrl+P),功能鍵和鍵入命令。(3)學習和記憶命令的難度有多大?忘記了命令怎么辦?(4)用戶是否可以定制或縮寫命令?4.命令交互在越來越多的應用軟件中,人機界面設計者都提供了“命令宏機制”,利用這種機制用戶可以用自己定義的名字代表一個常用的命令序列。需要使用這個命令序列時,用戶無須依次鍵入每個命令,只需輸入命令宏的名字就可以順序執行它所代表的全部命令。在理想的情況下,所有應用軟件都有一致的命令使用方法。如果在一個應用軟件中命令Ctrl+D表示復制一個圖形對象,而在另一個應用軟件中Ctrl+D命令的含義是刪除一個圖形對象,顯然會使用戶感到困惑,并且往往會導致用錯命令。6.2.2設計過程用戶界面設計是一個迭代的過程,也就是說,通常先創建設計模型,再用原型實現這個設計模型,并由用戶試用和評估,然后根據用戶意見進行修改。

一旦建立起用戶界面的原型,就必須對它進行評估,以確定其是否滿足用戶的需求。評估可以是非正式的.

用戶界面的評估周期如下所述:完成初步設計之后就創建第一級原型;用戶試用并評估該原型,直接向設計者表述對界面的評價;設計者根據用戶意見修改設計并實現下一級原型。上述評估過程持續進行下去,直到用戶感到滿意,不需要再修改界面設計時為止。在創建了用戶界面的設計模型之后,可以運用下述評估標準對設計進行早期復審。(1)系統及其界面的規格說明書的長度和復雜程度,預示了用戶學習使用該系統所需要的工作量。(2)命令或動作的數量、命令的平均參數個數或動作中單個操作的個數,預示了系統的交互時間和總體效率。(3)設計模型中包含的動作、命令和系統狀態的數量,預示了用戶學習使用該系統時需要記憶的內容的多少。(4)界面風格、幫助設施和出錯處理協議,預示了界面的復雜程度及用戶接受該界面的程度。6.2.3人機界面設計指南用戶界面設計主要依靠設計者的經驗。總結眾多設計者的經驗得出的設計指南,有助于設計者設計出友好、高效的人機界面。下面介紹3類人機界面設計指南。1.一般交互指南2.信息顯示指南3.數據輸入指南

一般交互指南涉及信息顯示、數據輸入和系統整體控制,因此,這類指南是全局性的,忽略它們將承擔較大風險。

(1)保持一致性。應該為人機界面中的菜單選擇、命令輸入、數據顯示以及眾多的其他功能,使用一致的格式。(2)提供有意義的反饋。應向用戶提供視覺的和聽覺的反饋,以保證在用戶和系統之間建立雙向通信。(3)在執行有較大破壞性的動作之前要求用戶確認。如果用戶要刪除一個文件,或覆蓋一些重要信息,或終止一個程序的運行,應該給出“您是否確實要……”的信息,以請求用戶確認他的命令。(4)允許取消絕大多數操作。UNDO或REVERSE功能曾經使眾多終端用戶避免了大量時間浪費。每個交互式系統都應該能方便地取消已完成的操作。1.一般交互指南(5)減少在兩次操作之間必須記憶的信息量。不應該期望用戶能記住在下一步操作中需使用的一大串數字或標識符。應該盡量減少記憶量。(6)提高對話、移動和思考的效率。應該盡量減少用戶擊鍵的次數,設計屏幕布局時應該考慮盡量減少鼠標移動的距離,應該盡量避免出現用戶問“這是什么意思?”的情況。(7)允許犯錯誤。系統應該能保護自己不受嚴重錯誤的破壞。(8)按功能對動作分類,并據此設計屏幕布局。下拉菜單的一個主要優點就是能按動作類型組織命令。實際上,設計者應該盡力提高命令和動作組織的“內聚性”。(9)提供對用戶工作內容敏感的幫助設施(參見6.2.1節)。(10)用簡單動詞或動詞短語作為命令名。過長的命令名難于識別和記憶,也會占用過多的菜單空間。

如果人機界面顯示的信息是不完整的、含糊的或難于理解的,則該應用系統顯然不能滿足用戶的需求。可以用多種不同方式“顯示”信息:用文字、圖形和聲音;按位置、移動和大小;使用顏色、分辨率和省略。下面是關于信息顯示的設計指南。(1)只顯示與當前工作內容有關的信息。用戶在獲得有關系統的特定功能的信息時,不必看到與之無關的數據、菜單和圖形。(2)不要用數據淹沒用戶,應該用便于用戶迅速吸取信息的方式來表示數據。例如,可以用圖形或圖表來取代龐大的表格。(3)使用一致的標記、標準的縮寫和可預知的顏色。顯示的含義應該非常明確,用戶無須參照其他信息源就能理解。2.信息顯示指南(4)允許用戶保持可視化的語境。如果對所顯示的圖形進行縮放,原始的圖像應該一直顯示著(以縮小的形式放在顯示屏的一角),以使用戶知道當前看到的圖像部分在原圖中所處的相對位置。(5)產生有意義的出錯信息(參見6.2.1節)。(6)使用大小寫、縮進和文本分組以幫助理解。人機界面顯示的信息大部分是文字,文字的布局和形式對用戶從中提取信息的難易程度有很大影響。(7)使用窗口分隔不同類型的信息。利用窗口用戶能夠方便地“保存”多種不同類型的信息。(8)使用“模擬”顯示方式表示信息,以使信息更容易被用戶提取。例如,顯示煉油廠儲油罐的壓力時,如果簡單地用數字表示壓力,則不易引起用戶注意。但是,如果用類似溫度計的形式來表示壓力,用垂直移動和顏色變化來指示危險的壓力狀況,就容易引起用戶的警覺,因為這樣做為用戶提供了絕對和相對兩方面的信息。(9)高效率地使用顯示屏。當使用多窗口時,應該有足夠的空間使得每個窗口至少都能顯示出一部分。此外,屏幕大小應該選得和應用系統的類型相配套(這實際上是一個系統工程問題)。

用戶的大部分時間用在選擇命令、鍵入數據和向系統提供輸入。在許多應用系統中,鍵盤仍然是主要的輸入介質,但是,鼠標、數字化儀和語音識別系統正迅速地成為重要的輸入手段。下面是關于數據輸入的設計指南。(1)盡量減少用戶的輸入動作。最重要的是減少擊鍵次數,這可以用下列方法實現:用鼠標從預定義的一組輸入中選一個;用“滑動標尺”在給定的值域中指定輸入值;利用宏把一次擊鍵轉變成更復雜的輸入數據集合。(2)保持信息顯示和數據輸入之間的一致性。顯示的視覺特征應該與輸入域一致。3.數據輸入指南(3)允許用戶自定義輸入。專家級的用戶可能希望定義自己專用的命令或略去某些類型的警告信息和動作確認,人機界面應該為用戶提供這樣做的機制。(4)交互應該是靈活的,并且可調整成用戶最喜歡的輸入方式。用戶類型與喜好的輸入方式有關,例如,秘書可能非常喜歡鍵盤輸入,而經理可能更喜歡使用鼠標之類的點擊設備。(5)使在當前動作語境中不適用的命令不起作用。這可使得用戶不去做那些肯定會導致錯誤的動作。(6)讓用戶控制交互流。用戶應該能夠跳過不必要的動作,改變所需做的動作的順序(在應用環境允許的前提下),以及在不退出程序的情況下從錯誤狀態中恢復正常。(7)對所有輸入動作都提供幫助(參見6.2.1節)。(8)消除冗余的輸入。除非可能發生誤解,否則不要要求用戶指定輸入數據的單位;盡可能提供默認值;絕對不要要求用戶提供程序可以自動獲得或計算出來的信息。6.3過程設計的工具程序流程圖又稱為程序框圖,它是歷史最悠久、使用最廣泛的描述過程設計的方法,然而它也是用得最混亂的一種方法。

6.3.1程序流程圖圖6.3程序流程圖中使用的符號從20世紀40年代末到70年代中期,程序流程圖一直是軟件設計的主要工具。它的主要優點是對控制流程的描繪很直觀,便于初學者掌握。由于程序流程圖歷史悠久,為最廣泛的人所熟悉,盡管它有種種缺點,許多人建議停止使用它,但至今仍在廣泛使用著。不過總的趨勢是越來越多的人不再使用程序流程圖了。程序流程圖的主要缺點如下:(1)程序流程圖本質上不是逐步求精的好工具,它誘使程序員過早地考慮程序的控制流程,而不去考慮程序的全局結構。(2)程序流程圖中用箭頭代表控制流,因此程序員不受任何約束,可以完全不顧結構程序設計的精神,隨意轉移控制。(3)程序流程圖不易表示數據結構。6.3.2盒圖(N-S圖)出于要有一種不允許違背結構程序設計精神的圖形工具的考慮,Nassi和Shneiderman提出了盒圖,又稱為N-S圖。它有下述特點:(1)功能域(即,一個特定控制結構的作用域)明確,可以從盒圖上一眼就看出來。(2)不可能任意轉移控制。(3)很容易確定局部和全程數據的作用域。(4)很容易表現嵌套關系,也可以表示模塊的層次結構。圖6.4給出了結構化控制結構的盒圖表示,也給出了調用子程序的盒圖表示方法。盒圖沒有箭頭,因此不允許隨意轉移控制。堅持使用盒圖作為詳細設計的工具,可以使程序員逐步養成用結構化的方式思考問題和解決問題的習慣。圖6.4盒圖的基本符號6.3.3PAD圖PAD是問題分析圖(problemanalysisdiagram)的英文縮寫,自1973年由日本日立公司發明以后,已得到一定程度的推廣。它用二維樹形結構的圖來表示程序的控制流,將這種圖翻譯成程序代碼比較容易。圖6.5給出PAD圖的基本符號。圖6.5PAD圖的基本符號(1)使用表示結構化控制結構的PAD符號所設計出來的程序必然是結構化程序。(2)PAD圖所描繪的程序結構十分清晰。圖中最左面的豎線是程序的主線,即第一層結構。隨著程序層次的增加,PAD圖逐漸向右延伸,每增加一個層次,圖形向右擴展一條豎線。PAD圖中豎線的總條數就是程序的層次數。(3)用PAD圖表現程序邏輯,易讀、易懂、易記。PAD圖是二維樹形結構的圖形,程序從圖中最左豎線上端的結點開始執行,自上而下,從左向右順序執行,遍歷所有結點。(4)容易將PAD圖轉換成高級語言源程序,這種轉換可用軟件工具自動完成,從而可省去人工編碼的工作,有利于提高軟件可靠性和軟件生產率。PAD圖的主要優點如下:(5)即可用于表示程序邏輯,也可用于描繪數據結構。(6)PAD圖的符號支持自頂向下、逐步求精方法的使用。開始時設計者可以定義一個抽象的程序,隨著設計工作的深入而使用def符號逐步增加細節,直至完成詳細設計,如圖6.6所示。圖6.6使用PAD圖提供的定義功能來逐步求精的例子6.3.4判定表當算法中包含多重嵌套的條件選擇時,用程序流程圖、盒圖、PAD圖或后面即將介紹的過程設計語言(PDL)都不易清楚地描述。然而判定表卻能夠清晰地表示復雜的條件組合與應做的動作之間的對應關系。一張判定表由4部分組成:左上部列出所有條件左下部是所有可能做的動作右上部是表示各種條件組合的一個矩陣右下部是和每種條件組合相對應的動作。判定表右半部的每一列實質上是一條規則,規定了與特定的條件組合相對應的動作。下面以行李托運費的算法為例說明判定表的組織方法。假設某航空公司規定,乘客可以免費托運重量不超過30kg的行李。當行李重量超過30kg時,對頭等艙的國內乘客超重部分每公斤收費4元,對其他艙的國內乘客超重部分每公斤收費6元,對外國乘客超重部分每公斤收費比國內乘客多一倍,對殘疾乘客超重部分每公斤收費比正常乘客少一半。用判定表可以清楚地表示與上述每種條件組合相對應的計算行李費的算法,如表6.1(見書118頁)所示。從上面這個例子可以看出,判定表能夠簡潔而又無歧義地描述處理規則。當把判定表和布爾代數或卡諾圖結合起來使用時,可以對判定表進行校驗或化簡。但是,判定表并不適于作為一種通用的設計工具,沒有一種簡單的方法使它能同時清晰地表示順序和重復等處理特性。6.3.5判定樹判定表雖然能清晰地表示復雜的條件組合與應做的動作之間的對應關系,但其含義卻不是一眼就能看出來的,初次接觸這種工具的人理解它需要有一個簡短的學習過程。此外,當數據元素的值多于兩個時(例如,6.3.4例子中假設對機票需細分為頭等艙、二等艙和經濟艙等多種級別時),判定表的簡潔程度也將下降。判定樹是判定表的變種,也能清晰地表示復雜的條件組合與應做的動作之間的對應關系。判定樹的優點在于,它的形式簡單到不需任何說明,一眼就可以看出其含義,因此易于掌握和使用。多年來判定樹一直受到人們的重視,是一種比較常用的系統分析和設計的工具。圖6.7是和表6.1等價的判定樹。圖6.7用判定樹表示計算行李費的算法6.3.6過程設計語言過程設計語言(PDL)也稱為偽碼,這是一個籠統的名稱,現在有許多種不同的過程設計語言在使用。它是用正文形式表示數據和處理過程的設計工具。PDL具有嚴格的關鍵字外部語法,用于定義控制結構和數據結構;另一方面,PDL表示實際操作和條件的內部語法通常又是靈活自由的,可以適應各種工程項目的需要。因此,一般說來,PDL是一種“混雜”語言,它使用一種語言的詞匯,同時卻使用另一種語言(某種結構化的程序設計語言)的語法。(1)關鍵字的固定語法,它提供了結構化控制結構、數據說明和模塊化的特點。為了使結構清晰和可讀性好,通常在所有可能嵌套使用的控制結構的頭和尾都有關鍵字,例如,if…fi(或endif)等等。(2)自然語言的自由語法,它描述處理特點。(3)數據說明的手段。應該既包括簡單的數據結構(例如純量和數組),又包括復雜的數據結構(例如,鏈表或層次的數據結構)。(4)模塊定義和調用的技術,應該提供各種接口描述模式。PDL應該具有下述特點:(1)可以作為注釋直接插在源程序中間。這樣做能促使維護人員在修改程序代碼的同時也相應地修改PDL注釋,因此有助于保持文檔和程序的一致性,提高了文檔的質量。(2)可以使用普通的正文編輯程序或文字處理系統,很方便地完成PDL的書寫和編輯工作。(3)已經有自動處理程序存在,而且可以自動由PDL生成程序代碼。PDL的缺點是不如圖形工具形象直觀,描述復雜的條件組合與動作間的對應關系時,不如判定表清晰簡單。PDL作為一種設計工具有如下一些優點:6.4面向數據結構的設計方法層次的數據組織通常和使用這些數據的程序的層次結構十分相似。面向數據結構的設計方法的最終目標是得出對程序處理過程的描述。在完成了軟件結構設計之后,可以使用面向數據結構的方法來設計每個模塊的處理過程。Jackson方法和Warnier方法是最著名的兩個面向數據結構的設計方法,使用面向數據結構的設計方法,當然首先需要分析確定數據結構,并且用適當的工具清晰地描繪數據結構。6.4.1Jackson圖雖然程序中實際使用的數據結構種類繁多,但是它們的數據元素彼此間的邏輯關系卻只有順序、選擇和重復3類,因此,邏輯數據結構也只有這3類。1.順序結構順序結構的數據由一個或多個數據元素組成,每個元素按確定次序出現一次。圖6.8是表示順序結構的Jackson圖的一個例子。圖6.8A由B、C、D3個元素順序組成2.選擇結構選擇結構的數據包含兩個或多個數據元素,每次使用這個數據時按一定條件從這些數據元素中選擇一個。圖6.9是表示3個中選1個結構的Jackson圖。圖6.9根據條件A是B或C或D中的某一個3.重復結構重復結構的數據,根據使用時的條件由一個數據元素出現零次或多次構成。圖6.10是表示重復結構的Jackson圖。圖6.10A由B出現N次(N≥0)組成便于表示層次結構,而且是對結構進行自頂向下分解的有力工具;形象直觀可讀性好;既能表示數據結構也能表示程序結構(因為結構程序設計也只使用上述3種基本控制結構)。Jackson圖有下述優點:6.4.2改進的Jackson圖上一小節介紹的Jackson圖的缺點是,用這種圖形工具表示選擇或重復結構時,選擇條件或循環結束條件不能直接在圖上表示出來,影響了圖的表達能力,也不易直接把圖翻譯成程序,此外,框間連線為斜線,不易在行式打印機上輸出。為了解決上述問題,本書建議使用圖6.11中給出的改進的Jackson圖。圖6.11改進的Jackson圖6.4.3Jackson方法Jackson結構程序設計方法基本上由下述5個步驟組成:(1)分析并確定輸入數據和輸出數據的邏輯結構,并用Jackson圖描繪這些數據結構。(2)找出輸入數據結構和輸出數據結構中有對應關系的數據單元。所謂有對應關系是指有直接的因果關系,在程序中可以同時處理的數據單元(對于重復出現的數據單元必須重復的次序和次數都相同才可能有對應關系)。(3)用下述3條規則從描繪數據結構的Jackson圖導出描繪程序結構的Jackson圖:第一,為每對有對應關系的數據單元,按照它們在數據結構圖中的層次在程序結構圖的相應層次畫一個處理框(注意,如果這對數據單元在輸入數據結構和輸出數據結構中所處的層次不同,則和它們對應的處理框在程序結構圖中所處的層次與它們之中在數據結構圖中層次低的那個對應);第二,根據輸入數據結構中剩余的每個數據單元所處的層次,在程序結構圖的相應層次分別為它們畫上對應的處理框;第三,根據輸出數據結構中剩余的每個數據單元所處的層次,在程序結構圖的相應層次分別為它們畫上對應的處理框。總之,描繪程序結構的Jackson圖應該綜合輸入數據結構和輸出數據結構的層次關系而導出來。在導出程序結構圖的過程中,由于改進的Jackson圖規定在構成順序結構的元素中不能有重復出現或選擇出現的元素,因此可能需要增加中間層次的處理框。(4)列出所有操作和條件(包括分支條件和循環結束條件),并且把它們分配到程序結構圖的適當位置。(5)用偽碼表示程序。Jackson方法中使用的偽碼和Jackson圖是完全對應的,下面是和3種基本結構對應的偽碼。和圖6.11(a)所示的順序結構對應的偽碼,其中‘seq’和‘end’是關鍵字: A seq

B C D A end和圖6.11(b)所示的選擇結構對應的偽碼,其中‘select’、‘or’和‘end’是關鍵字,cond1、cond2和cond3分別是執行B、C或D的條件: A select cond1 B A or cond2 C A or cond3 D A end和圖6.11(d)所示重復結構對應的偽碼,其中‘iter’、‘until’、‘while’和‘end’是關鍵字,cond是條件: A iteruntil(或while)cond

B A end[例]一個正文文件由若干個記錄組成,每個記錄是一個字符串。要求統計每個記錄中空格字符的個數,以及文件中空格字符的總個數。要求的輸出數據格式是,每復制一行輸入字符串之后,另起一行印出這個字符串中的空格數,最后印出文件中空格的總個數。圖6.12表示輸入輸出數據結構的Jackson圖對于這個簡單例子而言,輸入和輸出數據的結構很容易確定。圖6.12是用Jackson圖描繪的輸入輸出數據結構。確定了輸入輸出數據結構之后,第二步是分析確定在輸入數據結構和輸出數據結構中有對應關系的數據單元。在這個例子中哪些數據單元有對應關系呢?輸出數據總是通過對輸入數據的處理而得到的,因此在輸入輸出數據結構最高層次的兩個單元總是有對應關系的。這一對單元將和程序結構圖中最頂層的方框(代表程序)相對應,也就是說經過程序的處理由正文文件得到輸出表格。因為每處理輸入數據中一個“字符串”之后,就可以得到輸出數據中一個“串信息”,它們都是重復出現的數據單元,而且出現次序和重復次數都完全相同,因此,“字符串”和“串信息”也是一對有對應關系的單元。還有其他有對應關系的單元嗎?為了回答這個問題依次考察輸入數據結構中余下的每個數據單元。“字符”不可能和多個字符組成的“字符串”對應,和輸出數據結構中其他數據單元也不能對應。“空格”能和“空格數”對應嗎?顯然,單個空格并不能決定一個記錄中包含的空格個數,因此沒有對應關系。通過類似的考察發現,輸入數據結構中余下的任何一個單元在輸出數據結構中都找不到對應的單元,也就是說,在這個例子中輸入輸出數據結構中只有上述兩對有對應關系的單元。在圖6.12中用一對虛線箭頭把有對應關系的數據單元連接起來,以突出表明這種對應關系。Jackson程序設計方法的第三步是從數據結構圖導出程序結構圖。按照前面已經講述過的規則,這個步驟的大致過程是:首先,在描繪程序結構的Jackson圖的最頂層畫一個處理框“統計空格”,它與“正文文件”和“輸出表格”這對最頂層的數據單元相對應。但是接下來還不能立即畫與另一對數據單元(“字符串”和“串信息”)相對應的處理框,因為在輸出數據結構中“串信息”的上層還有“表格體”和“空格總數”兩個數據單元,在程序結構圖的第二層應該有與這兩個單元對應的處理框——“程序體”和“印總數”。因此,在程序結構圖的第三層才是與“字符串”和“串信息”相對應的處理框——“處理字符串”。在程序結構圖的第四層似乎應該是和“字符串”、“字符”及“空格數”等數據單元對應的處理框“印字符串”、“分析字符”及“印空格數”,這3個處理是順序執行的。但是,“字符”是重復出現的數據單元,因此“分析字符”也應該是重復執行的處理。改進的Jackson圖規定順序執行的處理中不允許混有重復執行或選擇執行的處理,所以在“分析字符”這個處理框上面又增加了一個處理框“分析字符串”。最后得到的程序結構圖為圖6.13。圖6.13描繪統計空格程序結構的Jackson圖Jackson程序設計方法的第四步是列出所有操作和條件,并且把它們分配到程序結構圖的適當位置。首先,列出統計空格個數需要的全部操作和條件。(1)停止 (2)打開文件(3)關閉文件 (4)印出字符串(5)印出空格數目 (6)印出空格總數(7)sum;=sum+1 (8)totalsum:=totalsum+

sum(9)讀入字符串 (10)sumz=O(11)totalsumz=O (12)pointer:=1

(13)pointer:=pointer+1 I(1)文件結束I(2)字符串結束 S(3)字符是空格經過簡單分析不難把這些操作和條件分配到程序結構圖的適當位置,結果為圖6.14。圖6.14把操作和條件分配到程序結構圖的適當位置統計空格seq

打開文件 讀入字符串 totalsum∶=0

程序體iteruntil文件結束 處理字符串seq

印字符串seq

印出字符串 印字符串end

sum∶=0

pointer∶=1

分析字符串iteruntil字符串結束 分析字符select字符是空格Jackson方法的最后一步是用偽碼表示程序處理過程。因為Jackson使用的偽碼和Jackson圖之間存在簡單的對應關系,所以從圖6.14很容易得出下面的偽碼: 處理空格seq

sum∶=sum+1 pointer∶=pointer+1

處理空格end

分析字符or字符不是空格 處理非空格seq

pointer∶=pointer+1

處理非空格end

分析字符end

分析字符串end

印空格數seq

印出空格數目 印空格數end

totalsum∶=totalsum+sum

讀入字符串 處理字符串end

程序體end

印總數seq

印出空格總數 印總數end

關閉文件 停止統計空格end以上簡單介紹了由英國人M.Jackson提出的結構程序設計方法。這個方法在設計比較簡單的數據處理系統時特別方便,當設計比較復雜的程序時常常遇到輸入數據可能有錯、條件不能預先測試、數據結構沖突等問題。為了克服上述困難,把Jackson方法應用到更廣闊的領域,需要采用一系列比較復雜的輔助技術,詳細介紹這些技術已經超出本書的范圍。6.5程序復雜程度的定量度量定量度量程序復雜程度的方法很有價值:把程序的復雜程度乘以適當常數即可估算出軟件中錯誤的數量以及軟件開發需要用的工作量,定量度量的結果可以用來比較兩個不同的設計或兩個不同算法的優劣;程序的定量的復雜程度可以作為模塊規模的精確限度。下面著重介紹使用得比較廣泛的McCabe方法和Halstead方法。6.5.1McCabe方法1.流圖McCabe方法根據程序控制流的復雜程度定量度量程序的復雜程度,這樣度量出的結果稱為程序的環形復雜度。為了突出表示程序的控制流,人們通常使用流圖(也稱為程序圖)。所謂流圖實質上是“退化了的”程序流程圖,它僅僅描繪程序的控制流程,完全不表現對數據的具體操作以及分支或循環的具體條件。在流圖中用圓表示結點,一個圓代表一條或多條語句。程序流程圖中的一個順序的處理框序列和一個菱形判定框,可以映射成流圖中的一個結點。流圖中的箭頭線稱為邊,它和程序流程圖中的箭頭線類似,代表控制流。在流圖中一條邊必須終止于一個結點,即使這個結點并不代表任何語句(實際上相當于一個空語句)。由邊和結點圍成的面積稱為區域,當計算區域數時應該包括圖外部未被圍起來的那個區域。(a)程序流程圖(b)流圖用任何方法表示的過程設計結果,都可以翻譯成流圖。圖6.16是用PDL表示的處理過程及與之對應的流圖。圖6.16由PDL翻譯成的流圖當過程設計中包含復合條件時,生成流圖的方法稍微復雜一些。所謂復合條件,就是在條件中包含了一個或多個布爾運算符(邏輯OR,AND,NAND,NOR)。在這種情況下,應該把復合條件分解為若干個簡單條件,每個簡單條件對應流圖中一個結點。包含條件的結點稱為判定節點,從每個判定結點引出兩條或多條邊。圖6.17是由包含復合條件的PDL片斷翻譯成的流圖。圖6.17由包含復合條件的PDL映射成的流圖環形復雜度定量度量程序的邏輯復雜度。有了描繪程序控制流的流圖之后,可以用下述3種方法中的任何一種來計算環形復雜度。(1)流圖中的區域數等于環形復雜度。(2)流圖G的環形復雜度V(G)=E-N+2,其中,E是流圖中邊的條數,N是結點數。(3)流圖G的環形復雜度V(G)=P+1,其中,P是流圖中判定結點的數目。2.計算環形復雜度的方法圖6.16所示流圖的環形復雜度為4.(1)區域數=4(2)V(G)=E-N+2=11-9+2=4(3)V(G)=P+1=3+1程序的環形復雜度取決于程序控制流的復雜程度,也即是取決于程序結構的復雜程度。當程序內分支數或循環個數增加時,環形復雜度也隨之增加,因此它是對測試難度的一種定量度量,也能對軟件最終的可靠性給出某種預測。McCabe研究大量程序后發現,環形復雜度高的程序往往是最困難、最容易出問題的程序。實踐表明,模塊規模以V(G)≤10為宜,也就是說,V(G)=10是模塊規模的一個更科學更精確的上限。3.環形復雜度的用途6.5.2Halstead方法Halstead方法是另一個著名的方法,它根據程序中運算符和操作數的總數來度量程序的復雜程度。1.程序長度,即預測的Halstead長度

令N1為程序中運算符出現的總次數,N2為操作數出現的總次數,程序長度N定義為:N=N1+N2詳細設計完成之后,可以知道程序中使用的不同運算符(包括關鍵字)的個數n1,以及不同操作數(變量和常數)的個數n2。Halstead給出預測程序長度的公式如下:H=n1log2

n1+n2log2n2多次驗證都表明,預測的長度H與實際長度N非常接近。圖9-5-2是用FORTRAN語言寫出的交換排序的例子預測程序長度:H=n1·log2n1+n2·log2n2=10·log210+7·log27=52.87程序長度:N=N1+N2=28+22=50

Halstead還給出了預測程序中包含錯誤的個數的公式如下:E=Nlog2(n1+n2)/3000有人曾對從300條到12000條語句范圍內的程序核實了上述公式,發現預測的錯誤數與實際錯誤數相比誤差在8%之內。例如

,一個程序對75個數據庫項共訪問1300次,對150個運算符共使用了1200次,那么預測該程序的錯誤數:

B=(1300+1200)·log2(75+150)∕3000=6.5

即預測該程序中可能包含6~7個錯誤。2.程序的潛在錯誤3.程序量V

V=(N1+N2)·log2(n1+n2)

4.程序量比率(語言的抽象級別)

L=(2∕n1)·(n2∕N2)

5.程序員工作量

E=V∕L6

溫馨提示

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

評論

0/150

提交評論