首页 > 软件测试

浅谈自动化软件测试

作者 顾翔

关键字:自动化,软件测试

自动化软件测试是把以人为驱动的测试行为转化为机器执行的一种过程。通常,在设计了测试用例并通过评审之后,由测试人员根据测试用例中描述的过程一步一步地执行测试,得到实际结果与期望结果的比较。在此过程中,为了节省人力、时间或硬件资源,提高测试效率,便引入了自动化测试的概念。所谓自动化测试,就是使用自动化测试工具来对软件进行测试,自动化测试工具可以自己开发,也可选用现成的工具。常用的自动化测试工具有:QTPWinRunnerRational RobotAdventNet QengineSilkTestQA RunTest PartnerHolodeckTelelogic TAUAutoRunnerPhoenix Framework等等。这些工具的功能不太一样,可根据需要选用不同的工具,详见百度百科[1]

目前,软件测试自动化的研究领域主要集中在软件测试流程的自动化管理以及动态测试的自动化(如单元测试、功能测试以及性能测试方面)。在这两个领域,与手工测试相比,测试自动化有以下的优势:
A
)自动化测试可以提高测试效率,使测试人员更加专注于新的测试模块的建立和开发,从而提高测试覆盖率;
B
)自动化测试更便于测试资产的数字化管理,使得测试资产在整个测试生命周期内可以得到复用,这个特点在功能测试和回归测试中尤其重要;
C
)测试流程自动化管理可以使机构的测试活动更加过程化,这很符合CMMI过程改进的思想。
D
)投资回报率高,根据OppenheimerFunds的调查,在2001年前后的3年中,全球范围内由于采用了测试自动化手段所实现的投资回报率高达1500%
注:本文所论述的自动化测试主要指动态测试的自动化,不考虑软件测试流程的自动化管理。

1,自动化软件测试工具本身也是软件,也要重视工具本身的质量。

自动化测试工具也是通过编写代码来实现的,所以也肯定存在缺陷或不符合测试需求的地方。我们在工作中经常会发生如下情形:当自动化测试工具显示出某个测试用例的测试结果没有通过,然后开发人员对相应部分的开发代码进行排查,同时测试人员配合开发人员也对测试工具相应的测试代码进行排查,最后发现没通过的原因是在测试代码上而并非在开发代码上,即测试代码本身出现了错误。为了提高测试代码的质量,我们经常采用以下二种方法:
1)
在书写测试代码前,先对相应的测试用例进行严格的评审工作;
2)
当测试代码书写完毕,对测试代码进行严格的以走读的方式进行检查。由于测试代码相对于开发代码比较简单,所以走读检查是比较容易实施的。
虽然对测试用例评审与对测试代码走读都是很费时间和精力的,但这是控制测试代码质量的最好的办法。对测试用例的评审,测试代码的走读最好由专门的负责人员安排专门的场所(比如:会议室)进行,如有可能,最好请相关的人员,如:测试人员,开发人员,需求人员,市场销售人员也在场,以便更有效地达到评审或走读的效率。

2,自动化测试工具要随着用户的需求变化而变化。

在百度百科中提出,“自动化软件测试的前提条件之一是软件需求变动不频繁”[1]。但是现实情况是用户的需求经常在变化。随着敏捷开发方法的提出,“拥抱变化”是敏捷开发所提倡的一个理念。所以我们在使用自动化工具进行测试的时候,需要注意的是:当用户的需求发生变更,开发要及时调整产品代码,与此同时,测试也应该及时对测试代码进行调整。

3,不是所有的功能都可以作自动化测试的。

使用自动化测试工具的同行都会感受到自动化测试工具给我们工作带来的便利,但是并不是所有的功能都可以通过自动化测试方式来实现的,比如UI测试,又比如James Whittaker在他《探索式软件测试》一书中提到的超模测试。由于这些类型的测试没有统一的标准,具有一定的主观性。所以这种类型的测试是不适合用自动化方式来进行测试的。在测试界一直以来有句非常经典的话:“自动化测试永远代替不了手工测试”。

4,探索式测试也可由自动化测试来实现。

“探索式测试”是测试专家Cem Kaner博士在1983年提出,并随着近年来敏捷开发的出现,探索式测试的理论由于符合快速提交的理念,也被重新提出。但是许多人可能存在一种误解,认为探索式测试只能通过手工测试的方法来实现,而不能采用自动化测试。然而就像我在“浅谈探索式测试中用到的一些方法”一文中提到的“强迫症测试法”,由于这种方法具有典型的机械重复性,所以对这种方法我们最好采用自动化工具来实现,这样可以节省很多精力,并且可以带来很好的效果。

5,是否需要采用自动化测试,需要考虑软件测试的效率。

自动化测试虽好,但它也具有一定的局限性。如果采用现有的自动化测试工具,那么学习熟悉了解这些自动化测试工具是要花费一定的时间和精力的;如果自己开发自动化测试工具,开发的过程更要花费相当的时间和人力。所以对于一些需求还不稳定,需求变化很频繁或者对特定客户订制的一些很容易用手工测试来进行的小的功能,我们就不需要用自动化测试的方式。

6,自动化测试可以覆盖软件测试中的每个阶段。

很多刚入门的测试新手往往会认为自动化测试只限于系统测试和验收测试,而不适用于单元测试,集成测试。其实这不完全正确。开源工具JUnitCUnit以及 ParaSofy公司出品的JtestCtestC++test Google公司开发的GTest等工具都是基于单元或集成测试的。它们除了可以完成单元测试和集成测试工作之外,有些还具有代码书写规范检查的功能,启动运行这个模块,它可以对代码中参照预先定义好的规范进行检查,如果某些代码违反了规范,系统会给出可视化的提醒。

7,软件测试自动化是敏捷开发强有力的工具。

众所周知,敏捷开发强调的是开发的快速性,是“短平快”的开发方式,这必然会增大开发人员,测试人员以及运行维护人员的工作压力。如果我们能对某些功能,尤其是衰退性测试中涉及到的功能进行自动化测试,让这些功能在版本发布之前自动运行,甚至是釆用持续集成(CI)的策略:即在每天晚上,从版本控制管理软件中获取已经Check in的老的及新加入的功能及测试代码,然后对这些功能,测试代码进行自动化编译,再利用新编译好的测试和开发版本进行自动化测试,直到最后测试完毕,系统会自动将测试报告发到相应的每个开发和测试人员以及负责同事的邮箱里,以便于开发,测试人员第二天一早到公司就可看到测试报告,并对没通过的测试模块在第一时间内进行排查。这样就部分解决了敏捷开发中时间紧,工作压力大的缺点,提高了测试的效率。

8,不要盲目选用现有自动化测试工具。

目前市面上流行了许多自动化测试工具,比如本文开始部分提到的那些产品。在许多书籍中对这些工具的使用方法和技巧进行了系统的介绍,有的软件测试咨询中心还对这些测试工具作为专门的课程进行教学,这些都是必要的。但这些工具不是万能的,在实际工作中,还要充分结合产品自身的特性,了解这些自动化测试工具是否可以达到测试自己产品的目的,而不要盲目使用这些现有的自动化测试工具,因为它们的功能是有限的。事实上若这些现有的自动化测试工具达不到测试自己产品的目的,那么我们可以建立专门的自动化测试小组,自己开发出符合自己产品测试需求的自动化测试工具,这虽然要消耗一些时间和人力,但自己开发的自动化测试工具,由于是针对自身的产品开发的,因此使用起来效率高,速度快,磨刀不误砍柴工。此外那些现有的自动化测试工具价格都比较昂贵,所以建立自动化开发小组往往是可以节约成本的。

参考文献:

1,  百度百科:http://baike.baidu.com/view/1303916.htm?fr=aladdin

2,  《探索式软件测试》,James Whittaker

3,  《探索式测试》,史亮,高翔

4,  “浅谈探索式测试中用到的一些方法”,顾翔 (已投51testing)

5,  “对敏捷开发的一些思考”,顾翔 (已投51testing)

6,   “软件测试手册”,顾翔 2007-08-31发布在系统分析网上

7,  “软件测试人员需要掌握的知识” 顾翔 2010-03-31发布在系统分析网上

软件测试咨询

  

   

投稿关闭窗口打印