重要执行路径测试
在模块中应对每一条独立执行路径进行测试,单元测试的基本任务是保证模块中每条语句至少执行一次。此时设计测试用例是为了发现因错误计算、不正确的比较和不适当的控制流造成的错误,其中基本路径测试和循环测试是最常用且最有效的测试技术。
计算中常见的错误包括:
* 误解或用错了算符优先级;
* 混合类型运算;
* 变量初值错;
* 精度不够;
* 表达式符号错。
比较判断与控制流常常紧密相关,测试用例还应致力于发现下列错误:
* 不同数据类型的对象之间进行比较;
* 错误地使用逻辑运算符或优先级;
* 因计算机表示的局限性,期望理论上相等而实际上不相等的两个量相等;
* 比较运算或变量出错;
* 循环终止条件或不可能出现;
* 迭代发散时不能退出;
* 错误地修改了循环变量。
错误处理测试
一个好的设计应能预见各种出错条件,并预设各种出错处理通路,出错处理通路同样需要认真测试,测试应着重检查下列问题:
* 输出的出错信息难以理解;
* 记录的错误与实际遇到的错误不相符;
* 在程序自定义的出错处理段运行之前,系统已介入;
* 异常处理不当;
* 错误陈述中未能提供足够的定位出错信息。
边界条件测试
边界条件测试是单元测试中最后一项任务,也是最重要的一项任务。众所周知,软件经常在边界上失效,采用边界值分析技术,针对边界值及其左、右设计测试用例,很有可能发现新的错误。
单元测试方法
一般认为单元测试应紧接在编码之后,当源程序编制完成并通过复审和编译检查,便可开始单元测试。测试用例的设计应与复审工作相结合,根据设计信息选取测试数据,将增大发现上述各类错误的可能性。在确定测试用例的同时,应给出期望结果。
由于被测试的模块往往不是独立的程序,它处于整个软件结构的某一层上,被其他模块调用或调用其他模块,其本身不能单独运行,因此在单元测试时,应为测试模块开发一个驱动模块(driver)和(或)若干个桩模块(stub),如图5.7显示了一般单元测试的环境。

图5.7 单元测试环境
驱动模块的作用是用来模拟被测模块的上级调用模块,功能要比真正的上级模块简单得多,它接收测试数据并将这些数据传递到被测试模块,被测试模块被调用后,打印"进入-退出"消息。桩模块用来代替被测模块所调用的模块,用以返回被测模块所需的信息。
驱动模块和桩模块是测试使用的软件,而不是软件产品的组成部分,其编写需要一定的开发费用。若驱动和桩模块比较简单,实际开销相对低些。遗憾的是,仅用简单的驱动模块和桩模块不能完成某些模块的测试任务,这些模块的单元测试只能采用后面讨论的集成测试方法。
|