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

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

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

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

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

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

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

  1、沒有客戶

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

  2、客戶是挑剔的

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

  3、項(xiàng)目是簡單的

  如果團(tuán)隊(duì)可在短時(shí)間內(nèi)(不超過幾個(gè)星期)完成項(xiàng)目,且永遠(yuǎn)不會(huì)再對其進(jìn)行重新維護(hù),那么可維護(hù)性、可重用性和可擴(kuò)展性變得并不那么重要了,而花在這上的時(shí)間和精力是浪費(fèi)。

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

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

  5、文檔是完美的

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

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

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

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

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

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

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

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

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

  10、這只是一個(gè)理論

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