單元測試詳解

 測試包:http://anychat.storage.aliyun.com/AnyChatCoreSDK_Win32(MBCS)_V4.6.zip數據庫

單元測試是對軟件基本組成單元/模塊進行的測試,又稱爲模塊測試。基本單元/模塊能夠是函數、類實例、方法、存儲過程,也能夠是任何具備明確功能、規格定義、明確接口定義、而且其規模是通常比較小的程序代碼模塊的組合體。安全

一、概述ide

單元測試是對軟件基本組成單元/模塊進行的測試,又稱爲模塊測試。基本單元/模塊能夠是函數、類實例、方法、存儲過程,也能夠是任何具備明確功能、規格定義、明確接口定義、而且其規模是通常比較小的程序代碼模塊的組合體。函數

單元測試的重點在於發現程序設計或實現的邏輯錯誤,使問題及早暴露,便於問題的定位解決。工具

單元測試中多采用白盒測試和黑盒測試相結合的方法,既關注單元功能,也關注程序模塊的邏輯結構。二者結合起來,既能夠避免因爲過多關注路徑而致使測試工做量很大的問題,又能夠避免因從外部設計測試用例而可能丟失一些路徑的問題。性能

現今,更多觀點認爲單元測試應該由編碼人員實施,筆者認爲這種觀點是有道理的。畢竟由測試人員實施單元測試比編碼人員實施的工做量更大。固然,若是對於測試航空、航天、醫療等關係重大生命、財產的軟件系統來講,須要投入大量的資源來保證系統質量時,則能夠採用測試人員實施單元測試的策略。單元測試

單元測試的重點應該以功能測試爲主,同時統計測試的覆蓋率,而且測試模塊的輸入/輸出接口是否正確,內部的數據流是否正確等。學習

功能測試主要測試模塊是否正確實現了設計要求的功能,以及有無遺漏的功能。這裏有一個功能覆蓋的概念。由於被測試模塊可能包括多個功能點,在作測試時,設計測試用例要覆蓋這些功能點,以保證這些功能點通過測試。通常要求功能覆蓋100%。測試

覆蓋率通常要求進行語句覆蓋率和分支覆蓋率,同時要求測試全部的關鍵路徑。關鍵路徑的表達不是很明確,可是若是要求作基本路徑集覆蓋測試,即便是一個比較小的模塊也是很難作到的。若是使用單元測試工具(如CppUnit、Junit等),則能夠統計覆蓋率。編碼

單元測試結束後,若是有些分支因爲各類條件沒法覆蓋,則須要給出緣由說明。

二、單元測試的步驟

單元測試過程包括計劃、設計、執行、評審等幾個步驟,分別以下所述。

① 計劃:肯定測試需求,制訂測試策略,肯定測試所用資源(如人員、設備等),建立測試任務的時間表。這部分工做能夠簡單描述。

② 設計:設計單元測試模型,制訂測試方案,制訂具體的測試用例,建立可重用的測試腳本。

③ 執行:執行測試用例,對單元模塊進行測試,驗證測試的結果並記錄測試過程當中出現的缺陷。

④ 評審:對單元測試的結果進行評審。主要進行測試完備性評估。

因爲單元模塊每每不是一個獨立的程序,在設計時,要考慮單元模塊同其餘模塊的聯繫,用樁模塊和驅動模塊模擬所測模塊相聯繫的其餘模塊。由被測試模塊、驅動模塊和樁模塊共同構成可運行的程序。

驅動模塊和樁模塊的定義以下所述。

驅動模塊:至關於被測試模塊的主程序,用於接收數據或產生數據,把數據傳遞給被測試模塊,再輸出實測結果,或把實測結果同預期結果進行比對。

樁模塊:也稱爲存根模塊。用以代替被測試模塊調用的子模塊。樁模塊能夠用作數據處理,不須要把模塊的全部功能都模擬,能夠簡單地返回一個值。

