防御性设计

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

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

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

 資料輸入畫面進行輸入的基本檢查，例如數字欄位只能填數字、正負號及一個小數點等。

 檢查輸入值是否合理。例如工作場所受傷個案數（或是受傷人數）可能為0，但不可能是負數，而且一定會是整數。每名員工一週工作的總工時可能為0，也可能有分數或小數，但不可能超過168小時，也不可能超過其出席天數乘以24。

 若文字處理器要載入一個已儲存的文件，需要進行掃描，確認其格式正確，沒有损坏。若文件已損壞，程式應該告知使用者，讓使用者可以選擇要接受部份正確的文件，或是拒絕使用該文件。不論選擇哪一個，程式都應該要繼續執行，不會因為文件損壞就自動結束程式。

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

相關條目
 失效安全

 固有安全
 防呆
 敵意建築
 可用性测试

參考資料

Category:設計