以这样的思路进行软件开发,可以保证程序中的每一项功能都有测试来验证它是正确的,而且每当功能被无意修改时, 测试程序会发现。同时,也使我们获得了一个新的观察点,从对程序调用者有利的视角来观察我们的程序,这使得我们在关心程序功能的本身还能够对接口予以足够感悟测试驱动开发的关注,使得其更容易被调用。另外,这种思路下的代码,将变得更加易于调用,也就必须使其与其它代码保持低耦合性。并且,当你想复用这些模块时,测试代码给出了很好的示例。这一切,使得软件开发工作的质量一下子变得有保障了。
因此,测试驱动开发的精髓在于: 将测试方案设计工作提前,在编写代码之前先做这一项工作; 从测试的角度来验证设计,推导设计; 同时将测试方案当作行为的准绳,有效地利用其检验代码编写的每一步,实时验证其正确性,实现软件开发过程的"小步快走"。
实践测试驱动开发
下面,我就结合一个实际的小例子,来说明如何进行"测试驱动开发"。本实例在J2SE SDK 1.4.2环境下开发,以及配套工具JUnit 3.8.1。
任务简述
队列是一种在程序开发中十分常用的数据结构,在此我就以编写一个实现队列功能的类--Queue为例进行说明。该类将实现以下基本运算:
判断队列是否为空:empty()
插入队列(即在队列未尾增加一个数据元素):inqueue(x)
出队列(也就是将队列首数据元素删除):outqueue()
取列头(也就是读者队列首数据元素的值):gethead()
清空队列(也就是将队列的所有数据元素全删除): clear()
查询x在队列中的位置:search(x)
测试案例分析
在测试驱动开发实践中,第一步就是考虑测试方案,通过分析该类的功能,我们可以得到以下测试案例:
1) 队列为空测试
TC01: 队列新建时,应为空;
TC02: 清空队列后,应为空;
TC03: 当出队列操作次数与插入队列操作次数一样时,应为空;
2) 插入队列测试:
TC04: 插入队列操作后,新数据元素将插入在队列的未尾;
TC05: 插入队列操作后,队列将一定不为空;
3) 出队列测试
TC06: 出队列操作后,第一个数据元素将被从队列中删除;
4) 取队头测试
TC07: 取队头操作将获得队列中的第一个数据元素。
5) 清空队列测试
TC08: 清空队列操作后,队列将为空队列;
文章来源于领测软件测试网 https://www.ltesting.net/