手工测试和自动化测试都是软件质量保障的重要途径,也是很多测试人员争相讨论的两种测试方法。如何正确的看待这两种测试方式,更好的使两者相互结合是我们现在所要讨论的话题。本文总结了自动化测试和手工测试的优点和缺点,列举了各自的适用范围,并分析了自动化测试无法最终取代手工测试的原因。
1. 自动化测试是灵丹妙药吗?
自动化测试有众多的优点,例如:快速、全面、可靠、可编程、可重复使用、可重用。自动化测试产品和解决方案的潜在客户经常会以下面的思考方式设想自动化测试:
快速:显然测试脚本执行比人工执行要快得多,而且和手工测试相比,计算机可以不知疲惫的执行测试,一天24小时不休息的工作
全面:所有的测试都能够实现自动化,你可以构建一个覆盖应用程序每一个功能的测试包
可靠:每次测试脚本在运行时执行相同的操作,因此减少了人为的错误,排除了人测试的不确定性,使测试结果更加客观。
可编程:你可以编写复杂的测试脚本来找出应用程序中隐藏的信息
可重复:对于重复执行相同操作,计算机软件可以轻松完成
可重用:你可以重复使用测试脚本来测试应用程序的不同版本,即使用户界面发生了变更
如此看来,完全可以用自动化测试取代手工测试吗?答案是否定的。无庸质疑,自动化测试具有上述优点,但这些优点是在一定的约束条件下存在的。尽管人们对自动化测试有美好的愿望,但自动化测试并非我们梦寐以求的神兵利器。
Frederick P. Brooks, Jr. 曾在1986年写过一篇题为《没有银弹:软件工程的根本和次要问题》的文章(No Silver Bullet – Essence and Accidents of Software Engineering)。这篇文章列举了人们对于软件工程技术发展的一些期望,并与现实进行了对比。他的论点归纳如下:没有一种单纯的技术或管理上的进步,能够独立地承诺在10年内大幅度地提高软件的生产率、可靠性和简洁性。Brooks鼓励我们将技术和方法视作一种演进手段,而并非革命。
我完全同意Brooks的观点,这有助于我们对理解自动化测试的真正含意,,自动化测试或者说自动化测试策略及工具的实现,毫无疑问具有强大功能、高效等使我们获益匪浅,但只是测试人员工具箱里的一件利器,它无法取代测试人员的地位。
自动测试生来就是用脚本写成的,而不是探索性的,它需要我们设定上下文后才能在一定的范围内为特定的目的而执行。即便我们使用的是一个引入了所有可能情况的自动测试组合,我们的测试也只能在它们覆盖的地方游刃有余,但对于其它没有涵盖到的地方,它们就鞭长莫及了。如果出现了哪些没有预料到的情况,那么它们很可能就失效了,而且即使它们能够从这些情况中恢复过来,它们还是无法停止正在处理的任务并检查没有预料到的情况。很显而易见将所有测试都自动化是不切实际的。
2. 手工测试会被自动化测试替代吗?
也许有人认为“手工测试没有技术含量,总有一天会被自动化测试所替代”,实际上这种认识是不全面的。测试是依靠知识和智慧作为生产资料的一项工作,这要求测试人员具备较强的业务知识、较高的计算机操作能力和深厚的测试理论基础。通过设计科学合理的测试用例,正确的执行用例、准确的分析测试结果,才可能得到客观的测试结论。
手工测试的***特点是具有探索性,可以依据测试工作的进展适时调整测试策略,尤其是在需要进行人为主观判断和主观感觉来对被测试对象做出评价时,则手工测试将是最理想的选择,例如:在进行用户体验测试时,测试者基于用户的使用习惯和思维模式出发,结合实际的业务场景,对软件产品的外观、操作方式等方面进行检查。从而体验软件产品的使用者对产品的印象、感觉,测试既有的软件使用习惯和业务思维模型的综合反映。提出软件产品在方便、易用、符合思维习惯方面的修改意见。
手工测试有其不可替代的地方,因为人具有很强的判断能力,而工具没有。手工测试不可替代的地方至少包括以下几点。
测试用例的设计:测试人员的经验和对错误的判断能力是工具不可替代的。
界面和用户体验测试:人类的审美观和心理体验是工具不可模拟的。
正确性的检查:人们对是非的判断、逻辑推理能力是工具不具备的。
3. 什么时候该用自动化测试?
对于一些基本的、逻辑性不强的操作,可以使用自动化测试工具。应该说,现在性能测试、压力测试等方面,自动化测试有其不可替代的优势。它可以用简单的脚本,实现大量的重复的操作。从而通过对测试结果的分析,得出结论,这样不仅节省了大量的人力和物力,而且使测试的结果更准确。对于一些逻辑性很强的操作,如果自动化测试不是很健全的话,不建议使用。因为这需要比较复杂的脚本语言,不可避免的增加了由于测试脚本的缺陷所造成测试结果错误的误差。这时就需要手动测试了。
采用手工回归测试,不但代价昂贵,而且容易出错。自动化测试可以减少但不能消除这种工作的工作量。测试者可以有更多的时间去从事更有意义的测试,例如在应用程序在复杂的场景下的不同处理等,尽管测试就是要花费更长的时间找到错误,但比不意味着因此而要付出更高的代价。所以选择正确的测试方法是尤为重要的。
总结起来自动化测试适用的情况如下:
回归测试。这可能是自动化测试最主要的任务,特别是在程序修改比较频繁时,效果是非常明显的。由于回归测试的动作和用例是完全设计好的,测试期望的结果也是完全可以预料的,将回归测试自动运行,可以极大提高测试效率,缩短回归测试时间。
可以运行更多更繁琐的测试。自动化的一个明显的好处是可以在较少的时间内运行更多的测试。
可以执行一些手工测试困难或不可能进行的测试。比如,对于大量用户的测试,不可能同时让足够多的测试人员同时进行测试,但是却可以通过自动化测试模拟同时有许多用户,从而达到测试的目的。
更好地利用资源。将繁琐的任务自动化,可以提高准确性和测试人员的积极性,将测试技术人员解脱出来投入更多精力设计更好的测试用例。有些测试不适合于自动测试,仅适合于手工测试,将可自动测试的测试自动化后,可以让测试人员专注于手工测试部分,提高手工测试的效率。
测试具有一致性和可重复性。由于测试是自动执行的,每次测试的结果和执行的内容的一致性是可以得到保障的,从而达到测试的可重复的效果。
测试的复用性。由于自动测试通常采用脚本技术,这样就有可能只需要做少量的甚至不做修改,实现在不同的测试过程中使用相同的用例。
增加软件信任度。由于测试是自动执行的,所以不存在执行过程中的疏忽和错误,完全取决于测试的设计质量。一旦软件通过了强有力的自动测试后,软件的信任度自然会增加。
4. 什么时候该用手工测试?
手工测试更适合测试业务逻辑,因为测试人员学习业务后执行测试要比交给自动化容易得多。手工测试者最适合成为领域专家,依据他们自身对业务的理解去评价复杂的业务逻辑实现的正误,通过观察分析细微的逻辑问题找到问题的症结。
另外,从经济性的解度考虑,执行自动化测试需要事先花费大量的时间和精力来初始化脚本,完善自动化测试的上下文。这对于某些情况是不适合的,比如说在某些有时间要求的项目中,初始化自动化测试脚本所需时间是不可接受的。在这样的情况下手工测试具有更强的灵活性。
总结起来手工测试适用的情况如下:
界面测试
用户体验测试
探索性测试
周期短并且一次性的项目
进度非常紧张的项目
需求非常不稳定的项目
界面尚未确写
使用了很多第三方或自定义控件的项目
5. 结论
手工测试和自动化测试也是很多测试人员争相讨论的两种测试方法。有人对自动化测试趋之若鹜,也有人对自动化测试嗤之以鼻。在做出如何看待自动化测试的决定之前,首先要对自动化测试有一个清晰的认识。
自动化测试是对手工测试的一种补充,自动化测试不可能完全替代手工测试,因为很多数据的正确性、界面是否美观、业务逻辑的满足程度等都离不开测试人员的人工判断。而仅仅依赖手工测试的话,则会让测试过于低效,尤其是回归测试的重复工作量对测试人员造成了巨大的压力。
因此,自动化测试仅仅是某些条件下手工测试的一种补充,而无法全面取代手工测试。