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