防御性设计

防御性设计也稱為防守設計,是在專案設計階段的应急方案。防御式设计是考慮使用者可能會錯誤使用的所有情形,用設計手法避免錯誤使用,或是降低錯誤使用的機會。例如,假如某一個接頭需要以特定的方向插到插座中,而且這個非常重要,會設法設計此接頭,讓接頭必需依正確的方向才能插入插座中。電源插頭多半會依此方式設計,避免火線和中心線插反。

軟體工程中的防御式设计稱防御性编程。著名的摩菲定理說明了為何需要防御式设计。防御式设计是和契约式设计相反的一種設計方式,契约式设计的作法會假設所有向伺服組件提出運作請求的客戶組件,都會符合運作時需要的前置條件。不過若其假設太過冒險(例如多通道的客戶端-伺服器系統,或是分散式計算),就比較適合使用和契约式设计相反的防御性编程。

應用

電腦軟體

軟體實現的決策以及軟體設計的一些作法可以讓軟體更安全,找到使用者的錯誤。

  • 資料輸入畫面進行輸入的基本檢查,例如數字欄位只能填數字、正負號及一個小數點等。
  • 檢查輸入值是否合理。例如工作場所受傷個案數(或是受傷人數)可能為0,但不可能是負數,而且一定會是整數。每名員工一週工作的總工時可能為0,也可能有分數或小數,但不可能超過168小時,也不可能超過其出席天數乘以24。
  • 若文字處理器要載入一個已儲存的文件,需要進行掃描,確認其格式正確,沒有损坏。若文件已損壞,程式應該告知使用者,讓使用者可以選擇要接受部份正確的文件,或是拒絕使用該文件。不論選擇哪一個,程式都應該要繼續執行,不會因為文件損壞就自動結束程式。

電子

許多电子连接器會考慮防御式设计,故意設計成非對稱。

相關條目

參考資料