《敏捷测试:以持续测试促进持续交付》读后感
1. 什么是敏捷测试
与开发协作测试 胜于 测试分工与测试工具
可运行的测试脚本 胜于 写在纸上的测试用例
从客户角度来理解测试需要 胜于 从已定义的需求来判定测试结果
基于上下文及时调整测试策略 胜于 遵守测试计划
对于第2点,我个人不太认同,我觉得“可运行的测试脚本” 和 “写在纸上的测试用例”同等重要,测试脚本的核心仍然是测试用例的设计,设计良好的测试用例、考虑周全的测试点有助于测试脚本的开发。这也是目前我们测试组重视测试用例的原因。对于第3点,目前来说测试组做得不太好,我们基本上都是基于定义的需求来判断测试结果,这也是有原因的,我们测试人员处于研发流程末端,对于ToB的医药行业来说,我们测试组目前缺乏相关的业务知识,测试结果的判定只能来自于需求文档。对于第4点,非常赞同,测试策略必定是基于上下文及时调整的。
测试人员需要具备成长性思维,相信我们自身的能力是可以通过培养不断成长的;面对挑战是拥抱而不是躲避;面对失败不是责备自己、同事,而是需要搞清楚为什么失败以及如何避免再次失败;要内心充满力量、充满自信。
测试守护质量,提供质量信息,甚至帮助团队改善质量,自然是很有价值的,但是如果依赖测试来保证质量,那么其实是很难保证质量的,而且成本很高。应该让整个团队关注质量,从需求开始尽可能一次把事情做对,从而构建出高质量的产品,这对企业来讲更有价值——效率更高,成本更低。
可参考:什么是软件质量管理的底层逻辑?
上下文驱动的思维是要认识到上下文是一直在变的,测试的策略和方法也要更具上下文及时调整、不断优化,尽可能达到更有效、更高效的测试状态。上下文可以简单地理解为项目所处的环境,以及所要满足的条件等,包括项目人员、风险变化、研发状态、质量标准等。
可参考:上下文驱动的自动化测试方法(三)
用户思维的意思是要做对客户有价值的事情。
测试基础设施是支持测试运行、测试开发、测试管理,以及与研发环境集成的综合性平台。敏捷的目标就是要做到持续交付,尽快向用户交付满足需要的、有价值的软件,那么敏捷测试就离不开稳定、高效、准确的基础设施,以满足对于持续交付的需要。而要做到持续交付,需要做到持续运维、持续部署、持续测试、测试集成、测试构建。
持续构建,包括代码的编译、测试、打包等活动
持续集成,关注的是让代码能够工作在一起,以便开展进一步的测试。
持续测试,不等于自动化测试,一次迭代中的新功能特性的测试采用手工(探索式)测试更高效,回归测试尽量用自动化的方式持续验证新的代码和功能。
持续部署,就是按需部署,通过技术手段随时随地、快速地将软件包部署到各类环境(包括测试环境、准生产环境、生产环境)中,并确保系统可以正常工作。
持续运维,要实现全自动的监控、告警、故障定位和自愈,以及自动的数据收集、分析和处理。
持续交付,是一种能力,也就是说,能够以可持续方式,安全、快速地把代码变更部署到生产环境,让用户使用。
~需要测试左移~
测试左移是指让测试尽早开始,把测试活动左移到需求分析阶段,目的是及时发现研发前期的错误,避免将错误带到后面的研发活动中。测试左移通过持续地对产品需求和设计进行评审,及时发现需求定义和设计中的问题,加强单元测试、持续集成等。
~需要测试右移~
需求不清晰(可协商的需求)
需求频繁变更
时间太紧张
自动化测试的有效性
类别 | 内容及潜在影响 | 控制措施 |
---|---|---|
需求风险 | 需求不清晰、频繁变更导致测试计划、工作量等发生变化 | 和产品人员充分沟通,深度参与需求评审 |
自动化测试 | 自动化测试覆盖率、有效性等 | 对测试自动化进行合理的分层测试,提高单元测试和接口测试的覆盖率 |
人员风险 | 测试人员的状态、责任感等 | 加强团队人员建设 |
环境风险 | 测试环境是一个模拟环境,很难和实际运行环境一致 | 测试右移,生产环境持续测试 |
测试范围(广度) | 很难完成100%的测试覆盖率,有些异常case及细节容易被忽视 | 在有条件的情况下,采用交叉测试 |
4. 传统测试与敏捷测试的区别
传统测试更强调测试的独立性,将“开发人员”角色和“测试人员”角色分得比较清楚。而敏捷测试可以有专职的测试人员,或者少量的测试人员,也可以是“全民”测试,即在敏捷测试中,可以没有“测试人员”角色,强调整个团队对测试负责。
传统测试具有明显的阶段性,从需求评审、审计评审、单元测试、集成测试、到系统测试等,从测试计划、测试设计、测试执行、测试报告,逐个阶段往前推进, 而敏捷测绘更强调更早测试、持续测试、持续的质量反馈(就算软件上线,测试活动也没有结束),没有明确的阶段界限。
传统测试强调测试的计划性,而敏捷测试更强调测试的速度和适应性,侧重不断地调整计划以适应需求的变化。
传统测试强调测试测试是由“验证”和“确认”两种活动构成,而敏捷测试没有这种区分,始终以用户需求为中心,每时每刻不离用户需求,将验证和确认统一起来。
传统测试关注测试文档,包括测试计划、测试用例、缺陷报告、和测试报告等,而敏捷测试更关注产品本身,关注可以交付的客户价值。在敏捷测试中,强调面对面的沟通、协作,强调持续的质量反馈、缺陷预防。
传统测试鼓励自动化测试,但自动化测试的成功与否对测试没有致命的影响,但敏捷测试的基础就是自动化测试,敏捷测试是由良好的自动化测试框架支撑的快速测试。