豆瓣:https://book.douban.com/subject/1477390/
《Code Complete》2d ed,CC2
-
在防禦式駕駛中要建立這樣一種思維,那就是你永遠也不能確定另一位司機將要做什麼。你要承擔起保護自己的責任,哪怕是其他司機犯的錯誤。
保護程序免遭非法輸入數據的破壞
- 要做到“垃圾進,什麼都不出”、“垃圾進來,出去是錯誤提示”或“不許垃圾進來”。
斷言
- 用錯誤處理代碼來處理預期會發生的狀況,用斷言來處理絕不應該發生的狀況。
-
避免把需要執行的代碼放到斷言中。
-
用斷言來註解並驗證前條件和後條件。確保調用子程序前的條件和調用後的結果。
-
斷言在發佈的產品中關閉,必要時在斷言後補充錯誤處理。
錯誤處理技術
- 返回中立值。默認的異常結果。
-
換用下一個正確的數據。
-
返回與前次相同的結果。
-
換用最接近的合法值。
-
記錄異常到日誌。返回自定義錯誤碼。
-
調用統一的錯誤處理子程序。
-
關閉程序。
異常
- 異常是把代碼中的錯誤或異常事件傳遞給調用方的一種特殊手段。
-
異常用於報告發生了不可忽略的錯誤。
-
在真正例外的情況拋出異常,能預期能處理的當場處理完畢。
-
不能用異常來推卸責任。
-
避免在構造和析構函數中向上層拋出異常。
-
拋出的異常注意其抽象層次與當前子程序一致。
隔離程序,使之包容由錯誤造成的損害
- 加入中間處理層,清洗外部進入的異常數據。內部就可以從容使用斷言和異常機制。
輔助調試的代碼
- 開發期間犧牲一些速度和對資源的使用,換取可以讓開發更順暢的內置工具。
-
進攻式編程(Offensive Programming)。專門應用於開發階段,加速暴露錯誤的發生,促進處理解決。
覈對表
2020-01-01 - 廖傑良