阿里研究员:测试稳定性三板斧,我怎么用?

阿里妹导读:如何治理测试稳定性问题?很多人会说:环境、流程管控、监控、工具化、加机器、专人负责、等等。这些都是对的。不过这些都是解决方案层面的,而不是方法论和理论体系层面的。今天,阿里研究员郑子颖来说说测试稳定性的三板斧。据说,阿里同学们都非常认同这三板斧,看完文章感觉很多做的事情有了理论基础。

郑子颖:阿里巴巴研究员,2002年上海交通大学计算机系硕士毕业。2018年3月加入阿里,负责质量和技术风险。

1. 测试稳定性问题

理想情况下,我们希望每一个失败的测试用例[1]都是由真正的缺陷引起的。实际情况中,用例失败的原因大多是一些其他的原因:

  • 某个服务的版本部署的不对
  • 测试执行机的硬盘满了,因为上次运行时写的log没清掉
  • 数据库里有脏数据
  • 测试用例写得有问题
  • 测试运行时有人手工执行了一次定时任务,把流水捞走了
  • 消息串了
  • ...

每次排查都是一堆这种问题,时间久了,开发和测试同学也就疲了。有些同学对失败的用例草草看一眼,就说这是一个“环境问题”,不再排查下去了。如此一来,很多真正的缺陷就被漏过了。

2. 测试稳定性三板斧

如何治理测试稳定性问题?很多人会说:环境、流程管控、监控、工具化、加机器、专人负责、等等。这些都是对的。不过这些都是解决方案层面的,而不是方法论和理论体系层面的。

在方法论和理论体系层面,我们对安全生产有三板斧:可灰度、可监控、可回滚。类似的,对于测试稳定性,我也有三板斧:

  • 高频(Frequency)
  • 隔离(Isolation)
  • 用完即抛(Disposable)

三板斧之一:高频

"If it hurts, do it more often"是我说的最多的一句话之一。这句话从Martin Fowler那儿来的,有兴趣的可以读一下他的那篇“Frequency Reduces Difficulty”的原文。

高频跑测试的好处是:

  • 缩短验证的delay
  • 变主动验证为“消极等待”
  • 识别intermittent的问题
  • 暴露各层面的不稳定因素
  • 倒逼人肉环节的自动化
  • 提供更多的数据供分析
  • ...

高频不单单是治理测试稳定性的不二法门,也是治理其他工程问题的game changer:

  • 持续打包:以前只是在部署测试环境前才打包,经常因为打包的问题导致部署花了很多时间,还影响了后面的测试进度。针对这个问题,我们做了持续打包,每个小时都会对master的HEAD打包,一旦遇到问题(例如:依赖的mvn包缺失、配置缺失、等等),马上修复。
  • 天天上生产:现在每周发一次生产环境,每次都费事费力。我提出能不能天天上生产。发布还是按照原来的节奏来,每周发一次新代码,一周里的其余日子,就算没有新代码也要走一遍生产发布。空转。不为别的,就是为了要用高频来暴露问题、倒逼人肉环节的自动化、倒逼各种环节的优化。
  • 分支合并很痛苦,那就频繁合并,一天一次,一天多次。做到极致就变成了主干开发,一直在rebase、一直在提交。

蚂蚁的SRE团队也是用的是高频的思路。为了加强容灾能力建设、提高容灾演练的成功率,SRE团队的一个主打思想就是要高频演练,用高频演练来充分暴露问题、倒逼能力建设。

高频也不是那么容易做到的。

高频需要基建保障。首先,高频需要资源。高频执行还会给基建的各个方面造成前所未有的压力。高频还需要能力水平达到一定的基准。就拿SRE的高频演练来说吧。如果每次演练还有很多问题,那是不可能搞高频的。能高频做演练的前提是我们的隔离机制、恢复能力已经到一定的水平了。对于测试运行来说,高频跑测试要收到效果,需要把隔离和用完即抛做好。

对于高频跑测试,一个很常见的疑虑是:原来一天只跑一次,失败的用例我已经没有时间一一排查了,现在高频跑了,我岂不是更没时间了?我的回答是:实际上,并不会这样,因为开始高频跑了以后,很快问题就会收敛的,所以总的需要排查的量可能是差不多的或者反而小了的。

三板斧之二:隔离

相比起三板斧里的其他两个(高频、用完即抛),隔离的重要性应该是比较被广为接受的。隔离的好处包括:

  • 避免测试运行彼此影响,减少噪音。
  • 提高效率,执行某些破坏性测试的时候不再需要相互协调

