第七章第一節 健壯性和正確性的區別
第七章:進入軟件構造最關鍵的質量特性 ——健壯性和正確性。編程
本節在1-2節的基礎上,重申了Robustness and Correctness的重要性,澄清了兩者之 間的差別,並指明瞭在軟件構造中處理二 者的典型技術(防護式編程、異常處理、 測試、調試等)瀏覽器
Outline
- 健壯性(Robustness)和正確性(correctness)
- 如何測量健壯性和正確性
Notes
## 健壯性(Robustness)和正確性(correctness)
【健壯性】測試
- 定義:系統在不 正常輸入或不正常外部環境下仍可以表現正常的程度
- 面向健壯性編程:
- 處理未指望的行爲和錯誤終止
- 即便終止執行,也要準確/無歧義的向用戶展現全面的錯誤信息
- 錯誤信息有助於進行debug
- 健壯性原則:
- Paranoia (偏執狂):老是假定用戶惡意、假定本身的代碼可能失敗
- 把用戶想象成白癡,可能輸入任何東西(返回給用戶的錯誤提示信息要詳細、準確、無歧義)
- 對別人寬容點,對本身狠一點(對本身的代碼要保守,對用戶的行爲要開放)
- 面向健壯性編程的原則:
- 封閉實現細節,限定用戶的惡意行爲
- 考慮極端狀況,沒有「不可能」
【正確性】spa
- 含義:程序按照spec加以執行的能力,是最重要的質量指標!
- 對比健壯性和正確性:
- 正確性:永不給用戶錯誤的結果; 讓開發者變得更容易:用戶輸入錯誤,直接結束(不知足precondition調用)。
- 健壯性:儘量保持軟件運行而不是老是退出; 讓用戶變得更容易:出錯也能夠容忍,程序內部已有容錯機制。
- 正確性傾向於直接報錯(error),健壯性則傾向於容錯(fault-tolerance);
- 對外的接口,傾向於健壯性;對內的實現,傾向於正確性。
- Reliability(可靠性) = Robustness + correctness
Problem |
健壯性 |
正確性 |
瀏覽器發出包含空格的URLdebug |
剝離空白,正常處理請求。 |
將HTTP 400錯誤請求錯誤狀態返回給客戶端。 |
視頻文件有壞幀 |
跳過腐敗區域到下一個可播放部分。調試 |
中止播放,引起「損壞的視頻文件」錯誤 |
配置文件使用了非法字符 |
在內部識別最多見的評論前綴,忽略它們。視頻 |
終止啓動時出現「配置錯誤」錯誤 |
奇怪格式的日期輸入 |
|
日期錯誤無效接口 |
## 如何測量健壯性和正確性
- 外部觀察角度:
- Mean time between failures (MTBF,平均失效間隔時間):描述了可修復系統的兩次故障之間的預期時間,而平均故障時間(MTTF)表示不可修復系統的預期故障時間。
- 內部觀察角度: