天天看點

TDD(測試驅動開發)教育訓練錄

2014年我一直從事在靈活實踐咨詢項目,這也是我頗有收獲的一年,特别是咨詢項目的每一點改變,不管是代碼品質的提高,還是自組織團隊的建設,都能讓我們感到欣慰。涉及人的問題都是複雜問題,改變人,改變一個組織是個更複雜問題,這裡可能涉及很多的非技術,非能力問題。

在2014年12月我在某企業内部推行TDD(測試驅動開發)教育訓練,一共分4個課時完成一個特定需求的例子,看着大家一步一步的加深對TDD的了解,直到2014-12-31,也是2014的最後一天下午教育訓練完TDD課程,經過一系列的總結過後,某參與人員說道:“單元測試需要寫更多的代碼,但是從項目的總體來看,一個字‘值’.”。緊接着後來某參與人員發了一份其關于TDD教育訓練感受,名叫《TDD随想錄》也将是本文的主題,本文或許更好的說是轉載此文,了解一個開發人員對TDD了解的心路曆程,以及對TDD的看法。

原文如下:

謹以本文獻給TDD的開創者與傳播者

本文純屬個人經曆,如有雷同純屬巧合

我從不覺得自己是一個好的程式員,甚至可能連合格都談不上,不過在内心深處我卻渴望着在程式設計這件事上獲得成功。

可惜每次審視自己寫的暫且稱之為代碼的東西,都會有挫折感,想重構卻又感覺盤根錯節,難以下手;想重寫卻又感覺自己好不容易寫出來的,也花了不少心思,就這樣丢棄心有不甘。

也曾思考過如何才能寫好代碼,有段時間覺得隻有嚴格符合程式設計規範的代碼才是好代碼進而如同遵守戒律一樣地字字斟酌,還有段時間覺得隻有用上設計模式才能稱之優秀代碼進而非模式不用,一切套用模式。不過這些都沒有讓我走出開發的迷霧,永遠是加不完的班,修不完的bug。

究竟是否有一種方法能夠讓我撥開開發迷霧,至少能夠讓我能夠輕松地修剪代碼,降低bug發生率,那麼我覺得這種方法在我身上就是成功的。

初次接觸到TDD是通過公司内部的“代碼大全教育訓練”,猶如十月革命中阿芙勒爾号的一聲炮響,為我打開了軟體開發的視野。先測試後開發,小步疊代,持續內建,這些新名詞突然湧進了我的大腦,既新鮮又晦澀。猶如人的幼年容易犯幼稚病一樣,初識這些新名詞就以為了解了TDD的一切,結果卻發現在實踐過程中處處碰壁,舉步維艱。對TDD中每個環節真正隐含的開發思想的囫囵吞棗,讓這一次的教育訓練隻在我腦中留下TDD的一個模糊身影:為軟體開發結下一張安全網。

雖然未領悟精髓,但教育訓練後體驗和直覺告訴我TDD是一條通往我向往的軟體成功的道路,盡管自己摸索前行比較坎坷。很幸運的是團隊獲得了随隊靈活教練的支援,結對讓我系統地了解到了TDD的思想。

測試先行,其實講的是需求邊界,測試不是漫無目的而是精确計算成本的一項活動。測試從何而來,從需求來,需求推演出測試,也規劃出産品邊界,不能反映需求的測試是一種浪費,是以引申出開發需要講求适當。開發是一項功利性的活動,永遠都在追求盈利,而測試就一條紅線,一旦跨過就意味着虧損。

小步疊代,“讓子彈飛”中有句話很經典:步子要一步一步邁,一步邁大了,咔,容易扯着蛋。代碼堆疊的後遺症是複雜,複雜到沒人願意觸碰,且不停地咒罵這代碼有多爛,這是步子邁太大的真實寫照。TDD講求的小步疊代是寫完一個測試再去寫完一個實作,每個實作都是通過測試的,如此累加小勝為大勝,最後所有代碼的收尾也不過是讓最後一個測試通過而已,就是這樣簡單。

重構,這是我最喜歡的部分,為啥?因為這裡面所有的活動都會要求你去思考,且看上去都像是讓你的代碼向着大師級代碼前進。漂亮的代碼并不是堆砌各種技巧,而是在正确的時間,正确的地點做正确的事,重構很容易實作這個目标。重構是一件讓人一旦開始就會欲罷不能的事,會讓開發者在整個開發階段都能夠不停地去思考、實踐再思考,直到無法再添加或删除一個字母。

持續內建,你終究是需要傳遞産品的,産品就是客戶需要的價值,就如同廚師終究會端出客人點的大餐一樣,沒有哪個廚師是把所有食材羅列着呈現給你的,而是混合在一起,蒸煮炖燒,有些食材需要先處理,這樣吃起來才軟硬适中,而有些則是最後下鍋,這樣吃起來才鮮嫩多汁,廚師就是這樣一步步将食材內建起來,每一步的處理都是可用都是有價值的,都是為後續進行的鋪墊。軟體開發也一樣,持續內建就要保證每一次的完成都是有價值都可以為後續提供支撐。

寫到這裡也許會有人問你如何知道TDD是真理,是康莊大道,它一定适合每個人嗎?不,我并不知道,我所寫的一切隻是發生在我身上的一段經曆。這段經曆告訴我TDD迫使我去更多的思考,去切割我那些冗長且複雜又不切實際的胡思亂想,把它們碾碎成一個個小片段,提煉,過濾,不斷累加,最終變成最接近交代價值的東西,而這最終的東西正是我一直在追求的那個成就感。如果想要知道TDD是不是适合自己,最好的辦法就是去嘗試,去親身體驗一下,無論好壞也許你能獲得比我更多的體會。

TDD并不是萬能的,但是TDD也不是一無是處的,重要的是用方法論的人,引入某同僚一句話:

部落客很是贊同該同僚的看法,并且作者認為:

世上并沒有放之四海皆準的法則,TDD好壞在于你的判斷,方法論的主體在于使用的人,本文并不會給你一個完美的答案,這需要你自己的發掘。

本文轉自破狼部落格園部落格,原文連結:http://www.cnblogs.com/whitewolf/p/4205761.html,如需轉載請自行聯系原作者

繼續閱讀