本文介绍企业在敏捷和 DevOps 的逐步转型过程中,测试如何应对挑战,有的放矢进行测试,建立适合产品自身发展阶段、产品特点的敏捷测试能力。
在上篇中,我们阐述了敏捷和 DevOps、测试债务、测试的焦点:业务价值的质量、以及自动化测试金字塔。(延伸阅读:测试微课堂 | DevOps 敏捷测试之道(上))
在这篇中,我们继续关于 DevOps 敏捷测试之道的干货分享。
常规安全与弹性安全
在我们常规的设想中,通常是哪个地方不安全,就一定要把所有不安全的因素找出来,清除掉。
这是常规的做法,但却偏向于理想,在实际工作中是不可能把整个系统中不安全的因子全部识别到的,这其中涉及能力、架构等各方面的原因。
因而在此基础上演变出了弹性安全,就是通过场景模拟的方式将不安全因素尽量展现出来,从而基于这种不安全场景,给出快速的修复方案弥补这个不安全因素,从用户角度来讲是感知不到的。
从产品来讲,它的商业目的和质量目的都可以达到,这就是所谓的弹性安全,即便发生了错误,能够及时快速的修复漏洞或者自我修复,达到正常工作的目的。
测试左移和测试右移
左移就是前移,尽量把活动向前移。
例如 BDD 行为开发,基于场景直接设计出符合这个场景的用例,来匹配这个设计;契约测试,服务和服务本身之间有耦合,我们可以通过契约测试解耦,以防导致问题。
测试右移是指要把测试活动的覆盖范围尽量向后蔓延。
通常的测试只进行到了版本发布之前,测好之后发布一个软件包,而测试右移要把软件包发布到生产环境,以及到线上运营环节,都要去做测试。在这两个方面也有一些相应的实践实践,例如线上拨测,主动线上监控用户的一些行为,并从行为轨迹里面快速捕捉相应的问题,主动推送给相关的责任人,让他去关注并且解决。
所以线上的过程可以通过一些测试手段,不断的反馈给真正的开发人员,让他知道当前产品的整体表现,开发人员就会快速的针对产品作出应对方案。
产品发展不同时期的测试策略
是否这个团队组建之初,就要把整个自动化测试的能力构建起来呢?其实这有一个过程,下面从软件的成熟周期的角度,看一下如何构建测试自动化的能力。
在软件初期探索阶段,产品是一个不确定的状态,从前端的风格和整体的布局到后端的 API 都时刻在变化当中,而且变化比较频繁,因为自动化用例的生命周期比较短,所以在这个时候创建一些自动化测试用例是不太划算的。
而这个时间段的产品,往往特性是可控制的,只有几个测试,所以可以以手动为主,不考虑自动化,让产品能够快速识别错误点,让用户能用起来。到了产品扩张阶段,用户认可产品,这时候会出现两个现象。第一是用户量增长,第二是需求数量增长。这时候必须要考虑自动化。因为在这个阶段每一次迭代的全量验证成本会越来越大,而交付的速度也会越来越快。我们不可能每一轮上线的时候都全部用手工做测试,这时候旧的模块就需要自动化用例去保证。
到产品提取阶段,产品已经到了需求的饱和期,产品的利益增长也到了饱和期,这时候要严格控制产品需求,自动化用例的职责变成守护,不允许变动引入额外的风险点、大的特性变动,导致对成熟的用户造成攻击。
团队规模对测试建设的影响
当团队规模在 5 个人以下,团队处于探索阶段,这时质量活动可以仅仅局限于测试的自组织阶段,只是做一些基础类测试管理活动,把缺陷管理起来,做一些回归测试。在这个阶段主要是建立一个测试管理的流程和机制,并没有接触到自动化测试。
随着项目的进一步扩大,逐渐增长到 5-10 人的团队规模,这时测试工作量突然增加,可能会有专门的测试人员进来,这个测试人员就会去和开发人员进行串联,把需求转化成自动化测试的用例,搭建持续集成,逐步演进一些测试手段。这个阶段已经开始做一些自动化的尝试。
团队进一步增大,一个人可能搞不定工作量的时候,会招聘更多的测试人员,成立专门的测试团队,这个团队就从自动化测试转向测试自动化,把更多的管理工作做进来。在这个管理过程中,我们会做一些产品的对接,包括开发专门的工具,实现自动化的整体能力,不仅仅是自动化执行了。
经过上面几个演进周期之后,测试团队具备了很多的测试自动化经验,这个时候可以进行面向云化的转型,现在很多团队都在进行 DevOps 转型,最关心的方面就是组建 DevOps 的全功能团队。那么之前转型的这些人在做什么?原有 10-15 人的测试专项团队做什么?在这个阶段团队要把测试专项能力向服务化能力转型。
这时候测试专员就会在团队创建初期进行赋能,包括测试工程搭建,早期的测试用例怎么写,标准化模板的编制,针对非功能性测试的专项能力的赋能,所有团队进行测试流程的评审,包括测试策略、测试计划、测试用例的评审,再看一下整个团队里面流程上还有哪些改进的。从各个方面整个专项测试团队向服务化进行转型,帮助所有团队完成自动化转型。
自动化测试和测试自动化
这里要澄清一个概念,就是测试自动化(Test Automation)。测试自动化的目的是减少手工测试和手工操作。测试自动化不仅仅包括自动化测试执行(Automated Testing),还包括其他所有可以减人力投入的活动,例如自动化创建测试环境、自动化部署被测系统、自动化监控、自动化数据分析等。
很多自动化测试只是测试的执行部分,例如把一些测试执行的人工测试手段做成自动化测试,但是测试自动化不仅仅是只是执行,还包括了从环境的获取到生成测试数据、执行自动化测试,最终生成结果。如果有问题,会自动推送给相关的人,对应的组织解决。自动生成测试报告,测试人员直接拿到测试结果。
本文转载自华为云产品与解决方案站公众号。
原文链接:https://mp.weixin.qq.com/s/MV24DQ-OnC2QPd98_9WMLg
评论