软件测试,是一件非常令人沮丧的事情。为什么这么讲呢?从测试的工作量而言,测试是一件非常消耗人力和时间成本的工作;从测试人员的心理而言,重复的去做同一件看似毫无技术含量的工作,没有成就感。大型软件项目的测试尤甚。测试的痛苦在于,测试的目的在于发现软件bug,从某种角度上讲,发现的软件bug越多,证明了测试的有效性越强,但从另一角度而言,软件的bug越多,也就说明软件在设计和实现过程中的问题很多,该软件项目就算是比较失败的项目。有人可能会说,在软件项目中,开发人员应该是最重要的,如果没有开发人员的聪明才智,就不会有成功的软件。没错,但是测试人员的努力工作换来了高质量的软件。
既然测试人员工作非常辛苦,而且有了他们的工作才能保证高质量的软件。那么如何做才能够帮助他们实现华丽的转身,让测试人员有时间回家陪老婆抱孩子,而不是整天面对一堆用例,面对众多bug以及不停的回归迭代。
自动化测试是目前看似行之有效的方法(没有之一)。自动化测试的概念就如同它的名字一样清晰,就是通过使用自动化工具将测试人员部分的工作解放出来,使测试人员能够专注于测试设计的本身,而不去考虑测试脚本编写、测试执行等实现问题。自动化的好处当然显而易见,但是自动化的实施以及自动化实现的程度却根据不同的公司、不同的项目而异。一般说来,自动化测试对于已经运行维护的系统进行回归测试的效果较为明显,而对于新开发项目的实施成本较高且效果不够显著。这是因为对已运行的系统,其功能和特性已经较为熟悉,在迭代过程中,能够通过自动化去替代人工对原有的功能进行测试。二新开发的软件项目的功能可能并不清晰,在设计开发中的改动也比较大,如果使用自动化测试工具,需要根据被测对象的改变而不停的维护测试工具。因此代价和成本也较高。自动化测试可以从两个方面来解放测试人员的工作,提高测试效率。一方面是自动化测试管理平台的建立,另一方面是自动测试工具的建立。对于前者,可以采用开源软件testLink来实现,主要进行用例的管理维护工作。本文先对后一类型进行说明。目前自动化测试工具用的比较多的有HP公司的QTP。QTP通过录制/回放的功能,能够自动的进行测试。而且QTP不仅支持对象库,而且支持描述性编程,能够适应不停改变的项目。
自动化测试的开展首先必须要考虑到自动化要达成什么样的目标?要达到多高的覆盖率?是不是覆盖率越高的话自动化就越好?其实,自动化的覆盖率和自动化效率是一个抛物线的图,对某一项目而言,在自动化覆盖率达到一个阈值时效率最高,随着覆盖率的进一步加大,维护的成本就会加大,被测对象的一点改变都必须进行自动化测试工具相应的维护和改变。目前来看这个阈值只能是根据开发测试架构的测试开发人员的经验去判断。对于前台UI的自动化,有一种说法是这个目标很难实现,因为在设计中UI是最容易变更的,这样对自动化工具而言成本就非常大。一次有幸听过google中国测试部门老大的讲座,他提到没有见到一例做UI自动化成功的。看来UI自动化还是任重道远。对于后台的自动化,因为功能部分比较稳定,因此这里是实现自动化的主要方面。但是后台自动化的问题是如何与前台进行交互。有一种方法是在后台和前台之间放一层中间层,后台所有测试的数据最后都放在中间层中,而前台直接调用中间层的数据,避免了前后台直接交互,而只采用了数据交互的方式。
发散的说了这么多,还只是作为一个自动化测试菜鸟的一点学习总结和感悟,自动化测试的愿景是美好的,道路是曲折的。曲折的道路不仅包括技术问题,更重要的是成本的计算、开发测试等项目组人员自动化测试意识的培养、以及整体项目的推进情况决定的。总之,自动化测试就类似于共产主义,测试人员都在期待那天的来临,如果实在太遥远,那就先进行社会主义初级阶段,从可以推进的项目逐渐进行,将测试人员的部分工作逐渐自动化替代,实现测试人员华丽的转身。