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

第七章第一節  健壯性和正確性的區別

第七章:進入軟件構造最關鍵的質量特性 ——健壯性和正確性。編程

本節在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)表示不可修復系統的預期故障時間。
  • 內部觀察角度:
    • 殘餘缺陷率:每千行代碼中遺留的bug的數量
相關文章
相關標籤/搜索