小白测试系列:测试金字塔在企业中的落地

测试金字塔,是一种用来形象描述测试过程的策略结构。

在大多数互联网企业中测试体系中,一般都会有涉及到自动化测试。伴随产品研发的进度的阶段性不同,我们的测试手段也有不同。那我们先看看大多数互联网公司的研发测试过程。一般来说,研发过程有前端和后端协作开发,这里我们做个大概总结:

后端

  1. CODING阶段(函数/类->接口->模块/服务)
  2. 后端接口本地调试
  3. 代码提交阶段(高工或者leader去Review代码)
  4. 部署环境
  5. 后端服务测试

前端

  1. UI图静态代码化&构建demo页面【这里app开发也是类似的,只是编程语言稍有差异】
  2. 前后端接口联调
  3. 代码提交阶段
  4. 部署环境
  5. 前端UI页面测试【或者是APP的UI功能测试】

     其中前端的开发和后端开发阶段基本是并行的。每个阶段基本也是一一对应的。在联调阶段(2阶段),前端有时候会比后端晚一些,因为前端会依赖后端的接口的完成。那么在整个研发测试流程中,我们如何从全流程保证整个流程的质量呢?下面我们来为大家介绍下一般过程。

    1)在阶段1(Coding阶段),无论是前端还是开发,都需要有单测来保障模块最小粒度的可执行性和正确性,也就是说所有函数或者类都必须是有过本地测试的单测Case。

    2)在阶段3前后,我们会引入两个机制:静态扫描和CodeReview。

         CodeReview和静态扫描都分为两个阶段:提交前和提交后。

         静态扫描在提交前,开发需要本地去跑静态扫描(IDE本身可以安装一些静态扫描工具和规则),在提交后,根据SVN或者GIT的Hook机制,需要在代码提交后配置一个自动触发静态的机制。

        CodeReview在提交前,开发将本地的代码diff提交到CodeReview平台(reviewborad,Phabricator,gitlab等);在提交后,根据SVN或者GIT的Hook机制,代码提交后的diff会自动生成并发送给对应的模块owner进行review。

    3)在阶段4之后,代码已交付到环境,我们就可以进行较全面的测试:接口/功能测试,性能测试,UI(web和app)层测试。

那么我们通过测试金字塔自动来分析一下整个质量保证过程中自动化过程的策略选择,下面是一张我画的测试金字塔模型:

小白测试系列:测试金字塔在企业中的落地

 

测试成本

     从下往上看,测试成本是逐步提高的。所以对于比较有工程师文化的企业,我建议把Codereview,静态扫描,单测都置位正式提测之前的必要节点。在之后开发或者前端提测完毕,作为QA,我们要做的就是在后端和前端分别执行自动化,一般来说后端的自动化成本相对低些(接口改变相对UI层要少),所以大部分的自动化工作可以放在接口上做文章。UI层面的测试,无论是APP还WEB层面的测试,我们都有采取谨慎的自动化态度,否则会给我们带来大量的维护工作,导致投入产出比极低。这里我建议两种方式优化UI层面的自动化:一是对case做分级(非常重要,重要,一般),我们用0级case表示最重要的case,这类case不允许随意失败,一旦失败必须是发现了问题。二是我们可以选取一些重要的页面逻辑做页面级别的监控,包括页面可用性,核心的UI控件的样式效果的监控。

     整体来看,最下面两层都是静态测试,基本是基于代码层面,不需要部署一个完整的环境就可以开动测试,测试成本相对较小。而上面三层属于动态测试。都需要一个环境进行相关代码的部署才能RUN起来,所以测试成本自然就大了。

反馈周期

    从下往上看,反馈周期越来越长。所谓反馈周期,我们指的是发现问题后,相关人员为我们解决问题的一个效率。我们怎么理解这个呢,以盖房子为例,一般前期盖偏了,通过细微调整就可以纠正过来,而当盖成高楼的时候,如果整个工程再有纰漏,就很难去调整纠错。那么软件工程也是一样的,在前期阶段:CodeReview,静态扫描,单测阶段,开发的修复bug的成本很低,而等到后期已经部署到环境了,开始前后端的整体功能测试的时候,再有问题就得回溯到代码层面一一剖析了,这时候解决问题的效率就会相对偏低。

那么在企业落地测试金字塔,我们应该如何做呢,我这里给出三点建议:

  1. 单测,静态扫描,CodeReview一定要加到流程中去。作为QA,我们最好能够提供对应的度量工具,比如单测覆盖率,静态扫描的bug缺陷分析,CodeReview的有效性。
  2. 对于server端测试,我们需要有接口的功能和性能自动化来降低我们的回归工作,否则回归会让我们QA人力完全透支;而UI层面的测试,我们最好不要追求全覆盖,而是结合接口case去协调覆盖。
  3. 如果可以的话,我们需要有一套平台体系来串联以上相关过程,否则如果每个阶段都是单点的工具,我们就无法度量和优化过程,结果会为了质量反而牺牲了原有的研发效率。

以上就是我对测试金字塔的相关理解,并分享了一些落地的理念,这里仅供参考,真正的落地过程中海油很多非技术因素,所以如何有效落地,也依赖于每个企业的文化