如何进行一次完美的测试

前言

源自一道面试题:如何提升测试的覆盖率?

当时听到这个问题有点懵,不假思索便回答,结果并不令人满意,事后想来,觉得这是一个有深度的问题,作为一个被面试者,或者说是测试员工的角度,和一个面试者,可能是测试组长或者测试leader的角度,看这个问题,一定是存在视野差距,接下来的几天一直在思考这个问题,在这里记录一下自己的思考,仅代表个人观点。

问题分析

首先再来回顾一下这个问题,面试官究竟是想问什么,他又想得到什么样的回答呢?
潜在的问题有两点:

  1. 如何指定测试计划
  2. 如何编写测试用例

更深层次的问题:如何进行质量保障

覆盖率?
既然说到覆盖率,那这个覆盖率如何去定义呢?怎么才算是完成了覆盖百分之20、30、甚至100呢?你编写的测试用例就一定是完整的吗?交叉评审、用例评审、用例review,这些就可以保证用例的质量吗?
我觉得不能,靠人的主观判断和经验之谈,只会让自己陷入思维固式。既然是率,那一定是和数学相关的问题,数学是严谨的,1就是1,0就是0。怀着测试同学该有的不妥协和不断质疑的态度,我们继续思考…

提取几个关键词:主观臆断、完整、数学
我们知道在数学中,数字是没有尽头,古希腊哲学家亚里士多德认为,无穷大可能是存在的,因为一个有限量是无限可分的,但是无限是不能达到的

所以用数学的角度看这个问题,覆盖率百分之100是存在的,但是不可能达到,那如何让我们的覆盖率尽可能地接近100呢?
我觉得我们应该引入一套 1+1=2 、无穷大的规则。

  1. 1+1=2:是说要有一个共识的机制,例如针对一个需求,我们的测试点必须包含:功能测试、性能测试、网络测试、协议测试、易用性测试、本地化测试、兼容测试、用户体验测试等等。
  2. 无穷大:要用无限接近无穷大的思维去覆盖测试面。

当然要完成上述的规则,我们不能拘泥于自己测试的角度去思考,更多的要去从需求的角度来解决问题。反正公司不会像Google的一个测试总监说的:如果没有需求,就不会有测试,也不会有bug的存在 google how to test
作为一名测试开发工程师,当然更希望可以用技术的角度来做些什么。

方案引入

塔斯拉创世人马斯克的思考思维是奇特并且有效的,有在网上看到过这样的故事。
有一次汽车工厂,在为一个元器件发愁,它经常会有问题,会导致汽车的识别功能下降,工程师一直在研究如何去改善这个元器件,让它更稳定的工作。而马斯克却提出一个观点:既然它总是坏,为什么不能换一个元器件呢?他的思考方式也是他一直推崇的第一性原理

如果我们用这样的思考方式来想这个问题的话,抛开一切外在因素,只考虑事情本身。

  • 为什么要测试
  • 为什么要指定测试计划
  • 为什么要编写测试用例

如果没有测试用例,我们如何去保障我们的测试覆盖率呢?保障我们的质量呢?15年前大家都在为手机设计更丑更难用的物理键盘而发愁,现在如果有人还在用这样的手机,一定会被人嘲笑。所以,有没有一种方式、软件或者工具,可以在需求开始的时候,就能生成一套标准的测试用例呢,这样的测试用例要满足哪些需求才算是标准和严谨的呢

方案设计

在上述引入的系统中,有几点要求

  1. 需求管理系统、bug管理系统、用例库的紧密结合。
  2. 项目开发有更好的组织架构。
  3. 当然一些成熟的测试经验转化规则也是必不可少的。
  4. 还有伴随着需求整个生命周期展开的探索式测试也是必要的。

接下来需要区分一下测试方向,当我们在这个系统中录入一个需求时,如何判断它的测试面,进而引入相应的测试点。
首先需要明确项目的系统架构:CS(客户端----服务器结构)、BS(浏览器----服务器结构),不同的架构对应的测试方法是不一样的。
这里我们将需求以功能点实现更加精细的分类,并为每一个功能点贴上测试标签,一个测试标签对应一个测试点规则如下:

  1. 每一个功能点记为一个测试类,每一个测试类包含若干个子类
  2. 测试子类只依赖测试类,测试类之间可能存在依赖关系。如测试一个支付功能,只需要验证登录是否成功,而不需要验证登录下的子类。
  3. 每一个测试子类都需要分为:功能、性能、网络等测试项。
    测试分类

OK,我们来憧憬一下这美好的愿景:
流程优化

问题总结

  1. 很显眼,这样的系统落地是十分困难的,需要权衡开发成本和实际作用。
  2. 其中的大量测试点,错综复杂,梳理起来充满挑战。
  3. 只是做到了需求到测试用例的转化,没有考虑测试过程中正确性

结尾

后面一直在想如何设计这样一个系统,其实有些背离主题,上述一切都只作为思考过程。
在我看来,测试的覆盖率确实是一个难题,不论是在编写测试用例还是在执行测试的过程中,都难已做到全面的考虑和执行。
所以,制定规则是必要的。当然其实覆盖率是百分之20,还是100,这一切都要为了我们的产品质量考虑。因为我们的目的是质量保障,而测试只是过程。
最后再来回答一下最开始的问题:

  1. 制定规则。
  2. 丰富测试手段也是提升测试覆盖率的关键,通过白盒对代码的直接测试、黑盒对代码所产生的结果间接测试以及一些接口、ui的自动化测试,可以有效地提升覆盖率。
  3. 从需求的开始,参与讨论,积极思考,发散思维。
  4. 保持质疑和不妥协的工作测试态度。
  5. 测试经验也是至关重要,以往的经历来看,经验丰富的测试同学总能更快、更准确、更巧妙发现一些问题。
  6. 测试方法:尽早测试、探索式测试等等。

感谢观看,欢迎指正,也感谢提出问题!

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值