都在说TDD开发,那到底TDD是什么?
??? 想了半天,確實是記不得什么時候第一次聽說TDD了,我這里是要拍(拍板磚的拍)這個所謂的TDD,所以也就懶得去找TDD到底是什么時候提出來的,雖然google一下可能在第一頁就能有正確的命中(比如wiki百科,哦可惜不能訪問了)。對TDD我還是了解一點點的,至少知道它被大家叫做Test Drive Development,不過我覺得過分強調這個東西真的有些無聊,甚至是相當的無聊。
??? 程序員進行開發的動力是靠Test來Drive嗎?這顯然是極其荒謬的結論,因為有這樣一個大家還基本能贊同的觀點,那就是:高質量的程序是程序員編寫出來的,而不是測試出來的。所以對于程序編寫,測試如果是錦上添花,那么最終結果是非常棒的。而如果測試成為了雪中送炭,那么這個產品或項目注定了就是一坨屎。程序的質量和TDD有什么關系呢?
??? TDD是束縛程序員生產力的桎梏,同時TDD也是程序員推卸和逃避責任的法寶。程序員是思考型的工作者,而不是流水線上的裝配工人。雖然今天在一些特定的場景里,程序員可以像標準件一樣被任意的替換,但不得不說這樣的程序員其實就是編碼工人而已,就像拿到圖紙后就知道該怎么砌磚的建筑工人一樣。為什么說TDD阻礙生產力?這很明顯,編寫測試用例需要時間和精力呀。當然很多人會說自測試是程序員的責任,如果不編寫測試用例,不做Unit Test,怎么來保證程序員的代碼質量?編程是一種還算有些創造性的工作,而不是挖一個坑種一個蘿卜的機械勞動。測試用例只是對矛盾的一種轉換,比如我應該讓我的程序處理3種輸入,結果我把這個任務轉換成了:我有3個測試用例,我的程序需要通過這3個測試用例。到底程序員是在干嘛?為了測試用例而編程嗎?由于測試用例也是程序員自己寫的,所以測試用例的錯誤和失誤風險和程序的風險等效。實際上程序員還是在為自己編程,為自己的思考編程。這樣一來到底是自己的思考犀利敏銳,還是把思考變成了測試用例更加有效?我覺得自然的思考最有效率,而用心的思考最有效果。而隔了一層測試用例的思考,使人更加容易出錯和生長惰性,因為增加了步驟和莫名的依賴,覺得通過測試用例就萬事大吉。殊不知自己編寫的測試用例只是思考的一種轉換,一種更加難以把握重點和實質的轉換,因為編程的動力已經變成Test的結果了。
??? 關于使用TDD來重構更是騙小孩的把戲。TDD強調的就是要通過測試,別的都不再重要。任何"多余"的功能,就是Unit Test Case沒有覆蓋的功能,就沒有了任何實現和處理的價值,編寫這樣的處理代碼被認為莫名其妙,因為它們不會被測試,也沒有這樣的Unit Test Case。作為一個真正的程序員,是不會容忍初始的代碼實現是一坨屎,然后再來根據什么Test Case重構成Perfect的代碼的。因為第一次的思考一般是嚴肅的,第一次編寫的代碼是最有靈犀的,它不是在后來懶心無腸就能修改出來的。反而后來的代碼更多的就是為了亮綠燈而已,效率和美感蕩然無存。這有點像是在污蔑真正認真重構代碼的人吧?其實不是,如果你真是認真地人,為什么在開始不仔細思考,把那些編寫所謂Test Case的時間用來編寫好你的第一版代碼,然后認真地用"心"執行幾次呢?因為這樣的代價其實是在debug時不可避免的,如果真要完全(注意是完全)依賴綠燈,這也就是嚴重的開發效率問題了。
????版本升級和延續又真的能依靠TDD嗎?首先我們假設升級和延續的改動是有限的,否則成了重寫就不在這個討論之列了。測試依靠測試用例,測試用例如同代碼注釋、開發文檔,它們同樣存在著過時和與實現不同步的問題,這都需要維護。而且寫得ugly的Unit Test Case和濫注釋濫文檔是一樣的,到后來根本沒有用也沒有任何人愿意再去維護修改趟這個渾水。真正的版本升級和延續的保障是Product Team人員的穩定。如果從設計到實現甚至測試,主要人員都很穩定地一直做下來,那么新的設計和改動實現后要不穩定都難。這是TDD能Drive的嗎?一些惜墨如金的注釋,一堆莫明其妙的開發文檔、啰里啰唆的n多Unit Test Case,不知道新來的人面對后怎么開始他的延續工作?
??? 所以到底什么是TDD?什么才是有效的TDD?真正的TDD應該是:Thinking Drive Development。真是郁悶,縮寫還居然一樣,算了,就沾點惡名吧。程序員進行直接的縝密思考,他提交的代碼才會是sexy的,他的開發效率也才會是最高的,所謂磨刀不誤砍柴功正是如此。而Unit Test Case、Unit?Test只是開發方法有益的補充,不是主要矛盾所在。
轉載于:https://www.cnblogs.com/birdshome/archive/2006/06/24/Thinking_Drive_Development.html
總結
以上是生活随笔為你收集整理的都在说TDD开发,那到底TDD是什么?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 痒痒鼠是什么意思
- 下一篇: Visual Studio 2005 插