三、單元測試的內容

1)單元功能測試

單元功能測試的內容以下:

  • 單元設計的功能點是否所有實現。
  • 運算的優先級和前後執行順序是否正確。
  • 計算中精度的處理是否正確。
  • 計算中的偏差是否會無限放大。

2)模塊接口測試

在單元測試的開始,應對所測模塊的數據流進行測試。若是數據不能正確地輸入和輸出,就不能進行其餘測試。

對模塊接口可能須要進行下面的測試外包項目:

  • 調用所測模塊時的輸入參數與模塊的形式參數在個數、屬性、順序上是否匹配。
  • 所測模塊調用子模塊時,它輸入給子模塊的參數與子模塊的形式參數在個數、屬性、順序上是否匹配。
  • 是否修改了只作輸入用的形式參數。
  • 輸出給標準函數的參數在個數、屬性、順序上是否正確。
  • 全局變量的定義在各模塊中是否一致。
  • 限制是否經過形式參數來傳送。
  • 模塊對外部文件、數據庫進行輸入/輸出時,必須對文件操做進行測試。例如,緩衝區的大小、是否在讀寫文件前打開文件,在結束前關閉文件等。

3)內部數據流測試

內部數據流測試包括如下幾點:

  • 不正確或不一致的數據類型說明。
  • 使用還沒有賦值或還沒有初始化的變量。
  • 錯誤的初始值或錯誤的默認值。
  • 變量名拼寫錯誤或書寫錯誤。
  • 不一致的數據類型。
  • 全局變量對模塊是否產生影響。

4)邏輯路徑測試

邏輯路徑測試包括如下幾點:

  • 是否到達重要的功能點路徑。
  • 邏輯判斷的邊界點是否正確。
  • 異常/錯誤處理。
  • 比較完善的模塊設計要求能預見異常或出錯的條件,並設置適當的異常處理和出錯處理,以便在程序出現異常或錯誤時,能對出錯程序從新進行安排,保證邏輯上的正確性。重點應該考慮下面幾個問題:
  • 異常或出錯的描述是否能夠理解。
  • 異常處理是否合理、出錯後對錯誤的定位是否準確。
  • 提示的錯誤與實際的錯誤是否一致。
  • 對錯誤條件的處理是否正確。

以上提到的不少內容在編碼規範或代碼檢查單中大多已經包含,若是模塊在進入單元測試以前,已經進行了桌前檢查和同行評審,則模塊中潛在的缺陷就可能比較少。

四、單元測試用例設計

單元測試中幾乎能夠運用全部測試用例設計方法。

單元測試過程以下所述。

① 單元模塊運行設計第一個測試用例。第一個測試用例通常是使用最簡單的方法執行被測單元。當這個用例能夠執行時,就能肯定測試環境和測試單元是可用的。

② 設計被測試單元測試用例。閱讀相關的設計說明,每個測試用例就是經過有針對性地測試說明書中的一項或者多項內容,用以驗證設計說明書所對應的功能是否實現。

③ 設計測試功能異常處理方面的測試用例。用可能致使模塊功能失效的無效數據,測試模塊對無效數據的反應是否合理,以及對異常或錯誤的處理後模塊的反應如何,驗證模塊有沒有作不該該作的工做。

④ 設計其餘的測試用例,驗證設計對模塊的要求。例如計算精度、性能、可恢復性、安全性等。

⑤ 加載測試用例運行程序,須要查看和記錄測試結果,尤爲是測試結果與預期結果不一致的狀況。

⑥ 補充測試用例,執行前面測試用例運行沒有覆蓋到的主要分支和 語句。

⑦ 重複上面的1~6步,直到功能覆蓋、主要邏輯覆蓋、異常條件和邊界覆蓋等。

但願經過本文對單元測試的介紹,可以給你帶來幫助。

對本文有疑問能夠加Q:2256985656,歡迎學習交流。

相關文章
相關標籤/搜索