软件开发生命周期模型描述了在软件开发项目的每个阶段开展的活动类型,以及这些活动在逻辑上和时间上是如何相互关联的。有许多不同的软件开发生命周期模型,每个模型都需要不同的测试方法。
2.1.1 软件开发和软件测试
为了能够进行适当的测试活动,熟悉常见的软件开发生命周期模型是测试人员职责的重要组成部分。
在任何软件开发生命周期模型中,好的测试都有以下特点:
•每个开发活动都有对应的测试活动
•每个测试级别都有与该级别对应的特有测试目标
•在相应的开发活动中开始对给定的测试级别进行测试分析和设计
•测试人员参加讨论,以确定和完善需求和设计,并在初稿完成后立即参与评审工作产品(如需求、设计、用户故事等)
无论选择哪种软件开发生命周期模型,测试活动都应该在生命周期的早期阶段开始,以遵循测试尽早介入的原则。
本大纲将常见的软件开发生命周期模型分类如下:
•顺序开发模型
•迭代增量开发模型
顺序开发模型将软件开发过程描述为线性且按照顺序的活动次序。这意味着开发过程的任何阶段都应在前一阶段完成时开始。理论上阶段没有重叠,但在实践中,从下一阶段得到早期反馈是有益的。
在瀑布模型中,开发活动(例如需求分析、设计、编码、测试)陆续完成。在这个模型中,测试活动只在所有其他开发活动完成后才会开始。
与瀑布模型不同,V模型在整个开发过程中集成了测试过程,践行了尽早测试的原则。此外,V模型还包括与每个相应开发阶段对应的测试级别,这进一步支持了尽早测试(关于测试级别的讨论见第2.2节)。在此模型中,与每个测试级别相关联的测试的执行按照顺序方式进行,但在某些情况下会发生重叠。
顺序开发模型交付的软件包含了全套的功能,但通常需要几个月或几年的时间才能交付给利益相关者和用户。
增量开发涉及到建立需求、设计、构建和测试部分系统,这意味着软件的特性逐渐增加。这些特性逐步增加的大小各不相同,有些方法增加的大一些,有些方法小一些。增加的特性可以小到对一个用户接口界面的修改或者一个新的查询选项。
迭代开发发生在多个特性在一系列周期中一起被指定、设计、构建和测试的时候,通常是固定的时间周期。迭代可能涉及到对早期迭代中开发的特性的更改,以及项目范围的更改。每次迭代都交付工作软件,这是整个特性集中不断增长的一个子集,直到最终软件交付或开发停止。
例子包括:
•Rational统一过程RUP:每次迭代相对较长(例如:两到三个月),特性增加相应较大,例如两组或三组相关特性
•SCRUM:每次迭代都较短(例如:几个小时、几天或几个星期),相应的特性增加较小,例如一些增强和(或)两三个新特性
•看板:实现时使用或不使用固定长度的迭代,这种迭代可以在完成时交付单个增强或特性,也可以将特性组合在一起立即发布
•螺旋式(或原型):包括创造实验性增量,其中一些可能被大量返工,甚至在后续的开发工作中被放弃
在整个开发过程中,使用这些方法开发的组件或系统往往涉及到测试级别的重叠和迭代。理想的情况是,每个特性在交付之前,在多个测试级别上进行测试。在某些情况下,团队使用持续交付或持续部署,这两者都涉及到作为其交付过程一部分的多个测试级别的大量自动化。许多使用这些方法的开发工作量还包括自组织团队的概念,它可以改变测试工作的组织方式以及测试人员和开发人员之间的关系。
这些方法形成了一个不断发展的系统,它可以按照特性、迭代,或者以更传统的主版本发布方式交付给最终用户。无论软件增量是否发布给最终用户,随着系统的增强回归测试变得越来越重要。
与顺序模型不同,迭代模型和增量模型可以在几周甚至几天内交付可用的软件,但只能在几个月甚至几年内交付全套需求产品。
有关敏捷开发背景下的软件测试的更多信息,请参见ISTQB-AT基础级敏捷测试扩展大纲,Black 2017,Crispin 2008和Gregory 2015。
2.1.2 基于上下文的软件开发生命周期模型
软件开发生命周期模型必须根据项目和产品的特点选择和调整。应根据项目目标、正在开发的产品类型、业务重点(如市场要求时间)以及已识别的产品和项目风险,选择和调整合适的软件开发生命周期模型。例如:小型内部管理系统的开发和测试,应与汽车制动控制系统等安全关键系统的开发和测试有所不同。另一个例子是,在某些情况下,组织和文化问题可能会阻碍团队成员之间的交流,从而阻碍迭代开发。
根据项目的背景,可能需要合并或重组测试级别和/或测试活动。例如:为了将现成的商用现货软件产品集成到更大的系统中,购买者可以在系统集成测试级别(例如:与基础设施和其他系统的集成)和验收测试级别(功能测试和非功能测试,以及用户验收测试和操作验收测试) 上进行互操作性测试。关于测试级别的讨论见第2.2节,关于测试类型的讨论见第2.3节。
此外,软件开发生命周期模型本身也可以合并。例如:V模型可用于开发和测试后端系统及其集成,而敏捷开发模型可用于开发和测试前端用户界面(UI)和功能。在项目早期可以使用原型,在试验阶段完成后采用增量开发模型。
物联网(IoT)系统由许多不同的对象组成,如设备、产品和服务,通常为每个对象应用单独的软件开发生命周期模型。这对物联网系统版本的开发提出了特殊的挑战。另外,这些对象的软件开发生命周期更强调在它们运行使用(例如:运行、更新和退役阶段)之后的软件开发生命周期的后期阶段。

10-05 17:02