1. 程式人生 > >TDD(測試驅動開發)學習一:初識TDD

TDD(測試驅動開發)學習一:初識TDD

首先說一下名詞解釋,TDD,英文名稱Test-Driven Development,中文名稱測試驅動開發,簡單的斷下句“測試/驅動/開發”,簡單的理解一下,就是測試驅動著開發,大白話就是說用一邊測試一邊來推動著專案的開發,類似我們平時說的一步一個腳印,做一件事就把他給做好,每一步都要認真的走下去,保質保量的完成專案。

TDD是敏捷開發中的一項核心實踐和技術,也是一種設計方法論。

TDD開發的優點:

1、可以保證程式碼的質量。可以對自己的所需要的業務功能的每一步設計進行驗證,並得到正確的結果,減少bug的出現的,特別對於複雜業務邏輯的專案,以小步慢走的方式,避免後期繁重的測試和維護工作。

       2、找到了重構的信心,必要時候你還可以痛痛快快的並且滿懷信心的對程式碼做一場大的變革。這樣我們的程式碼變得乾淨了,擴充套件性、可以維護性以及易理解性紛至沓來。

       3、在團隊建設中能夠進行分工,以可執行的形式文件化你的需求,迫使你分清職責隔離依賴以驅動你的設計,編織安全網以便將Bug扼殺在在搖籃狀態,防止其逃逸。不同於傳統開發(傳統的開發人員開發的軟體的測試是為了找出已經逃逸得bug,可能這個bug已經長成了毒瘤)。注:這兩種活動都是必要的,而且毫不衝突,互為補充。

       4、幫助你養成一個新的思維習慣,不光在你程式設計的道路上,在你的工作和生活中,你慢慢的會把自己的需求進行分析設計並不斷地驗證,最終更好去實現自己的人生目標。

TDD開發的缺點:

1、對於測試驅動不熟練或者喜歡偷懶的的人員,加大了程式碼的編寫量,測試程式碼是系統程式碼的兩倍或更多。

       2、可能不適合時間很緊的軟體開發,更適合於產品和平臺的開發。

TDD原則:

       獨立測試:不同程式碼的測試應該相互獨立,一個類對應一個測試類(對於C程式碼或C++全域性函式,則一個檔案對應一個測試檔案),一個函式對應一個測試函式。用例也應各自獨立,每個用例不能使用其他用例的結果資料,結果也不能依賴於用例執行順序。 一個角色:開發過程包含多種工作,如:編寫測試程式碼、編寫產品程式碼、程式碼重構等。做不同的工作時,應專注於當前的角色,不要過多考慮其他方面的細節。        測試列表:
程式碼的功能點可能很多,並且需求可能是陸續出現的,任何階段想新增功能時,應把相關功能點加到測試列表中,然後才能繼續手頭工作,避免疏漏。 測試驅動:即利用測試來驅動開發,是TDD的核心。要實現某個功能,要編寫某個類或某個函式,應首先編寫測試程式碼,明確這個類、這個函式如何使用,如何測試,然後在對其進行設計、編碼。       先寫斷言:編寫測試程式碼時,應該首先編寫判斷程式碼功能的斷言語句,然後編寫必要的輔助語句。 可測試性:產品程式碼設計、開發時的應儘可能提高可測試性。每個程式碼單元的功能應該比較單純,“各家自掃門前雪”,每個類、每個函式應該只做它該做的事,不要弄成大雜燴。尤其是增加新功能時,不要為了圖一時之便,隨便在原有程式碼中新增功能,對於C++程式設計,應多考慮使用子類、繼承、過載等OO方法。       及時重構:對結構不合理,重複等“味道”不好的程式碼,在測試通過後,應及時進行重構。       小步前進:軟體開發是複雜性非常高的工作,小步前進是降低複雜性的好辦法。

怎麼做TDD(關鍵5步)

  1. 加入一個新的測試
  2. 執行下新加的測試,看到它失敗(因為你還沒寫功能程式碼)
  3. 對開發程式碼做很小的修改,目的就是讓新加的測試通過 (注意這裡的目的)
  4. 執行所有的測試(test case),然後看到所有測試都通過了 (看到測試都變成綠色,一般都會小開心一下)
  5. 移掉重複的程式碼,對程式碼進行重構 (既包括功能程式碼,也包括測試程式碼。特別注意紅色的字串 一般會有重複,還有一些程式碼可以抽出來變成公用方法,測試程式碼中同樣的初始化和還原測試環境的程式碼,可以放到intilize和cleanup中去)

    而外還有一些步驟也是可以加入的,比方

  • 在寫測試程式碼前,先從需求出發,準備一個Test list (需要測到的功能的列表)。忘掉你該怎麼實現,那是後面的事情
  • 每測完一個就用橫線劃掉
  • 如果發現有漏掉的test 就加到這個列表中(列表測完你的功能也就完成了)

總結: 

 通過一上午的學習,對TDD(測試驅動開發)有了基本的理解,對TDD的帶來的優點有了初步的認識,接下來的學習中,我會轉變思想,以“測試先行”的原則來開發穩定高質量的程式碼,把寫測試像寫程式碼註釋一樣,深入骨髓。

參考資料:

由衷向以下部落格表示感謝,也以便以後查詢方便

http://www.cnblogs.com/xiadao521/p/4092846.html

http://blog.csdn.net/m13666368773/article/details/7006912

http://baike.baidu.com/link?url=pbvA3Y5wTfaUMJKHgKtSd3pNuWB08imkCRW0BTVAOc_9TZ5Z7mOn4T6No1Crxvb-Jmp1Wg4xr2uvRyi4cY3OoSqwgVNPkwqzJf-DrxTKQ9e