例外處理設計筆記(1) - Failure, Error, Fault 與 Exception
本系列為閱讀 搞笑談軟工Teddy 的 「例外處理設計的逆襲」的筆記整理,加上一點我自己的理解。感謝 Teddy 免費公開原書手稿,閱讀學習後獲益良多。
對問題有共通的理解基礎,才有辦法做更為深入、有效的討論。
Failure 失效
Failure 是一種現象、結果,一個軟體元件無法提供規格所描述的服務。元件可能是指function, method, service。
- 函數沒有回傳正確的值,代表服務失效。e.g. add(1,2) != 3 代表服務失效
- 驗證碼必須在60秒內寄出,超過60秒才寄出或是沒有寄出,代表服務失效
- 用戶因為連線問題無法開啟首頁,代表服務失效
Error 錯誤
錯誤代表軟體元件內部處於錯誤狀態。這個狀態可能會導致Failure。但軟體內部也可以處理好該Error,避免發生 Failure。
Fault 缺陷
缺陷是指造成錯誤的原因。通常需要經過判斷、假設才能夠得出。依照產生原因通常有兩類
By 原因(重點)
- 設計缺陷 Design Fault:也就是 bug,通常是內因性的。在軟體開發過程中所造成的問題。例如寫錯判斷式、誤解需求、除數為0、演算法設計錯誤、類別設計錯誤、忘記初始化物件。除非有開發人員主動去修正,否則不會自行消失。
- 解法:code review, 單元測試, 靜態程式碼檢查, pair programming等等以提高開發流程品質為主
- 元件缺陷 Component Fault:通常是外因性的,原本是指硬體元件因為老化或是受到使用環境影響產生的問題。引申為軟體元件在與執行環境互動時,產生的不正常狀況。例如:網路線鬆動、記憶體不足、存檔時發現硬碟空間不足、列印時印表機沒開、無法存取遠端的信用卡交易服務。