跳转至

敏捷测试教程(软件测试人员专用)

教程简介

本教程面向软件测试工程师,讲解敏捷开发模式下测试人员的工作方式、协作流程和实践方法。


前置要求

项目 要求 获取方式
软件测试理论基础 了解测试流程、测试级别、用例设计 软件测试理论基础教程

新手导读

敏捷测试重点不是背 Scrum 名词,而是理解测试人员如何在快节奏迭代中提前参与需求、持续反馈风险。

第一遍建议抓住这些问题:

  1. 什么是迭代、用户故事、验收标准。
  2. 测试人员什么时候介入需求评审。
  3. 如何把验收标准转成测试点。
  4. 为什么敏捷团队需要持续测试和自动化回归。

学完后,你应该能看懂一个用户故事,并写出对应的验收测试点。


一、敏捷基础

1.1 敏捷是什么

敏捷是一种 迭代式、增量式 的软件开发方法,核心理念:

  • 个体与互动 高于流程与工具
  • 可工作的软件 高于详尽的文档
  • 客户协作 高于合同谈判
  • 响应变化 高于遵循计划

1.2 敏捷 vs 瀑布

维度 瀑布 敏捷
周期 长(数月) 短(1-4 周迭代)
需求 前期固定 每个迭代可调整
测试阶段 编码后才开始 全程参与
反馈 上线后才得到 每个迭代末评审
风险 后期暴露 持续暴露
文档 重文档 够用即可

1.3 敏捷宣言十二原则(节选)

  • 尽早持续交付可工作的软件
  • 欢迎需求变更
  • 业务人员与开发人员每天协作
  • 面对面沟通最有效
  • 可工作的软件是进度的首要度量
  • 保持可持续的开发节奏
  • 技术卓越与良好设计

二、Scrum 框架

Scrum 是最流行的敏捷框架。

2.1 核心角色

角色 职责
Product Owner(PO) 管理需求优先级,代表业务方
Scrum Master(SM) 保障流程执行,移除障碍
开发团队 开发 + 测试 + 设计(跨职能自组织)

2.2 Scrum 事件

事件 频率 时长 目的
Sprint 持续 1-4 周 一个迭代周期
Sprint Planning 每个 Sprint 开始 最多 8 小时(1 月 Sprint),按比例缩放 确定本迭代做什么
Daily Standup 每天 15 分钟 同步进展、暴露问题
Sprint Review 每个 Sprint 结束 1-2 小时 展示成果、收集反馈
Sprint Retrospective 每个 Sprint 结束 1 小时 回顾改进

2.3 核心工件

工件 说明
Product Backlog 所有需求的优先级列表(PO 维护)
Sprint Backlog 本迭代要完成的需求
Increment 本迭代交付的可工作软件

2.4 Sprint 流程

Sprint Planning → 每日开发 → Sprint Review → Retrospective
    ↓                  ↓              ↓              ↓
 确定范围           Daily Standup   展示成果       回顾改进
 拆分任务           编码+测试       收集反馈       优化流程

三、测试人员在敏捷中的角色

3.1 角色转变

传统测试 敏捷测试
独立测试团队 嵌入开发团队
需求文档驱动 用户故事驱动
编码后才测试 全程参与
手工执行为主 自动化为主
质量守门员 质量教练
发现缺陷 预防缺陷

3.2 测试人员的职责

Sprint Planning 阶段: - 参与需求评审 - 拆分测试任务 - 评估测试工作量 - 识别风险点

开发阶段: - 编写自动化测试用例 - 与开发并行测试 - 探索性测试 - 接口测试先于 UI 测试

Sprint Review 阶段: - 展示测试结果 - 反馈质量问题 - 参与验收

Retrospective 阶段: - 回顾测试过程 - 提出改进建议

3.3 测试左移与右移

左移(Shift Left):尽早介入
需求 → 设计 → 编码 → 测试 → 发布
 ↑ 测试从这里开始参与

右移(Shift Right):上线后持续关注
发布 → 生产监控 → 用户反馈 → 持续改进
                            ↑ 测试也参与

