You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

163 lines
14 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 25找准方向如何建立有效的测试度量体系
你好,我是柳胜。
提到数据度量、数据驱动这些词我们并不陌生。无论是管理领域用来追踪业绩的KPI、OKR还是商业中用数据来做最优决策的Business Intelligence都用到了数据驱动的方法。
而在我们IT领域管理大师彼得·格鲁克就曾说过“You cant improve what you cannot measure”意思是如果你不能度量一件事情你就不知道怎么去优化改进它。
既然数据驱动方法论已经深入人心,自动化测试领域也自然不会错过它。我们遇到的很多困境,其根源都要归结到数据不可见上,或者数据虽然可见,我们却不知道如何科学利用。比如常见的困难就有:管理者对自动化测试没什么信心,所以投入并不稳定;测试设计者也不清楚拿到了资源,自动化测试应该投入到哪个领域,分别投入多少才合适。
所以,在度量篇我们的目标就是把数据度量方法用起来,这样才能真正通过数据驱动测试的改进和提升。
前面Job模型的学习中我们通常都是自顶向下按照现状、目的、任务拆解一直细化到实现层面。这节课思路也一样自动化测试数据度量的关键问题如下
1.为什么需要数据度量?
2.围绕目标,怎么建立有效的测试度量体系?
3.测试度量指标设计要遵循哪些原则?
解决了这几个问题,度量活动的整体脉络就有了,实际工作里才能有的放矢。
## 为什么需要数据度量?
在我看来,数据度量是自动化测试走向成熟阶段的标志。想要弄清楚为什么要花费时间精力,来做数据度量这件事,我们不妨追本溯源,从自动化测试的发展阶段说起。
如果你的团队自动化测试刚开始起步,有几个繁琐易错的测试场景需要自动化,比如,要测试在不同平台下安装软件客户端,要生成测试数据。
这时,你发愁的是,怎么帮助团队掌握如何使用工具,把手工案例转化成自动化测试案例。我管这个阶段叫做“**自动化初识阶段**”。
这个阶段的特点是这样的:自动化测试的需求是偶发的、临时起意的,一两个人负责自动化测试的实施,选型工具也没啥策略,开发出来的测试脚本能跑起来就行。
而随着产品规模扩大,测试案例越来越多,对自动化测试的需求也会增加,不再局限于一两个特定场景,开始建立冒烟测试自动化集合,多个团队小组都开始实施自动化测试。
到了这个时候,你会看到不同的测试需求,也看到了更多的自动化测试工具和框架,相应也会涉及到工具选型、自动化测试环境搭建的工作。我管这个阶段叫做“**自动化乐观阶段**”。
面对自动化测试的投入增大,领导的殷切期望,团队的学习热情,你可能心里会生出一点担忧“我们这样投入,自动化测试能带来质量提升么,能节约成本么”。
为了控制成本,你开始关注团队间工具能否通用、代码能否复用。不过,还是不清楚自动化测试做到什么程度才合适。
我再次引用加特纳技术成熟度曲线,它会告诉我们在自动化测试乐观阶段之后,会发生什么。
![图片](https://static001.geekbang.org/resource/image/d0/9b/d08c192d60b0e0274d6da907012b7a9b.jpg?wh=1920x995)
自动化测试乐观阶段的特点是团队热情高投入大甚至有的测试组织都提出100%自动化的目标。但理想和现实总会有差距,当自动化实际的产出,没有达到对自动化测试预期的时候,我们就很容易进入到“自动化测试悲观阶段”,觉得自动化测试是糊弄人的,华而不实,还不如用一个自动化测试工程师的成本,去多招两个手工测试的人手。
这种认知的反差并不稀奇,往往就发生在同一个人身上,同一个测试组织里。前面乐观情绪有多高,后面悲观情绪就有多低落。
结合上面的曲线图,经历了乐观阶段和悲观阶段,我们怎么走向“自动化测试的成熟”阶段呢?这是一个很关键的门槛,推开了这扇大门,就进入到一个新的世界,对自动化测试的认识成熟理性,实践稳步提升,进入到一个正反馈的循环中。
其实,开启这扇大门的钥匙就是数据驱动。当乐观和悲观都解决不了问题的时候,数据才能让我们认清现实,从而找到解决问题之道。
![图片](https://static001.geekbang.org/resource/image/af/1d/afb43b2f2d2e031966e64275d913ca1d.jpg?wh=1920x1204)
## 度量什么?
确立了数据度量的必要性,接下来就到了细化方向、建立指标的环节。
度量什么这是一个好问题。建立一个度量指标相当于在团队立了flag如果这个flag立得不对就会误导团队。
我也见过有些团队上来就立“军令状”发誓单元测试覆盖率要达到80%然后一顿操作猛如虎开发测试全员加班加点心中叫苦。也许后面覆盖率确实达到了定下的指标但单元测试自上线起从未捕捉到回归Bug软件交付质量也不见提升。
可见度量flag的建立是一个技术活最终要看指标对软件质量的提升有没有帮助。如果制定得不合理就会竹篮打水一场空。怎么合理设立度量指标呢我们需要先拆解软件质量包括哪些方面。
### 交付质量度量
软件质量体系,可以分为交付质量和内建质量。交付质量是结果,内建质量是过程。做好过程是为了得到好的结果。像我们前面做好设计,写好代码与测试案例,科学实施自动化测试,它们都是内建质量活动,最终都是为了提升交付质量。
所以,我们首先要把交付质量的度量先定下来,就相当于抛出一个锚,而内建度量就可以向它看齐了。
对于交付质量我们最常用的度量指标就是生产环境Bug数量。这个也很简单直观把软件交付给用户之后用户发现的bug越多说明质量越差能做到0Bug那说明质量最好。
但生产环境的Bug数量跟发布多少功能以及发布速度都有关系。我用一个质量三角图来说明这三者之间的关系
![图片](https://static001.geekbang.org/resource/image/d0/10/d039e7b398f981c34938e1b405216710.jpg?wh=1920x1043)
这三个因素中有一个因素发生变化就会影响其他两个因素。比如老板有一天说为了抢占市场我们这个产品要提前10天发布这时三角形的时间发生了变化那就要影响三角形的其它两边要么缩小功能的范围要么就要接受Bug增多的质量风险。
而我们交付质量的目标是在不损失其他两个因素的情况下,来提升质量。所以,我们在度量交付质量的时候,这三个因素都需要观测。我们后面就可以用这三个指标来代表交付质量。
1.交付速度,是版本迭代的速度,我们可以用发布的周期来度量。
2.交付范围,是新功能的规模,可以用新增代码行数来度量。
3.质量用生产环境发现的Bug数量来度量。
从交付质量的这三个度量指标中,我们可以看到,自动化测试是能够提升这三个指标的。自动化测试的程度高,覆盖的功能越广,可以大面积回归,质量就能得到保证。而自动化测试执行速度也快,这样交付时间也会缩短。
交付质量的度量指标确定了后,相当于目标确定了。我们下面来看一下内建质量该怎么度量。
### 内建质量度量
交付质量是果,内建质量是因。而且是多因一果。软件研发又是一个复杂的活动,里面任何一个环节没做好,都有可能影响最终质量。
俄国文豪托尔斯泰曾经说过一句流传很广的话“幸福的家庭是相似的,不幸的家庭各有各的不幸”,换到软件质量领域也一样。你可以想想木桶理论。木桶是由多个木板组合而成的,木桶能装多少水,通常取决于短板。因为只要有一个短板,木桶的水就会流出来。
内建质量活动就相当于这些木桶板,内建质量的提升,就是要找出那块短板,把它加长。但内建质量的木板是很多的,大方面有人员、流程、技术栈,细节上有代码的实现,以及配置文件的读写等等。在这么多木板中,你怎么找出这块短板呢?
学过Job模型后你应该掌握了一个把复杂问题简单化的解决思路。那就是先做划分再定位实现。
![图片](https://static001.geekbang.org/resource/image/9b/d8/9b6915247e7c915ca79313bdf67371d8.jpg?wh=1920x744)
内建质量可以划分成四个维度:需求质量、设计质量、开发质量和测试质量。每个维度展开以后,都是一组度量指标。
我们今天以测试质量为例,来研究一下这个领域的度量指标的设定。掌握这个思路,其他领域你也能触类旁通。
## 测试活动的度量
在设计测试活动度量之前,让我们以终为始,先想清楚,测试活动的结果输出是什么?什么样的输出能够促进交付质量的提升?换句话说就是,我们怎么评价一个测试活动是“很棒”的,还是“很差劲”的呢?
你可能想到交付质量里有一个指标“生产环境发现的Bug数量”把这个指标作为测试有效性的评价指标不就可以了么
如果这样想其实你就进入了一个“测试组织对最终质量负责”的思维误区。因为Bug的绝对数量增加因素也很多。
比如在这个Release 项目新加的功能多开发代码变动大引发Bug就多这不是测试团队能控制的既然不能控制当然就没办法对它的结果负责你也不能用它来驱动测试活动的提升。
怎么评价测试的有效性呢?这时我想提醒你,注意度量设计的一个原则,**尽量不要以绝对数字来判断好和坏**。
可是不用绝对数字,应该用什么呢?结合我的实践经验,为了衡量测试活动的有效性,可以设定以下指标,你可以做个参考:
* Bug泄漏率=生产环境的Bug数量/Bug总数量
* 冒烟测试Bug泄漏率=生产环境的关键Bug/关键Bug总数量
* 测试需求覆盖率=被测试的需求条数/总需求条数
* 测试执行效率=自动化测试的案例/总共测试案例
这几个指标都有一个共同的特点它们都是用两个数字的比率来做度量而不是用一个绝对数字。数字的比率可以消除绝对数字的笼统性比如影响Bug总数的因素很多所以你很难用Bug总数来说事但是把Bug归因到各个过程所占的比例像是需求Bug比、设计Bug比、代码Bug比等等就能说明一些问题了。
这个思路,不光用数字的比率,我们也可以用数字的差做度量,这种度量方法我会在第二十七讲里详细展开。
另外上面的这四个指标之间也是有逻辑关系的它评价测试的效果也是从测试的范围测试需求覆盖率时间执行效率质量Bug泄漏率这三点支撑的一个度量体系。
**避免指标单一化**,其实也是一个度量设计的原则,也就是说,不要从单一指标来评价。尤其有的组织习惯于把指标和绩效挂钩,可是实际上往往事与愿违,容易引发执行者不假思索地机械化工作,甚至弄虚作假。
自动化测试作为测试活动下面的一个子活动,我们该怎么度量呢?随着度量指标从上到下的细化,越细化,目标就越具体,也更加问题导向,便于落地。
到这里,测试活动的度量框架我们就建立了。度量篇的后面几节课,我会从单元测试度量设计,自动化测试度量设计,自动化测试关键问题可信性度量几个方面深入解析,带你系统掌握自动化测试的度量思路与方法。
## 小结
现在来回顾一下今天学习的内容,学完了正文,开篇的三大问题想必你也找到了答案。
第一个问题就是为什么要做度量?当团队和产品的规模和复杂度都在增大的时候,我们很难对它有清楚的把握,如果不加以梳理,就会走向混乱的败局。
怎么理呢?方法就是数据度量。只有由数据得来的信息,才能支撑下一步的行动,确保我们的决策有助于优化、提升产品,而不是做无用功、甚至越改越糟。
每个行业领域都服从这样的规律,自动化测试也不例外,要想从自动化测试盲目乐观和盲目悲观中走向成熟,那就要掌握数据驱动这个方法论。
为了更好地让你理解质量度量体系。我把它从头展开从交付质量到内建质量然后从内建质量再分解到各个活动中去。每一层级是上一级的实现又是下一级的目标。这跟Job模型的思维非常相似。我把这个度量体系画出来就是这个样子
![图片](https://static001.geekbang.org/resource/image/b3/46/b3f67d8cfe86480161cc57b0591ea946.jpg?wh=1920x1138)
这里质量体系我们之所以用树形结构表达,是为了强调上下级的关系。根结点是交付质量,只要这个总目标不变,内建质量的度量点你可以根据组织和项目情况,灵活变化。
那怎么衡量你的度量是有效的呢?只要每一层的度量指标,都能促进上一层度量目标的积极变化就行。否则,就需要更改或寻找新的度量。
另外,在质量度量体系分解的过程中,需要遵循两个度量指标的设计原则:**第一,避免绝对数字****第二,避免单一**。这都来自于我和团队的实践经验,希望也能帮助你排忧解难。在后续的章节中,我还会陆续提到其它原则,到最后一讲,我还会为你再总结一下。
下一讲,我们要从单元测试的实际场景,去发现怎么定义合理的指标,敬请期待。
## 思考题
在你的组织中,有没有量化的指标?能否分享一下,你觉得好用的指标,或者不好用的指标呢?
欢迎你在留言区跟我交流互动。如果觉得今天讲的方法对你有启发,也推荐你分享给更多朋友、同事。