電腦遊戲製作開發設計論壇 首頁 電腦遊戲製作開發設計論壇
任何可以在PC上跑的遊戲都可以討論,主要以遊戲之製作開發為主軸,希望讓台灣的遊戲人有個討論、交流、教學、經驗傳承的園地
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入 

Google
系統生命週期概論 -- 節錄自《資料結構-使用C++》

 
發表新主題   回覆主題    電腦遊戲製作開發設計論壇 首頁 -> 板主碎碎唸
上一篇主題 :: 下一篇主題  
發表人 內容
yag
Site Admin


註冊時間: 2007-05-02
文章: 688

2673.35 果凍幣

發表發表於: 2008-2-26, PM 11:57 星期二    文章主題: 系統生命週期概論 -- 節錄自《資料結構-使用C++》 引言回覆

原書名:Fundamentals of data structures in C++
原作者:Ellis Horowitz, Sartaj Sahni, Dinesh Mehta
譯者:余建政,謝志明

好的程式設計師視大程式如一個內部錯綜複雜的系統,對一個系統而言,完成該系統所經歷的發展過程就叫做系統生命週期。這個週期由許多要素組成:需求分析設計編程驗證等階段。雖然我們分別考慮這些要素,但它們卻有高度的相關性,而且每個階段在程式發展的時間區隔上有著粗略但自然的順序。

需求

所有大型程式計畫都有其特殊的目的,需求就是用來告訴程式設計師,被要求什麼輸入和什麼輸出。通常這些最初的規定都被定義的很模糊,但我們在發展過程中卻必須詳細的考慮各種可能的輸入和輸出。

分析

在我們根據需求細心地描繪出程式的輸廓之後,就要認真地開始分析階段。在這個階段中,我們先把程式分成幾個比較容易處理的小部份。分析有兩個方法:即由下往上由上往下兩種。由下往上的方法是一個比較老且不結構化的手段,它一開始先強調把程式中的每一""寫好,但這樣程式設計者由於對整個程式沒有一個完整的計畫,導致最後的程式通常結構鬆散,且錯誤百出。由下往上的方式就像是在設計一棟大樓時先不決定大樓的結構、形狀,而先分別設計大樓的門窗、地板、樓梯等,最後再試著將它們兜成一棟大樓,因此在這個方法中,並不會考慮各元件在這棟大樓的確實用途。雖然很少人會希望住在用這種建築法蓋起來的房子裡,但許多程式設計者,特別是新手,則相信不用事先的計畫,就可以寫出一個完美無瑕的程式

相反的,由上往下的方法是先對這個程式做一個詳細的計畫,即先將程式分成幾個易於處理的部份,然後再考慮程式的細節部份,這種方法會產生一個供設計系統用的圖表。通常在這個階段中會有好幾個解決方案被發展出來或拿來比較,大家現在已經比較喜歡用由上往下的方法來發展複雜的軟體系統了。

設計

這個階段則是繼續分析階段的工作,設計者先看看這個程式需要哪些資料物件和需要什麼樣的運算。需要資料物件就需要設計抽象資料型態,有運算就要應用適當的演算法。假設我們要設計一所大學的時間表系統,所需要的資料就有學生,課程和教授,而所需要的基本運算或許就有對每個資料或資料和資料間的插入、刪除和搜尋。如果說我們想在時間表上增加課程或找尋某一位教授的課程,就需要用到這些運算。

因為既然抽象資料型態和演算法跟你使用的程式語言是沒有關係的,所以我們可以晚一點再決定要用哪一種方式寫。雖然我們必須先決定每一種資料物件所需要的資訊,但我們可以先不管實際寫碼的細節。像我們或許會決定學生的資料物件中包含了名字身份證字號年級電話號碼,然而,我們卻還沒決定要用哪種方法來表示這些學生資料。等一下我們將會看到好幾種表示法像陣列鏈結串列等。盡可能晚一點""程式碼,因為我們並不只是希望設計一個可以用多種語言寫出來的系統,而且還希望在我們所選用的語言上找出最有效率的寫法