左移实践: - 参加需求评审,提前发现歧义 - 提前写测试用例,帮助开发理解预期 - 接口测试在 UI 开发前完成

右移实践: - 监控线上错误日志 - 分析用户反馈 - 参与生产环境验证


四、用户故事与验收标准

4.1 什么是用户故事

用户故事是需求的最小单元,格式:

作为 <角色>
我想要 <功能>
以便 <价值>

示例:
作为 注册用户
我想要 通过手机号登录
以便 不用记密码

4.2 验收标准(Acceptance Criteria)

每个用户故事必须有验收标准,定义"完成"的条件。

格式示例:

用户故事:作为用户,我想要重置密码,以便找回账号

验收标准:
1. 输入注册邮箱,系统发送重置链接
2. 链接 24 小时内有效
3. 点击链接后可设置新密码
4. 新密码需满足:8-20 位,含大小写和数字
5. 密码重置后,旧密码立即失效
6. 重置成功后跳转到登录页,提示"密码已重置"

4.3 Given-When-Then 格式

验收标准也可用 BDD 风格:

Given 用户已注册且邮箱为 test@example.com
When 用户点击"忘记密码"并输入邮箱
Then 系统发送重置链接到该邮箱
And 链接在 24 小时内有效

4.4 测试人员参与用户故事

Sprint Planning 时: - 检查验收标准是否完整 - 补充异常场景 - 评估可测试性 - 拆分测试任务

示例任务拆分:

用户故事:登录功能
├── 测试任务 1:编写接口自动化用例(2h)
├── 测试任务 2:编写 UI 自动化用例(1h)
├── 测试任务 3:探索性测试异常场景(1h)
└── 测试任务 4:跨浏览器验证(0.5h)

五、敏捷测试策略

5.1 测试金字塔(敏捷版)

        ╱╲
       ╱UI ╲          少量(5%)
      ╱──────╲        端到端验证
     ╱  接口   ╲      中量(20-25%)
    ╱──────────╲      业务逻辑验证
   ╱   单元测试  ╲    大量(70%+)
  ╱──────────────╲    快速反馈

敏捷强调: 自动化测试占比高,手工测试聚焦探索性测试。

5.2 四象限测试

               支持团队                    评价产品
         ┌─────────────────┬─────────────────┐
  手工为主 │ Q2: 功能测试    │ Q3: 探索性测试  │  手工为主
         │ 接口测试        │ 用户体验测试    │
         │ (测试主导)     │ Alpha/Beta 测试 │
         ├─────────────────┼─────────────────┤
  自动化  │ Q1: 单元测试    │ Q4: 性能测试    │  自动化
         │ 组件测试        │ 安全测试        │
         │ (开发负责)     │ 可靠性测试      │
         └─────────────────┴─────────────────┘
  • Q1:开发负责,测试协助
  • Q2:测试核心工作(接口自动化、功能自动化)
  • Q3:手工探索性测试、用户体验
  • Q4:专项测试(性能、安全)

5.3 每个迭代的测试活动

Sprint 阶段 测试活动
Planning 需求评审、用例设计、任务拆分
开发前期 接口自动化(与开发并行)
开发中期 UI 自动化、集成测试
开发后期 探索性测试、回归测试
Review 验收测试、展示结果
Retrospective 回顾测试过程、改进

5.4 冒烟测试与回归测试

冒烟测试(Smoke Test): - 每个构建自动执行 - 覆盖核心流程(登录、下单、支付) - 失败则阻塞后续测试

回归测试(Regression Test): - 每个 Sprint 结束执行 - 覆盖所有自动化用例 - 确保新功能不影响老功能


六、持续测试

6.1 持续集成中的测试

代码提交 → 自动构建 → 单元测试 → 接口测试 → 部署测试环境 → UI 测试 → 报告

每个阶段都有测试,失败则阻塞后续。

6.2 测试门禁(Quality Gate)

