導(dǎo)讀:在作者看來帶動一個團隊發(fā)展并快速提高產(chǎn)品質(zhì)量的好方法有很多種。比如:測試驅(qū)動開發(fā)、行為驅(qū)動開發(fā)、驗收測試驅(qū)動開發(fā)。但TDD不是的,不是每個項目都適用。

  文章內(nèi)容如下:

  在本文內(nèi)容之前,先來看幾個相關(guān)的開發(fā)方法:

  ● 測試驅(qū)動開發(fā):英文全稱Test-Driven Development,簡稱TDD,是一種不同于傳統(tǒng)軟件開發(fā)流程的新型的開發(fā)方法。它要求在編寫某個功能的代碼之前先編寫測試代碼,然后只編寫使測試通過的功能代碼,通過測試來推動整個開發(fā)的進行。這有助于編寫簡潔可用和高質(zhì)量的代碼,并加速開發(fā)過程。

  ● 行為驅(qū)動開發(fā):英文全稱Behavior Driven Development,簡稱BDD,是一種敏捷軟件開發(fā)技術(shù),鼓勵開發(fā)人員、質(zhì)量保證和非技術(shù)或商業(yè)參與者都參與到項目中來。

  ● 驗收測試驅(qū)動開發(fā):英文全稱Acceptance Test Driven Development,簡稱ATDD,是一種協(xié)同需求發(fā)現(xiàn)方法,利用示例和可自動的測試來明確需求,創(chuàng)建可執(zhí)行的規(guī)格。

  在我看來,這些都是帶動一個團隊發(fā)展并快速提高產(chǎn)品質(zhì)量的好方法。但TDD不是的,不是每個項目都適用。以下十種情況不建議寫測試,如果你的項目符合一種以上,那么TDD以及其他敏捷技術(shù)都是多余的。

  1、沒有客戶

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

  2、客戶是挑剔的

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

  3、項目是簡單的

  如果團隊可在短時間內(nèi)(不超過幾個星期)完成項目,且永遠不會再對其進行重新維護,那么可維護性、可重用性和可擴展性變得并不那么重要了,而花在這上的時間和精力是浪費。

  4、架構(gòu)是完美的

  如果你的架構(gòu)不需再改進,那么沒有必要讓它具有可擴展性。TDD的優(yōu)勢是增量開發(fā)流程以及可擴展架構(gòu),而如果項目的架構(gòu)已經(jīng)夠完美了,則TDD顯得畫蛇添足了。

  5、文檔是完美的

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

  6、團隊沒有大的變化并且團隊內(nèi)的人記憶力不錯

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

  7、“Done”意味著代碼檢查完畢

  很多團隊有對Done(DOD)的定義,通常指用戶可以接收和運行(編碼、測試、部署、記錄等)軟件的情況。然而,大部分更喜歡簡單且容易實現(xiàn)的定義。比如說每個成員完成自己的任務(wù)定義為“Done”。而且對于一個項目來說,如果不需要為產(chǎn)品所有者/經(jīng)理/用戶測試代碼,則應(yīng)盡快進入下一階段。

  8、你的工作是寫代碼而不是測試

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

  9、不停地調(diào)試導(dǎo)致測試時間過長

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

  10、這只是一個理論

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