CODE COMPLETE 2 軟體開發實務指南 第9章 虛擬碼程式設計流程

        第九章主題是虛擬碼程式設計流程,我認同作者提到設計類別、子程式與持續迭代的部分,這是最簡單實用的設計方法,不贊同寫虛擬碼再轉成註解與程式的部分。


9.1  建立類別和子程式的步驟概述


圖9-1  顯示設計流程,先設計類別,再設計類別中的子程式,最後復審整體,整個過程是迭代的過程會不停地重複。


建立一個類別的步驟


建立類別的總體設計


定義類別的職責、要隱藏的秘密、定義類別介面所代表的抽象概念。


決定類別是否為衍生類別,關鍵的公用方法,類別所用到的重要成員。


 


建立類別中的子程式


建立子程式的過程還會反過來影響類別的總體設計。


檢視並測試類別


最後會整體進行檢視和測試,以便發現子程式獨立測試無法檢測出問題。


建立子程式的步驟


成員存取子程式,傳遞到其他物件的子程式。


通常以圖9-2 所示的順序進行。


 


9.2  如何寫好程序的虛擬碼


虛擬碼程式設計流程是透過書寫虛擬碼簡化建立子程式程式碼的專門方法。


有效使用虛擬碼的指導原則:


用類似英文的語句來精確描述特定的操作。


避免使用目標程式語言中的語法。


在意圖的層面上編寫虛擬碼,用虛擬碼描寫解決方法的原意,而不是撰寫如何在目標語言實作這個方法。


在一個足夠低的層次上編寫虛擬碼,以便自動地產生程式碼。


 


惡例的虛擬碼像是C語言。


 


良例的虛擬碼都是英文,沒用任何程式語言。


使用良好方格的虛擬碼可以得到下列好處:


虛擬碼使得檢視容易,無需檢視原始碼就可以檢視細節設計。


虛擬碼支援反覆迭代精鍊的概念。


虛擬碼使修改變得容易。


虛擬碼能幫程式碼加上註解這項工作的量減到最少。PPP的寫法虛擬碼會轉變成註解。


虛擬碼比其他形式的設計文件更容易維護。


 


9.3  透過PPP建立子程式


 


假設要設計一個函式ReportErrorMessage(),能夠根據錯誤碼輸出錯誤訊息。


 


設計子程式


 


檢查先決條件


 


定義子程式要解決的問題


 


高層設計應說明下列資訊


 


子程式要隱藏的資訊


傳給子程式的各項輸入


從子程式得到的輸出


前置條件


後置條件


 


ReportErrorMessage()範例如何考慮這些問題:


 


子程式隱藏兩個事實,錯誤訊息的文字和目前的處理方式(互動式介面或命令行)


沒有任何可保證的前置條件


輸入資料式一個錯誤碼


兩種輸出:首先是錯誤訊息,其次是返回方程式的狀態值。


子程式保證狀態值Success或Failure


 


為子程式命名


 


決定如何測試子程式


 


在標準庫中搜尋可用的功能


 


考慮錯誤處理


 


考慮效率問題


?????????


 


研究演算法和資料類型


 


編寫虛擬碼


考慮資料


檢查虛擬碼


在虛擬碼中試驗一些想法,留下最好的想法


編寫子程式的程式碼


寫下子程式的宣告


把虛擬碼轉變為高層次的註解


在每條註解下方填入程式碼


檢查程式碼是否需要進一步分解


有時候虛擬碼展開後形成大量的程式碼,可考慮下列兩個方法


重構


遞迴地使用PPP


 


檢查程式碼


在腦海裡檢查程式中的錯誤


業餘與專業的差別在於業餘和理解。


光是寫出可以工作的程式還不夠,還要知道為什麼可以工作。


編譯子程式


在除錯器中逐步執行程式碼


測試程式碼


消除程式中的錯誤


收尾工作


可執行收工作確保程式品質合乎標準


檢查子程式的介面。確認所有的輸入、輸出資料都參與了計算、並且所有參數都用到了。


檢查整體的設計品質。子程式只做一件事,並且把事情做好做滿。子程式是鬆耦合,採用防禦性設計。


檢查子程式中的變數。檢查變數名稱、物件初始化、未經宣告的變數


檢查子程式的述句和邏輯。檢查是否存在偏差1的錯誤、無窮迴圈、錯誤的巢狀結構以及資源洩漏。


檢查子程式的佈局。確認使用空白字元來釐清子程式、運算式及參數清單的邏輯結構。


檢查子程式的文件。確認虛擬碼轉化的註解正確、檢查演算法、介面假定的說明、依賴性。


除去冗餘的註解。


 


按照需要重複上述步驟


9.4  PPP的替代方案


作者認為PPP是建立類別和子程式的最佳方法。


還有其他PPP的替代方案


測試先行開發


先寫測試程式再寫產品程式。


重構


透過對程式碼進行一系列保持語義的變換和調整來提高程式碼的品質。


契約式設計


認為每一段程式都具有前置條件和後置條件。


東拼西湊?


作者建議自己沒有方法的時候就考慮PPP。


核對表:PPP


核對表


檢查過已滿足所有先決條件


定義類別要解決的問題


高層設計是否足夠清晰?給每個類別和子程式取一個好名


考慮過如何測試類別和其中每一個子程式


穩定的介面和可讀的實作?滿足資源和速度的目標?


標準函式庫或其他程式庫尋找過可用的程式或元件


從參考書找演算法


用詳盡的虛擬碼設計好每一個程式


檢查虛擬碼,讓虛擬碼容易理解


關注重返設計的警告訊息,例如全域資料的使用


使否把虛擬碼正確地翻譯程式碼?


遞迴使用PPP,根據需要拆解子程式。


做出假設時,要提出說明


刪除冗餘的註解


選取多次迭代之後最好的結果


了解程式碼,理解程式碼


 


要點


 


建立類別與子程式是一個迭代過程。


寫好的虛擬碼需要使用易懂的英文,避免使用程式語言,描述做什麼而不是如何做。


PPP讓編碼工作變得容易,虛擬碼會轉化為註解,進而確保註解的準確性和實用性。


反覆使用虛擬碼設計多種方案,然後選擇最佳的一種方案再開始編碼。


每一步完成都要檢查工作成果。


 


 


 


留言

這個網誌中的熱門文章

異世界NTR web版第三章 觀後感 喧賓奪主 ,反派實力過強

泛而不精的我被逐出了勇者隊伍 web第三章 觀後感 菲莉真能打; 露娜超爽der

持有縮小技能的D級冒險者,與聖女結婚並加入勇者團隊 漫畫 01-04 觀後感 大我與小我