4.1 敏捷软件测试理念、方法与实践
一、测试概念
1) 测试定义:
在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。
2) 测试分类
- 测试方法:黑盒测试,白盒测试
- 测试类型:功能测试,系统测试,极限值测试,性能测试
- 测试阶段:单元测试,集成测试,系统测试,回归测试
类型 | 功能 | 解释 | 应用 |
---|---|---|---|
测试方法 | 黑盒测试 | 测试应用的功能,而不是内部结构和运作。只需要知道系统应该做的事 | 集成测试、系统测试 |
白盒测试(透明盒测试) | 测试应用的内部结构或运作,而是不是测试应用程序的功能。 | 单元测试、集成测试、系统软件测试 | |
测试类型 | 功能测试 | 按照软件的各个功能划分,进行有条理的测试。在功能测试时要保证测试项覆盖了所有功能,以及各种条件组合 | |
系统测试 | 一个完整软件的整体角度进行测试。利用所有真实数据进行测试,模拟真实用户,同时关注整个软件系统,而不是单点功能 | ||
极限值测试 | 测试软件处于各种特殊条件、环境下能够正常运行。特殊条件:最大、最小值,以及超过边界值的情况。特殊环境:如软件运行处于高CPU、高负荷或网络高负荷的情况下进行而是 | ||
性能测试 | 对软件性能评价,衡量软件的响应能力。是采用测试手段对软件的响应的及时性进行评价的一种方式 | ||
测试阶段 | 单元测试 | 针对程序设计的每一个单点函数进行测试的过程 | |
集成测试 | 关注模块与模块之间的交互 | ||
系统测试 | 端到端的,对整个系统进行测试,使用真实的用户场景和数据 | ||
回归测试 | 验证新加的代码,是否回对现有的功能产生影响,确保现有功能正常可用 |
二、什么是敏捷测试
1) 概念
敏捷测试是一种遵循敏捷软件开发原理的软件测试实践。敏捷测试涉及跨职能敏捷团队的所有成员, 这些团队具有测试人员的特殊专业知识,以确保以可持续的速度定期提供客户期望的业务价值。
注重“以人为本”, 快速迭代。
2) 敏捷测试宣言
测试是一个活动 胜于 测试是一个阶段
预防缺陷 胜于 发现缺陷
做测试者 胜于 做检查者
帮助构建最好的系统 胜于 破坏系统
团队为质量负责 胜于 测试为质量负责
3) 为什么需要敏捷测试
项目执行过程中因为赶进度,测试周期被压缩,测试人力也不足,要求测试人员提升技能,同时通过高度的自动化、测试左移等方法,尽早发现问题。
三、敏捷测试的原则介绍
- 原则1: 预防缺陷胜于发现缺陷
- 原则2: 通过持续测试实现快速与高质量
- 原则3: 成为全栈测试人员
- 原则4: 从质量保证转向质量协助
- 原则5: 渴望持续学习
角色 | definition |
---|---|
who | DevOps强调团队合作和紧密沟通, 团队中每个成员都需要为质量负责。测试不再仅仅是测试人员的工作。开发人员和运维人员也要承担测试任务。 |
When | 测试工作贯穿始终, 从产品准备初期到上线之后 |
Where | 测试工作无处不在, 一切提高产品质量的工作就是测试工作 |
- 敏捷测试的特点
- 每个团队成员都需要对质量负责,同时测试人员自身能力需要提升
- 时间测试工作贯穿始终
- 一切能提高产品质量的工作,就是测试工作
四、测试左移和测试右移
敏捷测试中开展测试左移和右移可以有效的提升测试效率。
- 测试左移
鼓励开发阶段尽早的测试,使用测试驱动开发,行为驱动开发。强制在编码之前就充分考虑测试。通过契约测试和mock机制解耦服务间的依赖,提升测试速度和稳定性
· 测试左移,尽早开展测试
· 使用测试驱动开发TDD、验收测试驱动开发ATDD和行为驱动开发BDD
· 通过契约测试,解耦前后端和服务间开发依赖
· 加强开发自测试
TDD:test driven development
ATDD: Acceptance test driven development
BDD: Bahavior driven development
- 测试右移
在发布阶段和线上阶段进行测试,测试类型主要包括灰度测试(灰度发布过程中的测试),在线拨测(主动监控,持续高频的对被测系统常见功能进行测试)和在线监控(以各种系统指标为核心进行被动监控)。
· 测试右移动,覆盖发布和线上运行阶段
· 灰度测试
· 线上应用性能监控
· 线上拨测
这一测试能在真实环境中快速发现问题,快速反馈并闭环问题。
五、测试分层模型演进
- 由金字塔模型向纺锤模型的演进。减少单元测试,增强接口测试、契约测试和在线测试。
六、敏捷测试流程与特点介绍
- 1)研发交付全流程测试活动
测试活动贯穿研发的全流程,流水线构建的时候执行单元测试和一些静态代码扫描这些测试由开发人员开展。在开发自测试环境中执行接口测试,性能测试和接口安全测试同样由开发人员开展。
集成测试环境:执行系统级的功能测试,性能测试以及可靠性等测试。根据团队的组成和成熟度开放测试均可以开展。
生产环境:执行灰度测试,在线帽檐测试,在线拨测等各种在线测试。