软件测试自动化的探索与管理(四)

第二章 自动化测试的常见问题

  1、自动化能满足我们什么

  自动化能做什么事情原本是个很古老的命题,基本所有人都知道,而且也有很多人对这一点进行过论述和论证。所以这里不再多说,只为讨论问题的完整性简单进行阐述,以便读者在阅读和思考或讨论的时候能更好的上下文衔接。

  (a)提高测试执行的速度

  毫无疑问,无论使用什么工具,自动化测试执行是使用机器部分代替人工执行的方式,10人日的测试执行工作量可以由5个人花2天也可以2个人花5天完成。自动化如果实现了80%,那么使用2个人1天可以完成剩下的20%手工测试;用一台PC Server组装10套虚拟系统,10套虚拟系统0.8甚至0.5天就可以完成所有这些自动化的测试执行。不考虑自动化开发的投入,还是2个人,1天就能完成所有的测试执行,所以说自动化测试提升执行速度的本意是使用同等的执行人力可以结合自动化在最短时间内完成测试执行,而并非说自动化的操作速度比人工快。

  对于不同层面的自动化测试来说,有些执行速度是远远高过手工测试的执行速度的,但是有些却并不是这样。例如,应用JUNIT的单元测试和SELENIUM的UI测试的执行速度是比手工测试执行要快很多,绝大多数性能测试工具也是如此;然而在某些UI测试或者系统操作大部分时间消耗在后台数据库操作的时候,自动化测试工具并不会显得比手工测试快,而且手工测试还能利用时间的交叉实现并行,但是自动化工具却并不会自动化实现这些。

  (b)避免机械式重复工作

  虽然测试有像正交覆盖这样被证明了是科学的裁剪方法,但是,一方面,这些裁剪方法并不是所有的地方都能使用,另一方面,即便都能用测试执行的工作量还是非常大的。无论是多有耐心的测试人员,在长期的测试执行中也会感觉疲惫和乏味,当然有些自制力比较强的同事还是能坚持下来的。自动化测试的好处就在于能替代人去做一些反反复复的工作,可以不眠不休不厌倦;这样可以解放出一部分测试执行人员,让他们向更需要他们的地方成长、发挥。

  特别是对于像我们这样做运营测试的同事来说,可能会有几年只负责测试某一个或几个系统的补丁需求的情况。自动化让大家可以腾出手来做更多的分析工作,一定程度上也能通过提高测试分析设计的投入来提升测试的质量;同时也能让测试人员减少一些乏味的感觉,日新月异的自动化技术和不断产生的问题与系统测试结合也让大家更有解决问题的欲望,在繁琐的测试工作中更容易收获一些乐趣和成就感。

  (c)避免手工易犯的错误

  虽然测试人员普遍比较耐心细致,但是偶尔的错漏总是难免的,笔者参照自己平时的工作总结了了一下,对于笔者来说主要有以下几种导致错误的因素:

  ● 正确率总会有极限,就是说测试执行的时候可以细心一万次,也总会有那么几次是不小心就忘了一些什么东西,导致测试结果偏差;

  ● 注意力被其他事物所分散,尤其在并行任务较多的时候很容易发生考虑不周全或者忽视了一些比较隐蔽的问题;

  ● 不够耐心细致,上节说到反反复复的测试,或者受心情影响,使得测试人员产生懈怠的状况,这样测试出来的结果很难保证就是没有问题的;

  ● 思维定势,长期的工作习惯和对某些系统较为熟悉的时候容易产生问题,按照自己的经验去判定一个测试结果的正确性;而实际上一些隐藏的问题在这种情况下较容易被忽视。

  当然,手工容易发生错误的情况肯定不止笔者说的这几种情况,大家可以自己参照一下自己平时的经验,看看都会遇到一些什么样的场景。这些列举的问题如果出现在测试分析和设计的时候自动化是很难替我们避免的,即使有严格的评审机制也不能保证就可以完全避免,所以这里主要是指测试执行的时候。

  (d)应对高频的构建测试

  持续集成和敏捷开发这两个概念大家应该都不陌生,它们对测试的要求基本是一致的:快速、可靠、简单!因为在这种模式下,版本移交的频度很高,如果使用传统的手动测试,可能一个版本只测试到三分之一或者更多一些,下一个版本就已经移交到这套测试环境来了,所以要求测试必须很快,显然在同等人力的情况下,我们在第一点“提高测试执行的速度”中描述的自动化测试的优点是可以选择的上佳手段。可靠,道理同上文所述一致,自动化测试忠实于每一处输入和检查点,能够逐一列举不符合需求的地方,不会因为人为的变通而隐藏擅自修改带来的问题。简单,是指在构建体系中的测试环节工作要易于操作、易于分析,虽然自动化本身的实现可能不见得非常简单,但是一旦在持续不断的构建中引入自动化测试的利用,那么测试工作不仅仅快速可靠,而且测试的结果分析和构建的分析也将大大受益。我们可以在开始这次发布之初一键点击,由构建平台实现代码的归并、打包、移交、自动部署、启动冒烟测试和性能关注点的测试、运行结果分析和构建分析等工作。这个理念提出来已经有年头了,虽然能够实现“一键”的公司屈指可数,但是可实现“两键”、“十键”的公司却不在少数,当然或多或少存在一些人工干预的情况。

  归根结底,如果测试和编码能够无缝结合在一起,构建的速度和频度就可以很大提高,这就意味着软件开发生产力的提升。有一些尝试自动构建平台建设的公司可能最大的感慨就是:把自动化测试纳入版本构建流程中去实在太不像想象中的那么简单了!后文我们再讨论如何使用自动化测试支持敏捷开发,很显然,自动化测试对于敏捷开发来说是多么的重要。

  请注意,这里说的自动化测试并非特指QTP这种基于UI的验证测试,而是包含从单元测试、集成测试到系统功能与性能的所有被自动化实现的测试手段。事实上,在敏捷测试中,像QTP这种基于UI的自动化测试只是其中的一部分,真正大部分用于驱动开发的测试代码是放在对组件、服务这些底层的代码模块的测试上面的。单靠QTP或者Selenium这种工具是完全无法支持真正意义上的敏捷开发的。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值