何时适合进行自动化测试?(上)
尽可能地实现测试自动化是软件行业的总体趋势。在软件测试中,自动化可以极大地提高生产力,但仅限于某些情况。
在这篇文章中,我们将介绍一种测试自动化的方法,目的是根据项目的上下文识别其可行性。对于测试人员来说,了解什么是自动化以及何时可以自动化非常有用。测试人员应该多多注意如何优化工作,无论是与其他同事、开发人员合作,还是自己尝试自动化工具。
我们将介绍一些在还没有自动化相关经验时非常重要的概念,并评估它们相对于手动测试相关的重要性和优势。
什么是测试自动化?
从历史上看,自动化的出现是为了减少可编程系统、机械操作的活动所需的人力,目的是简化繁重、重复和复杂的工作,使其更有效也更高效。通过这种方式,可以节省能源、时间和成本,同时让人们腾出时间专注于其他任务。
在软件开发中,可以用同样的方法,通过把原本要手动完成的工作自动化来实现。需要遵循的步骤被转化成可重复的脚本,所以他们可以将精力集中在其他提供更大价值、减少执行时间的特定任务上。在某些情况下,自动化让我们能执行人工本无法执行的测试,特别是考虑到在特定时间段内执行次数的限制,自动化可以更轻松地完成规模化、工程化测试。
当测试人员考虑自动化时,最常见的问题之一是,“什么时间可以进行自动化?”
想知道是否应该自动化,包括评估潜在的投资、方法、收益,最重要的是,评估目前手动流程的相关信息。
首先要充分了解手动过程,并且对这方面了如指掌,只有这样才能实现自动化。对于手动过程的完整了解是知道什么时间可以进行自动化的支柱,这意味着手动测试不能被完全替代。在可以实现自动化之前,必须非常熟练地掌握手动测试。先学会走路,然后再跑步。
自动化误区
自动化有其优点和缺点,具体取决于项目、时间、成本、质量和方法。
基于上述,另一个非常重要的点是,除了自动化或非自动化之外,还必须了解具体情况,而且所做的一切都是基于以最佳方式实现目标,选择和应用适当的方法、工具和技能。
避免陷入以下关于测试自动化的常见误区:
- 任何软件都能自动化
- 自动化的软件质量更好
- 自动化测试优于手动测试
- 自动化带来更快的投资回报
无论是手动还是自动,不妨以下述七个原则来理解测试的目标:
任何实践的价值都取决于其背景;
- 不存在“好的实践”,但上下文中会发现好的实践;
- 人的合作是所有项目环境中最重要的部分;
- 项目不是一成不变的,往往会采取不可预测的路径;
- 该产品是一种解决方案。如果问题不解决,产品将无法工作;
- 好的软件测试是一个具有挑战性的智力过程;
- 只有通过在整个项目中合作实践的判断力和技能,才能在正确的时间做正确的事情,有效地测试产品。
这些原则是 Cem Kaner、James Bach 和 Brett Pettichord 在书籍《软件测试中的经验教训》中提出的,这有助于我们认识到适应当前项目情况的能力的重要性。
手动与自动
刚开始时,我们可能希望将一切都自动化,但开发和维护自动化测试脚本的成本可不是轻轻松松的。
当一个项目把赌注押在自动化上时,理想情况下,它应该有一个坚实的基础,从单元测试用例开始,通过即时反馈尽可能多地防止bug,然后继续到不同的层级。这样,手动和探索性测试在UI级别最有价值,专注于那些无法自动化的测试。
Michael Cohen 的自动化测试金字塔解释了这个概念:
在左边,可以看到自动化通常是如何完成的,而右边是理想的自动化测试,其中单元测试在金字塔中占据最大的比重。
尽管自动测试和手动测试之间存在差异,但它们并不相互排斥,而是被视为寻求更好软件质量的补充任务。
如果考虑测试的投资回报,手动测试新功能能以较低的成本快速了解应用程序的更多信息。随着知识的获取好测试的库存增加,手动测试的成本也会增加。另一方面,自动化具有更高的初始成本,随着它的进展而降低。这种趋势如下图所示:
可以看出自动化需要大量的初始投资,直到“突破点”,与手动测试相比,我们开始看到它对长期成本产生的积极影响,也能够清楚,这两种测试活动都是完全兼容,产生短期和长期利益。