一大早,一個(gè)年輕的程序員問(wèn)大師:
“我準(zhǔn)備寫(xiě)一些單元測(cè)試用例。代碼覆蓋率應(yīng)該達(dá)到多少為好?”
大師回答道:
“不要考慮代碼覆蓋率,只要寫(xiě)出一些好的測(cè)試用例即可。”
年輕的程序員很高興,鞠躬,離去。
之后沒(méi)多久,第二個(gè)程序員問(wèn)了大師同樣的問(wèn)題。
大師指著一鍋燒沸的水說(shuō):
“我應(yīng)該往這個(gè)鍋里放多少米?”
這個(gè)程序員看起來(lái)被難住了,回答道:
“我怎么會(huì)有答案?這取決于要給多少人吃,他們餓不餓,有什么菜,你有多少米,等等。”
“完全正確,” 大師說(shuō)。
第二個(gè)程序員很高興,鞠躬,離去。
末了,來(lái)了第三個(gè)程序員問(wèn)了大師同樣的關(guān)于代碼覆蓋率的問(wèn)題。
“百分之八十,不能少!” 大師一拳錘在桌子上,用嚴(yán)厲的口氣回答道。
第三個(gè)程序員很高興,鞠躬,離去。
回復(fù)完這個(gè)之后,一個(gè)年輕的實(shí)習(xí)生走到大師身邊:
“大師,今天我無(wú)意中聽(tīng)到了你對(duì)同一個(gè)代碼覆蓋率問(wèn)題給出了三個(gè)不同的答案。為什么?”
大師從椅子上站起來(lái):
“給我泡點(diǎn)新茶,我們聊聊這個(gè)。”
當(dāng)杯子里倒?jié)M了冒著熱氣的綠茶后,大師開(kāi)始說(shuō):
“這第一個(gè)程序員是個(gè)新手,剛剛開(kāi)始學(xué)測(cè)試。目前他有大量的程序都沒(méi)有測(cè)試用例。他有很長(zhǎng)的路要走;現(xiàn)在對(duì)他要求代碼覆蓋率只會(huì)打擊他,沒(méi)有什么用處。最好是讓他慢慢的學(xué)會(huì)寫(xiě)一些測(cè)試用例,測(cè)試一下。他可以以后再考慮代碼覆蓋率。”
“而這第二個(gè)程序員,不論對(duì)編程還是測(cè)試都是十分的有經(jīng)驗(yàn)。我以問(wèn)作答,問(wèn)她應(yīng)該往鍋里放多少米,使她明白決定測(cè)試用例多少的因素有很多,她比我更知道這些因素——畢竟是她自己的代碼。對(duì)這個(gè)問(wèn)題沒(méi)有一個(gè)簡(jiǎn)單的、直接的答案。以她的聰明完全能明白這個(gè)道理,正確的完成任務(wù)。”
“我明白了,” 年輕的實(shí)習(xí)生說(shuō), “但是如果沒(méi)有一個(gè)簡(jiǎn)單直接的答案,那你為什么告訴第三個(gè)程序員‘百分之八十,不能少’呢?”
大師笑的前仰后合,綠茶都噴了出來(lái)。
“這第三個(gè)程序員只想得到一個(gè)簡(jiǎn)單的答案——即使根本沒(méi)有簡(jiǎn)單的答案 … 而且即使有答案她也不會(huì)按答案做。”
年輕的實(shí)習(xí)生和頭發(fā)斑白的大師在沉思中喝完茶。