1、测试驱动开发的定义
测试驱动开发(Test-driven development)是现代 计算机软件开发方法的一种。利用测试来驱动软件程序的设计和实现。测试驱动开始流行于20世纪90年代。测试驱动开发是极限编程中倡导的程序开发方法,方法主要是先写测试程序,然后再编码使其通过测试。测试驱动开发的目的是取得快速反馈并使用“illustrate the main line”方法来构建程序。
软件开发可以从两个方面去看待:实现的功能和质量。测试驱动开发更像两顶帽子思考法的开发方式,先戴上实现功能的帽子,在测试的辅助下,快速实现正确的功能;再戴上重构的帽子,在测试的保护下,通过去除冗余和重复的代码,提高代码重用性,实现对质量的改进。可见测试在测试驱动开发中确实属于核心地位,贯穿了开发的始终。
2、测试驱动开发技术的优点
1) 提高代码质量。由于功能代码的高质量和完善的测试用例集,增强了开发者信心,从而赢得他人信任。
2) 改进设计。TDD保证了功能代码的可测试性,降低了耦合度,改善组件对象模型,使设计在开发过程中逐步完善和改进。
3) 为功能代码提供良好的文档,并能维护代码和文档的同步。敏捷宣言主张:能够运行的软件胜过面面俱到的文档。测试用例集就是一份准备可靠,且能运行的文档。
4) 在一定程度上可代替程序调试。当每个单元测试关注每一个具体功能时,问题被更早和更好地避免。另外调试是手动而不可重复,TDD的测试用例集则是自动可回归的。
5) 有效的质量控制和项目管理。对管理者来说,通过单元测试每日构建的结果,每天都清楚的知道项目的质量和开发进度。
3、测试驱动开发技术的核心
1)快速响应需求变更
当需求变更时,首先更改测试代码,其次经过多次的重构,实现对需求变更的响应
只需要更改一次测试代码
2)优化程序设计
通过重构,减少代码冗余,优化代码
通过测试代码的反馈,保持设计的松耦合性
3)保证软件开发过程质量
测试驱动开发的每个单元模块都是经过测试的,软件开发过程的质量得到保证
变调试为测试
4、测试驱动开发中的测试
测试驱动开发中的测试和一般意义上单元测试的区别。一般意义上的单元测试是对实现了的功能的验证,功能和接口已经在此以前就完毕,属于测试的范畴;而测试驱动开发中开发者进行的单元测试时,需要考虑被实现的模块的功能和接口,在单元测试完毕以后,模块的功能和接口的设计和推敲基本完毕,尔后,开发者在测试的辅助下实现接口及其对应的功能,这里的单元测试属于需求分析和详细设计的范畴,在代码基本完毕以后,这些测试也成为单元测试的一个部分。
思路一下子清楚起来,TDD其实不只是“红——绿——重构”,它还是与设计相关的:在动手之前,还是要有一定的设计,而且,在设计中要考虑测试的问题。终于解开了心中的困惑,现在的你,对于TDD有了一个新的认识,虽然这个认识不见得是什么终极真理,但至少是通过自己的思考得来的,这让你更加相信实践出真知的道理。
5、测试驱动开发的实现过程
在开发功能代码之前,先编写测试代码。也就是说在明确要开发某个功能后,首先思考如何对这个功能进行测试,并完成测试代码的编写,然后编写相关的代码满足这些测试用例。然后循环进行添加其他功能,直到完成全部功能的开发。
测试驱动开发的基本过程如下:
|