我与自动化测试产品和解决方案的潜在客户打交道已有5年时间,其间碰到了许多"银弹"思维方式。它们总以类似这样的设想出现:
所有的测试都能够实现自动化! 既然自动化测试能如此显着地提高生产率,我们能以更少的人员完成所有的测试(精减人员)。 自动化测试如此简单,我们无需任何培训。 自动化方法将缩减整体测试工作量。 我们无需制订任何测试方案。 有了自动化测试,测试人员不成了"过时的"或"多余的"了吗? 那种耗时的测试设计工作不再必要了。 尽管我不愿打破人们美好的幻想,但总觉得有责任帮助他们理解,实施自动化测试和得到梦寐以求的神兵利器之间的区别。通常这意味着解释自动化测试的真正含意,和自动化测试工具和解决方案的实际功能。
自动化测试不是银弹吗?正是此意。自动化测试,或者说自动化测试策略及工具的实现,只是测试人员工具箱里的一件利器。注意我强调它是一个工具,位于工具箱中。我有意避免将自动化测试和试员人员等同起来,本来它也无法取代测试人员的地位。尽管如此,自动化测试仍然毫无疑问地具有强大功能,它能在测试效率和彻底性方面使我们获益匪浅。关键在于确定发挥其功效的佳时机及方式。我们提出另一个问题来具体阐述一下。
有足够的时间测试每件事情吗?我想人们会异口同声地回答 "没有!"。总有更多的东西可以测试,或者在另一个平台上或以其他配置再试一次。但是随着终期限和产品交付日期的日益迫近,分配给每个测试周期的时间缩短了。那么,软件开发项目经理和测试团队如何处理这种情况呢?通常,他们削减软件发布前每一个测试周期的测试量。您经历过这种情形吗?理想情况下需要做一些基于风险的分析,以便决定排队哪些风险。然而更常见的情况是,测试团队只是将整个测试周期的注意力集中到验证已修复的缺陷上。更有甚者,连这样的缩减之后的测试计划也没有足够时间来完成。
多少产品是在完整测试之后交付的?这种情况我所知不多。开发团队往往根据其他因素做出是否交付软件的决定:
时间到了吗? 预算超了吗? 资源用尽了吗? 还有比萨和啤酒吗? 不幸的是,由于测试工作被任意删减,开发团队无法完全清楚地知道产品的总体质量,他们面临所交付的软件带有严重问题的风险。借助于自动化测试的力量我们能够摆脱这种困境吗?我们接着探讨一下。
自动化测试如何帮助我们?在计划实施自动化测试之前,您需要理解自动化测试的定义。换句话说,它对您意味着什么?这里有一些我听到的其他人对自动化测试的描述:
自动化测试工具有AtuoRunner和TAR
完全无人干预的测试。
测试脚本。 测试工具。 不清楚。 有时人们将自动化测试的概念理解得过于狭窄,只关心由工具或编程产生的测试脚本。实际上自动化一词包含了更为广阔的含义。看看一个Quality Engineering团队在构建一套自动化测试准则时对自动化测试的这个定义:
在我们的环境中,"自动化"指的是对策略、工具和工件的使用,它增加或减少了手工或人为参与或干预非技巧性、重复或冗长工作的需要。
除该定义之外,准则还为该团队提供了应用自动化方法的例子。表1列举了一些。
这个小例子让您换个角度看待自动化了吗?现在,定义自动化对于您和您的团队意味着什么是至关重要的。然后您可以使用该定义开始构建一套自动化准则,从而团队中的每个人都可以使用相同的方法、快速评诂一项任务是否适合应用自动化。
创建自动化测试准则此处列举了您定义自动化和制订准则时可以考虑的一些策略和事项:
确定自动化测试的"用武之地"
将所有工作中的特定部分作为应用自动化的候选对象。 从高度冗余的任务或场景开始考虑。 将乏味且人工容易出错的工作进行自动化。 首先关注开发成熟、理解透彻的用例或场景。 优先选择应用中相对稳定的部分,而非易变的部分。 通过使用数据驱动的测试技术来提高自动化功效(增加测试覆盖的深度和广度)。 指派几位专家负责自动化,不要让测试团队的每个人都做这项工作。 牢记不要追求的自动化,手工测试仍然至关重要。 计划进行更多的测试
将重复的测试自动化,为其他方法的测试赢得更多时间。 增加试探性测试。 增加配置测试。 构建更多的自动化测试。 进行更多的人工测试,特别是在高风险特性方面。 谨慎规划:将人工测试和自动测试分工,不能全盘自动化。 每一次设计都要设计所有的测试和文档。如果某项自动化测试无法运行,确保它能够手工完成。 将自动化视为一种投资
训练使用者充分利用自动化工具。 构建一个可重用代码库。 保持测试模块化,大小控制在一定范围内,这样易于维护。 文档化测试脚本(代码),以备校验和重用。 强化备份过程。 利用源代码控制。 认识到自动化是一项软件开发工作,通常需要代码生成。 逐步实施自动化测试
不要尝试内实现所有测试的自动化。积累经验,循序渐进。 从整个测试计划的一小部分开始,逐步添加至自动化测试集合。(即以实际的、受控的方式递增) 自动化还能为我做什么?尽管自动化测试需要在前期的策划和培训上进行一笔不菲的投资,但确实能从几个大的方面带来增益。它能为您带来如下利益:
更高质量的软件-因为您能够花费更少的时间和资源进行更多的测试。 更完备的测试覆盖的潜力。 更多的时间投入到其他测试活动中,包括: 详细计划。 精心地设计测试。 构建更复杂的测试(数据驱动,增加用于条件分支和特殊报告的代码等) 更多的人工测试,不是更少! 自动化测试还为您提供无形价值,它能给测试人员带来:
获取新技能的机会(即建立技能和学习技能的机会)。 在测试中了解更多关于系统的知识的机会,因为自动化能揭示系统内部状况,如对象属性和数据。(对系统的更多理解造更好的测试人员) 现在您已知道什么是自动化测试以及它能胜任哪些工作,我希望您能运用这些知识为您的产品进行更多更好的测试。尽管自动化测试不是银弹,但它仍不失为一件工具;如果能够将其应用于适合的工作,将为您带来巨大收益。
参考资料
您可以参阅本文在 developerWorks 全球站点上的 英文原文。 关于本文部分主题的更多信息,请参阅Cem Kaner的网站上的下列文章。网址:http://www.kaner.com/articles.html
1. "Architectures of Test Automation"
2. "Improving the Maintainability of Automated Test Suites"
3. "Avoiding Shelfware: A Manager‘s View of Automated GUI Testing"
致谢感谢Cem Kaner提供参考链接中文章。 同样感谢IBM Rational的Ted Squire,和Satisfice, Inc.的James Bach仔细评阅本文,并在写作中给予帮助。
关于作者Dawn Haynes,技术专员,IBM Rational