2017年10月2日 星期一
(四) 單元測試
概述
單元測試的一個目標是檢查程式碼實作是否符合設計,但不能檢查設計是否正確;另外的目標是儘早發現錯誤,因為此時發現錯誤的性價比最好
單元測試是對軟體基本組成單元進行的測試,不一定是指函數或是類別的方法,明確的功能、規格定義,與其他部分的明確的介面定義等,可清晰地與同一程式的其他單元劃分開來
單元測試與系統測試相比,重點在於發現程式設計或實作的邏輯錯誤,基本屬於白箱測試的範疇
單元測試與整合測試相比,測試物件有所區別,整合測試的被測物件是在概要設計中規劃的模組及這些模組間的組合,所以不同模組往往是分配給不同的程式人員開發。單元測試的被測物件是這些模組下的實作具體功能的單元,一般是對應設計中所描述的設計單位
單元測試的重要性
1. 在產品開發的階段中發現問題,並且修改的成本也很低
2. 開發的後期階段,需要消耗大量的時間和開發費用
3. 無論什麼時候做出修改都要進行完整的回歸測試,儘早對產品程式碼進行測試將使效率和品質得到最好的保證
4. 經過測試單元的情況下,系統整合過程將會大幅地簡化
5. 使測試工作的效力發揮到最大化的關鍵在於選擇正確的測試策略,這包含了完全的單元測試的概念,以及對測試過程的良好的管理,還有適當地使用好工具來支援測試過程
單元測試的內容
模組介面
檢查進出模組的資料是否正確(輸入和輸出)
--輸入的參數與形式參數在個數、屬性、順序上是否匹配
--輸出給標準函數的參數在個數、屬性、順序上是否正確
--全域量的定義在個模組中是否一致
區域資料結構測試
檢查區域資料結構能否保持完整性
--檢查不正確或不一致的資料類型說明
--使用尚未賦值或尚未初始化的變數
--錯誤的初始值或錯誤的預設值
模組獨立執行通路(路徑)測試
檢查由於計算錯誤、判定錯誤、控制流錯誤導致的程式錯誤
--運算的優先次序不正確
--演算法錯誤
--初始化不正確
--運算精度不夠
--不正確的邏輯運算符號獲優先次序
--迴圈上的錯誤 (差1的錯誤、無限迴圈)
錯誤處理測試
檢查內部錯誤處理方法是否有效
--出錯的描述難以理解
--顯示的錯誤與實際的錯誤不符
--對錯誤條件的處理不正確
--在對錯誤進行處理之前,錯誤條件已經引起系統的干預等
邊界測試
檢查臨界資料是否正確處理
--迴圈的第0次、第1次、第N次是否有錯誤
--運算或判斷中取最大最小值時是否有錯誤
--資料流程、控制流中剛好等於/大於/小於/確定的比較值是否出現錯誤
單元測試流程
測試計畫: 撰寫測試計畫
測試設計: 根據測試計畫,設計測試用例 (測試步驟、測試場景、測試程式碼、測試資料、預期結果)
測試執行: 根據測試計畫,配置測試環境,並手動或自動執行測試設計
測試紀錄: 根據測試計畫,紀錄測試執行的過程和結果
分析: 分析測試紀錄,如果與預期結果不同,確定並重現缺陷
缺陷追蹤: 紀錄、分發、評估、關閉缺陷報告
完畢: 檢查測試設計是否全部執行完畢、缺陷是否全部關閉
測試總結: 分析測試過程和缺陷報告,評估測試品質和測試效果,給初是否透過測試的建議