测试驱动介绍
1. 简介
测试驱动的英文:Test-Driven Development,简称TDD。
TDD的核心是:先测试再开发。
TDD的原则是:没有测试,不要写代码;只写正好能通过测试的代码等等。
TDD背后的思想:简单设计、代码就是文档、针对接口编程、迭代、重构
2. TDD的大致开发过程
3. TDD的价值
1. 一开始明确目标。保证是“做正确的事”
2. 对自己的代码会非常有信心
3. 支持重构,不要担心对现有代码的修改会破坏现有的功能;不会发生改一个BUG,产生10个BUG的问题;无用的代码敢于删除而不是留大段大段的注释
4. 减少了在测试上的投入。TDD是自己测试自己开发的代码,大大减少了测试人员的数量。
5. 质量会越做越好。一旦发现BUG,就补充测试程序使能发现这个BUG
6. 针对接口设计,提升设计水平
7. 可以取代详细设计
4. TDD的可行性
4.1 对TDD的一些疑问
1. 自己测试自己的开发,真的有用吗?
a) 有用。测试是从另一个角度思考问题,往往会发现一些从开发的角度难以发现的问题。
b) TDD不能取代代码审查
2. 开发人员的工作量变大了。以前只需要写开发代码,现在还需要写测试代码
a) 首先测试代码很简单,一般是由一些“断言”组成
b) 其次,从测试去考虑,能更加容易明确目标,从而能少走弯路,根据我自己的经验,用TDD后,我的开发代码基本是一次成功
c) 第三,TDD能有效减少debug时间,借助测试平台,能直接对后台类进行测试,如果没有TDD,只能运行程序,经过一系列的界面和操作(登录、视图界面、维护界面、输入、点击按钮)才能测试
d) 第四,TDD能大幅度降低维护量,而对多数的项目,维护的工作量并不比开发工作量小。一是因为有测试,代码质量提高,BUG少而维护自然少,二是因为有测试,改代码时不会缩手缩脚。
e) 另外,并不是所有的类都要写对应的测试类,只有业务类才需要。
f) 所以,结论是:没有增加,只有减少。
3. 有了TDD后,是否就不需要其它测试了?
a) 其它测试仍然需要,但可以大幅减少
b) TDD主要是针对后台,不支持对界面的测试(工具限制)。所以界面的美观、可用性仍然要靠人工测试。
4.2 TDD的难点
有这么多好处的东西,如果不需要付出一点代价,是不可能的,TDD是需要一些基础的:
1. 对开发人员的要求高了。测试代码虽然简单,但要知道怎么才能证明自己要开发的代码是正确的并不容易。
2. 要有一个工具支持。否则测试代码和开发代码怎么结合?
3. 要建立专门的TDD数据库。根据我的经验,TDD中最困难的部分就是测试数据。
4.3 可行性
当下面的两个条件具备时,TDD就是可行的
1. 开发人员理解了TDD的思想,认识到TDD的作用,相信TDD能给自己带来好处
2. 有合适的工具和指导