2008-08-07 31 views
48

很多人在開始編寫代碼之前都會談論爲代碼編寫測試。這種做法通常稱爲測試驅動開發或TDD。通過這種方式編寫軟件我可以獲得哪些好處?我如何開始這種做法?爲什麼我應該練習測試驅動開發,我應該如何開始?

+0

請查看我對已經問過的同一問題的回答。 [詳細解答此問題](http://stackoverflow.com/questions/62625/how-do-you-know-what-to-test-when-writing-unit-tests#69259) – eroijen 2008-09-16 04:06:41

+0

我遲到了在這裏,但我想把我的字節。練習TDD的最佳方法是使用Katas。這裏有很好的測試卡塔斯:https://github.com/garora/TDD-Katas – 2015-06-26 14:14:44

回答

30

有很多的好處:

  • 你得到即時反饋如果你的代碼正在工作,所以你可以更快地發現錯誤
  • 通過看到測試從紅色變爲綠色,你知道你有一個工作迴歸測試和工作代碼
  • 你有信心重構現有的代碼,這意味着你可以清理代碼而不用擔心它會破壞什麼
  • 在你到底有沒有迴歸測試套件,可以自動在運行構建,給你更多的信心,你的代碼是固體

最好的方式開始是剛剛開始。所有關於測試驅動開發都有很好的book by Kent Beck。從新代碼開始,不要擔心舊代碼......只要您覺得需要重構一些代碼,爲現有功能編寫測試,然後重構它,並確保測試保持綠色。另外,請閱讀this great article

+2

到最後一篇文章(單元測試技巧)的鏈接已過期。這裏是鏈接到新的文章:http://devver.wordpress.com/2008/07/07/tips-for-unit-testing/ – 2010-06-30 19:56:48

3

好處部分有recently been covered,至於從哪裏開始......在小型企業系統中,沒有太多未知因素,所以風險很低。如果您還不知道測試框架(如NUnit),請先學習一下。否則,從編寫你的第一個測試開始:)

+0

鏈接已損壞! – 2016-11-08 11:27:58

0

在我看來,最重要的事情是,它明確允許你看看你的代碼是否按照它應該做的。這似乎是顯而易見的,但它是超級容易,不管你本來的目標誤入歧途運行,因爲我已經在過去的發現:對

2

優勢

  1. 你弄清楚如何劃分你的代碼
  2. 你希望你的代碼做什麼你找出
  3. 你知道應該如何行事,並在路上,如果重構破壞任何東西
  4. 讓你養成習慣,確保你的代碼總是知道它應該做什麼

快速入門

只要做到這一點。爲你想要做的事寫一個測試用例,然後編寫應該通過測試的代碼。如果你通過測試,那麼很好,你可以繼續寫代碼總是失敗的例子(例如2 + 2不應該等於5)。

一旦你所有的測試通過,寫你的實際業務邏輯來做你想做的事情。

如果您從頭開始,請確保您找到一個易於使用的良好測試套件。我喜歡PHP,所以PHPUnit或SimpleTest運行良好。幾乎所有流行的語言都有一些xUnit測試套件可用於幫助構建和自動化測試。

0

您可能正在敏捷或瀑布環境中工作。也許你有明確的程序,經過多年努力,經過了戰鬥測試,或者你剛開始創業。無論什麼樣的情況是,你可能面臨至少一個,如果不是更多,下面痛苦,問題,或導致未成功交付:

在創建過程中你的團隊的
  • 部分保持圈外的要求,規格或用戶故事
  • 大多數,如果不是全部,你的測試是手動的,或者你沒有測試所有
  • 即使你進行自動化測試,他們沒有發現真正的問題
  • 當他們爲項目提供實際價值已爲時已晚時,自動化測試將被編寫並執行
  • 總有一些比奉獻的時間來測試
  • 團隊更迫切測試,開發和功能分析部門之間的分裂,他們往往不同步
  • 無力的重構,因爲恐懼代碼東西將被打破
  • 維護成本太高
  • 的時間到市場太大
  • 客戶端不覺得什麼是交付的是什麼,他們問
  • 文檔是永遠保持最新
  • 你害怕部署到生產環境,因爲結果是未知
  • 你往往是不能夠部署到生產環境,因爲迴歸測試花費太多時間試圖找出花費太長的時間來運行
  • 球隊帶來什麼某些方法或類別

測試驅動開發不會神奇地解決所有這些問題。相反,它使我們走上了尋求解決方案的道路。沒有銀彈,但如果有一種開發實踐可以在如此多的層面上有所作爲,那麼這種實踐就是TDD。測試驅動的開發加快了上市時間,使得重構更容易,有助於創建更好的設計,並促進更寬鬆的耦合。在直接利益的頂端,TDD是許多其他實踐的先決條件(連續交付是其中之一)。更好的設計,精心編寫的代碼,更快的上市時間,最新的文檔和可靠的測試覆蓋率,是您通過應用TDD可以實現的一些結果。

相關問題