软件测试是软件开发过程中非常重要的环节,通常在软件开发机构,软件测试的工作量会占用到40%的开发时间(一些可靠性要求非常高的软件,测试时间甚至占到开发时间的60%)。随着软件开发技术的发展和软件功能需求的日益复杂,人们在软件测试中所投了的时间和精力越来越大,而自动化测试的广泛实施则大大提高了软件测试的效率,甚至可以完成许多手工测试无法实现的或难以实现的测试,甚至可以提供比手工测试更好、更快的测试执行方。目前,自动化测试正在成为软件测试领域里的一个非常瞩目的趋势和潮流,很多软件公司正在或已经在企业测试团队内部实施软件自动化测试流程和框架,同时也把自动化技能作为人才衡量和业绩考核的重要技能指标。
一、什么是自动化测试
自动化测试就是通过使用自动化测试工具或其他手段,按照测试工程师的预定计划进行自动的测试,目的是减轻手工测试的劳动量,从而达到提高软件质量的目的。自动化测试涉及到测试流程、测试体系、自动化编译、持续集成、自动发布测试系统以及自动化测试等方面整合。也就是说要让测试能够自动化,不仅是技术、工具的问题,更是一个公司和组织的文化问题。
二、为什么要自动化测试
通常,软件测试的工作量很大。而测试中的许多操作是重复性的、非智力性的和非创造性的,并要求做准确细致的工作,这样,计算机就最适合于代替人工去完成这样的任务。要理解为什么要进行自动化测试,可以从以下几个方面来考虑。一方面,手工测试存在如下的局限性:
● 通过手工测试无法做到覆盖所有代码路径。
● 简单 的功能性测试用例在每一轮测试中都不能少,而且具有一定的机械性、重复性,工作量往往较大。
● 许多死锁、资源冲突、多线程等有关的错误,通过手工测试很难捕捉到。
● 进行系统压力、性能测试时,需要模拟大量数据或大量并发用户等各种应用场合时,很难通过于工测试来进行。
● 进行系统可靠性测试时,需要模拟系统长时间运行,以验证系统能否稳定运行,这也是手工测试无法模拟的。
● 如果有大量(几千)的测试用例,需要在短时间内(1天)完成,手工测试几乎不可能做到。
于是,就诞生了软件自动化测试这个领域。软件自动化测试是相对手工测试而存在的,主要是通过所开发的软件测试工具、脚本等来实现,具有良好的可操作性、可重复性和高效率等特点。其主要好处有:
● 缩短软件开发测试周期,可以让产品更快投放市场。
● 测试效率高,充分利用硬件资源。
● 节省人力资源,降低测试成本。
● 增强测试的稳定性和可靠性。
● 提高软件测试的准确度和精确度,增加软件信任度。
● 软件测试工具使测试工作相对比较容易,但能产生更高质量的测试结果。
● 手工不能做的事情,自动化测试能做,如压力、性能测试。
自动化测试好处很多,但也有很多的局限,也正因为很多老板对自动化测试的期望太高,所以有很多执行自动化测试失败的例子。
● 不能取代手工测试,不可能自动化所有的测试。如测试只是偶尔执行,或待测系统经常变动、不稳定,测试需要大量的人工参与时,就不适宜采用自动测试。
● 自动测试工具本身不具有想象力,只是按命令执行。而手工测试时测试执行者可以在测试中判断测试输出是否正确,以及改进测试,还可以处理意外事件。
● 自动测试对测试质量的依赖性较大,在确保测试质量的前提下,实施自动化测试才有意义。
● 自动测试在刚开始执行时,工作效率并不一定高于手动测试,只有当整个自动测试系统成熟,且测试工程师熟练掌握测试工具后,工作效率才会随着测试执行次数的增加而提高。
● 自动测试的成本可能高于手工测试。自动测试的成本大致有以下几个部分组成:自动测试开发成本、自动测试运行成本、自动测试维护成本和其他相关任务带来的成本。软件的修改带来测试脚本部分或全部修改,就会增加测试维护的开销。