一 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节;