單元測(cè)試實(shí)踐的主要問(wèn)題與解決
本文是我在“第十屆中國(guó)系統(tǒng)與軟件過(guò)程改進(jìn)年會(huì)廣東會(huì)場(chǎng)”所作演講的整理稿,主要分享單元測(cè)試的一些要點(diǎn)、單元測(cè)試實(shí)踐的主要問(wèn)題,以及如何來(lái)解決這些問(wèn)題。
一、 單元測(cè)試概述
1.1 什么是單元測(cè)試
單元測(cè)試,就是針對(duì)代碼單元的獨(dú)立測(cè)試。為什么需要單元測(cè)試呢?這是代碼的基本特性決定了的。代碼有一個(gè)基本特性,就是對(duì)數(shù)據(jù)分類(lèi)處理。
代碼通常會(huì)有很多的判定。一個(gè)判定,就是一次分類(lèi)。嵌套的判定,會(huì)使分類(lèi)次數(shù)的翻倍。
如果我們?cè)趯?xiě)代碼的時(shí)候,有一個(gè)分類(lèi)漏掉了,就會(huì)產(chǎn)生一個(gè)Bug;如果一個(gè)分類(lèi),雖然寫(xiě)了代碼,但是處理不正確,也會(huì)產(chǎn)生一個(gè)Bug。一個(gè)函數(shù)要沒(méi)有錯(cuò)誤,必須做到兩點(diǎn):1,對(duì)數(shù)據(jù)的分類(lèi)必須完整;2,每一個(gè)分類(lèi)的處理必須正確。做到了這兩點(diǎn),就可以說(shuō),代碼的功能邏輯是正確的。
那么,如何檢測(cè)代碼的功能邏輯是否正確呢?
調(diào)試,是臨時(shí)的,且不完整的,例如,一個(gè)函數(shù)有十種輸入,調(diào)試能覆蓋五六種就不錯(cuò)了。而系統(tǒng)測(cè)試,并不針對(duì)某個(gè)具體的函數(shù),不關(guān)注某個(gè)函數(shù)的功能邏輯是否正確。
要檢測(cè)某個(gè)函數(shù)的功能邏輯,就必須要依照分類(lèi)列出數(shù)據(jù),檢測(cè)代碼是否對(duì)每一個(gè)分類(lèi)都做了處理,而且每一個(gè)分類(lèi)的處理是否正確。
——這就是單元測(cè)試。
1.2 單元測(cè)試的基本方法
由上面的分析可以看出,單元測(cè)試的基本方法就是:依數(shù)據(jù)的分類(lèi)列出輸入,執(zhí)行被測(cè)試程序,然后,判斷輸出是否符合預(yù)期。
單元測(cè)試能達(dá)到什么樣的效果呢?那就是:無(wú)論別人怎么樣,我總是對(duì)的!
這里的“別人”,是指關(guān)聯(lián)代碼。“我”,是指當(dāng)前正在編寫(xiě)或測(cè)試的代碼。單元測(cè)試要做到的是,無(wú)論關(guān)聯(lián)代碼是否有錯(cuò),都要保證我是對(duì)的。具體來(lái)說(shuō),我要考慮關(guān)聯(lián)代碼會(huì)產(chǎn)生什么樣的數(shù)據(jù),這些數(shù)據(jù)要如何分類(lèi)處理,只要我的分類(lèi)和處理是正確的,那么,無(wú)論別人怎么樣,我總是對(duì)的。