TDD
在編碼實(shí)現(xiàn)方面,我們前面在做方案域設(shè)計(jì)的時(shí)候,已經(jīng)把程序設(shè)計(jì)的可測(cè)試性很高,所以很自然我們?cè)诼涞貙?shí)現(xiàn)的時(shí)候,就可以通過(guò)打印的方式肉眼調(diào)試,隨著我們代碼越來(lái)越多,每寫(xiě)完一段新的代碼塊,應(yīng)該就考慮把所有的都打印出來(lái)看看有沒(méi)有變化,這就叫回歸 。而用肉眼看的方式做人肉回歸實(shí)在是效率太低,頻率也不會(huì)高 。我們需要把肉眼看轉(zhuǎn)換為自動(dòng)化的方式,這就是自動(dòng)化測(cè)試 。既然我們可以通過(guò)自動(dòng)化測(cè)試的方式來(lái)進(jìn)行回歸,校驗(yàn)的輸入輸出在開(kāi)始之前也已經(jīng)分析清楚了,那不妨在開(kāi)始寫(xiě)代碼之前就先把測(cè)試寫(xiě)出來(lái),于是就得到了TDD 。
很多人抱怨TDD學(xué)不會(huì),其實(shí)據(jù)我觀察,大部分學(xué)生之所以不能使用TDD的方式寫(xiě)代碼,核心原因還是不會(huì)把程序從輸入輸出角度進(jìn)行拆解 。一旦拆解開(kāi)了,后面的就簡(jiǎn)單了 。
我也發(fā)現(xiàn)在編程的時(shí)候,很多問(wèn)題不是智力問(wèn)題,fizzbuzz讀音,而是心理問(wèn)題 。
我看見(jiàn)很多同學(xué)很喜歡一口氣寫(xiě)一大堆代碼,然后慢慢調(diào)試 。如果他們真的有過(guò)人的才能,可以一次性寫(xiě)對(duì),我覺(jué)得也沒(méi)什么 。然而事實(shí)是python并不能,反而浪費(fèi)很多時(shí)間 。
究其原因還是游戲不會(huì)改程序,所以想著一次性寫(xiě)好,為什么這么說(shuō)呢?你會(huì)發(fā)現(xiàn)他們基本上不考慮輸入輸出的具體格式,腦子里有一個(gè)模模糊糊的感覺(jué),就開(kāi)始寫(xiě)實(shí)現(xiàn)了,到實(shí)現(xiàn)完為止,程序都執(zhí)行不起來(lái),執(zhí)行起來(lái)之后,因?yàn)楹瘮?shù)已經(jīng)很長(zhǎng)了,中間出了錯(cuò)誤,準(zhǔn)備數(shù)據(jù)也不好準(zhǔn)備,于是要改半天,于是更害怕執(zhí)行了,于是更想一次性寫(xiě)好,函數(shù)就更長(zhǎng)了 。
由于不會(huì)思考輸入輸出,也就不會(huì)拆子函數(shù),因?yàn)榇蟮亩紱](méi)好好想,小的子函數(shù)就更別說(shuō)了,函數(shù)的輸入輸出沒(méi)有分析清楚,拆了子函數(shù)因?yàn)樽饔糜虻膯?wèn)題沒(méi)想清楚,所以想一個(gè)函數(shù)寫(xiě)完 。或者亂拆了子函數(shù),然后就開(kāi)始各種加全局變量 。總之就是因?yàn)椴桓腋模园逊稿e(cuò)的范圍越積越大,故障點(diǎn)越壘越多 。越是這樣就越不敢執(zhí)行 。因?yàn)橐粓?zhí)行就更肯定是報(bào)錯(cuò)的,一旦查錯(cuò)呢,因?yàn)榇a太長(zhǎng)又害怕查錯(cuò)查的把寫(xiě)代碼的思路忘了,于是又強(qiáng)化了一次性寫(xiě)完的行為 。
整個(gè)這套我們稱之為基于本能的行為模式并不是一個(gè)理性的結(jié)果,反而是一個(gè)感性的結(jié)果 。所以我們教的這些實(shí)踐并不是單純的解決智力問(wèn)題,相當(dāng)多的部分也是在解決心理問(wèn)題 。
與這套基于本能的行為模式相反,我們教的這套以TDD思想為核心的行為模式,有意識(shí)把代碼拆成小塊,自然可以小步試錯(cuò),可以小塊驗(yàn)證,也就可以保證實(shí)現(xiàn)的過(guò)程中即便出了問(wèn)題也可以快速的定位 。哪怕不寫(xiě)測(cè)試,你打印也比別人調(diào)試快,單步調(diào)試也知道每一塊干什么,fizzbuzz,另一塊跟這個(gè)不相關(guān),就可以快速跳過(guò),到了你關(guān)心的部分,分析過(guò)輸入輸出,也就能更快速的知道哪里錯(cuò)了 。所以講解不能從輸入輸出角度進(jìn)行思考是人們沒(méi)有辦法寫(xiě)出高質(zhì)量程序的一個(gè)原因 。
而每一塊的編碼實(shí)現(xiàn)我們還是會(huì)再分任務(wù),以本問(wèn)題單個(gè)數(shù)的轉(zhuǎn)換為例,接口是非常清楚的——輸入是個(gè)整數(shù),輸出是個(gè)字符串 。
但是你實(shí)現(xiàn)的過(guò)程要分幾步 。
我要先實(shí)現(xiàn)可以被3整除的,再實(shí)現(xiàn)可以被5整除的,最后實(shí)現(xiàn)可以被3和5整除的,這算是一個(gè)驅(qū)動(dòng)的意思 。從簡(jiǎn)單的入手,然后再往復(fù)雜的去寫(xiě) 。很多人可能會(huì)java覺(jué)得比較無(wú)聊 。但如果你測(cè)試的人足夠多,你會(huì)發(fā)現(xiàn)很多人哪怕是在這樣一個(gè)無(wú)聊的題上,也會(huì)把自己坑進(jìn)去 。舉個(gè)例子我們第3步:可以被3和5整除 。當(dāng)我們實(shí)現(xiàn)的時(shí)候,我們if里那個(gè)表達(dá)式模3模5在上還是在下 。每次我都會(huì)故意寫(xiě)在下面問(wèn)有沒(méi)有問(wèn)題,fizzbuzz牛津英語(yǔ)樹(shù),如下圖所示:
相關(guān)經(jīng)驗(yàn)推薦
- 家譜英語(yǔ)
- 第三天英文怎么寫(xiě) 第四天英文怎么寫(xiě)
- oliver怎么讀 oliver怎么讀英語(yǔ)人名
- 蘋(píng)果的英語(yǔ)怎么讀 螞蟻的英語(yǔ)怎么讀
- 即使是這樣英語(yǔ)怎么說(shuō) 即使這是色情
- 新年賀詞中英文對(duì)照50字 英語(yǔ)新年賀詞50字
- 你喜歡吃水果嗎的英語(yǔ)怎么說(shuō) 問(wèn)別人喜歡吃什么水果的英浯怎么說(shuō)
- 制造商一定要在外包裝上寫(xiě)嗎 制造商一定要在外包裝上寫(xiě)嗎英語(yǔ)
- 云南2023年普通高等學(xué)校招生第二次英語(yǔ)科目聽(tīng)力考試和口語(yǔ)測(cè)試公告
- 云南高考第二次英語(yǔ)聽(tīng)力考試需要戴口罩嗎
