V模型体现了测试设计分层和测试执行分层的概念,本文以作者自身的理解谈谈测试执行分层,不过从实际项目运作情况来看,真正做到测试执行分层的并不多,这里原因有很多种,暂且不论。
1. UT
单元测试的对象是LLD中所划分定义的程序单元或模块,它也是单元测试用例设计中可测试的最大单元。该测试对象可能由一个或多个函数或者类组成,测试设计就是对测试对象进行测试用例设计。
UT的目的,是通过函数运行来检查模块代码对于LLD文档的顺从性,验证每个函数的输入输出响应,与它在详细设计文档中预先定义的是否一致。函数是产品开发实现的最基本单位,下一个实现单位是模块,从测试的角度看,希望UT完成后,每个函数都牢固可靠,下一步的IT测试将聚焦在函数之间配合能否实现分配需求,而不用担心函数本身的输入输出响应问题。
单元测试比较适合开发人员做。
2.IT
集成测试是指把若干个经过单元测试的单元组装到一起而进行的测试,集成测试应依据HLD,主要发现接口、依赖中的错误或不完善的地方。集成测试的对象为若干个单元测试对象的组合,至少为两个。
IT的目的,是根据模块设计对模块的分解,从已验证的函数开始,逐层向上集成,得到一个可运行的模块。
IT可以由开发人员做,也可以由测试人员做。
不难看出,UT是面向每一个单元的测试,IT是测试单元之间的接口,可以把UT/IT归为“单元级”测试。
3.ST
CMM定义的系统测试:系统测试是针对软件项目组所承担开发的软件系统进行的整体测试,将软件系统作为整体运行或实施明确定义的软件行为子集的测试。主要采用的测试方法是黑盒测试,即不管程序内部的实现逻辑,以检验输入输出信息是否符合规格说明书中有关需求规定的测试方法。可见ST的测试对象是规格说明书,更确切的说,是模块需求规格说明书,所以一般也称为MST。模块SRS文档给出了模块的输入输出的相应要求。MST后,每个模块是牢固可用的。
4.BBIT
BBIT为模块间接口测试,验证模块之间的接口能不能配合,有时和联调混在一起,其实目的并不相同。BBIT的目的,是根据系统设计对系统的分解,从已通过验证的模块开始,逐层向上集成,得到一个可运行的系统。而联调一般涉及软件、硬件或者不同产品间的配合测试。MST和BBIT可以归到“模块级”的测试,一个验证模块,一个验证模块间的接口。
以上UT/IT/MST/BBIT一般由开发人员完成,系统基本可以运行起来了,测试人员可以开展SDV、SIT、SVT了。
5.SDV
SDV虽然属于测试人员开展的系统测试,但是有点偏灰盒测试,因为SDV验证各子系统的配合是否满足设计需求(DR),对内部的实现还是关注的,验证多个模块集成以后是否满足设计需求。
6.SIT
SIT也是验证设计需求是否得以满足,与SDV不同的是,SIT完全把系统当作一个黑盒来测试,不关心内部具体的实现。实际应用中,SDV和SIT虽然都属于系统一级的测试,往往由不同项目组(子系统)的测试人员分别测试,他们只关注各自的子系统,所以还是把SDV和SIT归为“子系统级”的测试比较好。
7.SVT
SVT是验收测试,其测试对象是产品包需求OR。产品包需求给出了产品的范围,从产品可能的应用环境的角度刻画系统,SVT的目的就是确认(或验收)产品包需求给出的各种应用场景产品均能满足。
产品包需求不考虑内部实现的差异,SVT也是从整个系统的角度考虑包需求的各种应用场景,属于“系统级”的测试。
各个级别的测试描述完毕,回头再看看这个分层测试的模型图,不难发现以下几个特征:
1.基于系统架构的分解结构(系统-子系统-模块-单元),开发按照自顶向下的顺序逐层设计,测试按照自底向上的顺序逐层验证,这个分解结构在每一层或每一个阶段,将开发和测试过程统一起来。
2.在每一层,测试的对象是开发相应阶段设计的输出(包括需求和这个阶段的设计文档),测试的目的与开发相应阶段设计的思路是相辅相成的,所以决定每个阶段的测试如何开展、评价一个测试过程时,如果离开开发过程,只谈测试自身的话,是不系统、不全面的。
3.除了“系统级”的SVT测试以外,其他各层的测试均包含两个方面:一是对这个层每个构件的测试,有n个构件就要测试n次,二是这n个构件之间接口的测试。例如:nSDV(每个测试项目组的SDV是一个SDV)和SIT、nMST(每个开发项目组的MST是一个MST)和BBIT、nUT和IT。