# 示例:Jenkins 流水线门禁
quality_gates:
  - name: 单元测试通过率
    threshold: 95%
    current: 98%    # ✅

  - name: 接口测试通过率
    threshold: 90%
    current: 92%    # ✅

  - name: 代码覆盖率
    threshold: 70%
    current: 65%    # ❌ 阻塞发布

  - name: 严重缺陷数
    threshold: 0
    current: 1      # ❌ 阻塞发布

6.3 测试报告与反馈

每日: - 自动化测试结果通知(钉钉/企业微信) - 失败用例当天修复

每 Sprint: - 测试覆盖率报告 - 缺陷统计 - 遗留风险


七、敏捷测试实践

7.1 实践一:结对测试

测试人员与开发人员结对工作:

  • 开发写代码时,测试写用例
  • 开发提交前,测试先验证
  • 减少后期返工

7.2 实践二:三 Amigos 会议

需求讨论时,三方一起:

产品(PO):定义需求
开发:评估实现方案
测试:补充异常场景、验收标准

产出:明确的用户故事 + 验收标准。

7.3 实践三:探索性测试

每个 Sprint 预留时间做探索性测试:

时间盒:1-2 小时
目标:发现自动化覆盖不到的问题
方法:
  - 基于经验猜测可能出错的地方
  - 尝试非常规操作
  - 组合不同功能
  - 边界值、异常输入
产出:发现的 Bug + 新增的自动化用例

7.4 实践四:Definition of Done(DoD)

团队共同定义"完成"的标准:

一个用户故事"完成"的条件:
- [ ] 代码完成并通过 Code Review
- [ ] 单元测试通过
- [ ] 接口自动化用例通过
- [ ] UI 自动化用例通过(如有 UI 变更)
- [ ] 无 P0/P1 缺陷
- [ ] 验收标准全部满足
- [ ] 文档更新(如有必要)

7.5 实践五:缺陷分析与预防

每个 Sprint 分析缺陷:

缺陷分布:
├── 需求理解偏差(30%)→ 加强需求评审
├── 边界场景遗漏(25%)→ 补充边界用例
├── 集成问题(20%)→ 加强接口测试
├── 回归缺陷(15%)→ 扩大自动化覆盖
└── 其他(10%)→ 具体分析

八、常见问题与应对

8.1 迭代太快,测试来不及

应对: - 接口测试先于 UI 测试 - 自动化覆盖核心流程 - 探索性测试聚焦高风险区域 - 与 PO 协商调整范围

8.2 需求频繁变更

应对: - 用例设计模块化,易于调整 - 自动化用例参数化 - 接受变更,拥抱敏捷精神 - 变更影响分析及时同步

8.3 开发不写单元测试

应对: - 在 DoD 中明确要求 - Code Review 检查覆盖率 - 测试人员协助开发写单元测试 - 用 SonarQube 等工具监控

8.4 自动化维护成本高

应对: - Page Object 模式 - 数据驱动减少重复 - 定期清理无效用例 - 开发配合加 data-testid

8.5 测试环境不稳定

应对: - Docker 容器化环境 - Mock 外部依赖 - 环境健康检查脚本 - 与运维协作保障环境


附录:敏捷术语表

术语 含义
Sprint 一个迭代周期(1-4 周)
User Story 用户故事(需求单元)
Acceptance Criteria 验收标准
Product Backlog 需求池
Sprint Backlog 本迭代任务
DoD 完成的定义
Scrum Master 流程守护者
Product Owner 产品负责人
Daily Standup 每日站会
Retrospective 回顾会
Burndown Chart 燃尽图(进度可视化)
Velocity 团队速率(每 Sprint 完成的故事点)

核心理念

敏捷测试不是"测试更快",而是"测试更早、更持续、更协作"。测试人员从质量守门员转变为质量教练,帮助团队在每个环节把控质量。

推荐下一步

根据你的学习进度,选择下一步:

  1. 如果你想检验理论基础:做 软件测试理论基础测验,检验学习效果
  2. 如果你想进入工具阶段:学习 数据库 SQL 教程,掌握数据校验
  3. 如果你想学 Python:学习 Python 基础教程,为自动化做准备

通关检查

完成本阶段后,使用 第1阶段-测试入门通关 检查是否可以进入下一阶段。