隔离无非是两种:硬隔离、软隔离。至于到底是走硬隔离路线,还是走软隔离路线,要根据技术栈、架构、业务形态来具体分析。不过两条道路都是能通往终局:

  • 硬隔离(全隔离环境、物理隔离)要成为终态,关键是成本。要在不增加质量盲区的前提下压缩成本。例如,如果能把整个支付系统都压缩在一台服务器里面跑[2],而且所有的功能(包括中间件层面的,例如定时任务、消息订阅、分库分表规则等)都能很好的覆盖,那是一个理想的终局。每个人都可以随时搞几套全量环境,那是很爽的。另外,对架构的拆分解耦(例如,我们做的按域独立发布)是有助于降低硬隔离的成本的,可以把一整套被测系统部署的scope大大缩小。
  • 软隔离(半共享环境,逻辑隔离,链路级别隔离)要成为终局,关键是隔离的效果。如果隔离做到完美了,就能把今天的联调环境部署到生产环境里去跑。这样,就不存在stable环境稳定性的问题了。这样,做到了真正的testing in production,也是个很理想的终局状态。

这两种终局状态,我在我以前的工作中都达到过。的确都能work的。这两种隔离要通往终局,都是技术挑战。压缩成本是技术问题。逻辑隔离做彻底做牢靠也是技术问题。

对于我们今天的支付或电商系统来说,我们未来的终局是硬隔离还是软隔离呢?现在还很难说。从技术可行性方面判断,软隔离更有可能成为我们的终局。硬隔离做到深水区以后就很难做了,因为会遇到架构的物理极限。突破架构的物理极限,有可能产生新的质量盲区。但相当长的一段时间里,硬隔离会继续对我们帮助很大。例如,我们要做各种非常规测试的时候,就需要硬隔离。软隔离要做到能够支持非常规测试,技术复杂度很高。从上个财年开始,我在我团队搞一键拉全量测试环境(硬隔离)的原因就是:一键拉全量环境相对比较容易做,主要就是自动化,而基于路由的软隔离方案一下子还不太ready,短期内达到我们需要的隔离水平还很难。

硬隔离和软隔离也不是对立的,是可以一起用的。例如,我们在拉起基于路由的隔离环境的时候,拉会新的数据库。在数据库层面是一种硬隔离,是对数据库层面软隔离能力欠缺的一种补充。

总之,隔离是必须的。采取何种隔离方案,要阶段性的基于复杂度、成本、效果等因素的综合考量。

三板斧之三:用完即抛

我最喜欢的另一句话是:Test environment is ephemeral。这句话是我原创的。Ephemeral的意思就是short-living,短暂的,短命的。我对我的QA团队反复讲这句话,希望同学们能在日常工作中时刻记得这个原则。

"Test environment is ephemeral"就意味着:

  1. 我们的test setup能力要很强。我们今天在搞的一键拉起环境,就是这种能力的一部分。而且setup起来以后,要能快速verify。
  2. 我们的test strategy、test plan、testability design和test automation,必须不依赖一个long living的测试环境。包括:不能依赖一个long living 的test environment里面的一些老数据。例如,Test automation必须能自己造数据,造自己需要的所有的数据。

有了这些能力,能够以零人力成本、非常快速且非常repeatable的从无到有建一套“开箱即用”的测试环境,能够造出来测试需要的所有数据,我们就能做到测试环境的用完即抛:要跑测试了就新建一个环境,测试跑完了就把环境销毁掉。下次要用再建一个新的。而且,不单单是测试环境,测试执行机也要用完即抛。

对于用完还需要保留一定时间的环境,也要设一个比较短的上限。例如,我以前采用过这样的做法:

  • 联调测试环境默认生命周期是7天。
  • 如果到时间还需要保留,可以延展有效期(expiration date)。每次展期最多可以展7天(相当于是 newExpDate = now + 7,而不是newExpDate = currentExpDate + 7)。
  • 最多可以展期到30天(从createDate开始算),需要30天以上的,需要特批(比如,事业群CTO)。
  • 这样的好处就是倒逼。必须一刀切的倒逼,一开始会有点痛苦,但很快大家就会习惯的,自动化什么的很快就跟上了。不这么逼一逼,很多改进是不会发生的。

