摘要:手工测试和自动化测试都是软件质量保障的重要途径,也是很多测试人员争相讨论的两种测试方法。如何正确的看待这两种测试方式,更好的使两者相互结合是我们现在所要讨论的话题。本文总结了自动化测试和手工测试的优点和缺点,列举了各自的适用范围,并分析了自动化测试无法终取代手工测试的原因。

  1、自动化测试是灵丹妙药吗?

  自动化测试有众多的优点,例如:快速、全面、可靠、可编程、可重复使用、可重用。自动化测试产品和解决方案的潜在客户经常会以下面的思考方式设想自动化测试:

  ● 快速:显然测试脚本执行比人工执行要快得多,而且和手工测试相比,计算机可以不知疲惫的执行测试,24小时不休息的工作

  ● 全面:所有的测试都能够实现自动化,你可以构建一个覆盖应用程序每一个功能的测试包

  ● 可靠:每次测试脚本在运行时执行相同的操作,因此减少了人为的错误,排除了人测试的不确定性,使测试结果更加客观。

  ● 可编程:你可以编写复杂的测试脚本来找出应用程序中隐藏的信息

  ● 可重复:对于重复执行相同操作,计算机软件可以轻松完成

  ● 可重用:你可以重复使用测试脚本来测试应用程序的不同版本,即使用户界面发生了变更

  如此看来,完全可以用自动化测试取代手工测试吗?答案是否定的。无庸质疑,自动化测试具有上述优点,但这些优点是在一定的约束条件下存在的。尽管人们对自动化测试有美好的愿望,但自动化测试并非我们梦寐以求的神兵利器。

  Frederick P. Brooks, Jr. 曾在1986年写过一篇题为《没有银弹:软件工程的根本和次要问题》的文章(No Silver Bullet ? Essence and Accidents of Software Engineering)。这篇文章列举了人们对于软件工程技术发展的一些期望,并与现实进行了对比。他的论点归纳如下:没有一种单纯的技术或管理上的进步,能够独立地承诺在10年内大幅度地提高软件的生产率、可靠性和简洁性。Brooks鼓励我们将技术和方法视作一种演进手段,而并非革命。

  我完全同意Brooks的观点,这有助于我们对理解自动化测试的真正含意,自动化测试或者说自动化测试策略及工具的实现,毫无疑问具有强大功能、高效等使我们获益匪浅,但只是测试人员工具箱里的一件利器,它无法取代测试人员的地位。让我们回过头来再分析一下自动化测试特点所需要的前提。

特点

前提

需手工执行的工作

快速

脚本执行比人工执行快

实际上,测试人员还需要做编写脚本,设置脚本如何运行,解释测试结果,讨论是否需要修复等工作。所有这些工作使得测试执行实际上只是整个测试工作量中的一个小部分。

第一次的自动化测试项目将花比纯粹手工测试更多的时间。我们应该将自动化看成是改进测试人员效率的一个工具,而不是一个测试人员的完全替代物。利用测试脚本程序可以很快地将测试人员带到测试应用程序的同一水平线上。

全面

你可以构建一个覆盖应用程序每一个功能的测试包

自动化测试覆盖的功能点越多,测试程序会变得越复杂。自动化测试战胜了消耗时间和测试深度之间的平衡。

在做自动化测试之前,详细地说明所有的功能点及其运行条件。利用手工测试的检查表可以发现许多人为的错误。测试人员要集中在测试深度上。警惕将要使用新技术的地方及其预算。

可靠

每次测试脚本在运行时执行相同的操作,因此减少了人为的错误

现在的技术只能识别那些已经被编程的部分并进行检查。需要人为地检查并且留意异常的事情

利用自动化做些沉闷的工作,如扫描应用程序中期望的菜单标题等。

并且为测试人员给出可能发生的问题的指示。

可编程

你可以编写复杂的测试脚本来找出应用程序中隐藏的信息

花在编写复杂测试脚本的时间会像手工测试中“真实工作”的时间一样被检查吗?测试人员乐意成为像遵守纪律的编程人员一样维护复杂的程序代码吗?

预算明确的用于自动化研究及开发(及传播)的时间。培训编程人员并核查他们构思逻辑及从API中提取信息的熟练程度。

可以重复使用

你可以测试软件将如何回应重复执行相同操作

当软件发生更改时,脚本和图像可能都需要重现编写,甚至要重新设计

采用数据驱动的方法:利用spreadsheets或测试说明书来有计划地驱动测试

可重用

你可以重复使用测试脚本来测试应用程序的不同版本,即使用户界面发生了变更

为了彼此可以更好的工作,需要在一个公共的架构上创建程序代码

强制使用命名规范及函数的公用库。设计模块中的测试脚本从一个共同的起点开始,例如主页。并且追踪使用的测试数据。