1.4.3 软件测试过程模型
就像软件开发有过程模型一样,软件测试也有过程模型。软件测试过程模型是对测试过程的一种抽象,用于定义软件测试的流程和方法。
测试是一个过程,首先确定在测试过程中应该考虑到哪些问题,如何对测试进行计划,测试要达到什么目标,什么时候开始,在测试中要用到哪些信息资源。其次就是软件产品如何被测试(制作测试用例),之后建立测试环境,执行测试,最后再评估测试结果,检查是否达到已完成测试的标准,并报告进展情况。随着测试过程管理的发展,软件测试专家通过实践总结出了很多很好的测试过程模型。这些模型将测试活动进行了抽象,并与开发活动有机地进行了结合,是测试过程管理的重要参考依据。它的提出和发展反映了人们对软件过程的某种认识观,体现了人们对软件过程认识的提高和飞跃。
1. V模型
V模型是最具有代表意义的测试模型。V模型最早是由Paul Rook在20世纪80年代后期提出的,旨在改进软件开发的效率和效果。V模型反映出了测试活动与分析设计活动的关系。在图1.7中,从左到右描述了基本的开发过程和测试行为,非常明确地标注了测试过程中存在的不同类型的测试,并且清楚地描述了这些测试阶段与开发过程期间各个阶段的对应关系。箭头代表了时间方向,左边下降的是开发过程各阶段,与此相对应的是右边上升的部分,即测试过程的各个阶段。
图1.7 软件测试V模型
V模型指出,单元测试和集成测试应检测程序的执行是否满足软件设计的要求;系统测试应检测系统功能、性能的质量特性是否达到系统要求的指标;验收测试确定软件的实现是否满足用户需要或合同的要求。
但是V模型也存在一定的局限性,它仅仅把测试作为在编码之后的一个阶段,是针对程序运行的寻找错误的活动,而忽视了测试活动对需求分析、系统设计等活动的验证和确认的功能。
2. W模型
W模型由Evolutif公司提出,相对于V模型,W模型增加了软件开发各个阶段中应同步进行的验证和确认活动。验证就是要用数据证明是不是在正确地制造产品,强调的是过程的正确性;确认就是要用数据证明是不是制造了正确的产品,强调的是结果的正确性。W模型如图1.8所示,W模型由2个V型模型组成,分别代表测试过程与开发过程,明确表示出了测试与开发的并行关系。
图1.8 软件测试W模型
W模型强调测试伴随着整个软件开发周期,而且测试的对象不仅仅是程序,需求、设计等同样需要测试,也就是说,测试与开发是同步进行的。W模型有利于尽早地全面地发现问题,例如,需求分析完成后,测试人员就应该参与到对需求的验证和确认活动中,以尽早地找出缺陷所在。同时,对需求的测试也有利于及时了解项目难度和测试风险,及早制订应对措施,这将显著减少总体测试时间,加快项目进度。
但是W模型也存在局限性。在W模型中,需求、设计、编码等活动被视为串行的,同时,测试和开发活动也保持着一种线性的前后关系,上一阶段完全结束,才可正式开始下一个阶段工作。这样就无法支持迭代的开发模型。对于当前软件开发工作复杂多变的情况,W模型并不能解除测试管理面临的困惑。
3. X模型
X模型的左边描述的是针对单独程序片段所进行的相互分离的编码和测试,此后将进行频繁的交接,通过集成最终成为可执行的程序,然后再对这些可执行程序进行测试。己通过集成测试的成品可以进行封装并提交给用户,也可以作为更大规模和范围内集成的一部分。多根并行的曲线表示变更可以在各个部分发生。由图1.9中可见,X模型还定位了探索性测试,这是不进行事先计划的特殊类型的测试,这一方式往往能帮助有经验的测试人员在测试计划之外发现更多的软件错误。但这样可能对测试造成人力、物力和财力的浪费,对测试员的熟练程度要求比较高。
图1.9 软件测试X模型
4. H模型
V模型和W模型均存在一些不妥之处。如前所述,它们都把软件的开发视为需求、设计、编码等一系列串行的活动,而事实上,这些活动在大部分时间内是可以交叉进行的,所以,相应的测试之间也不存在严格的次序关系。同时,各层次的测试(单元测试、集成测试、系统测试等)也存在反复触发、迭代的关系。
为了解决以上问题,有专家提出了H模型。它将测试活动完全独立出来,形成了一个完全独立的流程,将测试准备活动和测试执行活动清晰地体现出来,如图1.10所示。
图1.10 软件测试H模型
图1.10仅仅给出了在整个生产周期中某个层次上的一次测试“微循环”。图中标注的其他流程可以是任意的开发流程,例如设计流程或编码流程。也就是说,只要测试条件成熟了,测试准备活动完成了,测试执行活动就可以进行。
H模型揭示了软件测试是一个独立的流程,贯穿产品整个生命周期,与其他流程并发地进行。H模型指出软件测试要尽早准备,尽早执行。不同的测试活动可以是按照某个次序先后进行的,但也可能是反复的,只要某个测试达到准备就绪点,测试执行活动就可以开展。