單元測試的效益
單元測試是針對代碼單元,特別是算法密集的代碼單元的獨立測試,可以完整覆蓋代碼單元的功能邏輯,保證代碼質量、降低成本、提高生產率、縮短開發周期、贏得市場先機、提升產品競爭力。
單元測試分為靜態和動態,靜態方法只能發現小部分錯誤,例如,加法函數
int add(int a, int b){return a-b;};
加號寫成了減號,這種最簡單代碼中的最簡單錯誤,任何靜態工具都無法發現,而動態方法只需輸入兩個1,自動判斷輸出是否等于2,馬上就能發現錯誤。靜態 方法能發現的錯誤,如除零錯、數組越界、條件語句中==寫成=,都會表現為異常或功能錯誤,動態方法當然也能發現,因此,動態方法是單元測試的根本方法。
無處不在的80-20規則,在軟件開發中 同樣存在,例如,80%的錯誤存在于20%的代碼中,80%的項目時間消耗在20%的代碼上,當然這只是粗略的估計。“20%代碼”就是邏輯復雜的代碼, 也就是算法密集的代碼。一個算法密集的函數,要對輸入仔細分類,一個判定就是一次分類,嵌套的判定更使分類次數翻番,遺漏一個分類,或一個分類處理不正 確,就會造成錯誤。只有完整覆蓋代碼單元的所有輸入等價類,才能保證發現這些錯誤,這在調試和系統測試中是難于做到的。算法密集的代碼包含了項目中的大多數錯誤,即使只對這部分代碼實施單元測試,也能產生理想的效益。
除了保證代碼質量,單元測試還具有排錯成本最低、易于自動回歸、縮短后續測試周期、提高編程效率等顯著效益。