初步認識TDD


  TDD,測試驅動開發(Test Driven Development)是極限編程中倡導的程序開發方法,以其倡導先寫測試程序,然后編碼實現其功能得名。本文將對TDD有一個較為系統的認識。

   基礎屬性

  起源:20世紀90年代。

  性質:一種由極限編程倡導的程序開發方法。

  中心思想:先寫測試程序,然后編碼實現其功能。

  目的:取得快速反饋並使用“illustrate the main line”方法來構建程序。

   開發方式

  1、戴兩頂帽子的開發方式

  (1)戴實現功能的帽子,在測試的輔助下,快速實現其功能。

  (2)戴上重構的帽子,在測試的保護下,通過去除冗余的代碼,提高代碼質量。

  2、中心思想

  測試驅動着整個開發過程。

  (1)驅動代碼的設計和功能的實現。

  (2)驅動代碼的再設計和重構。

   測 試

  1、特征

  測試驅動開發是需求分析和詳細設計的范疇,在代碼基本完畢以后,並且這些測試也成為單元測試的一個部分。

  2、要點

  可讀性甚至比生產代碼更重要,明確,簡潔,足夠的表達力。

  3、一般模式

  構造數據 — 操作數據 — 檢驗數據

  4、遵循的規則

  (1)單個測試中斷言數量應該最小化,可以快速方便地理解其結論。

  (2)每個測試一個概念,即每個測試函數只做一件事。

  (3)F.I.R.S.T原則

    快    速(First):能夠快速運行。

    獨    立(Independence):可單獨運行每個測試,也就是說可以任何順序運行測試。

    可重復(Repeat):在任何環境中測試均能通過。

    自動驗證(Spontaneous Verification):應有布爾值輸出。

    及    時(Timely):應在生產代碼之前編寫。

   TDD三定律

  1、在編寫不能通過的單元測試前,不可編寫生產代碼。

  2、只可編寫剛好無法通過的單元測試,不能編譯也算不通過。

  3、只可編寫剛好足以通過當前失敗測試的生產代碼。

  總的來說就是先寫測試再寫生產代碼,寫一個測試就應該立即寫它的實現代碼。

   評 價

  1、正面

  (1)可以有效避免過度設計帶來的浪費。

  (2)可以讓開發者在開發中擁有更全面的視角。

  (3)確保所有需求都能被照顧到。

  2、負面

  (1)過度關注用例和測試案例,而不是設計本身。

  (2)可能會導致單元測試的覆蓋度不夠,比如可能缺乏邊界測試。

  (3)放慢開發實際代碼的速度。

  (4)對於GUI,資料庫和Web應用而言,構造單元測試比較困難,若強行構造單元測試,反而會給維護帶來額外的工作量。

  (5)test case  並沒有那么好寫,如果說我們開發的Test Case是用來保證我們代碼實現的正確性,那么,誰又來保證我們的Test Case的正確性呢?

   我的感悟

  使用TDD完成過一個小游戲項目,感覺TDD的開發方式讓我覺得有了另一種思維開發方式,從這個項目的各個功能點來寫測試,並通過測試來實現我們的生產代碼。以前完成一個項目是自上而下的思維,就是站在一個宏觀的角度,來全局總覽這個項目,那么最開始的時候就得考慮很多,這個時候最容易陷入細節誤區了,即會細化到某些細節難以控制自己的思維。現在接觸TDD之后,給我的感覺就是自下而上了。不考慮全局的東西,我一個小功能一個小功能的實現,曾經是從樹頂來做,現在是從樹根了,每一個根節點實現了我往上一層一層加起來,最后就是一棵樹了,哈哈~

 

ps:本文內容若是有誤或者迷糊,還請指正或指出。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM