软件测试自动化综述

自动化软件测试不是银弹

计算机科学巨匠Fred Brooks,在1986年发表了他的著名论文《No Silver Bullet: Essence and Accidents of Software Engineering》。文章列举了人们对于软件工程技术发展的一些期望,并与现实进行了对比。其论点归纳如下:没有一种单纯的技术或管理上的进步,能够独立地承诺在10年内大幅度地提高软件的生产率、可靠性和简洁性。直到现在,虽然软件交付效率在持续的提高,银弹仍然没有出现。在软件测试领域中,将自动化技术引入测试工作时,这个观点依然适用。 测试自动化就是任何利用工具来辅助的测试,虽然几乎在计算机工业产生的第一天,这种测试就出现了。但是,历史上从来没有出现过“测试自动化取代测试工程师工作”这种事情发生。测试自动化无法再现测试工程师那些创造性思维。好的软件测试,天然的、必然的是一种人类活动。测试是一种社会活动,一种心理活动。软件越复杂,人在识别软件问题上的作用就越大。 特别是今天软件的使用场景、用户类型、业务都极大的复杂化了。手工测试会越来越重要,其中一个原因就是:我们的测试将会社会化、复杂化、更需要人的智能。软件测试不仅是一项技术性工作,同时也涉及经济学、人类心理学等社会学科的一些重要因素。因此,自动化测试依然不能完全代替手动测试,更无法取代测试人员的地位。

自动化测试的必要性

尽管如此,自动化测试仍然毫无疑问地在测试效率和彻底性方面使我们获益匪浅。自动化测试在传统开发和敏捷开发中都取得了成功,没有自动化测试,敏捷开发就不会成功,更不会有持续构建、持续集成、持续部署。 自动化最重要的事情就是提高效率以及实现手动无法完成的事情。到目前为止,自动化测试依然是提高测试效率、尽早尽快反馈测试结果的不二选择。

成功自动化测试的因素

然而,通向成功的道路并不简单,成功的自动化测试需要智慧和毅力。哪些主要因素促成了自动化测试的成功?对此,并没有简单而通用的答案,但是却存在一些公共的要素。一般认为最重要的两个要素是管理问题和测试件架构。本文分别从管理和技术这两个维度进行分析。

【管理因素】

1. 自动化测试目标制定一个合适的目标对自动化测试的成功实施至关重要。

将软件测试所要达到的目标与自动化所要达到的目标区分开来是很重要的。一个好的测试目标是发现许多bug,这没有必要成为一个好的自动化测试目标。在对项目进行一些改动之后,需要进行回归测试以确保变更的部分不会影响系统的已有特性,而这类测试很少发现新的错误。这并不意味着自动化测试不成功。回归测试的主要好处是获取自信和保证,是对已有特性的守护,而不是发现缺陷。 2. 对自动化测试要进行精心培育并有效引导一种“自下而上”的方法并不是通向良好自动化测试的一条长期可持续的道路。开始的成功并不会保证长期的成功。以“自下而上”的方式开始自动化是困难的;为了长期的成功,需要管理层的大力支持。 3. 合理的角色划分测试人员所需要的技能和自动化测试人员不同,在一般情况下,行业的经验表明让手动测试人员也做自动化测试通常是不成功的。 自动化测试人员的角色有着严格的区分:一类是高层次的自动化设计人员(测试架构师),其任务是设计自动化测试的整体结构。另一类是自动化测试件的实现人员,他们具有良好的变成基础,其任务是设计、编写、维护自动化测试中的软件、脚本、数据、期望结果以及额外的实用工具。同时负责实现多个层次的抽象,这使得测试人员不必学会编程就可以使用这些自动化手段。 很多测试人员并不一定擅长开发技术,而且他们也不想成为程序员。他们关注的是测试的基本想法(即对什么进行测试),而不是测试的具体实现。 4. 计划、范围和期望当自动化测试有好的计划时,它通常更有可能获得成功。不要期望自动化项目中不会出现任何问题;没有什么事情是没有问题的,应该随时准备应对可能出现的问题。设定符合实际的目标,即在规定的时间内完成任务。对打算应用自动化测试的项目,最重要的建议是从小范围开始应用和试点。在将自动化测试扩展到更广的范围之前现在小范围内尝试不同的方法,来判断哪种方法最好,以便积累更好的经验。 5. 工具和培训无论使用什么工具,培训都是很重要的,良好的培训能够避免浪费很多时间。  

【技术因素】最重要的技术因素是测试件架构以及多个层次上的抽象。测试件(testware)是所有创建的用于测试的事物,包括脚本、数据、文档、文件、环境信息等。测试件架构就是这些事物是如何组织的,以及他们彼此之间是如何依赖的。例如,高层次的脚本使用了低层次的脚本用来与被测试软件进行交互。 1. 对测试件进行抽象、抽象、再抽象对于成功的自动化测试来说,至少有两个主要的抽象层次:

(1)将测试(即测试人员所从事的工作)与结构化的测试件分离开来。自动化测试人员负责这些层次的抽象,如果这些层次实现的不好,那么自动化维护起来就会很昂贵而且很难使用。
(2)将工具和工具特定细节与结构化的测试件分离开来。 这一个层次的抽象应该是我们能做好的。本文主要关注这个层次的抽象。
这二个层次的抽象能让自动化测试有着更长的生命周期,即使更换了测试工具,自动化测试依然可以工作。但是,这也是一个要求非常高的抽象。一般情况下,很难达到。 顶层的抽象是将测试的基本想法(即对什么进行测试)与测试的实现(如何构建自动化测试)分离。测试人员使用对他们有意义的高级(领域相关的)关键字编写测试,以描述他们想要运行的测试,而不应该考虑过多的实现细节。  2. 自动化测试标准当很多人同时使用自动化时,制定自动化标准是很有必要的。如果人们仅仅关注自己的事情,他们将会以只对他们有意义的方式创建自动化测试和测试件,然而他们创建的东西很可能彼此之间都不相同。如果想要很多人使用自动化测试,那么定义自动化的标准并去遵守这一标准是很重要的。例如,标准的命名方式、创建测试件的方式、脚本的头文件等等。  3. 可复用性、可扩展性、文档、灵活性
不要重复造轮子,去寻找那些可以复用的模块,而不是一切从头编写,将自动化测试件结构化以供复用,一旦有了可重用的元素,就可以容易地添加新的自动化测试。同时这些可复用的模块必须具有良好的文档。随着业务的发展,在已有测试件的基础上能够灵活扩展是非常重要的。  4. 对哪些测试进行自动化对测试进行自动化时,要考虑它们的优先级。总的来说,要对那些能够为测试带来价值的测试进行自动化;其次自动化那些重复使用的测试。  5. 自动化测试本身也是软件,也必须对其进行测试  6. 正确认识工具要素工具不是测试自动化最重要的因素。在大多数情况下。拥有好的工具不能保证在测试自动化中取得成功,必须对整个测试框架进行良好地设计、定制和维护,工具仅仅是一小部分。

对自动化测试的展望就像在《Experiences of Test Automation – Case Studies of Software Test Automation》的译者序中所说:“…同我们分享他们在自动化测试过程中所经历的酸甜苦辣,其中有过迷茫,有过失败,也有喜悦和激动。自动化测试的故事,有浪漫之旅,也有历经坎坷、披荆斩棘才走完的艰辛之路;更有凤凰涅槃、绝地逢生,迎来自动化测试春天的感人故事”。读完之后,再次感受到,没有什么能够随随便便成功,自动化测试也不例外。 软件测试自动化依然不是软件测试的银弹。“银弹综合症”是所有自动化测试人员已经或将来会面临的问题,我们需要保持清醒,结合实际,不能冒进。少一些浮躁,多一些务实,在自动化之路上不仅要有技术的追求,更要遵循软件工程的一般方法。坚定、踏实、精益求精的“工匠精神”应该要成为我们自动化之路上的应有的姿态。

当前,自动化测试不再是件奢侈品而是必需品;随着应用程序和系统变得越来越大、越来越复杂,仅仅依赖手动测试已经无法全面地系统测试。随着技术的进步,测试也必须进行调整,而且要快。这是一种必然,我们必须要迎接这样的变化,否则被淘汰只是一个时间问题。
(本文转自:
http://mp.weixin.qq.com/s__biz=MzAwMTkxNTg3Nw==&mid=2247484067&idx=1&sn=ccebca9d5a4c5778f4fa2c1ffe7d87c3&mpshare=1&scene=1&srcid=1013RBSyO8i9MsRxFexRb6kA#wechat_redirect)

猜你喜欢

转载自blog.csdn.net/jia_1013/article/details/52806618
今日推荐