优品软件培育计划【第四期】① —— 追求高投入产出比的测试左移与测试右移(软件工程生命周期)


优品软件培育计划百场前沿技术系列讲座直播的第四场为大家请到的是字节跳动网络架构质量保障负责人赵悦,他同时还承担质量保障团队的测试平台搭建和测试方案设计等工作,在业务测试、测试平台设计、测试流程管理等方面拥有丰富经验。直播结束后,不少朋友都在点赞其深厚的专业积淀和给大家带来的精彩内容,也在期待视频的回放,现在就将整场讲座的内容整理如下,供大家继续学习使用。



-正文-

我们都知道最近“测试左移”跟“测试右移”这两个概念被炒的比较火,今天我们也来探讨一下“追求高投入产出比的测试左移与测试右移”这个话题。首先我们先来思考三个问题:“凭借测试动作可以保障质量吗?”、“测试左移和测试右移指的是什么?”、“左移和右移过程中需要掌握什么概念、工具以及思想?”


今天的讲座会从【软件工程生命周期】、【测试左移】、【测试右移】、【数据度量】这四个部分去展开。


01

软件工程生命周期


要想知道什么是测试左移和测试右移,那么首先要了解软件测试在软件工程生命周期中是占什么位置的。下面这张图就是大家都比较熟悉的软件开发的生命周期。从左到右是它的时间顺序,分别是需求阶段、研发阶段、测试阶段和上线阶段。作为测试主要的工作是在测试阶段和研发阶段中有“测试设计”这么一个过程,也就是绿色标记出来的部分。所谓的测试左移和测试右移就是将绿色的部分向这条时间线的左边或者右边移动。



接下来我们一起看一下测试的投入产出比的问题,首先是质量保障团队的投入,我把投入划分成了两个部分,一部分是测试团队的人力成本和机器成本;另一部分是它的时间成本,时间成本在现在软件快速迭代、快节奏的时代背景下是比较重要的一个成本。比如说,在上图所说的生命周期中,整个上线的阶段需要两周的时间,如果测试需要占据5天以上,那么基本上是整个团队都不太能够接受的一种情况。总体来说,人力成本是一个成本,时间也是一个成本。


产出的情况我们可以看一下图中左侧的图例,这张图例讲的是产品的缺陷在发布前,是可以被测试过程来拦截住一些的,未拦截住的就会逃逸到线上去。逃逸到线上之后,就会产生两种情况,一种是对用户有影响,一种是对用户无影响的缺陷。


换句话说,作为测试,本身能够产生的产出其实就是拦截掉的这部分,如果这些缺陷被逃逸到线上之后,会造成什么样的损失。也就是说,我们假设它没有被拦截住,看他到线上去之后,会是什么样的影响,这部分就是质量保障部门的产出。


而投入产出比就是产出去除以投入。



接下来我们从产品的角度去评价一次交付。这里的交付指的是一个产品发布的版本,或者是产品一个小的功能的迭代,或者说一个软件工程的生命周期也可以将他的结果视作是一次交付。如果对一次交付进行打分,打分会由三个因素去综合评价,也就是它的功能、速度、和质量。


打分(R)=功能(F)×速度(T)×质量(Q)


功能指的是我这个版本交付了多少个功能,很显然这这三者并不能同时保障。比如说作为一个测试,我想要求一个非常强大的质量,那么势必要牺牲速度,或者不想做那么多功能。作为研发其实也是一样,所以这3者是不能同时保障的。


但是有一个问题,如果这三者有其中任意一个为0的话,最终交付的打分就是为0的。举个例子来说,这次迭代你什么功能都没事做,那这次迭代就等于啥都没有,打分自然是0。如果你的速度,交付的时间特别长,对于产品经理来说,也是不能接受的。如果交付的质量特别差,即使速度很快,说的功能很多,但是做好的功能却很少,那基本上这个质量分也是0。


所以最终的打分是由这三者相乘所得到的。


从狭义的角度来说,不同的角色会站在不同的维度上,只有产品经理回去思考,需要这三部分都能够兼得,开发和测试其实是不会对其他的几个因素来负责。尤其是测试,他会对质量负责,而天然地就会去牺牲另外两个要素。站在这个角度上来看,如果测试狭义地去考虑自己的质量得分而牺牲其他两个得分的话,对整体来说,或者说对整个团队来说其实是没有好处的。
 
所以,从广义上来说,如果测试要提高投入产出比,既要兼顾质量、兼顾拦截率,又要提升速度,那么这样他的测试工作才是真正对这个团队有积极意义的。
 
这也就是我们后面会经常听到的一个概念——效能
 
回到最早的那张图,我们一起看一下,如果测试要测试左移和测试右移,或者说提高投入产出比应该做哪些事情。
 



首先,如果我们要降低投入,就是要降低测试阶段的时间产出(时间的消耗)。所以我们要使用自动化或者流水线的技术来压缩测试的耗时。这个属于测试阶段本身的一件事情,而且自动化和流水线这方面已经是普遍共识了,就不再展开说了。
 
然后我们来看一下测试左移会做哪些事情。

上图左侧中标注绿色的部分是就是左移过来的测试动作。或者说是在左移之后,我们要作为质量保证人员额外要兼顾的一些东西:我们会做更多的需求评审、设计评审,然后敦促研发去做自测。
 
测试右移的部分是在上线发布之前,我们可能会做线上的灰度发布。在上线之后我们去收集反馈或者众测,这个就是测试的右移。



相关推荐非功能测试实践案例集(上)       为什么要进行性能测试?