一 TDD是什麼?
TDD(Test-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節;