为什么要在敏捷环境下进行自动化测试?

252 阅读7分钟

敏捷团队如果不使用框架来自动化开发的不同方面,如测试、构建、测试环境等,将会失败。 要理解为什么缺乏自动化会导致失败,我们首先要知道,所有敏捷团队的主要焦点是成功地向客户提供真正的价值,这可以转化为在冲刺结束时提供可运行的软件(换句话说,在快速变化的环境中进行短期发布)。

敏捷团队应该经常、快速地测试他们的可交付成果,并以出色的覆盖率来实现这一目标。本文将回顾敏捷团队完成这一重要目标的一些最常见的原因以及他们所面临的挑战。

Automation In Agile

除了知道其他人都在这样做之外,敏捷团队还想把他们的测试自动化,有多种原因,包括以下。

手工测试耗时太长

这是敏捷团队实现测试自动化的最根本原因。人工测试和长时间的回归需要太长的时间来完成,而传统的软件开发方法(瀑布模型)不能提供同样的测试时间。

随着时间的推移,一个应用程序变得越来越广泛,越来越复杂,测试矩阵也越来越长,团队在冲刺期间将没有时间手动完成所需的回归测试,以保证他们达到最高质量标准。

在冲刺期间运行一个完整的回归套件,在敏捷环境中是一个不正确的做法。你不能用手动执行的方式来做。如果你目前的方法不包含任何自动化覆盖,不要让它阻止你现在开始。

手动测试会导致技术债务

如果你手动执行你的回归测试,你已经知道它需要相当多的时间,而你并没有这些时间。此外,敏捷团队的普遍做法是每天、每个迭代都要进行回归测试(这对手动测试来说没有任何意义)。

如果你的回归测试是手动执行的,它将不允许团队跟上编码的步伐。然后,程序员不得不腾出时间来帮助测试,这导致了技术债务,增加了团队的挫败感。

自动化技术提高了团队的知识

自动化可以让团队更好地理解产品架构。使用先进的技术,如测试驱动开发(TDD),在实际代码之前编写代码测试,可以让程序员理解产品的需求、设计和架构。

自动测试提供快速、早期和频繁的反馈

如果自动化测试脚本没有变化,我们可以期望它通过,直到应用程序的功能被改变。当程序员修改应用程序代码时,他必须维护自动化测试以适应它们。

如果程序员改变了自动化脚本以支持代码的改变,而自动化测试仍然意外地失败,那么代码修改可能会产生一个回归错误。这是衡量自动化测试设计效率的一个很好的指标。

我们需要知道的另一件事是,当团队对所有新的和修改过的代码进行自动化测试套件的检查时,这确保了回归缺陷会在早期阶段被发现。早期发现的缺陷修复起来比较便宜,而且不会在开发过程的高级阶段增加重大风险。

从自动化测试中获得快速反馈是什么意思?这里最主要的是,一旦缺陷被早期发现(从程序员添加代码开始的几分钟到几小时内),这个变化在程序员的脑海中仍然是新鲜的,因此会比几天后,在人工测试过程中发现的缺陷更容易解决。

自动化是持续稳定构建的一个关键因素

由于敏捷开发的性质,非常重要的是,团队不要把他们已经很有限的时间花在不需要的问题上,如部分或损坏的构建,这将阻碍团队完成他们的工作。

局部或损坏的构建是敏捷开发过程中最耗费时间的问题之一。如果没有一个自动化的CI/CD系统,让团队在整个迭代过程中不断地进行稳定的构建,那么团队就不可能成功地交付他们的承诺。

自动化将有助于释放团队的时间

测试自动化的创建需要时间,当然,也有更多的时间花在维护上。尽管如此,一旦团队成功地创建了这个系统中比较重要的部分,就会减少他们过去花在执行手动测试脚本、运行大量可重复测试和无休止的手动回归循环上的时间。

现在,团队有了可靠的自动化,可以取代手动执行回归循环,团队将有精力和时间专注于新的测试场景,并学习更多关于产品和它如何工作的知识,这将提高团队交付物的整体质量。

自动回归测试是一个安全网

知道代码通过自动回归测试有足够的测试覆盖率,在修改或添加新的代码时,给团队很大的信心。在敏捷开发过程中,这种信心是很高的,因为新的代码每天都被检查和测试。

自动化回归测试将为团队提供一个安全网,帮助他们在几分钟内(对于单元、组件和集成级测试)或几小时内(如果在更高的功能级别,如系统或端到端测试)发现新添加或修改的代码所造成的意外缺陷。

现在,假设该团队未能投入时间在所有应用层面(单元、组件、集成和系统)建立一个坚实的自动化测试套件,作为安全网。在这种情况下,程序员将开始把测试人员本身当作安全网,这将导致开发过程中的 "迷你 "瀑布。

拥有自动化回归测试良好覆盖率的团队可以在一个更可靠的环境中工作,这将使他们能够无畏地编写代码并将其添加到主分支中,因为他们不必担心新代码是否会破坏构建,以及可能出现什么隐藏的缺陷。测试会告诉他们在很短的时间内是否破坏了什么。

手动流程更容易出现人为错误

手动流程和手动测试更容易受到人为错误的影响。这只是一个简单的事实,我们可以这样解释:手工测试是一个重复的过程,对于一个需要重复遵循相同测试脚本的团队成员来说,会变得非常无聊。

而当人们感到厌烦时,错误就更容易发生,明显的bug被忽略,测试脚本不能像第一次那样执行,而且正如我们所知,在面临紧迫的期限时,人们会偷工减料来完成工作。

简单的解决方案是将所有有助于团队投资回报率的测试自动化,从冲刺到冲刺。其直接结果是减少人为错误,降低风险,并创造一个持续的开发过程,提高团队的效率。

我在前面提到了一致性这个词,这在敏捷开发过程中是至关重要的。一旦团队减少了人工流程,实现了流程的自动化(包括测试),就能实现一致性,减少了人为错误的可能性,因为每个流程和测试都是以同样的方式反复进行的。自动化的框架不会为了实现最后期限而偷工减料。