软件质量不是测出来的,但为什么又有这么多测试工程师为了质量而工作?测试是一个成本部门,测试创造的价值是什么?研发的模式在不断地变化,测试的定位如何不断去定义,未来的测试又会是什么形态?今天,阿里巴巴高级测试开发专家傲野总结了对未来测试形态的一些思考,希望对正在做测试的同学有所启发。

前言

从社会发展上来说,各领域的分工越来越细。但从技术部门的发展上来看,测试和开发的角色却是在不断融合,背后的原因是什么?是互联网迭代的速度越来越快促成的多角色融合,还是因为技术(特别是质量技术)先进生产力在逐渐取代落后的生产力?

在回答这些问题之前,我们先来回顾“测试工程师”作为一个职能或者个体在过去的发展历程:

  • 10年前,最初级的测试产出工件是比较一次性的,比如项目中写的文本型测试用例,基本在项目发布后就废弃了。
  • 那个时期测试工作的进阶是方法论,比如能够把测试用例的设计方法,项目流程管理讲得头头是道已经是高阶了。
  • 有一些技术能力的测试同学,投身于自动化脚本的编写。自动化在“软件”测试时代和互联网初期,是真正的硬核能力。

但这样的测试模式和效率都是非常低的,显然无法支撑互联网无快不破的浪潮。2010年以后,在头部企业的测试团队发生了一系列的变革,快速地从上述的这些初级能力,扩大到以 CI/CD 为驱动的技术体系,并最终推动了测试技术产品化进程,形成一个较为清晰的测试平台发展脉络。

在这个将近十年的周期中,由于测试工具、平台的不断创新,测试团队得到了一个突破性的发展。但工具作为传统测试模式的辅助手段,仍然会遇到突破的瓶颈。比如,从全球来看质量也发生了一定的分支:

  • 一种是不断坚持平台化的发展路径:项目质量是基础,不断孵化出各类的效能平台,解决的问题也从传统的质量领域本身,往研发各环节拓展。有些大型的企业也开始沉淀了通用的研发协同平台(研发流水线)。
  • 一种是从内往外突破:比如 Google 的 SRE 团队,以纯技术的手段,打造一个内建且自洽的质量体系(传统以证伪为理论依据的是一个外建的质量体系)。[1]

这两者的方向和目标,是有一定的重合的,比如有些公司以测试负责线下,SRE 负责线上进行区分。但如果从质量这个大的目标来看,未来的成功画面应该是:“质量和效率的结合”和“外建与自洽的结合”。因为只有这样,才能打造一个真正完整的技术质量生态。

实时质量

也是基于上述的一些思考和实践,我们在2017年底提出了“实时质量”的概念。“它不是一个具体的测试技术产品,而是一种面向未来解决质量问题的方法和手段。”

它的主要特性是:运行含测试,实时可反馈。

为什么要往这个方向发展?

随着技术的不断创新和交付模式的不断改变,对于测试团队来说,需要尽快地从交付型质量往实时质量方向进行转移。传统的交付型质量,把测试作为一道道关卡,以任务的方式布防在开发提测、项目发布时。这种方式存在不同角色之间的过多交互,只能起到单点的质量保障。而实时质量的目标是:将质量手段以模块、组件乃至系统化的方式嵌入到业务型应用中,形成实时保障质量的能力。未来开发和测试人员之间的合作(或者就不区分开发测试了),不仅仅是人与人之间的协同,更多是双方分别为完成“业务特性服务的代码”和为完成”业务质量服务的代码“而相互配合,并形成系统级的依赖关系。在提供的这些质量系统上,我们希望公司内部的各种角色都能成为质量的操作者。只在做到这些,我们才可能将测试工作真正从面向过程到面向对象。

图示:理想的测试工作方式

实时质量的架构

要做到质量的实时反馈和面向对象测试,这意味着我们的测试方法和协同方式发生了较为根本性的变化。我们需要以一个合适的方式参与到业务应用中,与此同时我们还需要把测试的各种能力封装成一个个服务,而不是现在的工具。工具终究是需要人来操作的,而我们希望未来测试任务的主体是机器、算法。测试人员只构建测试服务,而不参与测试过程,这也是最符合测试开发 Test Development Engineer 的 job design 。

