构建理想的模块自测结构[1] 软件测试
软件测试的工作量很大(业界统计达到40% 到60%的总开发时间),而又有很大部分适于自动化,因此,测试的改进会对整个开发工作的质量、成本和周期带来非常显著的效果。
极限编程(XP)中推荐的自动化单元测试,是指在编写代码之前先写好测试代码,代码编到一定阶段就用写好的测试代码进行测试。自动化单元测试可以带来如下好处:
由于测试代码(测试用例)的不断增加,这些测试总让我们写出的代码往正确的方向靠拢,使我们不至于重犯以前的错误。
由于可以实现自动测试,所以可以很好的解决人工很难进行的回归测试问题。
我们沿着“建立测试=>令测试通过=>再建立测试=>再令测试通过”的模式,一步一步地把整个程序正确地开发出来。
1.测试代码的几个关键环节
对测试代码进行概括性分析,可以发现测试代码都具有类似的结构,每一个测试用例的执行都要包括测试数据初始化、运行要测试的代码、验证测试结果正确性三部分,见图1-1。
图1-1 测试代码的一般性流程
由于测试代码一般都包含了图1-1中的三部分,我们要改善测试代码使之具有良好的结构只要从这三方面入手即可。
1)将测试数据和测试结果从测试代码中分离出来
在采用CXXUNIT系列测试工具开发测试代码时,发现一般编程人员都是测试用例和测试代码混杂在一起,同样测试结果也是和测试代码混杂在一起,这样就导致测试用例和测试结果的管理非常困难,因为要管理每个用例的数据和结果实际上就是去管理这些代码。而且对于一个函数(或功能) 每增加新测试用例,就要多出一份类似的代码,代码的逻辑实际上都是一致的,和以前测试代码的不同点就是在初始化数据、测试结果的不同,这实际上也导致了代码的重复。
我们可以将测试数据和测试结果从测试代码中分离出来,使得某一个函数(或功能)的测试代码就一份,这一份测试代码应可以进行多组测试数据的测试,可以进行多组测试结果的验证。