粹煉和程式寫碼

在這個階段中,我們必須為我們的資料物件選擇一個表示法並為每一個運算寫其演算法。決定作這兩件事的順序是非常重要的,因為一個好的演算法也要配合適當的讀資料表示法才能發揮其最大的效用,所以一般來說我們都是先決定演算法

通常此時我們會認為我們已經創造了一個非常好的系統,也許我們也和正在進行相似計畫的朋友聊過,或者認為我們的某一項設計是非常優越的。假如我們的原始設計是好的,那麼它應該能夠很簡單地被改變。事實上,這也就是為什麼我們一直希望不要太早為細節寫程式碼的原因。假如我們必須完全的放棄原來的計畫時,也不必太傷心,如果想我們可以利用更短的時間來寫出一個錯誤更少的新系統,或許會比較好過一點,有一本如此安慰人心的書正好是在計論有關"第二個系統" -- Frederic Brooks寫的《人月神話》。

驗證

這個階段由三個部份組成:正確性證明測試錯誤移除。其中每一個領域都被研究的非常徹底,完整的討論已經超出本書範圍(《資料結構-使用C++》),但我們還是稍微介紹一下每個領域的重要處。

正確性證明:一個程式可以用適當的數學方法證明其正確性,但不幸的,由於受到於時間的限制,因此一個大系統通常無法完全地被證明。然而有一些已經被證明的演算法可以幫助減少許多錯誤。在這本書(《資料結構-使用C++》)中,我們提供了一個演算法的軍火庫,其中一些已經用正規方法證明了其正確性,你可以在許多程式問題中應用到它們。

測試:既然我們的演算法並不需要以特定程式語言寫出,所以它可以在寫碼以前寫碼中證明其正確性。而測試則需要一段已經可以動作的程式碼和一些測試資料,這些測試資料必須小心的選取,使其可以測試到程式中每一種可能發生的情況。通常一個程式設計新手會以為只要程式執行之後不會產生語法錯誤,那它就是正確的。再熟一點的人,會輸入一份資料,而且通常只有一份資料被拿來使用。可是好的測試資料必需能夠測試程式的每一小段,例如程式中若有switch的指令,我們的測試資料就必須測試switch裡的每一個case

一個新系統的測試視其是否能正確執行為重點,雖然這極重要的注意事項,但一個程式的執行時間也是不可忽略的。一個沒錯誤的程式,若執行的速度非常緩慢,那它的評價也不會太高。大部分的演算法都有其理論上估算的執行時間,我們在介紹新的演算法時也會導出其估算值,另外,我們也會想得知程式中某一段的執行效率如何,至於如何測試其執行時間也是我們以後會討論的。

錯誤移除:如果我們做的好,正確性證明系統測試就會指出錯誤的程式碼之所在,至於是否能夠輕鬆的移除錯誤,就要靠我們以前寫程式的經驗了。一個沒有文件說明的大程式,而且寫的像"義大利麵"般地錯綜複雜,是每一個程式設計師的惡夢。當在找尋這種程式的錯誤時,每改正一個錯誤,就有可能產生許多新的錯誤。相反的,一個容易除錯的程式就是要附有詳細說明文件,而且程式中分成許多自主的單位,且各單位間可以很容易的靠參數的輸出入來交互影響,特別是那些每一個單位獨自測試後再整合起來的系統。


個人覺得以上的內容對寫中大型以上的程式很有用,也是程式新手、中手往高手邁進不可或缺的知識,不知各位自從寫程式以來,是否有過對欲編寫的系統做以上等步驟規劃的經驗呢?
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
從之前的文章開始顯示:   
發表新主題   回覆主題    電腦遊戲製作開發設計論壇 首頁 -> 板主碎碎唸 所有的時間均為 台灣時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
可以 在這個版面附加檔案
可以 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作