用完即抛的好处是:

  • 解决环境腐化问题,减少脏数据
  • 提高repeatability,确保每次测试运行的环境都是一致的
  • 倒逼各种优化和自动化能力的建设(测试环境的准备、造数据、等等)
  • 提高资源使用的流动性。实际的物理资源不变的前提下,增加流动性就能增加实际容量。

测试环境用完即抛的确会引入一些新的质量风险。如果有一套长期维护的环境,里面的数据是之前老版本的代码生成的,部署了新版本代码后,这些老数据是可以帮我们发现新代码里面的数据兼容性问题的。现在用完即抛,没有老数据了,这些数据兼容性问题就可能无法发现。

这个风险的确是存在的。解决这个风向的思路是往前看,而不是往回退。我们要探索数据兼容性问题是否有其他的解法。有没有其他的测试或者质量保障手段。甚至要想一想,怎么做到“从测到不测”,把数据兼容性问题通过架构设计来消除掉,让它不成为一个问题。

3. 落地

上面讲的三板斧,高频、隔离、用完即抛,的确是有点理想主义的。我们今天的基建、架构、自动化建设,离理想状态还有不少差距的。

但我们就是要有那么一点的理想主义的。把这三板斧做好,技术上的挑战是非常非常大的,但我们有乐观主义,相信我们能够达到目标。我们有现实主义,我们可以分解目标,结合实际情况,一步步的去做。

Note:
[1] 这里的用例主要指的是功能性的测试用例,包括:unit test、单系统的接口测试、全链路/端到端的测试,等等。
[2] 这样子做,实操层面的一个可能的负面影响是它可能会discourage微服务化治理(包括,域自治性,独立测试、独立发布能力等)。


原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/517959.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里架构总监一次讲透中台架构,13页PPT精华详解,建议收藏!

本文整理了阿里几位技术专家,如架构总监 谢纯良,中间件技术专家 玄难等几位大牛,关于中台架构的几次分享内容,将业务中台形态、中台全局架构、业务中台化、中台架构图、中台建设方法论、中台组织架构、企业中台建设实施步骤等总共…

Redis 6.0 的客户端缓存是怎么肥事?一文带你了解!

来源 | 程序员历小冰责编 | Carol封图 | CSDN 付费下载于视觉中国近日 Redis 6.0.0 GA 版本发布,这是 Redis 历史上最大的一次版本更新,包括了客户端缓存 (Client side caching)、ACL、Threaded I/O 和 Redis Cluster Proxy 等诸多更新。我们今天就依次聊…

AI时代,你的职业会是?99%的人都无法直面!

在我10岁的时候,算命先生曾对说我30岁时我会每天与八阿哥玩在一起。 当时懵懂的我一脸茫然,想着谁是我的八阿哥,却在30岁的这一年意识到自己确实日以继夜的与八阿哥在一起。 曾经,我们也担心自己未来的工作岗位是否会被人工智能给…

Java 12 新特性概述

Java 12 已如期于 3 月 19 日正式发布,此次更新是 Java 11 这一长期支持版本发布之后的一次常规更新,截至目前,Java 半年为发布周期,并且不会跳票承诺的发布模式,已经成功运行一年多了。通过这样的方式,Jav…

5G +边缘计算,优酷如何做云渲染?

作者| 阿里文娱高级技术专家 伊耆责编 | 屠敏头图 | CSDN 下载自东方 IC出品 | CSDN(ID:CSDNnews)当5G来了,视频还是平面的影像吗,只能静静观看吗?一定不是!现在,你可以像玩游戏一样…

不做会死!互联网时代的企业必定都要实现中台

AI 前线导读: 自 2018 年底以来,伴随着阿里、腾讯、百度、京东等一众互联网巨头的大规模组织架构调整,“中台”的热度陡然攀升。一时间,各大互联网公司纷纷开始跟随建设中台。中台的概念是被阿里带火的,2015 年&#x…

包机制。。

包机制 为了更好的组织类,java提供了包机制,用于区别类的命名空间//本质就是文件夹 包语法格式 package pkj[.pkg[.pkg3...]];一般利用公司域名倒置作为包名:com.boss.xxx 导入包语法 import package1[.package2...].(classname|*);尽量不要…

ETL异构数据源Datax_使用querySql_08

使用说明 当用户配置了这一项之后,DataX系统就会忽略table,column 这些配置型,直接使用这个配置项的内容对数据进行筛选,例 如需要进行多表join后同步数据,使用select a,b from table_a join table_b on table_a.id t…

我被“非结构化数据包围了”,请求支援!

