浅谈软件测试中自动化测试初探
 
2009-04-23 来源:网络
 

摘要:本文介绍[1]了软件测试中的自动化测试,讨论了什么是自动化测试、自动化测试的基本工作过程、自动化测试的应用范围以及自动化测试与手工测试的优点和缺点,最后总结了自动化测试的未来发展方向。

关键字:软件测试;自动化测试;手工测试

1引言

无论采用哪种开发模型所开发出来的软件系统,由于客观系统的

复杂性,加上人的主观认识不可能完美,每个阶段的技术复审也不可能毫不遗漏地查出和纠正所有的错误,再加上编码阶段也必须会引起新的错误,所以在软件使用以前必须经过严格的软件测试,通过测试尽可能找出软件开发各阶段的错误,从而得到高质量的软件。它不只是为了保证软件系统本身高质量,也保证整个软件开发过程是高质量的。不仅如此,软件测试还为风险评估准备信息,给开发人员或程序经理提供反馈信息。

软件测试可用手工来完成,目前大部分都是采用此测试方法。但是,软件测试的工作量很大,据统计,测试会占用到40的开发时间;一些可靠性要求非常高的软件,测试时间甚至占到开发时间的60。而测试中的许多操作是重复性的、非智力性的和非创造性的,并要求做准确细致的工作,计算机就最适合于代替人工去完成这样的任务。这种让计算机来代替人的部分手工测试工作的测试方法,我们称之为自动化测试。它的准确定义是使用一种自动化测试工具来验证各种软件测试的需求,它包括测试活动的管理与实施,测试脚本的开发与执行。自动化测试使测试过程简单并有效率,使测试过程更为快捷,没有延误。这就好比进行一项商业交易,我们已经知道了交易的具体过程,而我们所要做的是设计一套自动化的方法,使交易过程更简单,成本更低。

2自动化测试完成的工作

2.1前期准备工作

在对一个软件系统进行测试之前,我们可以先改进被测试的产品,使它更容易被测试。有很多改进措施可以帮助测试人员更好的使用产品,也可以帮助测试人员更好的测试产品。比如一些产品很难安装,可以直接改进产品的安装程序,或者是开发一套自动安装程序,目前有很多专门制作安装程序的商用工具。

我们也可以利用工具在测试执行的日志中查找错误,利用手工查找报错的方法容易让人感到乏味且易遗漏。这时我们可以仔细了解日志中记录的错误信息格式,写出一个错误扫描程序,使查错自动化。

2.2需求分析

正如软件生命周期有需求分析阶段一样,在制定测试方案之前也需要收集需求。定义自动化测试项目的需求要求我们全面地、清楚地考虑各种情况,然后给出权衡后的需求,并且可以使测试相关人员更加合理的提出自己对自动化测试的期望。

开发管理者、测试管理者和测试人员实现自动化测试的目标常常是有差别的。除非三者之间达成一致,否则很难定义什么是成功的自动化测试。为了避免这种情况,需要在自动化测试需求上保持一致。应该有一份自动化测试需求,用来描述需要测试什么。测试需求应该在测试设计阶段详细描述出来,自动化测试需求描述了自动化测试的目标。

2.3自动化测试工具的选择

我们可以自己根据要测试的软件系统自己开发一个测试工具,但花费代价较大,鉴于此我们可以使用已成熟的测试工具。对于测试工具的选择,要有专人针对不同的自动化测试,去评估究竟该使用哪种测试工具比较好。自动化测试工具又分单元测试工具、功能自动化工具和性能自动化工具,其中又分开源的和商业工具。究竟哪种工具更适合自己平台的测试,还需要有专业人员进行评估。

2.4自动化测试方案的制定

自动化测试方案包括指明测试中需要什么样的数据,并给出设计数据的完整方法;需要明确测试设计的细节描述,还应该描述测试的预期结果;完成测试设计文档,需要描述清楚测试设计的思路;编写测试脚本。对于脚本的开发我们需注意以下问题:

第一、开发脚本必须遵循一些规范化,就类似于程序员编程规范一样。我们的测试脚本就好比是我们测试人员的程序,同样要形成一个编写规范。因为养成这样的好习惯,是为了能方便维护脚本,避免增加后期的维护量和方便使用者使用;

第二、保证开发的脚本回放没有问题的基础上,适当增加出错处理来增强脚本;

第三、后期还可以在脚本中加入检查点,这样做的好处可以把原来需要人工去校验的地方让脚本去做;

第四、在脚本中增加数据驱动方法,使脚本能覆盖更多的分支路径,进一步提高脚本的集成度。因为前面已经说过了,脚本是不会执行那些没有被编写进去的功能点的,所以说后期测试人员一旦发现这个地方有必要让脚本来代替手工进行执行,就可以不断的增强我们的自动化脚本。

