测试工程师为什么要关注研发效能?

news2024/11/10 18:36:34

研发效能中的“研发”,指的是广义的研发团队,包含开发、测试、和研发团队内部的产品经理(不包含业务部门的产品经理)。测试工程师身处其中,作为研发团队的一员,对于整体的效能如何提升也应该了然于胸。这篇文章,我们来详细聊聊为什么测试工程师需要关注研发效能。


测试团队的价值困境
在效能改进方面,测试团队的困境往往是不能很好地自证价值。单纯从本位主义出发、只考虑测试团队自身的效能目标,不一定能给研发团队带来整体效益。
比如,有些测试团队会制定缺陷数量的目标,如果仅仅从测试团队自身角度来考量,这个目标是能够产生一定效用的。可是站在整个团队角度思考,却会产生副作用,这种情况想必很多同行遇到过。
还有一些团队致力于提升测试效率,着手点就是通过大规模开展自动化测试来提升自动化测试比例(自动化测试用例数量/自动化测试用例数量+手工测试用例数量)。通过自动化测试,让机器自动执行过往需要手动执行的重复工作用,理想状态下是提升效率的最佳手段。然而,实际效果有时却没那么理想,当研发总监提出这样的质疑:“自动化测试比例这么高,为什么测试周期没有缩短,测试人员没有减少呢?”,测试团队只能无言以对。

图1-自动化测试的效能



而研发效能领域,正是测试开发团队突破瓶颈的最优选项。
和朋友聊天,发现关注和从事研发效能领域工作的有几波人,包括敏捷教练、项目经理、质量和测试开发团队、研发 Leader 和架构师,大家的视角略有差异,同时也存在相似性。
引用京东技术专家新栋老师分享过的 PPT 的图片来说明:

图 2-研发效能提升“金三角”(引自:研发效能提升三部曲-王新栋)


这些关注研发效能的角色当中,架构师和测试开发团队侧重工程领域,也就是图中的流程机制和基础设施两部分。随着这几年测试团队转型的潮流,很多测试开发团队负责的领域越来越广,从质量内建、效能工具、SRE 和流程改进等方面都有涉猎,正好切合了研发效能的横跨全生命周期的特点。而测试开发团队在基础设施和架构层面的弱势,可以通过和架构师团队合作,从而达成结果。


提升测试效能就是为研发效能做贡献
现在无论是互联网企业,还是传统 IT 企业,“唯快不破”的理念已经深入人心。而在整个产品交付过程中,测试阶段的时间占比和人力投入都是不容小视的,这种情况下,如何提升测试效能就成了一个关键的问题,提升测试效能不仅仅给测试团队带来收益,还能影响整个研发团队的价值交付效率。
DevOps 的基础实践之一就是通过部署流水线打通整个研发过程,并且通过各个阶段的自动化,实现交付效率的提升。其中自动化技术实践包含自动代码扫描、自动化测试和自动化环境部署等,都是测试开发团队持续关注且擅长的。

图 3-自动化技术实践


提升测试效能可以从回归测试做起。在敏捷和 DevOps 的软件开发方法模式下,提倡把大需求进行拆分,把按季度/月交付的周期切分为两周一个迭代进行交付,从而提升研发团队的需求吞吐率。这给测试工作带来了新的挑战——如果不能精准定位测试范围,而选择每次迭代都进行全量的用例回归的话,其工作量是非常大的。
流量录制回放技术和测试精准化是业界常用的实践。通过流量录制回放来生成回归测试用例集,可以极大减少自动化用例编写和维护的时间成本。而测试精准化实践能够精准化匹配代码变更范围,从而推荐最小有效回归用例集,使回归测试执行效率达到最优。

图 4-提升回归测试效率的技术手段