图示:实时质量架构

那测试到底还需不需要做功能测试?可能在很长一段时间内仍然是需要的,但那一定只是日常工作中很小一部分。

实时质量是基于现有测试能力改造

我们在推进一个新的方向时,尽量不要去推翻重来。如果要面向未来,实时质量必须是可以向下兼容的,因为只是这样才能继承现有的测试沉淀,也才能被团队中的测试人员所接受和支持。只有自己不断进化才符合自然规律。所以我们需要更多强调对现有测试能力的改造,而避免另起炉灶。以下用运营页面测试的实时质量改造作为一个案例。

案例:运营页面的实时质量改造

作为电商域的同学对于运营页面应该非常熟悉,在之前也非常痛恨。比如:

“CBU的一次大促,运营人员至少需要配置千级以上的活动页面,而每一个页面上又包含几百上千个商品等活动元素,平均一个页面需要5到10分钟的人肉检测,同时运营和测试人员需要不断就测试标准和 Bug 来回讨论、提交。一次大促下来,我们至少需要十几人/日的测试资源才能保证会场的正确性。”

这个过程很痛苦,运营人员需要不断去找对应的测试同学协同,幸福感很差。而测试人员来说,这些页面的测试更多是一个重复劳动,一个黑盒。能力也得不到什么成长。我们如何对它来进行实时质量的改造呢?

总共分两步:

  1. 我们对传统的测试体系进行了改造。把以往通过人工测试的各个测试点,通过自动化的方式来实现。比如基于 DOM 树制定一系列规则,例如403这些的错误都可以被很好地扫描出来。同时,针对于一些无法通过规则排查的问题,我们运用了算法能力。例如空坑检测,一致性检测等。
  2. 把以上测试组件,通过消息的方式跟运营页面发布系统对接。

它的系统依赖关系是如下的:

图示:运营页面检测系统依赖图【示意】

同时针对于不同的业务场景,我们开发了不同的页面检测能力,比如针对于 DOM 树的页面检查:

还有基于算法能力的识别能力:

通过上述的改造后,对于运营人员发布页面以及页面的测试就极简化为三步一站式的能力。从以往运营、测试、开发之间的来回交接,变成了运营跟系统之间的交互。不仅提升了运营人员的页面搭建体验,也极大地提升了测试的效率。

在某次运行中活动中实际的执行结果【示意图】:

以上的过程和结果数据,也充分体现了“运行含测试,实时可反馈”的价值。

数据和算法是实时质量的核心

测试出现以来,我们一直习惯于代码逻辑类的测试,但数据一直都是测试很重要的生产材料。因为人肉执行任务的局限性,我们发明了等价类和边界值等测试理论和方法来用尽可能少的成本来尽可能多的验证问题。但一方面算法的不断应用,每一个数据都可能存在个性化的业务表达,我们可能无法找到一个通用的预期结果较验(还是会有一些通用的预期结果的,比如非空判断和区间等,但这类的预期不能很好地做业务判断)。因此,我们也需要用数据和算法能力来武装自己。

在以数据驱动的业务发展进程中,我们的测试主体已经从简单的代码转变为数据+算法。或者说,业务对质量的核心述求,已经从简单的页面错误、代码 BUG 到数据的准确性、算法的有效性(我老板在每次大促前,都要再三叮嘱我数据不能错)。如何来感知质量风险,以及捕获各类的异常?那必须先把数据、流量、监控来做收口,同时提升测试工具在大数据分析上的能力。

基于这些思考,我们构建了全域实时数据校验能力,是一款通过实时获取线上 DB 中的海量业务数据,完成业务数据校验、质量风险感知的产品。

案例:Captain 全域实时数据校验

图示:数据对比框架【示意】

它具备的一些能力:

  1. 严格的安全策略。
  2. 实时获取线上数据:通过强大的数据支持能力,平台可以在无损线上数据库表的前提下,通过 SQL 查询获取线上 DB 中的真实业务数据,且做到了实时获取,通过数据可以进行完善健壮的数据校验,从根本上提高对于业务的把控。
  3. 多样的数据获取方式:目前平台支持多种数据获取方式:单库单表查询、单库多表联表查询、分库分表查询、跨库的多表的联表查询。
  4. 多种比对方式支持,比如跨库查询和联表查询等等。