2.5可行性分析

可行性分析是指验证自动化测试项目的可行性,尽可能快地验证你采用的测试工具和测试方法的可行性,站在产品的角度验证产品采用自动化测试的可行性。同时要

确定测试工具和测试方法对于被测试的产品和测试人员是否合适。选择一个快速,有说服力的测试套,它是评估测试工具的最好的方式,它可以证明你所选测试工具和测试方法的正确性。

2.6自动化测试的维护和扩充

自动化测试是一个长期的过程,为了与产品新版本的功能和其他相关修改保持一致,自动化测试需要不停的维护和扩充。自动化测试设计中考虑自动化在未来的可扩充性是很关键的,不过,自动化测试的完整性也是很重要的。如果自动化测试程序报告测试用例执行通过,测试人员应该相信得到的结果,测试执行的实际结果也应该是通过了。其实,有很多存在问题的测试用例表面上执行通过了,实际上却执行失败了,并且没有记录任何错误日志,这就是失败的自动化。这种失败的自动化会给整个项目带来灾难性的后果,而当测试人员构建的测试自动化采用了很糟糕的设计方案或者由于后来的修改引入了错误,都会导致这种失败的测试自动化。失败的自动化通常是由于没有关注自动化测试的性能或者没有充分的自动化设计导致的。

3自动化测试应用的范围

自动化测试并不是要求全程自动化,使用自动化测试代价也非常之高。自动化测试主要是用在存在大量重复性的手工测试项目和测试时间比较长的项目。很多测试小组都是在回归测试中采用自动化测试。所谓回归测试指在修改了原软件后,对其重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误。它通常使用相同的测试用例和测试方法,自动化测试方法最适合。关于系统中模块的测试,对那些最有可能出问题或者不会破坏原先设计的重构任务进行自动化测试,性价比最高。

自动化测试绝不能代替手工测试,它只是手工测试的补充。对于那种不稳定软件的测试,开发周期很短的软件,一次性的软件等不适合用自动化测试。自动化测试是使用工具进行测试,工具本身并没有想象力和灵活性,根据报道,自动化测试只能发现15的缺陷,而手工测试可以发现85的缺陷。合理的运用自动化测试可以大大提高工作效率,反之则会是无休止的噩梦。无论测试自动化多么强大,现阶断,仍然是以手工测试为主。

4自动化测试的优势与不足

软件测试中,手工测试不够全面和彻底,因为它花费了很多时间。代码在修改或添加之后,运行预定义的人工测试集来保证修改不会产生新的问题。人工测试花费的时间越来越多,并给开发者带来挫折感,打击他们执行测试的积极性。而且,测试的工作量使得开发者不愿意改进或优化现有的代码。

当开发者测试他们自己的代码时,他们总是不愿意执行最苛刻的测试用例,因此就导致了最有可能出错之处也是最不可能被全面测试到这样的情形。

自动化测试无需人工干预就可以完成,它们缩短了开发过程。而且由于自动化测试可以简单快速的发现修改的代码是否能有效地运行,因此也就鼓励开发者优化和改进现有的代码。

测试自动化往往对测试人员的技术水平要求很高,测试人员必须充分理解自动化测试,但是,自动化测试不利于测试人员积累测试经验。

不要强行在测试的每个部分都采用自动化方式,寻找能够带来最大回报的部分,部分的采用自动化测试是最好的方法。可以采用手动确认测试和自动化测试相结合的方法。

5结论

任何工作的开展并非一朝一夕,新技术的开展将需要投入大量人力物力,而自动化测试就是我们测试工程师必须要坚持的一个长期的发展方向。为了不至于做事只做表面,建议每个测试团队中都必须要有专人去负责推动自动化工作的开展。还必须有专人负责维护脚本,规范脚本,甚至可以引入配置管理工具来统一管理脚本和把经验文档化。只有这样我们的测试财富才会从中不断积累,只有这样自动化测试才能走得更远。

参考文献:

[1] 《软件工程与软件测试自动化教程》,张克东,电子工业出版社

[2]《软件工程导论》,张藩,清华大学出版社

[3]《软件测试自动化》,DanielJ.Mosley,BruceA.Posey,机械工业出版社


火龙果软件/UML软件工程组织致力于提高您的软件工程实践能力,我们不断地吸取业界的宝贵经验,向您提供经过数百家企业验证的有效的工程技术实践经验,同时关注最新的理论进展,帮助您“领跑您所在行业的软件世界”。
资源网站: UML软件工程组织