您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > 全面的软件测试自动化方法介绍
软件测试自动化[本章要点]1.自动化测试应考虑的各种因素;2.自动化测试和手工测试中涉及的问题以及二者的优缺点;3.应用自动化测试工具的目的;4.自动化测试工具的分类和选择方法;5.自动化测试过程实例及自动化测试经验。[本章目标]1.了解自动化测试应考虑的各种因素以及如何衡量自动化测试成本。2.掌握自动化测试和手工测试的优缺点,知道如何正确选择两种软件测试策略。3.了解测试工具的分类、使用目的及其选择,了解几种常用的测试工具。4.了解自动化测试的过程。进行自动化测试的适当时机并非一律用自动化测试就好,要考虑经济性、有效性,适当的进行自动化测试。概述当对产品的一些特征来设计一系列测试时,对每一个测试都需要决定是否对其进行自动化测试。如何做出一个合理的决定,假设如下:1.拥有稳定的自动化测试技术支持。2.两种极端的可能性:一种就是无需人工干预的完全自动化测试,另一种就是只运行一次就废弃的人工测试。3.自动化测试和手工测试都可行(但事实并非如此)。4.测试是通过外部接口来完成的(黑盒测试)。5.不要求必须进行自动化测试。6.测试已经设计好之后,再决定是否进行自动化测试。7.有一定的时间用于完成测试,并且在这段时间里完全有可能把测试做好。在决定是否要进行自动化测试之前,通常需要考虑如下几个主要问题:1.同手工测试相比,只运行一次的自动化测试要多付出多少代价?2.自动化测试的生命周期是有限的。那么,这类测试是否迟早要终止?什么事件将会导致测试中止?3.在整个生命周期内,这次测试能捕获到新bug的可能性会有多大?这些难以预计的收益能够使自动化测试的成本得到补偿吗?自动化测试的成本创建一次自动化的测试所花费的时间要比一次手工测试所花费的时间多得多。测试成本因产品的架构以及自动化测试的方式不同而异。介绍如下几种(费用由高至低):1通过图形用户界面来测试产品;2使用GUI捕捉/回放工具来跟踪测试与产品之间的交互,同时建立脚本;3测试的是一个编译器;测试成本还要考虑测试时间、Bug的多少等问题。自动化测试的生命周期测试的生命周期如下图-1所示:创建测试测试运行测试中止运行测试代码改变运行测试代码改变运行测试代码改变在决定是否进行自动化测试之前,必须首先估计一下,产品的代码变动在什么范围内,测试仍能存活。如果要求代码不能有太多变动,要做的测试最好是非常善于捕获bug的测试;而且要求估计生命周期。介于需要被测试的代码和测试之间的代码称作中介代码(interveningcode)。一、中介代码的变动对测试周期的影响中介代码是使测试中止的一个主要原因。例如,用户界面以前要求输入电话号码,现在变为提供一个可视的电话键盘,使用鼠标点击数字来模拟使用真实的电话。虽然通过两种界面向被测试的代码传递的都是相同的数据,但是因为没有了提供输入电话号码的地方,自动化测试可能就会中止。为了使测试免受中介代码变化的影响,应该从以下几个方面考虑:1、评估一下中介代码的改变会不会影响测试。如果绝不会影响到测试,使用自动测试就能节省大量的时间。2、如果中介代码的变化会影响到测试,就必须考虑一下使用测试库函数能够使测试不受影响的可能性会有多大。3、假如没有测试函数库——如果是在捕捉/回放的模式下使用GUI测试自动化工具——不要指望测试会不受影响。二、被测试代码的改变对测试周期的影响需要判断一下被测试的代码的稳定性。首先,需要重点考虑代码的行为。其次,考虑功能的增加会不会影响测试。自动化测试的价值进行自动化测试要解决的问题就是:自动化测试的价值必须要超过所有因此而放弃的手工测试的价值。考虑问题如下:1.测试代码的结构要清晰。2.测试通常是用来测试功能代码。支撑代码对于测试者来说通常是不可见的。3.但功能代码的改变通常会改变代码的行为。因此,极有可能会使测试中止,而不是报告bug。4.测试的价值主要在于支撑代码改变以后仍能捕获bug的能力。5.如果我们一点也不了解支撑代码,无法知道测试是否能捕获bug?如何估计测试是否有助于我们捕获bug?6.可以认为与被测试的代码进行交互的其他代码大多数是支撑代码,支撑代码的变化也会产生自动测试所能捕获的bug。注意:高价值的测试不可能是特征驱动测试而是任务驱动测试。一、分析被测试代码的结构。例子:被测试的是一段处理从银行账户里提款的代码。(例子详见教材)把被测试的代码分成两部分:①功能代码(featurecode),它直接实现被测试代码所完成的功能。测试会专门对其进行调用。功能代码(supportcode)可以完成用户所进行的操作(通过使用用户界面的关联代码)。②支撑代码(supportcode),它起到支持功能代码(supportcode)的作用。测试代码会对其进行调用,但并没有针对这些代码的特殊测试。图-2功能代码和支撑代码示意图在这里,支撑代码位于水平线以下。功能代码位于水平线以上,共有五种不同的功能,我们只针对其中的两个功能进行测试。二、被测试代码的变化所带来的影响。主要考虑这样一些问题:1.就给定的结构而言,代码的变化将会产生什么样的影响?2.什么样的变化具有测试价值?假设一些功能代码发生了变化,如图-3中灰色图形所示:这种变化极有可能会导致调用功能代码的测试中止。因此,如果希望使用自动化测试的方法在发生变化的功能代码(featurecode)中找到bug,就必须终止原有测试。如果测试的成本很高,这样做是很不经济的。为了使原有的测试行为仍然能够保留,通常采用的做法是更改支撑代码(supportcode)以便能够支持其他功能代码的变动。请看图-4:图-3图-4三、支撑代码的变化对测试的影响主要从以下两方面来考虑这个问题:代码的变化有多少?这些变化会引入多少bug?例子假设我正在测试一个产品,测试已经完成一半。产品已经实现了主要的功能,但是还需要增加一些辅助功能。现在我要对这些主要的功能进行测试。测试过程中,在同如下人员进行交流的过程中提出的问题如下:程序员:这些辅助的功能是否有可能需要改变产品的支撑代码?程序员有可能精心设计了支撑代码,并且考虑坚持使用可视化的用户界面来完善各种功能。如果是这样的话,那么自动化测试的价值就不大。但是因为要急于完成测试,程序员也可能知道程序的支撑代码的结构不会一成不变的。由于大部分工作将会重复进行,所以可能会特别需要进行自动化测试。或者程序员也不知道支撑代码是否要改变。项目经理:在新版本中,新增的功能是一个十分重要的部分吗?如果是这样的话,由于市场竞争激烈,图形用户界面有可能改变吗?以前,用户界面改动有多大?为什么会希望今后的改动越少越好?这些变化是为了增加功能,还是用来代替现有的功能?我们需要切实的估计一下变动的可能性,因为任何变化都可能会提高自动化测试的成本,缩短测试的生命周期。了解并熟悉测试工具的人员:如何应对产品的变化?什么样的变化会使测试中止?对于新增加功能的测试,遇到这些情况的几率会有多大?一次自动化测试所花费的成本相当于几次手工测试,并且要特别重视测试价值的大小和生命周期的长短,这样做可能不对。但这都是为了避免犯下灾难性的错误,如果自动化测试的成本很高而生命周期很短,我们最好使用手工测试。但是这并不意味着不能使用自动化测试,而是要判断与衡量。在测试中,要不断跟踪bug报告并加以修改,保留所有和测试相关的文档。从这些资料当中,我们常常能够发现更为重要的信息。如:•什么样的因素与产生的bug无关?•哪里存在bug?•代码行为的稳定性如何?经过一段时间,要进行自动化测试还是手工测试的想法就会逐渐成熟,可能会形成一个更大的测试套。另外一些需要考虑的问题1.手工测试有时候会发现一些自动化测试所不能发现的问题。2.尽管人善于发现问题,但很容易疲劳。并且不能对结果做出精确的分析。3.由于我们不能保证每次手工输入的数据完全相同。因此,重复的手工测试多少会有些不同,那么就有可能捕获支撑代码中的bug。4.要求对配置测试进行更多的自动化测试。5.如果在进行第一次测试的时候就捕获了bug。表明这部分程序代码将来有可能发生变化,要进行更多的自动化测试。6.如果自动化测试的技术支持足够强大,开发人员很容易就能做回归测试,自动化测试也需要比手工测试快得多,但是并不是所有的公司都具有这样的自动化测试技术支持水平。7.使用手工测试的时候捕获了bug,但又不能再现bug时会使人很沮丧。8.程序更改之后,测试人员应该对其进行检查。9.因为进行自动化测试的创建要花费一些时间,因此把第一个bug提交给程序员所花费的时间要比手工测试花费的时间长。10.把测试设计的有利于进行自动化测试,但不善于捕获bug。11.如果产品的行为改变了,自动化测试就有可能会报告一些不真实的bug。12.如果自动化测试创建的十分好,能够有序的运行,并且可以改变测试运行的顺序。13.我们可以在产品需要测试之前先设计测试。14.也许自动化测试的价值直到下一个新版本发布之后才能体现出来。自动化测试和手工测试比较自动化测试并不能完全取代手工测试,二者各有优缺点。自动化测试与手工测试的比较表-1显示了手工测试与自动化测试的比较结果。这个测试案例中包括1750个测试用例和700多个错误。测试步骤手工测试自动化测试通过使用工具改善测试的百分比测试计划的开发3240-25%测试用例的开发26211755%测试执行4662395%测试结果分析1175850%错误状态/更正检测1172380%产生报告961683%时间总和109027775%表-1自动化测试和手工测试比较短测试周期中手工测试面临的挑战迭代式的开发过程已逐渐取代传统的瀑布式开发,成为了目前最流行的软件开发过程。在迭代开发中强调在较短的时间间隔中产生多个可执行、可测试的软件版本,这就意味着测试人员也必须为每次迭代产生的软件系统进行测试。随着软件开发过程的进展,测试工作越来越繁重,如果使用手工测试的方法,将很难保证测试工作的进度和质量。手工测试的问题手工测试的方法是根本不可能符合软件快速开发的要求的。大公司用自动化测试因为它适合自动化测试的特点和有较高的投资回报率。1、针对产品型项目的测试2、针对增量式开发、持续集成项目的测试3、针对能够自动编译、自动发布的系统的测试4、回归测试5、需要多次重复、机械性动作的测试6、需要频繁运行的测试7、将烦琐的任务转化为自动化测试动化测试的问题自动化测试并不能完全取代手工测试。例如:在下面几种情况下就不适合使用自动化测试。1定制型项目(一次性的)2项目周期很短的项目3涉及业务规则复杂的对象4关于美观、声音、易用性的测试5很少运行的测试,如:一个月只运行一次的测试。6测试的软件不稳定7涉及物理交互的测试自动化测试的优点1、对程序的新版本运行己有的测试,即回归测试。2、可以运行更多更频繁的测试。3、可以进行一些手工测试难以完成或不可能完成的测试。4、充分地利用资源。5、测试具有一致性和可重复性。6、测试具有复用性。7、缩短软件发布的时间。8、增强软件的可靠性。动化测试的缺点1、自动化测试不能取代手工测试,测试主要还是要靠人工的。2、新缺陷越多,自动化测试失败的几率就越大。3、工具本身不具有想象力4、技术问题、组织问题、脚本维护5、测试工具与其他软件的互操作性自动化测试工具的选择和使用应用自动化测试工具的目的一般而言,在测试过程中应用自动化测试工具主要为了以下几个目的:1、提高测试质量;2、减少测试过程中重复的手工劳动,提高测试效率;3、实现测试自动化,充分利用测试资源。自动化测试工具的概要介绍根据软件生命周期中的定义,可以把自动化测试工具分为白盒测试工具、黑盒测试工具和测试管理工具三大类。这些工具和软件开发过程中相关活动的关系如图7-6所示:编码以及单元测试白盒测试工具测试管理工具黑盒测试工具需求分析框架设计详细设计集成测试系统测试验收测试图-6测试工具与开发过程关系图一、白盒测试工具白盒测试工具一般是针对代码进行测试的工具,测试中发现的缺陷可以定位到代码级,根据测试原理的不同,又可以分为静态测试工具和动态测试工具。1、静态测试工具
三七文档所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
本文标题:全面的软件测试自动化方法介绍
链接地址:https://www.777doc.com/doc-4599658 .html