防護式編程和開發者測試

  《代碼大全》第8章介紹了防護式編程,這是一種提升軟件質量技術的有益輔助手段,其核心思想是:程序不該該傳入錯誤數據而被破壞。第22章介紹了開發者測試,測試是最多見的改善質量的活動,有些測試須要開發人員進行,例如單元測試、組件測試和集成測試。程序員

1、防護式編程

1)檢查全部來源於外部的數據(輸入參數)編程

一、對數據進行合法性校驗,例如確保數字在可接受的範圍內,確保字符串不超長,過濾注入的SQL命令、HTML或XML代碼等。數組

二、在輸入數據時將其轉換爲恰當的類型單元測試

2)處理錯誤輸入數據測試

一、返回中立值,繼續執行操做並簡單地返回一個沒有危害的數值,例如數值能夠返回0,字符串返回空等。編碼

二、換用下一個正確的數據,繼續讀下去直到又找到一條正確記錄爲止。spa

三、返回與前次相同的數據。設計

四、換用最接近的合法值。日誌

五、把警告信息記錄到日誌文件中,再用電子郵件提醒你。對象

六、返回一個錯誤碼,例如用語言內建的異常機制拋出一個異常。

七、把錯誤處理集中在一個全局的子程序或對象中。

八、當錯誤發生時顯示出錯消息。

九、用最穩當的方式在局部處理錯誤。

十、關閉程序。

 

2、開發者測試

1)測試方法

一、對每一項相關的需求進行測試,以確保需求都已經實現。

二、對每個相關的設計關注點進行測試,以確保設計已經被實現。

三、用基礎測試和數據流測試對代碼進行完全的考驗。

四、使用一個檢查表,其中記錄着你在本項目迄今爲止所犯的,以及過去所犯的錯誤類型。

2)測試先行

一、假如你首先編寫測試用例,那麼你將更早發現缺陷,也更容易修正它們。

二、首先編寫測試用例,將迫使你在開始寫代碼以前至少思考一下需求和設計。

三、更早地把需求上的問題暴露出來,對於一個糟糕的需求來講,很難寫出測試用例。

3)基礎測試

  思想就是測試程序中的每一條語句至少一次,例如if語句須要根據其表達式的複雜程序來修改測試,以確保這個語句徹底通過了測試。確保覆蓋率最簡單的方法就是算一算有多少條經過程序的路徑,而後據此開發出能經過程序裏每條路徑的最少數據的測試用例。下面是基礎測試用例的數量計算方法:

一、對經過子程序的直路,開始的時候記1。

二、遇到下面的每一個關鍵字或等價物時,加1:if、while、repeat、for、and以及or。

三、遇到每個case語句就加1,沒法case語句沒有缺省狀況,則再加1。

4)數據流測試

  所有代碼至少有一半是數據聲明和初始化,數據的狀態有3種:

一、已定義,數據已經初始化,但尚未使用。

二、已使用,數據已經用於計算或其它用途。

三、已銷燬,數據曾經定義過,但如今經過某種途徑取消了它的定義。

  對變量進行某種操做以前或以後的狀態有:

一、已進入,控制流已經進入一個子程序,但尚未使用該變量。

二、已退出,對變量產生影響以後,控制流當即退出子程序。

  正常的數據狀態的組合是變量已定義,已經一次或屢次使用,而且可能已經銷燬。下面是搭配形式:

已定義-已定義,已定義-已退出,已定義-已銷燬,已進入-已銷燬

已進入-已使用,已銷燬-已銷燬,已銷燬-已使用,已使用-已定義

  編寫數據流測試用例的關鍵是要對全部可能的定義-使用路徑進行測試。測試每個變量的每個定義,對每個變量測試全部在某處定義而在另外一處使用的組合。

5)測試錦囊

一、猜想錯誤,基於直覺或過去的經驗,猜想程序會在哪裏出錯。

二、邊界值分析,測試邊界值條件,例如小於、等於或大於。

三、幾類壞數據,包括數據太少、太多、無效、長度錯誤、未初始化等。

6)錯誤的分類

一、大多數錯誤的影響範圍是至關有限的。

二、許多錯誤發生在構建的範疇以外,例如頻繁變更且相互矛盾的需求,以及溝通和協調的失效。

三、筆誤是一個常見的問題根源。

四、程序員錯誤理解了這條設計。

五、大多數錯誤很容易修正。

7)預期錯誤的範圍

一、業界的經驗,在已發行的軟件中平均1000行代碼發現1~25個錯誤。

二、微軟的經驗,大約每1000行代碼有10~20個缺陷,而對於已發佈產品則大約是每1000行代碼0.5個缺陷。

三、淨室開發技術,可得到低至每1000行代碼3個缺陷,每1000行代碼0.1個缺陷的錯誤率。

四、團隊軟件開發過程的開發小組,可達到大約每1000行代碼0.06個缺陷。

8)保留測試記錄

一、缺陷的描述,包括報告日期、報告人、標題、編號以及修正日期等。

二、問題的完整描述。

三、復現錯誤所須要的步驟。

四、繞過該問題的建議。

五、相關的缺陷。

六、問題的嚴重程序,例如致命的、嚴重的或代表的。

七、缺陷根源:需求、設計、編碼仍是測試。

八、對編碼缺陷的分類:錯誤賦值、錯誤數組下標、子程序調用錯誤等。

九、修正錯誤所改變的類和子程序。

十、缺陷所影響的代碼行數。

十一、查找該錯誤所花的小時數。

十二、修正錯誤所花費的小時數。

相關文章
相關標籤/搜索