“软件测试中,V模型非常著名。通常可以在W模型的框架下,运用H模型的思想进行独立的测试。当有变更发生时,按X模型和前置模型的思想进行处理。”
一、V模型
RAD(rap application development),就是软件开发过程中的一个重要模型,称为快速应用开发模型。其模型构图形似字母V,所以又称V模型。可以说,V模型是软件开发测试中最重要的一种模型。
V模型大体可以划分为下面几个不同的阶段步骤,既需求分析、概要设计、详细设计、编码、单元测试、集成测试、系统测试、验收测试。
名称 | 目标 | 活动描述 |
需求分析 | 明白客户需要,表述客户需要 | 与客户交流,了解客户需求,写出说明书 |
概要设计 | 搭构架,明确模块功能,各模块间交互的实现方法,数据传送方法等 | 把客户需要细分,确定不同的功能模块,把各模块连接方法,数据传输方法确定。 |
详细设计 | 表述出模块间组合功能实现方法, | 对各模块进行进一步分析,设计模块间组合功能实现过程,写出伪代码 |
编码 | 写程序 | 按照设计好的功能模块功能需求,设计不同的功能模块,写出代码,写出连接模块的代码, |
单元测试 | 测试需要的最小单元的功能 | 按照设定好的最小测试单元(或者叫组件)进行按测试,确保各模块被正确的编译执行 |
集成测试 | 检查单元和单元间组合成后是否存在问题,如组合后的功能,接口等 | 将已经分别通过测试的单元模块按设计需求组合进行整体功能,性能等测试, |
系统测试 | 把集成后的软件放到系统中进行测试 | 搭建不同的计算机软硬件系统,把被测软件放入其中进行的非功能性测试,主要包括安全可靠性,性能等 |
验收测试 | 验证系统是否达到了客户需求 | 用户进行易用性,兼容性,安装测试等 |
单元测试所对应的是详细设计环节,也就是说,单元测试的测试用例是和详细设计一起出现的,在做研发人员做做详细设计的时候,相应的测试人员也就把测试用例写了出来。集成测试呢,对应的为概要设计,在做模块功能分析及模块接口,数据传输方法的时候,就把集成测试用例根据概要设计中模块功能及接口等实现方法编写出。
局限性:把测试作为编码之后的最后一个活动,需求分析等前期产生的错误直到后期的验收测试才能发现。
二、W模型
相对于V模型,W模型增加了软件各开发阶段中应同步进行的验证和确认活动。W模型由两个V字型模型组成,分别代表测试与开发过程,图中明确表示出了测试与开发的并行关系。
W模型强调:测试伴随着整个软件开发周期,而且测试的对象不仅仅是程序,需求、设计等同样要测试,也就是说,测试与开发是同步进行的。W模型有利于尽早地全面的发现问题。例如,需求分析完成后,测试人员就应该参与到对需求的验证和确认活动中,以尽早地找出缺陷所在。同时,对需求的测试也有利于及时了解项目难度和测试风险,及早制定应对措施,这将显著减少总体测试时间,加快项目进度。
局限性:在W模型中,需求、设计、编码等活动被视为串行的,同时,测试和开发活动也保持着一种线性的前后关系,上一阶段完全结束,才可正式开始下一个阶段工作。这样就无法支持迭代的开发模型。对于当前软件开发复杂多变的情况,W模型并不能解除测试管理面临着困惑。
三、H模型
V模型和W模型均存在一些不妥之处。如前所述,它们都把软件的开发视为需求、设计、编码等一系列串行的活动,而事实上,这些活动在大部分时间内是可以交叉进行的,所以,相应的测试之间也不存在严格的次序关系。同时,各层次的测试(单元测试、集成测试、系统测试等)也存在反复触发、迭代的关系。
为了解决以上问题,有专家提出了H模型。它将测试活动完全独立出来,形成了一个完全独立的流程,将测试准备活动和测试执行活动清晰地体现出来。这个示意图仅仅演示了在整个生产周期中某个层次上的一次测试“微循环”。图中标注的其他流程可以是任意的开发流程。例如,设计流程或编码流程。也就是说,只要测试条件成熟了,测试准备活动完成了,测试执行活动就可以(或者说需要)进行了。
H模型揭示了一个原理:软件测试是一个独立的流程,贯穿产品整个生命周期,与其他流程并发地进行。H模型指出软件测试要尽早准备,尽早执行。不同的测试活动可以是按照某个次序先后进行的,但也可能是反复的,只要某个测试达到准备就绪点,测试执行活动就可以开展。
四、X模型
X模型也是对V模型的改进,X模型提出针对单独的程序片段进行相互分离的编码和测试,此后通过频繁的交接,通过集成最终合成为可执行的程序。X模型的左边描述的是针对单独程序片段所进行的相互分离的编码和测试,此后将进行频繁的交接,通过集成最终成为可执行的程序,然后再对这些可执行程序进行测试。己通过集成测试的成品可以进行封装并提交给用户,也可以作为更大规模和范围内集成的一部分。
多根并行的曲线表示变更可以在各个部分发生。由图中可见,X模型还定位了探索性测试,这是不进行事先计划的特殊类型的测试,这一方式往往能帮助有经验的测试人员在测试计划之外发现更多的软件错误。但这样可能对测试造成人力、物力和财力的浪费,对测试员的熟练程度要求比较高。