拒絕測試驅動開發(TDD)的10個理由

發表於2011-12-27

英文原文:Softwareandi,編譯:iteye

在本文內容之前,先來看幾個相關的開發方法:

▲ 測試驅動開發:英文全稱Test-Driven Development,簡稱TDD,是一種不同於傳統軟體開發流程的新型的開發方法。它要求在編寫某個功能的程式碼之前先編寫測試程式碼,然後只編寫使測試通過的功能程式碼,通過測試來推動整個開發的進行。這有助於編寫簡潔可用和高質量的程式碼,並加速開發過程。

▲ 行為驅動開發:英文全稱Behavior Driven Development,簡稱BDD,是一種敏捷軟體開發技術,鼓勵開發人員、質量保證和非技術或商業參與者都參與到專案中來。

▲ 驗收測試驅動開發:英文全稱Acceptance Test Driven Development,簡稱ATDD,是一種協同需求發現方法,利用示例和可自動的測試來明確需求,建立可執行的規格。

在我看來,這些都是帶動一個團隊發展並快速提高產品質量的好方法。但TDD不是萬能的,不是每個專案都適用。以下十種情況不建議寫測試,如果你的專案符合一種以上,那麼TDD以及其他敏捷技術都是多餘的。

1. 沒有客戶

有時候,你正在開發的產品不會被任何人使用,在這種情況下,付出的所有努力都會浪費,沒有人會在乎。

2. 客戶是挑剔的

有些人非常喜歡測試新軟體並尋找錯誤,這是他們工作的重心,還有一些人喜歡進行棧跟蹤,以進行逆向工程。如果你的客戶中有這樣的人,那麼軟體中所有的優點都會被忽視。

3. 專案是簡單的

如果團隊可在短時間內(不超過幾個星期)完成專案,且永遠不會再對其進行重新維護,那麼可維護性、可重用性和可擴充套件性就變得並不那麼重要了,而花在這上的時間和精力就是浪費。

4. 架構是完美的

如果你的架構不需再改進,那麼就沒有必要讓它具有可擴充套件性。TDD的優勢是增量開發流程以及可擴充套件架構,而如果專案的架構已經夠完美了,則TDD就顯得畫蛇添足了。

5. 文件是完美的

如果API和任何軟體的改變都即時記錄到文件裡,與用TDD建立的文件一樣,方便找到你需要了解的東西。如果你的文件是非常完整的,編寫測試明顯違反了 DRY(Don’t Repeat Yourself)原則。

6. 團隊沒有大的變化並且團隊內的人記憶力不錯

團隊的記憶可以讓你回憶起寫過的任何一行程式碼或者當時的開發環境。因此不需要用測試來提醒你程式碼是幹什麼的,為什麼寫它,或如何使用它。但這意味著你的團隊不能招募新成員,舊成員也不能離開。這樣的話,不寫測試也是可以的,因為寫了反而會影響團隊進度。

7. “Done”意味著程式碼檢查完畢

很多團隊有對Done(DOD)的定義,通常指使用者可以接收和執行(編碼、測試、部署、記錄等)軟體的情況。然而,大部分更喜歡簡單且容易實現的定義。比如說每個成員完成自己的任務就定義為“Done”。而且對於一個專案來說,如果不需要為產品所有者/經理/使用者測試程式碼,則應儘快進入下一階段。

8. 你的工作是寫程式碼而不是測試

也許你的團隊裡做測試的人能夠快速測試你的程式碼,並針對有問題的地方及時給你反饋,因此在對程式碼進行修改的時候,變動的地方在你腦中還有清晰的印象。因此要珍惜測試人員,並確保他們有足夠的工作,否則當他們厭倦這份工作後便會跳槽到一個更具挑戰性的的公司。

9. 不停地除錯導致測試時間過長

和任何有競爭力的公司一樣,你的團隊必須按時完成任務,這意味著要好好規劃並利用時間。由於DoD團隊不包括測試,所以無法預測這部分需要多少時間,從開發到QA全部都要折騰無數遍。如果要信守承諾的話,就不能推遲交貨時間,否則超過最後期限後上司問起來,你將無法交代。

10. 這只是一個理論

像進化論和重力一樣,這些都只是一個理論。即使上述理由都是無效的,也沒有人曾經成功地證明,使用TDD的開發方法能快速高效地開發程式。因此這是一個見仁見智的問題。

 

【提示:iteye 的譯者漏掉原文最後的部分內容。】

Test yourself

Now, to test whether or not you should use test driven development, go over the above list. Count how many reasons apply to you. If you scored ten points, don’t use TDD. In fact, if you scored more than one (reason #8 might actually be legitimate), don’t write any code at all. Perhaps you’d be better served choosing a career that has fewer unknowns and moving parts. Perhaps paving roads?

Disclaimer: This post was written… Aw, just figure it out yourself!

 

相關文章