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