质量内建是效能提升的关键实践
有时候我们会把测试效率提升作为重点,其实质量内建同样是效能提升中不容忽视的关键实践之一。
质量是效能的一部分,我们应该从开始就认识到,效能包含但不等同于效率,质量同样非常重要。“质量是设计和构建出来的,不是测试出来的”的理念已经逐渐被大家所认识到。因此,在设计和开发阶段就需要引入一些实践,来实现质量的内建。

图 5-质量内建的实践


测试开发团队擅长质量工具和平台的建设,可以通过测试能力平台化和服务化的方法把测试能力赋能给架构师和开发人员。具体包含:

  • 通过搭建代码质量平台来实现对静态代码扫描和人工代码评审的支持;
  • 通过自动生成单元测试技术来减少单元测试用例编写的工作量,通过单元测试覆盖率工具来衡量单元测试的有效性;
  • 通过建设低代码/无代码的接口测试平台,使开发人员能够低成本实现接口级别的测试;
  • 把界面测试、接口测试和单元测试等不同类型的测试抽离成为独立的测试服务,组装形成不同类型测试任务的混合编排,并且实现与流水线的集成,从而全面支持质量内建实践。

可靠的内建质量不仅提升了软件品质,也为效率提升打下了基础——一方面减少了缺陷和事故概率,使得研发团队不再四处奔忙于救火;另一方面通过测试能力平台化和服务化,降低架构师和开发人员的精力成本,而能够更专注于他们擅长的工作。


测试开发团队向左和向右的效能边界拓展
由于测试处于研发生命周期偏下游的位置,为了化被动为主动,避免由于前期的进度延期或者质量较差等问题影响测试阶段的正常进行,往往会更加关注流程。
其中,比较典型的实践是实现“提测/送测”流程的线上化,使提测流程标准化和自动化。

图 6-提测流程的线上化


相比起来产研团队中的其他角色,测试开发更关注流程,且具备流程线上化和平台化的实际经验。因此测试开发团队常常会把这种能力扩展到需求和发布运维阶段,从而实现需求全生命周期端到端的流程线上化执行。有不少案例表明,端到端的持续交付平台或者 DevOps 平台都是在此基础上不断完善、演进而来的。

图 7-研发流程线上化



从质量度量走向效能度量
做测试时间比较长的朋友们应该都对缺陷燃尽图比较熟悉了。通过观察缺陷燃尽图是否收敛,可以判断一个软件和系统版本的质量情况——如果临近发版的时候,缺陷数量还在不断发散(新增),那此次发版能够按计划施行的几率就比较小了。
在团队还未实现整个研发流程的线上化和平台化时,往往会最先实现缺陷管理的规范化。因此,基于缺陷数据来进行质量分析是我们常用的手段。缺陷数量、缺陷严重等级、缺陷逃逸率、缺陷燃尽图、缺陷密度和人均缺陷数量等等指标从不同视角刻画了研发的质量表现。
而研发团队中关注度量的其他角色,如项目经理和传统 QA 人员,在工具平台建设方面缺少投入和具体的实践;而测试开发团队从一开始就担负着缺陷管理工具、自动化测试报表和测试报告统计等工具的建设工作。因此我们看到,很多由产研团队内部孵化出来的效能度量工具平台,都是由测试开发团队来推动和建设的。
由产研团队内部演进出来的效能度量工具和平台,一般更聚焦于工程性指标和过程改进,更符合产研团队的具体需求。相比之下,由专门的平台部门建设的效能度量平台,则更擅长于大量数据分析、关联数据分析、数据报表下钻等方面。
正是由于两者互有特长,两个团队可以通过合作实现一举两得,既保证海量数据的分析和处理能力,又在一线团队很好地实现落地改进。

图 8-合作共建效能度量


小结
研发效能提升离不开团队中多个角色的协同。其中,测试工程师逐步转型为测试开发工程师,越来越多的测试同仁具备了全栈的技术能力。也许一个测试开发人员,对需求和业务的理解不如产品经理深刻,对代码和架构的掌握不如开发人员精通,对运维和监控的体系不如 SRE 熟练。但是,由于质量和效率是贯穿全流程的,因此对测试开发人员应具备的知识技能的要求也是全栈的。在研发效能的提升之战中,每一个测试开发工程师都必然是先行者。



