▶6.3.1 软件自动化测试的简介
随着应用软件程序规模的不断扩大,业务逻辑越来越复杂,软件系统的可靠性已无法通过手工测试来全面验证。而且随着软件开发技术的快速发展和软件工程技术的不断进步,软件快速开发的能力越来越强,使得在软件开发过程中短时间内就可以产生多个需要测试的软件版本,这就意味着软件测试周期大大缩短,测试的频率大大增加。[2]传统的手工测试已经远远满足不了软件开发的需求,其局限性越来越多地暴露出来。手工测试面临的主要问题和挑战如下:
(1)不适合回归测试。回归测试是软件开发测试中非常频繁的一项测试,若通过手工测试,则会耗费大量人力物力。
(2)许多与时序、死锁、资源冲突、多线程等有关的错误,通过手工测试很难捕捉到。
(3)进行系统负载测试时,需要模拟大量数据或大量并发用户等应用场合时,很难通过手工测试来进行。
(4)进行系统可靠性测试时,需要模拟系统长时间(如10年)运行,以验证系统能否稳定运行,这也是手工测试无法模拟的。
(5)如果有大量(如几千上万)的测试用例,需要在短时间内(如1天)完成,手工测试几乎不可能做到。
传统的手工测试已经远远满足不了软件开发的需求,使用自动化测试技术势在必行。
软件自动化测试就是使用自动化测试工具来代替手工进行的一系列测试动作,以验证软件是否满足需求,它包括测试活动的管理与实施,自动化测试主要是通过所开发的软件测试工具、脚本等来实现,其目的是减轻手工测试的工作量,以节约资源(包括人力、物力等)、保证软件质量、缩短测试周期、提高测试效率。
自动化测试以其高效率、重用性和一致性成为软件测试的一个主流。正确实施软件自动化测试并严格遵守测试计划和测试流程,可以达到比手工测试更有效、更经济的效果。相比手工测试,自动化测试有如下优点:
(1)程序的回归测试更方便。回归测试是自动化测试最主要的任务,特别是在程序修改比较频繁时,效果非常明显。由于回归测试的动作和用例是完全设计好的,测试期望的结果也是完全可以预料的,将回归测试自动运行,可以极大地提高测试效率,缩短回归测试时间。
(2)可以运行更多更烦琐的测试。自动化的一个明显的好处是可以在较少的时间内运行更多的测试。某些测试序列可能包括成百甚至上千条测试消息,这样的测试用手工设置和评价,常常是不可行的,为了能够准确地重复一个冗长序列,必须实现测试自动化。
(3)可以执行一些手工测试困难或不可能进行的测试。对于软件性能方面的一些测试,如压力测试、负载测试、大数据量测试等,用手工测试是不可能实现的。而通过测试工具进行自动化测试可以完成这些手工测试不可能完成的任务。例如,对于大规模用户的联机系统,用手工进行并发操作的测试几乎是不可能的,而用自动化测试工具就可以很轻松地模拟出大量用户的操作。此外,在测试中使用测试工具,可以发现一些正常测试中很难发现的缺陷。例如,Numega工具就可以发现软件在内存方面的问题。
(4)充分利用资源。将烦琐的任务自动化,可以提高测试准确性和测试人员的积极性,将测试技术人员解脱出来投入更多精力设计更好的测试用例,以让测试人员专注于手工测试部分,提高手工测试的效率。另外,测试人员还可以利用计算机进行7×24小时的自动化测试。
(5)测试具有一致性和可重复性。只要每次自动化测试的环境是相同的,运行的脚本是相同的,那么每次执行测试就有一致性,很容易就能够发现缺陷,并发现被测试软件的修改之处和缺陷。这在手工测试中是很难做到的。而且,有些测试可能在不同的硬件配置下执行,使用不同的操作系统或不同的数据库,此时要求在多种平台环境下运行的产品具有跨平台质量地一致性,这在手工测试的情况下更不可能做到。
(6)测试的复用性。由于自动测试通常采用脚本技术,这样就有可能只需要做少量的甚至不做修改,实现在不同的测试过程中使用相同的用例。
(7)让产品更快面向市场。一旦一系列自动化测试准备工作完成,就可以重复地执行一系列的测试,因此能够缩短测试时间,加快产品开发周期。
(8)增加软件信任度。由于测试是自动执行的,所以不存在执行过程中的疏忽和错误,完全取决于测试的设计质量。一旦软件通过了强有力的自动测试后,软件的信任度自然会增加。
当然,自动化测试也并非万能,人们对自动化测试的理解也存在许多误区,认为自动化测试能完成一切工作,从测试计划到测试执行,都不需要人工干预。其实自动化测试所完成的测试功能也是有限的。自动化测试存在下列局限性:
(1)不能完全取代手工测试。软件自动化测试不可能也没必要取代手工测试来完成所有的测试任务。因为有些测试使用手工测试比自动化测试要简单,如果采用自动化测试,费用就比较大了。
(2)不能期望自动化测试发现大量新缺陷。自动化测试的最大特点在于适合重复测试。一般情况下,以前运行过的测试再次用来检查软件的新版本往往暴露的缺陷要少得多。测试专家James Bach总结出:85%的缺陷靠手工发现,而自动化测试只能发现15%的缺陷,自动化测试能够很好地发现老缺陷。
(3)软件自动化测试可能会制约软件开发。应用软件的变化对自动化测试的影响要比手工测试更大一些,软件的部分改变有可能使自动化测试脚本和用例不可再用。而设计和实施自动化测试要比手工测试开销大,并需要维护,所以对自动化测试影响较大的软件修改可能受到限制。
(4)软件自动化测试本身没有想象力。自动化测试是通过软件进行,测试程序只是按照运行机制执行。手工测试可以直接判断结果的正确性,而自动化测试在许多情况下测试结果还需要人工干预判断。手工测试可以处理意外事件,如网络连接中断,此时必须重新建立连接,手工测试时可以及时处理该意外,而自动化测试时意外事件一般会导致测试的中止。
(5)自动化测试实施的难度较大。首先,商用测试执行工具是较庞大且复杂的产品,要求具有一定的技术知识,才能很好地利用工具。除工具本身的技术问题外,用户也要了解被测试软件的技术问题。如果软件在设计和实现时没有考虑可测性,则测试时自动化测试难度会非常大,如果使用工具测试这样的软件,无疑更增加测试的难度。其次,还必须有管理支持及组织艺术。最后,还要考虑管理者是否能够重视,是否能成立这样的测试团队,是否有这样的技术水平。另外,测试脚本的维护工作量也是很大的,要考虑是否值得维护等问题。
(6)测试工具与其他软件的互操作性。测试工具与其他软件的互操作性也是一个严重的问题,技术环境变化如此之快,使得厂商很难跟上。许多工具看似理想,但在某些环境中却并非如此。
总的说来,软件自动化测试的优点和收益是显而易见的,但同时它也并非万能,只有对其进行合理的设计和正确的实施才能从中获益。