1.4 软件测试与软件开发

软件开发与软件测试都是软件项目中非常重要的组成部分,软件开发是生产制造软件产品,软件测试是检验软件产品是否合格,两者密切合作才能保证软件产品的质量。

1.4.1 软件测试与软件开发的关系

软件中出现的问题并不一定都是由编码引起的,软件在编码之前都会经过问题定义、需求分析、软件设计等阶段,软件中的问题也可能是前期阶段引起的,如需求不清晰、软件设计有纰漏等,因此在软件项目的各个阶段进行测试是非常有必要的。测试人员从软件项目规划开始就参与其中,了解整个项目的过程,及时查找软件中存在的问题,改善软件的质量。软件测试在项目各个阶段的作用如下所示。

(1)项目规划阶段:负责从单元测试到系统测试的整个测试阶段的监控。

(2)需求分析阶段:确定测试需求分析,即确定在项目中需要测试什么,同时制订系统测试计划。

(3)概要设计与详细设计阶段:制订单元测试计划和集成测试计划。

(4)编码阶段:开发相应的测试代码和测试脚本。

(5)测试阶段:实施测试并提交相应的测试报告。

软件测试贯穿软件项目的整个过程,但它的实施过程与软件开发并不相同。软件开发是自顶向下、逐步细化的过程,软件计划阶段定义软件作用域,软件需求分析阶段建立软件信息域、功能和性能需求等,软件设计阶段选定编程语言、设计模块接口等;软件测试与软件开发过程相反,它是自底向上、逐步集成的过程,首先进行单元测试,排除模块内部逻辑与功能上的缺陷,然后按照软件设计需求将模块集成并进行集成测试,检测子系统或系统结构上的错误,最后运行完整的系统,进行系统测试,检验其是否满足软件需求。

软件测试与软件开发的关系可用图1-11表示,其中图1-11(b)为图1-11(a)的细化。

029-00

图1-11 软件测试与软件开发的关系

1.4.2 常见的软件测试模型

在软件开发过程中,人们根据经验教训并结合未来软件的发展趋势总结出了很多软件开发模型,如瀑布模型、快速原型模型、迭代模型等,这些模型对软件开发过程具有很好的指导作用,但遗憾的是它们对软件测试并没有给予足够的重视,利用这些模型无法更好地指导软件测试工作。

软件测试是与软件开发紧密相关的一系列有计划的活动,是保证软件质量的重要手段,因此人们又相继设计了很多软件测试模型用于指导测试工作。软件测试模型兼顾了软件开发过程,对软件开发和测试进行了很好的融合,它既明确了软件开发与测试之间的关系,又使测试过程与开发过程产生交互,是测试工作的重要参考依据。

软件测试模型对测试工作具有指导作用,对测试效果与质量都有很大的影响,很多测试专家在实践中不断改进创新,创建了很多实用的软件测试模型。下面介绍几种比较重要的软件测试模型。

1. V模型

V模型是由保罗·鲁克(Paul Rook)在20世纪80年代提出的,它是软件测试模型中最具有代表性的模型之一。V模型是瀑布模型的变种,在瀑布模型的后半部分添加了测试工作,如图1-12所示。

030-01

图1-12 V模型

V模型描述了基本的开发过程与测试行为,主要反映了测试活动分析与设计之间的关系。它非常明确地表明了测试过程所包含的不同级别,以及测试各阶段与开发各阶段所对应的关系。V模型的左边是自上而下、逐步细化的开发过程,右边是自下而上、逐步集成的过程,这也符合了软件开发与软件测试的关系。

V模型应用瀑布模型的思想将复杂的测试工作分成了目标明确的小阶段来完成,具有阶段性、顺序性和依赖性,它既包含了对于源代码的底层测试,也包含了对于软件需求的高层测试。但是V模型也有一定的局限性,它只有在编码之后才能开始测试,早期的需求分析等前期工作没有涵盖其中,因此它不能发现需求分析等早期的错误,这为后期的系统测试、验收测试埋下了隐患。

2. W模型

W模型是由V模型演变而来的,它强调测试应伴随整个软件生命周期。其实W模型是一个双V模型,软件开发是一个V模型,而软件测试是与开发同步进行的另一个V模型,如图1-13所示。

030-02

图1-13 W模型

W模型的测试范围不仅包括程序,还包括需求分析、软件设计等前期工作,这样有利于尽早地全面发现问题。但是W模型也有自己的局限性,它将软件开发过程分成需求、设计、编码、集成等一系列的串行活动,无法支持迭代、自发性等需要变更调整的项目。

3. H模型

为了解决V模型与W模型存在的问题,有专家提出了H模型,H模型将测试活动完全独立了出来,形成一个完全独立的流程,这个流程将测试准备活动和测试执行活动清晰地体现出来。测试流程和其他工作流程是并发执行的,只要某一个工作流程的条件成熟就可以开始进行测试。例如在概要设计工作流程上完成一个测试,其过程如图1-14所示。

031-02

图1-14 H模型

图1-14只是体现了软件生命周期中概要设计层次上的一个测试“微循环”。在H模型中,测试级别不存在严格的次序关系,软件生命周期的各阶段的测试工作可以反复触发、迭代,即不同的测试可以反复迭代地进行。在实际测试工作中,H模型并无太多指导意义,读者重点是理解其中的设计意义。

4. X模型

X模型的设计原理是将程序分成多个片段反复迭代测试,然后将多个片段集成再进行迭代测试,如图1-15所示。

031-01

图1-15 X模型

X模型左边描述的是针对单独程序片段进行的相互分离的编码和测试,多个程序片段进行频繁的交接,在X模型的右上部分,将多个片段集成为一个可执行的程序再进行测试。通过集成测试的产品可以进行更大规模的集成,也可以进行封装提交给客户。

在X模型的右下部分还定位了探索性测试,它能够帮助有经验的测试人员发现更多测试计划之外的软件错误,但这对测试人员要求会高一些。

上面共介绍了4种软件测试模型,在实际测试工作中,测试人员更多的是结合W模型与H模型进行工作,软件各个方面的测试内容是以W模型为准,而测试周期、测试计划和进度是以H模型为指导。X模型更多是作为最终测试、熟练性测试的模板,例如对一个业务测试已经有2年时间,则可以使用X模型进行模块化的、探索性的方向测试。