天天看點

HIT 軟體構造 健壯性 正确性

健壯性

定義

系統在不正常輸入和不正常外部環境下仍能夠表現正常的程度

面向健壯性的程式設計

  1. 處理未期望的行為和終止
  2. 即使終止執行,也要準确/無歧義地向使用者展示全面的錯誤資訊
  3. 封閉實作細節(不給使用者獲得庫、資料結構、指針的途徑)

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

正确性和健壯性的權衡

  1. 對外的接口傾向于健壯
  2. 對内的實作傾向于正确

程式設計的正确姿态

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

  1. 并不是所有的軟體缺陷都是編碼錯誤導緻的(比如需求缺口)
  2. 并不是所有的軟體缺陷都會導緻運作失效
  3. 環境變化時defect可能變成運作失效
  4. 一個單一的缺陷可能導緻廣泛的失敗症狀

衡量正确性和健壯性

MTBF(平均失效時間)

為系統故障間隔的算術平均(平均)時間,是從外部觀察角度進行的,是直接的

HIT 軟體構造 健壯性 正确性

Residual defect rates (殘餘缺陷率)

每千行代碼中遺留的bug的數量,是從内部觀察角度進行的,是間接的

歡迎關注公衆号BBIT

讓我們共同學習共同進步!

HIT 軟體構造 健壯性 正确性

繼續閱讀