作者
熊志男,DevOps 咨询顾问/研发效能专家。曾负责京东行云 DevOps 平台的产品规划和架构设计,平台覆盖万人规模的产研团队;曾作为京东数科一站式自动化测试平台的架构师和负责人,推动集团内部多个质量测试平台的共建;曾推动京东商城代码质量平台建设,并实现业务研发团队规模化持续集成落地。
云上软件工程社区 2022 年度研发效能方向创新技术专家,曾担任 QECon2021 的自动化测试专场出品人,测试窝社区联合创始人。

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

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

相关文章

【论文写作】如何写科技论文?万能模板!!!(以IEEE会议论文为例)

0. 写在前面 常言道,科技论文犹如“八股文”,有固定的写作模式。本篇博客主要是针对工程方面的论文的结构以及写作链条的一些整理,并不是为了提高或者润色一篇论文的表达。基本上所有的论文,都需要先构思好一些点子,有…

「计算机控制系统」5. 模拟设计法

模拟控制器的离散化 数字PID控制器 Smith预估控制 文章目录 模拟控制器的离散化数值积分法一阶后向差分法一阶前向差分法双线性变换法(Tustin) 零极点匹配法其他方法 数字PID控制器模拟PID控制器的离散化数字PID的改进PID控制各环节的作用PID参数的整定扩…

win11删除的文件不在回收站原因及找回文件方法

win11是微软最新推出的操作系统,它的外观和功能都有所升级。但是,在使用win11的过程中,有时候你会误删一些重要的文件,而这些文件并没有进入回收站,这该怎么办呢?win11删除的文件不在回收站怎么找回&#x…

[强化学习]学习路线和关键词拾零

强化学习学习方法和路线 学习路线 先从基础教材开始,构建RL的知识框架,熟悉关键名词和公式推导,扩展到Model-Free的Value-Based和Policy-Based方法,同时参考github的代码练习。接下来精读几篇经典论文,如DQN,PPO等。…

Node内置模块 【压缩zlib模块】

文章目录 🌟前言🌟zlib模块🌟关于gzip与deflate🌟使用zlib🌟压缩与解压缩🌟案例:压缩🌟案例:解压缩 🌟服务端gzip压缩🌟HTTP配置🌟HTT…

Android Binder图文详解和驱动源码分析

文章目录 前言一、跨进程通讯的过程1. AIDL客户端代码2. AIDL服务端代码3. 通信过程a. 发送请求时序图b. 接收请求时序图 二、Binder一次拷贝1. 发送给Binder驱动的数据2. 一次拷贝示意图 三、Binder驱动源码1. 相关数据结构2. 阅读Binder驱动源码 参考 前言 最近在学习Binder…

Jupyter Notebook的安装与使用

Jupyter Notebook Jupyter Notebook介绍Jupyter Notebook使用安装启动创建文件编写代码和文本常用命令配置文件 Anaconda Jupyter Notebook介绍 Jupyter Notebook是一个基于Web的交互式计算环境,可以让用户以文档形式记录代码、数据分析结果和说明文本,并…

认识ThinkPHP框架

认识ThinkPHP框架 前言一、MVC框架体系二、 ThinkPHP框架文件夹结构三. ThinkPHP下载和基本配置四. ThinkPHP其他东西 前言 ThinkPHP框架是一款非常优秀的PHP框架,是完全由中国人发明的框架 一、MVC框架体系 ThinkPHP框架由MVC框架体系构成,MVC的解释如下…

ubuntu下安装配置grpc

目录 1.准备环境 2.安装protobuf 3.安装cares库 3.安装grpc-1.17.x 1.准备环境 sudo apt-get install pkg-config sudo apt-get install autoconf automake libtool make g unzip sudo apt-get install libgflags-dev libgtest-dev sudo apt-get install clang libc-dev 如…