阿里妹导读:非结构化数据的内容占据了当前数据海洋的80%。换句话来说,就是我们都被“非结构化数据”包围了。由于非结构化数据的信息量和信息的重要程度很难被界定,因此对非结构化数据的使用成为了难点。如果说结构化数据用详实的方式记录了企…

82年 AI程序员征婚启示火了!年薪百万,女生神回复

最近在某社区,一则程序员征婚启示火了!很多女生在评论区表示“全中”,想交流看看。然后评论区就炸了,有人恶意说yp,有人说看中了楼主的钱。笔者一翻,发现楼主果然无意中透露了百万年薪收入,虽然…

AWS 专家教你使用 Spring Boot 和 DJL ,轻松搭建企业级机器学习微服务!

作者 | Qing Lan,Mikhail Shapirov责编 | Carol封图 | CSDN 下载自视觉中国出品 | CSDN云计算(ID:CSDNcloud)许多AWS云服务的用户,无论是初创企业还是大公司,都在逐步将机器学习 (ML) 和深度学习 (DL) 任务…

【从入门到放弃-ZooKeeper】ZooKeeper入门

前言 ZooKeeper是一个分布式服务协调框架,可以用来维护分布式配置信息、服务注册中心、实现分布式锁等。在Hbase、Hadoop、kafka等项目中都有广泛的应用。随着分布式、微服务的普及,ZooKeeper已经成为我们日常开发工作中无法绕过的一环,本文…

ln: failed to create symbolic link ‘/usr/bin/mysql’: File exists

问题描述: ln -s /usr/local/mysql/bin/mysql /usr/bin 在centos7进行软链接设置的时候,出现了这么问题:问题就是说这个文件已存在, 解决方法:覆盖之前的 ln -sf /usr/local/mysql/bin/mysql /usr/bin

读透《阿里巴巴数据中台实践》,其到底有什么高明之处?

最近阿里巴巴分享了《阿里巴巴数据中台实践》这个PPT(自行搜索原始文章),对于数据中台的始作俑者,还是要怀着巨大的敬意去学习的,因此仔细的研读了,希望能发现一些不一样的东西。 读这些专业的PPT&#xf…

如果你也想做实时数仓…

数据仓库也是公司数据发展到一定规模后必然会提供的一种基础服务,数据仓库的建设也是“数据智能”中必不可少的一环。本文将从数据仓库的简介、经历了怎样的发展、如何建设、架构演变、应用案例以及实时数仓与离线数仓的对比六个方面全面分享关于数仓的详细内容。 …

华为云战略投入政企市场,发布华为云Stack

2020年5月15日,华为云发布政企战略,并宣布华为云Stack系列新品正式上市。华为云Stack是位于政企客户本地数据中心的云基础设施,能为政企客户提供在云上和本地部署体验一致的云服务。随着政企智能升级进入深水区,华为云将战略投入政…

如何在 Apache Flink 中使用 Python API?

本文根据 Apache Flink 系列直播课程整理而成,由 Apache Flink PMC,阿里巴巴高级技术专家 孙金城 分享。重点为大家介绍 Flink Python API 的现状及未来规划,主要内容包括:Apache Flink Python API 的前世今生和未来发展&#xff…

阿里云HBase Ganos全新升级,推空间、时空、遥感一体化基础云服务

1、HBase Ganos是什么 Ganos是阿里云时空PaaS服务的自研核心引擎。Ganos已作为云数据库时空引擎与数据库平台融合,建立了以自研云原生数据库POALRDB为基础,联合NoSQL大数据平台(Ali-HBASE和X-Pack Spark)的完整时空地理信息云化管…

看完这篇操作系统,和面试官扯皮就没问题了!

作者 | Cxuan责编 | Carol来源 | 程序员 cxuan封图 | CSDN 付费下载于视觉中国1、解释一下什么是操作系统操作系统是运行在计算机上最重要的一种软件,它管理计算机的资源和进程以及所有的硬件和软件。它为计算机硬件和软件提供了一种中间层。通常情况下,…

Linux centos7 安装 MySQL5.7.x

文章目录一、下载安装2. wget 下载方式3. 安装4. 初始化数据库二、修改密码2.1. 修改密码2.2. 修改密码2.3. 允许远程访问2.4. 关闭防火墙2.4. 建立mysql软连接一、下载安装 下载地址:https://dev.mysql.com/downloads/mysql/5.7.html#downloads 下载地址&#xff…