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