最主要,它可以用一套脚本无损地支持测试环境、灰度、生产环境等。让线下测试的所有经验可以得到复用和沉淀。(我们内部调侃说,这才是带着测试的灵魂的,而其他的很多产品都只是一个面向开发的工具)

在前期解决数据一致性,对账等常用的基本需求上,我们可以依赖于这些数据和测试的服务,展开更多的业务形态。

实时质量需要不断突破测试的边界

测试的边界在哪里?

过去有人告诉我,不能去修改业务应用的代码,只能让在盒子外面或者调用的方式来测试。还有人说,我们只开发工具,不能接触任何的业务。现在这些都在逐渐模糊,大家努力一起,让测试的很多活动,从简单的功能测试,往研发工具和业务质量等或前或后地迁移。

在过去的一两年,我们团队也已经慢慢承接了更多的职责,有些甚至于是直接服务于客服、运营和产品人员的。我认为,一支强的团队一定是不断走在突破原来工作边界的道路上。没有什么是一成不变的。

但每个职能团队都是有自己的核心价值的,而至于哪些应该由测试来做,哪些由开发做。我们的标准是:判断这件事情是更为了“让技术更有品质”还是“让技术创造新商业”?(“让技术更有品质”是我们团队的使命,“让技术拓展业务边界”是开发团队的目标)

以下虽然是几年前的例子,但也很好的体现了我们在边界的突破,以及如何用实时质量的思想来开装自己,创造提交 BUG 以外更多的价值。

案例:Offer 360提升客服端实时质量能力

商品链路复杂,线上问题排查难度大,之前开发每天平均投入2-3个小时处理线上问题,但实际上大部分的问题都是正常业务逻辑,并且可以让客满或者技术支持自助查询的。因此,我们通过提供实时查询错误日志以及 debug 信息的服务,把用户反馈问题的排查,开放给客服。帮助他们第一时间解决用户的问题。

实时质量未来规划

实时质量是一种思想,我觉得它未来是可以跨越在当前两种不同的发展分支上的。

测试这么多年来一直被弱化,我也看到集团很多优秀的测试 leader 转型开发、产品。如果我们还不多些思考,多些探索。如果做测试都还没有梦想,那跟咸鱼有什么区别?

图示:测试未来的发展

后记

上周在内部的论坛上看到一个开发专家的留言,还是挺有感触的。我们一直以来都在强调测试能力不断演进,强调开发能力,但测试的初心不能丢。我们在工具、测试能力上不断改进,但是从人和组织的角度上来看,在追求最高效的同时,我们是需要一定的组织设计来形成岗位间的相互监督。这也是在测试1.0阶段开始,测试被赋予的一种职责。

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

