資源描述:
《軟件工程導論 第6章 詳細設計(finished)》由會員上傳分享,免費在線閱讀,更多相關內容在教育資源-天天文庫。
1、第六章詳細設計詳細設計階段的根本目標是確定應該怎樣具體地實現所要求的系統(tǒng),也就是說,經過這個階段的設計工作,應該得出對目標系統(tǒng)的精確描述,從而在編碼階段可以把這個描述直接翻譯成用某種程序設計語言書寫的程序。詳細設計階段的任務還不是具體地編寫程序,而是要設計出程序的“藍圖”,以后程序員將根據這個藍圖寫出實際的程序代碼。因此,詳細設計的結果基本上決定了最終的程序代碼的質量。考慮程序代碼的質量時必須注意,程序的“讀者”有兩個,那就是計算機和人。在軟件的生命周期中,設計測試方案、診斷程序錯誤、修改和改進程序等等都必
2、須首先讀懂程序。實際上對于長期使用的軟件系統(tǒng)而言,人讀程序的時間可能比寫程序的時間還要長得多。因此,衡量程序的質量不僅要看它的邏輯是否正確,性能是否滿足要求,更主要的是要看它是否容易閱讀和理解。詳細設計的目標不僅僅是邏輯上正確地實現每個模塊的功能,更重要的是設計出的處理過程應該盡可能簡明易懂。結構程序設計技術是實現上述目標的關鍵技術,因此是詳細設計的邏輯基礎。6.1結構程序設計結構程序設計的概念最早由E.W.Dijkstra提出。1965年他在一次會議上指出:“可以從高級語言中取消GOTO語句”,“程序的質
3、量與程序中所包含的GOTO語句的數量成反比”。1966年Bohm和Jacopini證明了,只用3種基本的控制結構就能實現任何單入口單出口的程序。這3種基本的控制結構是“順序”、“選擇”和“循環(huán)”,它們的流程圖分別為圖6.1(a),6.1(b)和6.1(c)。實際上用順序結構和循環(huán)結構(又稱DO_WHILE結構)完全可以實現選擇結構(又稱IF_THEN_ELSE結構),因此,理論上最基本的控制結構只有兩種。Bohm和Jacopini的證明給結構程序設計技術奠定了理論基礎。expAFTBA(a)BTAexpF(
4、c)TAexpF或圖6.13種基本的控制結構(a)順序結構,先執(zhí)行A再執(zhí)行B;(b)IF_THEN_ELSE型選擇(分支)結構;(c)DO_WHILE型循環(huán)結構1968年Dijkstra再次建議從一切高級語言中取消GOTO語句,只使用3種基本控制結構寫程序。他的建議引起了激烈爭論,經過討論人們認識到,不是簡單地去掉GOTO語句的問題,而是要創(chuàng)立一種新的程序設計思想、方法和風格,以顯著地提高軟件生產率和降低軟件維護代價。1971年IBM公司在紐約時報信息庫管理系統(tǒng)的設計中成功地使用了結構程序設計技術,隨后在美
5、國宇航局空間實驗室飛行模擬系統(tǒng)的設計中,結構程序設計技術再次獲得圓滿成功。這兩個系統(tǒng)都相當龐大,前者包含83000行高級語言源程序,后者包含40萬行源程序,而且在設計過程中用戶需求又曾有過很多改變,然而兩個系統(tǒng)的開發(fā)工作都按時并且高質量地完成了。這表明,軟件生產率比以前提高了一倍,結構程序設計技術成功地經受了實踐的檢驗。1972年IBM公司的Mills進一步提出,程序應該只有一個入口和一個出口,從而補充了結構程序設計的規(guī)則。那么,什么是結構程序設計呢?結構程序設計的經典定義如下所述:“如果一個程序的代碼塊僅
6、僅通過順序、選擇和循環(huán)這3種基本控制結構進行連接,并且每個代碼塊只有一個入口和一個出口,則稱這個程序是結構化的。”上述經典定義過于狹隘了,結構程序設計本質上并不是無GOTO語句的編程方法,而是一種使程序代碼容易閱讀、容易理解的編程方法。在多數情況下,無GOTO語句的代碼確實是容易閱讀、容易理解的代碼,但是,在某些情況下,為了達到容易閱讀和容易理解的目的,反而需要使用GOTO語句。例如,當出現了錯誤條件時,重要的是在數據庫崩潰或棧溢出之前,盡可能快地從當前程序轉到一個出錯處理程序,實現這個目標的最好方法就是使
7、用前向GOTO語句(或與之等效的專用語句),機械地使用3種基本控制結構實現這個目標,反而會使程序晦澀難懂。因此,下述的結構程序設計的定義可能更全面一些:“結構程序設計是盡可能少用GOTO語句的程序設計方法。最好僅在檢測出錯誤時才使用GOTO語句,而且應該總是使用前向GOTO語句?!彪m然從理論上說只用上述3種基本控制結構就可以實現任何單入口單出口的程序,但是為了實際使用方便起見,常常還允許使用DO_UNTIL和DO_CASE兩種控制結構,它們的流程圖分別是圖6.2(a)和圖6.2(b)。FTAexp(a)ex
8、pCASE1CASE2CASEn…(b)圖6.2其他常用的控制結構(a)DO_WHILE型循環(huán)結構;(b)多分支結構有時需要立即從循環(huán)(甚至嵌套的循環(huán))中轉移出來,如果允許使用LEAVE(或BREAK)結構,則不僅方便而且會使效率提高很多。LEAVE或BREAK結構實質上是受限制的GOTO語句,用于轉移到循環(huán)結構后面的語句。如果只允許使用順序、IF_THEN_ELSE型分支和DO_WHILE型循環(huán)這3種基本控制結