摘要:單元測試是軟件測試的基礎,本文詳細的論述了單元測試的兩個步驟人工靜態檢查法與動態執行跟蹤法,所需執行的工作項目及相關的策略和方法。通過對這兩個步驟的描述作者將多年的單元測試經驗及測試理論注入于全文。
1 概述
單元測試是針對軟件設計的最小單位——程序模塊,進行正確性檢驗的測試工作。其目的在于發現每個程序模塊內部可能存在的差錯。
單元測試也是程序員的一項基本職責,程序員必須對自己所編寫的代碼保持認真負責的態度,這是也程序員的基本職業素質之一。同時單元測試能力也是程序員的一項基本能力,能力的高低直接影響到程序員的工作效率與軟件的質量。
在編碼的過程中作單元測試,其花費是最小的,而回報卻特別優厚的。在編碼的過程中考慮測試問題,得到的將是更優質的代碼,因為在這時您對代碼應該做些什么了解得最清楚。如果不這樣做,而是一直等到某個模塊崩潰了,到那時您可能已經忘記了代碼是怎樣工作的。即使是在強大的工作壓力下,您也還必須重新把它弄清楚,這又要花費許多時間。進一步說,這樣做出的更正往往不會那么徹底,可能更脆弱,因為您喚回的理解可能不那么完全。
通常合格的代碼應該具備以下性質:正確性、清晰性、規范性、一致性、高效性等(根據優先級別排序)。
1. 正確性是指代碼邏輯必須正確,能夠實現預期的功能。
2. 清晰性是指代碼必須簡明、易懂,注釋準確沒有歧義。
3. 規范性是指代碼必須符合企業或部門所定義的共同規范包括命名規則,代碼風格等等。
4. 一致性是指代碼必須在命名上(如:相同功能的變量盡量采用相同的標示符)、風格上都保持統一。
5. 高效性是指代碼不但要滿足以上性質,而且需要盡可能降低代碼的執行時間。
2 單元測試步驟
在代碼編寫完成后的單元測試工作主要分為兩個步驟人工靜態檢查和動態執行跟蹤。
人工靜態檢查是測試的第一步,這個階段工作主要是保證代碼算法的邏輯正確性(盡量通過人工檢查發現代碼的邏輯錯誤)、清晰性、規范性、一致性、算法高效性。并盡可能的發現程序中沒有發現的錯誤。
第二步是通過設計測試用例,執行待測程序來跟蹤比較實際結果與預期結果來發現錯誤。經驗表明,使用人工靜態檢查法能夠有效的發現30%到70%的邏輯設計和編碼錯誤。但是代碼中仍會有大量的隱性錯誤無法通過視覺檢查發現,必須通過跟蹤調試法細心分析才能夠捕捉到。所以,動態跟蹤調試方法也成了單元測試的重點與難點。
3 人工檢查
通常在人工檢查階段必須執行以下項目的活動:
第一、 檢查算法的邏輯正確性;確定所編寫的代碼算法、數據結構定義(如:隊列、堆棧等)是否實現了模塊或方法所要求的功能。
第二、 模塊接口的正確性檢查;確定形式參數個數、數據類型、順序是否正確;確定返回值類型及返回值的正確性。
第三、 輸入參數有沒有作正確性檢查;如果沒有作正確性檢查,確定該參數是否的確無需做參數正確性檢查,否則請添加上參數的正確性檢查。經驗表明,缺少參數正確性檢查的代碼是造成軟件系統不穩定的主要原因之一。
第四、調用其他方法接口的正確性;檢查實參類型正確與否、傳入的參數值正確與否、個數正確與否,特別是具有多態的方法。返回值正確與否,有沒有誤解返回值所表示的意思。最好對每個被調用的方法的返回值用顯濕代碼作正確性檢查,如果被調用方法出現異?;蝈e誤程序應該給予反饋,并添加適當的出錯處理代碼。
第五、出錯處理;模塊代碼要求能預見出錯的條件,并設置適當的出錯處理,以便在一旦程序出錯時,能對出錯程序重做安排,保證其邏輯的正確性,這種出錯處理應當是模塊功能的一部分。若出現下列情況之一,則表明模塊的錯誤處理功能包含有錯誤或缺陷:出錯的描述難以理解;出錯的描述不足以對錯誤定位,不足以確定出錯的原因;顯示的錯誤信息與實際的錯誤原因不符;對錯誤條件的處理不正確;在對錯誤進行處理之前,錯誤條件已經引起系統的干預等。
第六、保證表達式、SQL語句的正確性;檢查所編寫的SQL語句的語法、邏輯的正確性。對表達式應該保證不含二義性,對于容易產生歧義的表達式或運算符優先級(如:《 、=、 》、 &&、||、++、 --等)可以采用擴號“()”運算符避免二義性,這樣一方面能夠保證代碼的正確可靠,同時也能夠提高代碼的可讀性。
原文轉自:http://www.anti-gravitydesign.com