linux中的vim编辑器

Vim是一款强大的文本编辑器,可以在终端中使用。它有很多优点,比如快速、高效、灵活等,但同时也有一些难以掌握的操作。在本篇博客中,我们将详细介绍Vim的各种功能,以及如何使用它来提高的编辑效率。 1.基本模式 Vim具…

Unity之ShaderGraph入门

前言 随着Unity版本的不断升级,URP(可编程渲染管线)也越来越普及了。不管是从效果还是性能,都是吊打老版的build-in-shader。所以无论如何我们都要开始 拥抱URP,升级Unity的时候到了。 引擎版本 我这里选择了Unity …

01_Linux操作系统

第一章:Linux操作系统 阶段内容说明: Linux命令:软件测试第一个任务,一般都要进行环境搭建,一部分环境搭建内容是在服务器上实现的,跟服务器交互需要使用Linux命令(因为服务器没有图形化界面&a…

Atlassian Confluence CVE-2022-26134 RCE漏洞

Atlassian Confluence CVE-2022-26134 RCE漏洞 Atlassian Confluence CVE-2022-26134 RCE漏洞 漏洞简介 远程攻击者在未经身份验证的情况下,可构造OGNL表达式进行注入,实现在Confluence Server或Data Center上执行任意代码. 漏洞影响范围 Confluence …

代码优化- 基本概念

思考一个问题:我们可以再抽象语法树上做编译优化吗? 答案是否定的,如果在抽象语法树上做编译优化的话,程序员所写的可能包含错误的代码,可能就被删除了,比如,对下面的程序做不可达代码删除优化…

Hadoop笔记整理

Hadoop 一. 引言 1.1 什么是大数据 大数据:(Big Data):数据量级很大的应用处理。TB级 ,日数据增长GB级 K -- M---- G ---- T ----PB ---- EB ---ZB 1024通过对海量数据进行分析,挖掘,进而发现数据内在的规律,从而为企业或者…

【数据结构】超详细讲解:算术表达式转化为后缀表达式、前缀表达式、表达式树的构建

作者:努力学习的大一在校计算机专业学生,热爱学习和创作。目前在学习和分享:算法、数据结构、Java等相关知识。博主主页: 是瑶瑶子啦所属专栏: 【数据结构】:该专栏专注于数据结构知识,持续更新&#xff0c…

Praat脚本-037 | 批量把标注TextGrid生成韵律文本

目录 引题方案一方案二方案三获取脚本关注版权说明 引题 Praat是一种非常出色、轻便、开源免费的标注工具,它的最主要用途是标注,即对语音信号中的一些特征、信息进行标注,保存为TextGrid文件,这个TextGrid文件实质 上就是一种文…

chatGPT写文章-为什么chatGPT写的文章是原创

用chatGPT写文章会重复吗 ChatGPT在生成文本时会优先从先前的训练数据中学习到的文本中选取片段,并根据先前的内容和上下文来生成新的文本。因此,从理论上来说,在相同的输入条件下,每次使用ChatGPT生成文本都可能会产生不同的输出…

Web前端-Vue2.0框架学习

Web前端-Vue框架学习 1. 前端工程化与Webpack1.1 隔行变色的demo实现1.2 webpack的基本使用1.3 webpac插件1.3.1 webpack-dev-server插件1.3.2 html-webpack-plugin 1.4 webpack中的loader(加载器)1.4.1 css-loader1.4.2 less-loader1.4.3 url-loader &a…

【动态规划】经典问题第四组,背包问题运用(分割等和子集,最后一块石头的重量 II)

前言 小亭子正在努力的学习编程,接下来将开启算法的学习~~ 分享的文章都是学习的笔记和感悟,如有不妥之处希望大佬们批评指正~~ 同时如果本文对你有帮助的话,烦请收藏点赞关注支持一波, 感激不尽~~ 刷题专栏在这里~~ 深入理解动态规划建议关注…