对于很多参与敏捷开发工作的人们来说,自动化测试只是对组件测试与或单元测试进行自动化而已。与此同时,在集成测试和系统测试的时候,显然不会使用自动化测试,这就导致了需要手动地执行许多测试。显然,这就使得很难再有时间做足够的回归测试。
为什么很少将测试自动化的一个原因是因为在敏捷开发时系统很容易频繁地进行变换。如果没有仔细的思考和规划就创建自动化测试,系统一旦改变他们就将很容易就无法使用,而维护测试用例将需要很大成本。
如何在敏捷开发中创建一个可持续构建的自动化测试呢?
使用敏捷开发方法的人都知道,自动化系统测试是必不可少的,但他们也意识到,这样做是很容易会失败的。由于每次sprint后都会精炼测试对象,敏捷环境中的测试对象会不断变化,这就使得测试自动化如此困难。自动化测试人员最害怕的就是由于这不断的导致的繁重的维护。
尽管有这些困难,残酷的事实是,如果没有自动化测试,是不可能全面的进行敏捷开发的,至少无法经常获得高品质的成果。
自动化测试是如此重要的原因是,在系统测试时测试用例的数量将随着每个sprint新功能的添加而继续增长。由于随着新的代码的完成,旧的代码仍然需要进行回归测试,这就使得每个sprint中需要进行测试的功能和代码总数的增加。这和组件测试不同,并不仅仅关注当前sprint的新功能的测试。
简单地说,自动化测试是实现每个sprint有足够高测试覆盖率的唯一途径,从而提供了我们使用敏捷开发方法所追求的高品质以及快速的反馈。
没有测试自动化的敏捷项目本质上只是分阶段的瀑布项目。如果测试是手动进行的话,是根本不可能在每个sprint都完成让人满意的回归测试的。
导致的结果通常是回归测试的推迟以及部署一个回归测试周期需要三到六个sprint的时间。这将导致重要的反馈和bug报告很晚才能反馈给开发团队,有时甚至在某个功能开发完成六个月后才能反馈,这简直和分阶段瀑布一样!
我应该先自动化什么?
在制定自动化测试策略时,很容易会认为你应该自动化所有的回归测试,而且应该立即进行。但显然,这并不经济合理;立刻自动化一切不可取,因为手工测试将继续发挥重要的作用。
决定什么值得自动化,以及应该从哪个开始自动化对于通过自动化获得尽可能大的收益来说是非常重要的。
有很多因素决定什么应该先自动化。其中一些典型的理由包括:
•关键业务功能
•由许多用户经常使用的功能
•配置测试,测试将使用不同的配置运行
•将使用不同的测试数据或条件多次运行的测试用例
•很容易看到预期的结果的测试用例
自动化是否有好处?
说服管理者增加投入并自动化测试进行投资需要作出明智的投资回报率计算出投资是否以及何时能在经济上获利。为了完成计算,我们需要知道自动化的成本。
一个良好假设是,自动化需要相比人工完成测试用例所需的4-8倍长的时间。因此,自动化测试用例需要执行4-8次来平衡迭代投资盈亏。只需要运行几次或很少的测试不适于自动化。
此外,难以自动化的测试应当被省略。自动化测试除了写的成本和维护用例之外还有一些“隐性”费用,如授权,基础结构,支持和训练花费。
我可以从自动化测试得到什么?
自动化的优点是多方面的。自动执行测试而不是手动时,节省的时间是一个明显的优势。另一个优点是,自动化测试可能带来更详尽的测试,因为通过自动化测试,没有什么会阻止你执行有更多变化的测试数据的相同的测试多次,甚至可能对不同的环境而进行测试。
然而,测试自动化的主要好处是,对系统的信心,当执行了更全面的测试后,它的质量必然提高。这种信任可以根据敏捷项目的需要来改进和自定义系统。
此外,可以将资源变用于其他任务。而不是重新测试已有的功能,测试人员可以把精力投入到新的功能,更需要人为感知帮助测试的地方。开发人员在自动化的帮助下也会变得更加自信。会由于开发人员可以快速看到代码变化的后果,就能减少错误的发生,从而节省了团队的时间和金钱!
【英文原文:http://reqtest.com/testing-blog/you-cant-work-agile-without-automated-testing/】
{测试窝原创译文,译者:大头}
译者简介:大头,在读日本九州大学修士,计算机专业,主研究方向为文本挖掘,及自然语言处理。