健壯性
定義
系統在不正常輸入和不正常外部環境下仍能夠表現正常的程度
面向健壯性的程式設計
- 處理未期望的行為和終止
- 即使終止執行,也要準确/無歧義地向使用者展示全面的錯誤資訊
- 封閉實作細節(不給使用者獲得庫、資料結構、指針的途徑)
Robustness principle (Postel’s Law)
Be conservative in what you do, be liberal in what you accept from others
(做事情要保守,接受别人的東邪要大方)
正确性
定義
程式按照spec加以執行的能力,是最重要的品質名額
舉例比較
錯誤類型 | 健壯性方法 | 正确性方法 |
---|---|---|
浏覽器發出包含空格URL | 去掉空格 | 傳回HTTP404錯誤 |
視訊檔案有環幀 | 自動跳過 | raise “Corrupt video file” error. |
配置檔案使用了非法字元 | 内部檢查常用字首,忽略它們 | “bad configuration” error. |
奇怪格式額日期輸入 | 嘗試解析按照其他格式 | invallid date error |
正确性和健壯性的權衡
- 對外的接口傾向于健壯
- 對内的實作傾向于正确
程式設計的正确姿态
Step 0:使用斷言、防禦式程式設計、代碼評審等
Step 1:觀測失效症狀(資訊轉儲、堆棧資訊跟蹤、運作日志、測試)
Step 2:bug定位,debug
Step 3:fix
Error -> Fault -> Failure
explanation
error是程式員犯的錯誤,defect是程式的缺陷,fault是代碼中的錯誤,failure是失效、運作時的外在表現error -> defect/fault/bug -> failure
tip
- 并不是所有的軟體缺陷都是編碼錯誤導緻的(比如需求缺口)
- 并不是所有的軟體缺陷都會導緻運作失效
- 環境變化時defect可能變成運作失效
- 一個單一的缺陷可能導緻廣泛的失敗症狀
衡量正确性和健壯性
MTBF(平均失效時間)
為系統故障間隔的算術平均(平均)時間,是從外部觀察角度進行的,是直接的
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TPR1keFRUT3dmeNBDOsJGcohVYsR2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL2QTOwIjM0ETMyAjNwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
Residual defect rates (殘餘缺陷率)
每千行代碼中遺留的bug的數量,是從内部觀察角度進行的,是間接的
歡迎關注公衆号BBIT
讓我們共同學習共同進步!