软件测试根据不同的测试对象、测试背景可采用不同的测试模型实施测试活动,针对测试人员,下面将通过对V模型、W模型、X模型、H模型及敏捷模型的分析,加强测试工程师在实际测试工作过程中,模型的选择及应用能力。

 

一、V模型

V模型是所有软件测试模型中最为大家熟知的一种模型。它是从瀑布研发模型演变而来的测试模型,如图4-5所示。

 

V模型的流程是从上到下、从左到右,软件研发人员进行需求分析、概要设计、详细设计、编码一系列研发活动后,生成测试版本。

测试工程师则在研发人员编程过程中,对其生成的函数或类进行单元测试,测试通过后,进行组件集成,实施集成测试,然后模拟终端用户实际业务流程执行系统测试、验收测试。该过程呈线性发展趋势,需求在早期存在缺陷时,可能到最后环节才会发现,并且测试工程师测试活动严重滞后于开发活动。

V测试模型适用开发周期较短的项目。在瀑布模型流行的年代,V测试模型发挥了很重要的作用,但随着业务规模的不断扩大,研发模型的不断优化改革,V模型已渐渐被淘汰。

二、W模型

W模型是在V模型的基础上演变而来的,一般又称为双V模型。在V模型中,研发活动没有完成、无任何输出物时,测试工程师无法开展测试工作,相对而言,测试活动严重滞后。为了解决V模型的缺点,W模型提出了测试活动与研发活动并行的概念,并且在生产流程演进过程中,增加了验证与确认活动。

 

从图4-6可以看出,从用户需求开始,研发团队根据用户需求进行需求分析、概要设计、详细设计、编码开发等活动,测试团队则根据用户需求进行验收测试、系统测试、集成测试及单元测试设计。测试工作与研发活动分离,实现了并行操作。测试活动伴随着整个研发过程,而不仅在研发有成果输出后才参与。同时,W模型强调了测试活动不仅仅包括研发活动所产生的软件源代码,还考虑各种文档,如需求文档、概要设计文档、详细设计文档、代码等。

从W模型可以看出,完成所有的测试活动,对测试工程师的技能要求超过了研发人员。因此,规模较大的公司测试团队会有不同职能、技能的测试工程师。

W模型要求测试活动从用户需求阶段就介入,有利于尽早地发现问题,在模型实施过程中,时刻进行确认(validation)、验证(verification)活动。

1. 确认(Validation

(1)保证所生产的软件可追溯到每一个用户需求。

(2)检测每一阶段的工作产品是否与最初定义的软件需求规格相一致。

2. 验证(Verification

(1)保证软件正确地实现特定功能。

(2)检测每一阶段形成的工作产品是否与前一阶段定义的规格相一致。

W模型解决了V模型开发测试活动串行的问题,但仍然存在测试活动受开发活动的影响,并不能做到真正的测试活动与开发活动分离,互不影响。通过W模型,我们可以看到,当开展单元及集成测试活动时,单元、集成测试活动的测试对象仍由研发活动提供,滞后于研发活动。因为仅在开发人员完成单元、组件代码设计后,才能实施单元、集成测试或接口测试。

三、X模型

X模型产生的背景亦与V模型有关,V模型的缺点是测试活动滞后于研发活动,无法尽早地开展测试活动。而X模型与W模型一样,提出的初衷都是解决V模型的缺点。X模型如4-7所示

 

X模型左边表明针对单独程序片段n进行独立的编码和测试活动以此为基本过程,不断迭代,通过集成活动最终成为可执行程序,然后再对这些可执行程序进行测试。通过集成测试的成品可以进行封装并提交给系统测试环节或直接给用户。多并行的曲线表示变更可以在各个部分发生。

X模型提出了探索性测试的概念。探索性测试与常规的测试方法不同,无须事先制定测试计划或设计,有经验的测试工程师可根据自己的思维活动及对被测对象的理解,测试计划之外发现更多的软件错误但探索性测试通常情况下仅作为其他测试方法的补充,因其消耗测试资源较多,且受制于测试工程师的经验,所以不能成为独立的测试方法。

四、H模型

H模型将测试活动与其他研发流程独立,测试活动分为测试准备与测试执行两个部分,便于测试设计与测试执行活动定义,如图4-8所示。测试准备活动包括测试需求分析、测试计划、测试设计、测试编码、测试验证等,测试执行包括测试运行、测试报告、测试结果分析、确认回归测试等。

 

H模型与W模型一样,揭示了软件测试活动应该是一个独立的软件生产流程,贯穿整个软件生命周期,测试活动应该尽早准备、尽早执行,当测试准备工作完成后,一旦到达测试就绪点,就可开展测试执行活动,不会受制于研发活动。

五、敏捷测试模型

其实软件测试中并无敏捷测试模型,为了对应敏捷开发,才提出了敏捷测试的概念。

敏捷开发的最大特点是高度迭代,周期性,能够及时、持续地响应需求的频繁变更反馈。敏捷测试即是不断修正被测对象的质量指标,正确建立测试策略,确认客户的有效需求得以圆满实现和确保整个生产过程安全、及时发布最终产品。

敏捷测试工程师在高速迭代、沟通之上的敏捷开发团队中,需要关注需求变更、产品设计、源代码设计。通常情况下,需要全程参与敏捷开发团队的团队讨论评审活动,并参与决策制定等。在独立完成测试设计、测试执行、测试分析输出的同时,关注用户、有效沟通,从而协助敏捷流程推动产品的快速开发。

在传统开发模型下,一个测试版本生成周期可能为几个月,但在敏捷模型中,可能几周一个版本,甚至几天一个测试版本,因此敏捷团队中的测试工程师在技术技能、业务理解、产品设计等方面都需要熟练,否则很难快速高效地完成测试任务,给项目带来风险。