测试驱动开发(TestDriven Development,TDD)的基本思路是通过测试推进整个的开发工作,并不只是单纯的测试工作。利用这种测试方法时,若要完成某个功能,某个类,首先不是编译正式的代码而是先编写测试代码,考虑其如何使用、如何测试。然后在对其进行设计、正式编码。TDD具有很强的目的性,是在直接结果的指导下开发生产代码,然后不断围绕这个目标去改进代码,其优势是高效和去冗余的。所以其特点应该是由需求得出测试,由测试代码得出生产代码。
为什么要使用TDD?
1、需求。在开发过程中,需求是很难明确描述和易变的一个东西,这里的需求指的既是用户的需求也是代码的使用需求,由于在前期的时候没有对这段代码的需求进行明确藐视,因此在开发过程中开发人员会因为需求的变动要经常修改或者扩展一个类和接口,这是很令人头疼的。TDD就是在没有正式编写代码之前就编写测试用例,先考虑代码的需求(包括功能,接口,过程等),这个描述是独一无二的,而且是可以验证的。
2、TDD另外一个重要的作用就是保障代码的准确性,能够迅速发现和定位Bug。
TDD需要遵循的规则
①写一个单元测试去描述程序的一个方面。
②运行它应该会失败,因为程序还缺少这个特性。
③为这个程序添加一些尽可能简单的代码保证测试通过。
④重构这部分代码,直到代码没有重复、代码责任清晰并且结构简单。
⑤持续重复这样做,积累代码。
TDD的流程
1) 明确当前要完成的功能。可以记录成一个TODO 列表。
2) 快速完成针对此功能的测试用例编写。
3) 测试代码编译不通过。
4) 编写对应的功能代码。
5) 测试通过。
6) 对代码进行重构,并保证测试通过。
7) 循环完成所有功能的开发。
衡量是否使用了TDD的一个重要标准是测试对代码的覆盖率,覆盖率在80%以下说明一个团队没有充分掌握TDD,当然高覆盖率也不能说一定使用了TDD,这仅仅是一个参考指标。