Skip to content

敏捷测试 - 方法论

敏捷(Agile)是一种迭代和增量的软件开发方法,需求和解决方案通过自组织、跨职能团队及其客户/最终用户之间的协作演进。整个项目团队,包括开发人员、测试人员、产品负责人及其他干系人,在整个生命周期中积极参与。编码和测试交互式、增量式地进行,确保最终产品具有高质量并持续符合客户需求。

每次迭代通常会产生一个潜在可交付产品增量(potentially shippable product increment),该增量经常由干系人评审。这种频繁的反馈回路对于适应变化和确保产品交付最大价值至关重要。有效的团队协作和沟通是敏捷开发的核心原则,促进共享理解和对质量的集体所有权。

持续集成、持续测试和持续交付 (CI/CT/CD)

Section titled “持续集成、持续测试和持续交付 (CI/CT/CD)”

持续集成(CI)是敏捷开发的基石,涉及将代码更改频繁地(至少每天一次)集成到中央代码库中。每次集成都会通过自动化测试进行自动构建和验证。这种实践扩展到持续测试(CT)和持续交付/部署(CD),创建了一个管道,确保软件始终处于可发布状态。在敏捷中,测试不是一个独立的阶段,而是开发的组成部分,确保持续关注质量。来自自动化测试、团队成员和客户的持续反馈推动改进和产品质量。

敏捷方法论优先考虑响应变化而非遵循僵化计划,通过早期和持续交付有价值的软件来提供客户满意度。

有几种敏捷方法论指导软件开发。其中一些最具影响力的包括:

Scrum 是一种用于开发、交付和维护复杂产品的框架。它强调以团队为中心的方法,具有明确的角色(产品负责人 Product Owner、Scrum 主管 Scrum Master、开发团队 Development Team)、事件(Sprint 规划会 Sprint Planning、每日站会 Daily Scrum、Sprint 评审会 Sprint Review、Sprint 回顾会 Sprint Retrospective)和工件(产品待办事项列表 Product Backlog、Sprint 待办事项列表 Sprint Backlog、增量 Increment)。Sprint 是固定长度的迭代,期间会创建一个潜在可交付产品增量。

XP 是一种敏捷方法论,专注于生产更高质量的软件并提高开发团队的生活质量。它强调技术实践,如测试驱动开发(TDD)、结对编程、持续集成、简单设计、重构和频繁的小版本发布。客户参与度非常高。

Kanban 是一种管理知识工作的方法,强调准时交付和优化流程。它使用可视化的 Kanban 看板来管理任务,限制在制品 (WIP) 以防止瓶颈,并专注于衡量和改进前置时间(Lead Time)和周期时间(Cycle Time)。它具有高度适应性,可与其他方法论结合使用,如 Scrum(Scrumban)。

受精益制造原则启发,精益软件开发(Lean Software Development)专注于最大化客户价值同时最小化浪费。关键原则包括消除浪费(例如,不必要的功能、缺陷、延迟)、放大知识、尽可能晚做决定、尽快交付、赋能团队、内建完整性、以及看到整体。

其他方法论,如 Crystal、特性驱动开发(Feature-Driven Development, FDD)和动态系统开发方法(Dynamic Systems Development Method, DSDM)也存在,每种方法都有其特定的实践,但 Scrum、XP、Kanban 和精益原则在现代敏捷环境中被广泛采用并具有影响力。

敏捷测试并非单一方法论,而是一套与敏捷宣言(Agile Manifesto)相符的原则和实践。它强调早期和持续测试、协作以及全团队的质量方法。关键的敏捷测试方法包括:

  • 测试驱动开发(TDD):在编写实际代码之前编写自动化单元测试。这指导开发并确保代码在设计上是可测试的。
  • 验收测试驱动开发(ATDD):在开发之前协作定义验收标准作为可执行测试。这确保了业务人员、开发人员和测试人员对需求有一个共同理解。
  • 行为驱动开发(BDD):是 TDD 和 ATDD 的扩展,使用一种共享的、自然语言(如 Gherkin)来描述系统行为。这改善了沟通并创建了活文档。

在所有敏捷方法论中,测试都贯穿于整个生命周期,而不是被视为一个独立的、后续的阶段。测试用例或场景通常在编码之前或并行进行时定义。

本教程将经常使用 Scrum 作为讨论敏捷测试实践的背景,因为它是一个被广泛采用的敏捷框架。然而,所讨论的测试原则和技术适用于各种敏捷方法论。

Scrum 环境中的敏捷测试生命周期

Section titled “Scrum 环境中的敏捷测试生命周期”

在 Scrum 中,测试活动交织在每个 Sprint 中:

  • 产品待办事项列表梳理:测试人员协作澄清用户故事,定义验收标准,并评估可测试性。
  • Sprint 规划会:测试人员帮助选择 Sprint 的用户故事,估算测试工作量,并规划测试任务。团队定义 Sprint 目标以及实现该目标的计划,包括所有必要的测试。
  • Sprint 执行期间:开发人员编写代码和单元测试(通常通过 TDD)。测试人员设计和执行测试(手动和自动化),进行探索性测试,报告缺陷,并与开发人员密切协作以快速修复。进行持续集成和自动化回归测试。
  • 每日站会:测试人员分享进展、遇到的障碍和测试状态。
  • Sprint 评审会:团队向干系人演示已完成(且已测试)的产品增量,测试人员可以强调质量方面或测试覆盖率。
  • Sprint 回顾会:测试人员参与讨论,回顾测试流程、工具和团队协作中哪些方面做得好,哪些可以改进,以便在未来的 Sprint 中应用。

测试是每个 Sprint 中的迭代过程,专注于交付高质量的产品增量。Sprint 中测试的反馈为正在进行的开发和后续 Sprint 的规划提供信息,从而形成持续改进和价值交付的循环。这种迭代性质可以可视化为每个 Sprint 中的一系列迷你生命周期,每个生命周期都以一个潜在可交付增量告终。