1. 程式人生 > >【軟件構造】第七章第一節 健壯性和正確性的區別

【軟件構造】第七章第一節 健壯性和正確性的區別

日期 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的數量

【軟件構造】第七章第一節 健壯性和正確性的區別