测试驱动开发首先是一种分析方法,它迫使程序员仔细思考要做什么和不要做什么,而不是如何具体的实现。特别是各种例外的情况,并用程序语言正式的写下来。这就好像在程序员的任务和程序员之间签订了一个清晰的正式合同。
测试驱动开发是一种设计方法。Unit Test测试是一段程序,而不是一个想法。程序员必须清晰的定义程序的界面才能写出它的Unit Test。而这时程序员是不知道也不需知道里面的具体逻辑是如何实现的。程序员只需要考虑Class的接口和功能。
测试驱动开发是一种质量控制方法。
测试驱动开发是一种重构和优化的方法。
测试驱动开发是把需求分析,设计,质量控制量化的过程。
测试驱动开发的优点:
快乐工作的基础就是对自己用信心,对自己的工作成果有信心。测试驱动开发提供的测试程序集就可以作为信心的来源。
在开发中采用TDD,可以有效的避免过度设计和开发。如果程序员不愿为一个Method,那么这个Methdo多半是不需要的。
对程序员来说,通过运行Unit Test和Function Test, 每天下班的时候都可以清楚的知道自己的代码是work的。
对管理层来说,通过Nightly Test的结果,每天一早都清楚的知道项目的质量和开发进度。
开发小组间降低了交流成本,提高了相互信赖程度。
为利用你成果的人提供Sample,无论它是要利用你的源代码,还是直接重用你提供的组建。
系统可以与详尽的测试集一起发布,从而对程序的将来版本的修改和扩展提供方便。
TDD给了我们自信,让我们见天的问题今天解决,明天的问题明天解决,今天不能解决明天的问题,因为明天的问题今天还没有出现(没有TestCase),除非有TestCase否则我决不写任何代码;明天也不必担心今天的问题。
大部分时间代码处在高质量状态。
事实上提高了开发效率。
发现比传统测试方式更多的Bug.
避免了令人头痛的调试和节约了调试的时间。
如何做测试驱动开发??
在开发一个新的功能之前:
首先确定你要做什么(不是要如何做!!)比如说一个论坛的增加用户的功能,我们需要有一个method来增加一个用户:
public void addAccount(Account account)
当然包括成功增加一个用户(在数据库中插入一条记录)还包括如果已经由一个相同的用户,应该返回一个用户已存在的消息。
然后为这个功能(method)写单元测试例子(Unit Test)单元测试例子要覆盖这个Method的做什么。所以我们至少有了两个测试例子:
Test Case 1:测试成功增加一个用户
Test Case 2:测试增加一个已存在的用户
其他边缘情况测试:
Test Case 3: 传入的Account对象为NULL
写Production代码:
我们清楚知道这段代码需要做什么。因为我们有另一段代码摆在那里,清晰的表名这段代码的Contracts。
运行Unit Test
如果顺利通过,你已经很好的完成了你的任务。
如果没有通过,修补代码知道能通过Unit Test为止。
lfm课件学习笔记