2.4 单元测试执行策略
在进行单元测试时,如果模块不是独立的程序,就需要设计辅助测试模块,有以下两种辅助模块。
驱动模块(Driver):所测模块的主程序。它接收测试数据,把这些数据传递给所测试模块,最后再输出测试结果。当被测试模块能完成一定功能时,也可以不要驱动模块。
桩模块(Stub):用来代替所测模块调用的子模块。
被测试模块、驱动模块和桩模块共同构成了一个测试环境。在增量集成的单元测试中,通常有两种方法:自顶向下的增量方式和自底向上的增量方式。
自顶向下的增量方式
它是模块按程序的控制结构,从上到下的组合方式。在增加测试模块时有先深度后宽度和先宽度再深度两种次序。如图2.1所示,按照先深度后宽度的顺序为:M1 M2 M5 M6 M3 M7 M4,按照先宽度后深度的顺序为:M1 M2 M3 M4 M5 M6 M7。
图2.1 自顶向下增量方式
自顶向下的测试步骤如下:
1.用主模块作为驱动模块,与之直接相连的模块用桩模块代替。
2.根据所选的测试次序,用下一个模块替换所用的桩模块;而新引入模块的直接下属模块用桩模块代替,构成新的测试对象。
3.为了避免引入新模块,产生新问题,需要进行必要的重复测试,即重复部分或全部已经进行过的测试。
4.所有模块是否已经组合到系统中,并完成测试?如果没有,则返回到2,重复进行;反之,则停止测试。
自顶向下的增量方式可以较早发现问题,如果出现问题能够及时纠正。在测试时不需要编写驱动模块,但需要桩模块。另外,如果高层模块对下层模块依赖性很大,需要返回大量信息,在用桩模块代替时,桩模块的编写比较复杂,必然会增加开销。
自底向上的增量方式
它是从最底层的功能模块开始,边组合边测试,从下向上地完成整个程序结构的测试。步骤如下:
1.将最底层的模块组合成能完成某种特定功能的模块组,为每个模块组设计驱动程序,用驱动程序来控制并进行测试。
2.按从下向上的方向,用实际模块替换相对应的驱动程序,组成新的模块组,再为该模块组设计驱动程序,用新的驱动程序进行控制和测试。
3.所有模块是否已经组合到系统中,并完成测试,如果没有,则返回2,重复进行;否则,停止测试。
自底向上的增量方式可以较早地发现底层关键性模块出现的错误。在测试时不需要编写桩模块,但需要驱动模块。另外,对程序中的主要控制错误发现较晚。