一個實例搞懂TDD(測試驅動開發)

一 TDD是什麼?

TDDTest-Driven Development)是敏捷開發中的一項核心實踐和技術,也是一種設計方法論,其基本思想是:在明確要開發某個功能後,在開發功能代碼之前,先編寫測試代碼,然後編寫功能代碼並用測試代碼進行驗證,如此循環直到完成全部功能的開發。

 

二 TDD實戰方法舉例

爲了弄清楚TDD的思想和原理,現假設一個需求場景,並運用TDD的方法實現該需求。

需求描述:

實現一個檢查給定數字是否爲質數的函數(is_prime)

利用TDD的思想實現該需求的步驟如下:

1.       分析需求:

A.      接收一個參數,且爲數值類型;

B.      判斷該數值是否爲質數,返回bool值;

 

2.       設計測試用例(TDD的核心:開發功能代碼前先實現測試代碼):

assert is_prime(5) #1
assert is_prime(8) #2
assert is_prime(0) #3
assert is_prime(1) #4
assert is_prime(-3)#5


3.       開發測試代碼:

def test_is_prime():
    assert is_prime(5) #1
    assert not is_prime(8) #2
    assert not is_prime(0) #3
    assert not is_prime(1) #4
    assert not is_prime(-3) #5


4.       開發功能代碼(使用測試代碼驗證功能代碼,驅動功能完善):


# 開發功能代碼 標記版本爲:v1
def is_prime(number):
    for element in range(2,number):
        if number % element == 0:
            return  False
    return True

 

使用測試代碼對V1版本的功能代碼進行測試:

 if __name__ == '__main__':
    test_is_prime() #執行測試用例檢查函數實現是否正確


         測試結果展示用例#3檢查出功能實現存在缺陷:

Traceback (most recent call last):

  File " TDD實戰方法介紹.py", line 28, in test_is_prime

    assert not is_prime(0) #3

AssertionError

 


因測試用例#3發現缺陷,需要修復該缺陷,修復後的實現版本標記爲V2,如下:

 # 測試用例#3 發現 is_prime存在缺陷,質數不能爲0或1,修改後,標記版本爲:V2
  def is_prime(number):
     if number in (0,1): #修復#3用例發現的缺陷
        return  False
     for element in range(2,number):
        if number % element == 0:
            return  False
     return True

  

 再次使用測試代碼對V2版本的功能代碼進行測試:

  if __name__ == '__main__':
      test_is_prime() #執行測試用例檢查函數實現是否正確


         測試結果展示用例#5檢查出功能實現存在缺陷:

Traceback (most recent call last):

  File " TDD實戰方法介紹.py", line 28, in test_is_prime

    assert not is_prime(0) #5

AssertionError

 


因測試用例#5發現缺陷,需要修復該缺陷,修復後的實現版本標記爲V3,如下:

 # 測試用例#5 發現 is_prime存在缺陷,質數不能爲負數,修改後,標記版本爲:V3
 def is_prime(number):
   if number <0 or number in (0,1): #修復#5用例發現的缺陷
      return  False
   for element in range(2,number):
      if number % element == 0:
         return  False
   return True


  再次使用測試代碼對V3版本的功能代碼進行測試:

  if __name__ == '__main__':
      test_is_prime() #執行測試用例檢查函數實現是否正確


本次測試用例全部通過,功能實現在有限用例的驗證下已符合需求。

 


三 總結

本文通過一個實例對TDD(測試驅動開發)的思想進行了講解,TDD的基本思想是開發功能代碼前,先開發測試代碼,並用測試代碼驗證功能實現是否滿足需求或存在缺陷,在測試代碼的驅動下優化功能代碼的開發;TDD的實施手段是單元測試,通過上述實例,也能清楚認識到,在每次版本改動後,使用測試用例驗證了版本修復情況,同時也驗證了本次改動是否引起迴歸問題。由此,TDD中測試代碼的作用:在被測代碼發生改動後,執行單元測試用例即可驗證本次改動是否對函數原有功能造成影響,是未來函數重構的信心保證。


四 其他資源


關於TDD:請參看http://i.youku.com/weiworld521 22節;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章