如果测试没有梦想,那跟咸鱼有什么区别?相关推荐

  1. python做数据和大数据区别_不懂Python,不懂大数据的人,和咸鱼有什么区别?

    原标题:不懂Python,不懂大数据的人,和咸鱼有什么区别? 在这个处处充斥着大数据影响的时代之下,不懂Python,不懂大数据,你就可能轻易地错过身边的黄金. 我们生活在数据密布的环境中,就像< ...

  2. 不想remote的程序员跟咸鱼有什么区别?

    这里是程序员客栈播报时间,在刚刚过去的感恩节,朋友圈一片祥和,纷纷感谢生活.感谢朋友.感谢走过的路.感谢栽过的坑......翠花就不禁想问了,就没有要感谢金主爸爸的吗? 在这里我替各位感谢一下掏过钱的 ...

  3. 渗透测试:正义黑客的渗透测试以及该过程和黑客活动的区别

    2019独角兽企业重金招聘Python工程师标准>>> 渗透测试是正义黑客大展身手的地方.他们可以对漏洞评估中识别出的许多漏洞进行测试,以量化该漏洞带来的实际威胁和风险. 当正义黑客 ...

  4. app测试中,安卓和IOS有哪些区别(持续补充ing)

    app测试中ios和Android的区别: 1.Android长按home键呼出应用列表和切换应用,然后右滑则终止应用: 2.多分辨率测试,Android端20多种,ios较少: 3.机操作系统,An ...

  5. 程序员不会理财,那跟咸鱼有什么区别?

    前言 程序员给人的普遍印象,木讷,沉稳,话少,衣服不多,换来换去就那几套,整天对着个电脑,有时还能发出嘻嘻的怪笑声.看他们对正常人都没有对电脑(编程)的兴趣高. 你是否为自己的低收入而担忧,每年工资的 ...

  6. 系小米前测试总监告诉你手工与自动化的区别,我们为什么要学习它们

    Time will tell. 1.手动测试简介 手动测试是其由QA分析师手动执行对软件的测试.执行此操作是为了发现正在开发的软件中的错误. 在手动测试中,测试人员将检查给定应用程序或软件的所有基本功 ...

  7. 华为mate10pro测试软件,华为Mate10和华为Mate10Pro的区别在哪里?华为Mate10和华为Mate10Pro对比测评告诉你(附全文)...

    10月20日,新一代华为Mate10和Mate10Pro重磅旗舰机正式上市,不过今年的这两款新旗舰,只有一款是全面屏,另一款为非全面屏.那么对于花粉来说,华为Mate10和Mate10Pro买哪个好, ...

  8. 一个人如果没有计划,那和咸鱼有什么区别!

    我一直以来所追求的进步,一定不要随着时间的流逝而淡化. 转载于:https://www.cnblogs.com/liuna/p/5441946.html

  9. 用什么软件抓cd音轨音质最好_开车不嗨皮,那跟咸鱼有什么区别

    文 | 大青枣 图 | 潘隐 跑长途是件很无聊的事情,看着车窗外的车水马龙,想到接下来的漫漫长路,立马就想打盹. 但正所谓行车不规范,亲人两行泪.所以为了让能够安全并快乐的从A点到B点.司机和主机厂都 ...

最新文章

  1. 使用KNN进行缺失值填补详解及实践
  2. 分组卷积新进展,全自动学习的分组有哪些经典模型?
  3. Nature『大脑废物清除系统』已上线,从“痴呆”变聪明或成可能
  4. 成功解决AttributeError: ‘int‘ object has no attribute ‘encode‘
  5. bzoj 4487: [Jsoi2015]染色问题
  6. mysql怎么显示、查询现有数据库列表?(show databases;)怎么删除现有数据库?(drop database <库名>)
  7. How to write an operating system
  8. 全网最新Spring Boot2.5.1整合Activiti5.22.0企业实战教程<入门篇>
  9. ROS笔记(1) ROS简介
  10. avs v7.0 php,AVS v7.0 – PHP在线视频上传分享程序
  11. 一加9 Pro真机图曝光:哈苏相机联名logo助力影像旗舰
  12. apache 网站转nginx_堡塔网站加速宝塔面板网站加速安装设置使用教程
  13. 静态代码块与构造函数的作用
  14. 【Java】JavaSE JDK 及离线帮助文档下载链接
  15. quarkus数据库篇之二:无需数据库也能运行增删改查(dev模式)
  16. 日本外贸市场开发攻略
  17. 机器学习经典模型简单使用及归一化(标准化)影响
  18. 品酒论三国之一(帅才的典型特征)
  19. alt复制选区就会卡 ps_ps怎么把选区复制出来
  20. python 天勤 金叉 编程代码_Python量化交易工具之#39;自适应#39;跟踪止盈算法,进阶必看!...

热门文章

  1. mysql双主 绿色_mysql (双主,互主)
  2. Java中AJAX工作原理是什么
  3. python字典替换值_python字典改变value值方法总结
  4. java文件学生_文件存储学生信息(JavaIO流)
  5. simulink仿真及代码生成技术入门到精通_Simulink仿真零基础入门到精通实用教学教程 自学全套...
  6. vfp操作excel排序_中招计算机信息技术考试训练|Excel操作题一|排序和筛选
  7. java kcp,重新认识KCP - osc_rreaoxa0的个人空间 - OSCHINA - 中文开源技术交流社区
  8. 励志!从中专生到清华博士的逆袭人生
  9. 卷烟厂招工内卷:要求本科以上,但报名的硕士太多
  10. 官宣!又一所新大学来了!