在項(xiàng)目實(shí)踐中使用TDD闸度,我經(jīng)常會(huì)被問(wèn)到以下問(wèn)題畜疾,這讓我很無(wú)助:
- TDD可以幫助你設(shè)計(jì)嗎不翩?
- TDD可以幫助你明確需求嗎茶没?
- TDD可以幫助提高質(zhì)量嗎筒占?
- TDD是正確的嗎?
- TDD有經(jīng)過(guò)科學(xué)的收集數(shù)據(jù),通過(guò)數(shù)據(jù)對(duì)比來(lái)驗(yàn)證嗎?
這些問(wèn)題都很常見团赁,讓我無(wú)助的不是這些問(wèn)題答不上來(lái) - 其實(shí)都有很明確的答案,讓我無(wú)助的是也許大家在項(xiàng)目實(shí)踐中遭受太多苦難谨履,當(dāng)大家發(fā)現(xiàn)一個(gè)有用的工具或者方法論時(shí)欢摄,無(wú)不寄希望于她能幫助我們解決所有的問(wèn)題。其實(shí)人家Fred Brooks早在1987年就看穿了這一點(diǎn)笋粟,并發(fā)表了一篇關(guān)于咱們這個(gè)行業(yè)-軟件工程的經(jīng)典論文《沒有銀彈》怀挠。核心思想就是 - 沒有任何一項(xiàng)技術(shù)或方法可以讓軟件工程的生產(chǎn)力在十年內(nèi)提高十倍。Fred Brooks已經(jīng)把這個(gè)期限放的很寬了害捕,十年绿淋。我認(rèn)為這個(gè)“十年”絕對(duì)是打破幻想的精準(zhǔn)一擊,話外語(yǔ)就是尝盼,不管我給你多少年吞滞,你也還是一樣找不到這樣一枚銀彈,是不是有點(diǎn)絕望盾沫。再看看以上問(wèn)題的“正確”答案裁赠,你因該會(huì)更絕望:
- TDD可以幫助你設(shè)計(jì)嗎?
不能赴精,如果你本身就不會(huì)好的設(shè)計(jì)佩捞,那也沒有一種方法能讓你一下就會(huì)。
- TDD可以幫助你明確需求嗎蕾哟?
不能一忱,需求如果本身就不明確,也沒辦法通過(guò)TDD讓她明確谭确。
- TDD可以幫助提高質(zhì)量嗎帘营?
不能,如果你寫的代碼質(zhì)量就是不行琼富,不管用什么辦法仪吧,你寫出來(lái)的肯定還是自己的代碼。
- TDD是正確的嗎?
不知道鞠眉,還沒有誰(shuí)通過(guò)科學(xué)的辦法驗(yàn)證這個(gè)是否正確薯鼠。
- TDD有經(jīng)過(guò)科學(xué)的收集數(shù)據(jù),通過(guò)數(shù)據(jù)對(duì)比來(lái)驗(yàn)證嗎械蹋?
沒有出皇,因?yàn)檫@個(gè)過(guò)程中的變量因子太多太多,自身能力的成長(zhǎng)就是不可衡量因子其中之一哗戈。
什么郊艘?看起來(lái)TDD一無(wú)是處?從上面的答案來(lái)看,我還真沒法反駁你纱注,但我仍然選擇堅(jiān)持TDD畏浆。
我現(xiàn)在的一項(xiàng)主要工作就是培訓(xùn)新入職的畢業(yè)生,希望公司的敏捷文化在最開始的時(shí)候就可以盡可能全面的呈現(xiàn)在大家面前狞贱,讓大家知道什么是我們鼓勵(lì)的刻获,什么是我們向往的。
在我們的培訓(xùn)中瞎嬉,TDD被我們?cè)O(shè)計(jì)成OOBootCamp中第一個(gè)重要的環(huán)節(jié)蝎毡,在這之前會(huì)有敏捷簡(jiǎn)史的介紹,用來(lái)幫助大家理解大的背景氧枣。也有關(guān)于單元測(cè)試的介紹沐兵,幫助大家了解單元測(cè)試,從而能夠區(qū)分哪些是測(cè)試帶來(lái)的好處便监,哪些是TDD帶來(lái)的扎谎。
之所以堅(jiān)持,當(dāng)然不是因?yàn)樾枰獔?jiān)持而去堅(jiān)持茬贵,而是如何真正的去了解她簿透,知道如何跟她Pair(結(jié)對(duì)兒)。
TDD是一個(gè)方法論解藻,和GTD - 時(shí)間管理老充、 PKM - 個(gè)人知識(shí)管理一樣,只是一個(gè)方法論螟左。
TDD能夠提高編碼的效率啡浊,能夠盡量避免糾結(jié),節(jié)約你的時(shí)間胶背。當(dāng)你一個(gè)人不知道先做什么后做什么的時(shí)候是巷嚣,當(dāng)兩個(gè)人結(jié)對(duì)兒的時(shí)候尤是。
通常與TDD同時(shí)出現(xiàn)的詞還有 Unit Test(單元測(cè)試钳吟,我們這里的TDD指的是uTDD)廷粒, Pair(結(jié)對(duì)兒編程)。
TDD可以保證Pair質(zhì)量红且,保證雙方都能動(dòng)手實(shí)踐坝茎,思路統(tǒng)一,增強(qiáng)參與感暇番。
設(shè)定了以上期望嗤放,我相信TDD能更好的為你所用。畢竟能夠幫助我們解決實(shí)際問(wèn)題壁酬,才是王道次酌。