第七章软件自动化测试

上传人:伴*** 文档编号:243710391 上传时间:2024-09-29 格式:PPT 页数:77 大小:2.11MB
返回 下载 相关 举报
第七章软件自动化测试_第1页
第1页 / 共77页
第七章软件自动化测试_第2页
第2页 / 共77页
第七章软件自动化测试_第3页
第3页 / 共77页
点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,软件测试基础教程,杜文洁 景秀丽 主编,中国水利水电出版社,第七章 软件自动化测试,第七章 软件自动化测试,7.1,软件自动化测试概述,7.2,自动化测试的策略与运用,7.3,常用自动化测试工具简介,习 题,本章概要,软件自动化测试,自动化测试的方法,常用的自动化测试工具。,第七章 软件自动化测试,7.1.1,自动化测试定义及发展简史,7.1.2,软件测试自动化的必然性,7.1.3,软件测试自动化的引入时机,7.1.4,国内软件自动化测试实施现状分析,7.1.5,软件测试自动化的引入条件,第七章 软件自动化测试,7.1,软件自动化测试概述,7.1,软件自动化测试概述,计算机科学发展至今,最根本的意义是解决人类手工劳动的复杂性,成为替代人类某些重复性行为模式的最佳工具。而在计算机软件工程领域软件测试的工作量很大,一般测试会占用到,40%,的开发时间;一些可靠性要求非常高的软件测试工作量巨大,测试时间甚至占到,60%,开发时间。而且测试中的许多操作是重复性的,非智力性的和非创造性的,并要求做准确细致的工作,计算机就最适合于代替人工去完成这样的任务。因而进行自动化测试能够提高软件测试工作效率,提高开发软件的质量,降低开发成本和缩短开发周期。,软件自动化测试是相对手工测试而存在的,主要是通过所开发的软件测试工具,脚本等来实现,具有良好的可操作性,可重复性和高效率等特点。已经成为国内软件工程领域一个重要领域;不言而喻,软件测试从业者都意识到软件测试这项工作走向成熟化、标准化的一个必经之路就是要实施自动化测试。,第七章 软件自动化测试,7.1.1,自动化测试定义及发展简史,软件自动化测试就是使用自动化测试工具或手段,按照测试工程师的预定计划进行自动的测试,来验证各种软件测试的需求,它包括测试活动的管理与实施。目的是减轻手工测试的工作量,提高软件的质量。软件的自动化测试在过去一段时间中有长足的进步。每一代技术都解决了很多重要问题。,第一代的自动化测试大概在,90,年代初期,透过硬件的方式录制键盘的输入并播放,但缺少检查点(,checkpoint,)的功能,由工具录制并记录操作的过程和数据形成脚本,通过回放来重复人工操作的过程。在这种模式下数据和脚本混在一起,几乎一个测试用例对应一个脚本,维护成本很高。而且即使界面的简单变化也需要重新录制,脚本可重复使用的效率低,而且测试脚本很难维护。,第七章 软件自动化测试,7.1.1,自动化测试定义及发展简史,第二代的自动化测试则大约在,90,年代中后期开始的,这时已经由硬件转变成透过软件录制,/,播放(,capture/playback,)的方式产生测试脚本(,script,),并且也增加了检查点的功能,从数据文件读取输入数据,通过变量的参数化,将测试数据传入测试脚本,不同的数据文件对应不同的测试用例。在这种模式下数据和脚本分离,脚本的利用率、可维护性大大提高,但受界面变化的影响仍然很大。比较大的问题是测试脚本也是一种程序语言,所以测试人员也需 要懂程序语言,换句话说就是要会写程序。而且当软件有变动时,测试脚本也需要同步更新,这对测试人员来说是一大挑战,测试人员常常就是整个测试脚本再重新录制一遍。,第三代关键字驱动(,keyword driven,)的自动化测试,开始于,2001,年。主要是把测试脚本给抽象化(,abstraction,),让那些即使不懂测试脚本,不会写程序的非技术人员,也可以使用自动化测试工具建立自动化测试个案。关键字驱动测试是数据驱动测试的一种改进类型,它将测试逻辑按照关键字进行分解,形成数据文件,关键字对应封装的业务逻辑。主要关键字包括三类:被操作对象(,Item,)、操作(,Operation,)和值(,value,),用面向对象形式可将其表现为,Item.Operation(Value,),。关键字驱动的主要思想是:脚本与数据分离、界面元素名与测试内部对象名分离、测试描述与具体实现细节分离。,第七章 软件自动化测试,7.1.1,自动化测试定义及发展简史,第四代称为专注于业务需求的自动化测试(,Mercury Business Process Testing,)。弥补第三代自动化测试工具的不足,从测试脚本的设计、自动化、维护及文件存档都做一个全面且根本的进化,测试用例的设计被从测试工具中分离了出来,并且需要一个具有工具技能和开发技能的测试团队,使专业的测试自动化将技能的使用最优化的结合起来。,第七章 软件自动化测试,7.1.2,软件测试自动化的必然性,1,手工测试有它的局限性,通过手工测试无法做到覆盖所有代码路径,简单的功能性测试用例在每一轮测试中都不能少,而且具有一定的机械性,重复性,工作量往往较大。许多与时序,死锁,资源冲突,多线程等有关的错误,通过手工测试很难捕捉到。进行系统负载,性能测试时,需要模拟大量数据或大量并发用户等各种应用场合时,很难通过手工测试来进行。进行系统可靠性测试时,需要模拟系统运行,10,年,几十年,以验证系统能否稳定运行,这也是手工测试无法模拟的。,软件测试繁多、沉闷、耗时,对于产品型软件或需求不断更新的系统,每一版产品发布或系统更新的周期就只有短短的几个月,这就意味着开发周期也只有短短的数月,而在测试期间是每天或每几天要发布一个版本供测试人员测试,一个系统的功能点少则上百多则上千上万,使用手工测试是非常耗时和繁琐的,这样频繁的重复劳动必然会导致测试人员产生厌倦心理、工作效率低下。,第七章 软件自动化测试,7.1.2,软件测试自动化的必然性,2,自动测试的优势,(,1,)适合做新版本执行回归测试,对于产品型的软件,每发布一个新的版本,其中大部分功能和界面都和上一个版本相似或完全相同,这部分功能特别适合于自动化测试,从而可以让测试达到测试每个特征的目的。,(,2,)具有一致性和可重复性,由于每次自动化测试运行的脚本是相同的,所以每次执行的测试具有一致性,而这一点手工测试是很难做到的。由于自动化测试的一致性,很容易发现被测软件的任何改变。,(,3,)更好的利用资源,理想的自动化测试能够按计划完全自动的运行,测试人员可以设置自动化测试程序在周末和晚上执行测试,白天上班的时候测试人员就可以收集测试所发现的缺陷,并交给开发人员修改,同时测试人员可以在白天开发新增功能的自动化测试脚本,或对已有的脚本不适合的地方进行修改。这样充分的利用了公司的资源,也避免了开发和测试之间的等待。,第七章 软件自动化测试,7.1.2,软件测试自动化的必然性,(,4,)解决测试与开发之间的矛盾,通常在开发的末期,进入集成测试阶段,由于每发布一个版本的初期,测试系统的错误比较少,这时开发人员有等待测试人员测试出错误的时间。事实上在叠代周期很短的开发模式中,存在更多的矛盾,但自动化测试可以解决其中的主要矛盾。,(,5,)弥补手工测试难实现的不足,压力测试、并发测试、大数据量测试、崩溃性测试等,都需要成百上千的用户同时对系统加压才能实现其效果,用人来测试是不可能达到的,也是不现实的。在没有引入自动化测试工具之前,为了测试并发,组织几十号人在测试经理的口令下,同时按下同一个按钮,但如果需要更大的并发量,就很难实现了。,第七章 软件自动化测试,7.1.2,软件测试自动化的必然性,自动化测试较手工测试具有很多优点,它可以缩短软件开发测试周期,可以让产品更快投放市场;测试效率高,充分利用硬件资源;节省人力资源,降低测试成本;增强测试的稳定性和可靠性;提高软件测试的准确度和精确度,增加软件信任度。自动化软件测试工具使测试工作相对比较容易,但能产生更高质量的测试结果。手工不能做的事情,自动化测试能做,如负载,性能测试。软件测试实行自动化进程,绝不是因为厌烦了重复的测试工作,而是因为测试工作的需要,更准确地说是回归测试和系统测试的需要。,在过去的数年中,通过使用自动化的测试工具对软件的质量进行保障的例子已经数不胜数。到现在为止自动化测试工具已经足够完善了,完全可以通过在软件的测试中应用自动化的测试工具来大幅度的提供软件测试的效率和质量。在使用自动化的测试工具的时候应该尽早的开始测试的工作,这样可以使修改错误更加的容易和廉价,并且可以减少更正错误对软件开发周期的影响。通下表我们可以看出自动化测试与传统的手工测试在所有的方面都有很大的不同,尤其是在执行测试和产生测试报告的方面。这个测试案例中包括,1750,个测试用例和,700,多个错误。,第七章 软件自动化测试,7.1.2,软件测试自动化的必然性,第七章 软件自动化测试,表,7-1,手工测试与自动化测试的比较,测试步骤,手工测试,自动化测试,通过使用工具的改善测试的百分比,测试步骤,测试计划的,开发,32,40,-25%,测试计划的开发,测试用例的,开发,262,117,55%,测试用例的开发,测试执行,466,23,95%,测试执行,测试结果分析,117,58,50%,测试结果分析,错误状态,/,更正检测,117,23,80%,错误状态,/,更正检测,产生报告,96,16,83%,产生报告,时间总和,1090,277,75%,时间总和,7.1.2,软件测试自动化的必然性,目前软件开发过程中,迭代式的开发过程已经显示了比瀑布式开发的巨大好处,并已逐渐的取代传统的瀑布式开发成为了目前最流行的软件开发过程。在迭代开发中强调在较短的时间间隔中产生多个可执行、可测试的软件版本,这就意味着测试人员也必须为每次个迭代产成的软件系统进行测试。测试工作的周期被缩短了,测试的频率被增加了。在这种情况下,传统的手工测试已经严重的满足不了软件开发的需求。当第一个可测试的版本产生后,测试人员开始对这个版本的系统进行测试,很快第二个版本在第一个版本的技术上产生了,测试人员需要在第二次测试时重复上次的测试工作,还要对新增加的功能进行测试,每经过一个迭代测试的工作量会逐步的累加。随着软件开发过程的进展,测试工作变得越来越繁重,如果使用手工测试的方法,将很难保证测试工作的进度和质量。在这种情况下应用良好的自动测试工具将势在必行。通过使用自动化测试工具测试人员只要根据测试需求完成测试过程中的所需的行为,自动化测试工具将自动生成测试脚本,通过对测试脚本的简单修改便可以用于以后相同功能的测试了,而不必手工的重复已经测试过的功能部分。,第七章 软件自动化测试,7.1.2,软件测试自动化的必然性,其次,在很多项目中,测试人员的所有任务实际上都是手动处理的,而实际上,有很大一部分重复性强的测试工作,是可以独立开来自动实现的。,最后,测试人员通常很难花费大量时间来学习新技能,这是目前国内测试从业者的现状,太多的企业为了节约成本而将刚刚走出校门的毕业生作为测试工程师,他们每日做着繁忙的重复工作,却无法深入学习测试技能。而软件测试自动化将改变这种局面,也是未来测试工程师或即将成为测试工程一项强有力的工作技能。可以说,实施测试自动化是软件行业一个不可逆转的趋势,如果在这个领域走在了前列,无论从企业的核心竞争力还是个人的工作技能来说,都有巨大的优越性,而国内众多的软件厂商也的确在纷至沓来的着手开展着这项工作。,第七章 软件自动化测试,7.1.3,软件测试自动化的引入时机,自动化测试之所以能在很多大公司实施起来,就是有它适合自动化测试的特点和高的投资回报率。清晰、合理的判断哪些测试可以采用自动化是提高测试效率和质量的关键。,1,产品型项目,产品型的项目,每个项目只改进少量的功能,但每个项目必须反反复复的测试那些没有改动过的功能。这部分测试完全可以让自动化测试来承担,同时可以把新加入的功能的测试也慢慢地加入到自动化测试当中。,2,增量式开发、持续集成项目,由于这种开发模式是频繁的发布新版本进行测试,也就需要频繁的自动化测试,以便把人从中解脱出来测试新的功能。,3,能够自动编译、自动发布的系统,要能够完全实现自动化测试,必须具有能够自动化编译,自动化发布系统进行测试的功能。当然,不能达到这个要求也可以在手工干预的情况下进行自动化测试。,4,回归测试,回归测试是自动化测试的强项,它能够很好的验证你是否引入了新的缺陷,老的缺陷是否修改过来了。在某种程度上可以把自动化测试工具叫做回归测试工具。,5,多次重复、机械性动作,将烦琐的任务转化为自动化测试,自动化测试最适用于多次重复、机械性动作,这样的测试对它来说从不会失败。比如要向系统输入大量的相似数据来测试压力和报表。,第七章 软件自动化测试,7.1.3,软件测试自动化的引入时机,6,需要频繁运行测试,在一个项目中需要频繁的运行测试,测试周期按日算,就能最大限度的利用测试脚本,提高工作效率。,7,能够充分利用休息时间,测试的执行与控制,包括单机运行和网络多机分布式的运行,在节假日的运行,测试个案调用控制,测试对象,测试范围与测试版本的控制等。,在进行自动化测试前,首先要建立一个对软件测试自动化的认识观,.,软件测试工具能提高测试效率,覆盖率和可靠性等,自动化测试虽然具有很多优点,但它只是测试工作的一部分,是对手工测试的一种补充。自动化测试绝不能代替手工测试,它们各有各自的特点,其测试对象和测试范围都不一样:在系统功能逻辑测试,验收测试,适用性测试,涉及物理交互性测试时,多采用黑盒测试的手工测试方法单元测试,集成测试,系统负载测试,性能测试,稳定性测试,可靠性测试等比较适合采用自动化测试。那种不稳定软件的测试,开发周期很短的软件,一次性的软件等不适合自动化测试。工具本身并没有想象力和灵活性,根据报道,自动化测试只能发现,15%,的缺陷,而手工测试可以发现,85%,的缺陷。自动化测试工具在进行功能测试时,其准确的含义是回归测试工具,这时工具不能发现更多的新问题,但可以保证对已经测试过部分的准确性和客观性。多数情况下,手工测试和自动化测试应该相结合,以最有效的方法来完成测试任务。,第七章 软件自动化测试,7.1.4,国内软件自动化测试实施现状分析,当前国内软件企业实施或有意向实施测试自动化时面临的主要问题有如下几点:,1,认为自动化测试是个遥不可及的事情,很多小公司人员、资金、资源都不足,不必实施。热血沸腾的实施测试自动化,购买了工具,推行了新的测试流程;但是时间不长测试流程又回到原来的模式。,2,公司实施了自动化测试;然而开发与测试之间,甚至与项目经理之间矛盾重重,出了事情不知如何追究责任;虽然还在勉强维持的自动化测试,但实施的成本比手工测试增加了,工作量比从前更大了,从而造成项目团队人员对自动化测试的怀疑,3,自动化测试实施相对比较成功,但或多或少还有些问题,比如工具选择不准确,培训不到位,文档不完备,人员分配不合理,脚本可维护度不高等,造成一种表面上的自动化测试流程,是一幅空架子。,第七章 软件自动化测试,7.1.4,国内软件自动化测试实施现状分析,产生这些问题主要目前国内的软件公司,很多还是处于获取资本的原始积累阶段,我们不能说公司完全不重视测试,而是测试整体行业都没有被重视起来。公司高层有更需要重视的环节,例如寻找客户签订单,或者开发,这些是直接关系公司存亡的命脉性东西。更意识不到软件测试自动化的重要性;所谓凡事预则立,不预则废。一个软件企业实施测试自动化,绝对不是一蹴而就的,它不仅涉及测试工作本身流程上、组织结构上的调整与改进,甚至也包括需求、设计、开发、维护及配置管理等其他方面的配合。软件开发是团队工作,在这一领域要尤其注重以人为本;所以人员之间的配合、测试组织结构的设置非常重要,每个角色一定要将自己的责任完全担负起来,这也是减少和解决前述团队矛盾的必要手段。这对开展自动化测试的监督和评估相当重要,也包括对工作产品的检查和人员的考核。一定要将自动化测试全面深入的贯彻到测试工作中,不能敷衍了事,不能做表面工作。,第七章 软件自动化测试,7.1.5,软件测试自动化的引入条件,1,对软件测试自动化的正确认识,自动化测试能大大降低手工测试工作,但决不能完全取代手工测试。完全的自动化测,试只是一个理论上的目标,实际上想要达到,100%,的自动化测试,不仅代价相当昂贵,而且操作上也是几乎不可能实现。一般来说,一个,40-60%,的利用自动化的程度已经是非常好的了,达到这个级别以上将过大的增加测试相关的维护成本。,测试自动化的引入有一定的标准,要经过综合的评估,绝对不能理解成是测试工具简单,的录制与回放过程。,(,1,)自动化测试能提高测试效率,快速定位测试软件各版本中的功能与性能缺陷,但不会创造性的发现测试脚本里没有设计的缺陷。测试工具不是人脑,要求测试设计者将测试中各种分支路径的校验点进行定制;没有定制完整,即便事实上出错的地方,测试工具也不会发觉。因此,制订全面、系统的测试设计工作是相当重要的。,第七章 软件自动化测试,7.1.5,软件测试自动化的引入条件,(,2,)自动化测试能提高测试效率,但对于周期短、时间紧迫的项目不宜采用自动化测试。推行自动化测试的前期工作相当庞大,将企业级自动化测试框架应用到一个项目中也要评估其合适性,因此决不能盲目的应用到任何一个测试项目中,尤其不适合周期短的项目,因为很可能需要大量的测试框架的准备和实施而会被拖跨。,(,3,)实施测试自动化必须进行多方面的培训,包括测试流程、缺陷管理、人员安排、测试工具使用等。如果测试过程是不合理的,引入自动化测试只会给软件组织或者项目团队带来更大的混乱;如果我们允许组织或者项目团队在没有关于应该如何做的任何知识的情况下实施自动化测试,那将肯定会以失败告终。,第七章 软件自动化测试,7.1.5,软件测试自动化的引入条件,2,对企业自身现状的评估分析,(,1,)企业规模,企业规模没有严格限制。无论公司大小,都需要提高测试效率,希望测试工作标准化,测试流程正规化,测试代码重用化。所以第一要做到的,就是企业负责人开始,直到测试部门的任何一个普通工程师,都要树立实施自动化测试的坚定决心,不能抱着试试看的态度。一般来说,一个软件开发团队应该符合如下条件则可以优先开展自动化测试工作:测试、开发人员比例要合适,例如,1,:,1,到,2,:,3,;开发团队总人数不少于,10,个。当然,如果只有三五个测试人员,要实施自动化测试绝非易事;但可以先让一个、两个测试带头人首先试着开展这个工作,不断总结、不断提高,并和层层上司经常汇报工作的开展情况,再最终决定是否全面推行此事。,第七章 软件自动化测试,7.1.5,软件测试自动化的引入条件,(,2,)产品特征,一般开发产品的公司实施自动化测试要比开发项目的公司要优越些。原因很简单,就是测试维护成本和风险都小。产品软件开发周期长,需求相对稳定,测试人员可以有比较充裕的时间去设计测试方案和开发测试脚本;而项目软件面向单客户,需求难以一次性统一,变更频繁,对开发、维护测试脚本危害很大,出现问题时一般都以开发代码为主,很难照顾到测试代码。但不是说做项目软件的公司不能实施自动化测试,当前国内做项目的软件公司居多。只要软件的开发流程、测试流程、缺陷管理流程规范了,推行自动化测试自然水到渠成。,第七章 软件自动化测试,7.1.5,软件测试自动化的引入条件,(,3,)软件自动化测试切入方式的风险,正如前面所言,一定要记住将自动化测试与手工测试结合起来使用,不合理的规划会造成工作事倍功半。首先,对于自动化测试率的目标是:,10%,的自动化测试和,90%,的手工测试。当这些目标都实现了,可以将自动化测试的使用率提高。对于何种测试情况下引入自动化测试,何时依然采用手工测试,我们分开阐述。,第七章 软件自动化测试,7.1.5,软件测试自动化的引入条件,第一,符合自动化测试的条件:,具有良好定义的测试策略和测试计划,对于自动化测试你拥有一个能够被识别的测试框架和候选者,能够确保多个测试运行的构建策略,多平台环境需要被测试,拥有运行测试的硬件,拥有关注在自动化过程上的资源,被测试系统是可自动化测试的,第二,宜采用手工测试的条件:,没有标准的测试过程,没有一个测试什么、什么时候测试的清晰的蓝图,在一个项目中一个新人,并且还不是完全的理解方案的功能性和或者设计,你或者整个项目在时间的压力下,在团队中没有资源或者具有自动化测试技能的人,没有自动测试所需要的硬件,第七章 软件自动化测试,7.1.5,软件测试自动化的引入条件,(,4,)企业软件的开发语言风险,当前业界流行的测试工具有几十种,相同功能的测试工具所支持的环境和语言各不相同。还要做时间估算,在评估完前面几项指标后,需要估算实施测试自动化的时间周期,以防止浪费不必要的时间,减少在人员、资金、资源投入上的无端消耗。虽然到测试自动化步入正轨以后,会起到事半功倍的效果,但前期的投入巨大,要全面考虑各种因素,明确实施计划并按计划严格执行,才能最大限度降低风险。,(,5,)工作流程变更风险,测试团队乃至整个开发组织实施测试自动化,或多或少会因为适应测试工具的工作流程,带来团队的测试流程、开发流程的相应变更,而且,如果变更不善,会引起团队成员的诸多抱怨情绪;所以应该尽量减少这种变更,并克服变更中可能存在的困难。,第七章 软件自动化测试,7.1.5,软件测试自动化的引入条件,(,6,)人员培训与变更风险,简单而言,就是测试团队人员的培训具有风险性,例如每个角色的定位是否准确,各角色人员对培训技能的掌握程度是否满意,尤其实施途中如果发生人员变更等风险,都要事先做出预测和相应的处理方案。,一个企业或软件团队实施测试自动化,会有来自方方面面的压力和风险,但是凭借团队成员的聪明才智和公司高层的大力支持,事先做好评估,做好风险预测,如果团队成功引入了测试自动化,即可享受它带来的超凡价值和无穷魅力:使测试工作变得更简单、更有效。,第七章 软件自动化测试,7.2.1,自动化测试策略,7.2.2,自动测试的运用步骤,7.2.3,测试工具的运用及作用,7.2.4,自动化测试产生的问题,7.2,自动化测试的策略与运用,第七章 软件自动化测试,7.2,自动化测试的策略与运用,软件复杂性增加、开发周期缩短使我们有必要加强对自动测试策略的重视,并且寻找出提高效率减少成本的方法。在设计新一代自动化测试系统时,加入可以增加系统灵活性、提供更高测量和吞吐量性能、降低测试系统成本并且延长寿命的策略。,第七章 软件自动化测试,7.2.1,自动化测试策略,1,工作周期及阶段确定,组长初步确定工作周期,并定义自动化测试的阶段,例如需求分析,/,设计阶段,开发实现阶段,运行阶段,而运行阶段中要根据所属系统所处软件生命周期的不同阶段来定义自动化测试的运行周期,例如当前处于所属系统的运营维护阶段(上线之后),其每,3,个月进行一次新版本的发布,则自动化测试亦为每三个月执行一次。或其每周进行一次,Build,的发布,则自动化测试亦为每周执行一次。,2,分析自动化测试风险,根据所属系统的开发平台、界面特性、测试环境搭建维护的难易程度、测试工具的适用性等方面的分析结果进行自动化测试风险的分析。主要从战略层面进行风险的分析,不要分析某个具体的自定义控件的可测试性。,3,手工测试现状复审,依据手工测试现状分析报告中提供的已有业务测试过程进行业务需求覆盖度的分析,判断已有业务测试过程是否完整,若不完整则需要向测试管理部提出反馈:被测系统的手工测试现状尚不符合自动化测试的需求,请求是否延期并委托手工测试方完善业务测试过程。,第七章 软件自动化测试,7.2.1,自动化测试策略,4,测试方法及工具确定,根据所属系统的特点和当前自动化测试组织的实施能力,确定自动化测试的方法,例如业务驱动方法、关键字驱动方法、数据驱动方法;另外要结合现有的软件自动化测试专用工具,判断采用何种自动化测试管理工具搭建自动化测试的管理平台、运行平台,或者是新开发一种框架来实现自动化测试。,5,编写文档,自动化测试分析师编制,自动化测试工作策略,6,内部评审,组长组织自动化测试工作小组的内部评审,7,外部评审,组长向自动化测试管理组的计划控制经理提出评审申请,计划控制经理组织自动化测试管理组的外部评审,评审,自动化测试策略,,需要项目组、自动化测试小组和质量控制经理共同参与评审。组长将评审通过的,自动化测试策略,纳入配置管理库。,第七章 软件自动化测试,7.2.2,自动测试的运用步骤,1,改进软件测试过程,在开始测试自动化之前,要完善测试计划和过程,并且确保已经采用了确定的的测试方法,指明测试中需要什么样的数据,并给出设计数据的完整方法。确认可以提供上面提到的文档后,需要明确测试设计的细节描述,还应该描述测试的预期结果,这些通常被忽略,建议测试人员知道。太多的测试人员没有意识到他们缺少什么,并且由于害怕尴尬而不敢去求助。这样一份详细的文档给测试小组带来立竿见影的效果,因为,现在任何一个具有基本产品知识的人根据文档可以开展测试执行工作了。在开始更为完全意义上的测试自动化之前,必须已经完成了测试设计文档。测试设计是测试自动化最主要的测试需求说明。不过,这时候千万不要走极端去过分细致地说明测试执行的每一个步骤,只要确保那些有软件基本操作常识的人员可以根据文档完成测试执行工作既可。但是,不要假定他们理解那些存留在你头脑中的软件测试执行的想法,把这些测试设计的思路描述清楚就可以了。,另外一个提高测试效率的简单方法是采用更多的计算机。很多测试人员动辄动用几台计算机,这一点显而易见。之所以强调采用更多的计算机是因为一些测试人员被误导在单机上努力的完成某些大容量的自动化测试执行工作,这种情况下由于错误的使用了测试设备、测试环境,导致测试没有效果。因此,自动化测试需要集中考虑所需要的支撑设备。,第七章 软件自动化测试,7.2.2,自动测试的运用步骤,针对改进软件测试过程,最后一个建议是改进被测试的产品,使它更容易被测试,有很多改进措施既可以帮助用户更好的使用产品,也可以帮助测试人员更好的测试产品。一些产品非常难安装,测试人员在安装和卸载软件上花费大量的时间。这种情况下,与其实现产品安装的自动化测试,还不如改进产品的安装功能。采用这种解决办法,最终的用户会受益的。另外的一个处理方法是考虑开发一套自动安装程序,该程序可以和产品一同发布。事实上,现在有很多专门制作安装程序的商用工具。,通过改进产品的性能对测试是大有帮助的。如果产品的性能影响了测试速度,鉴别出性能比较差的产品功能,并度量该产品功能的性能,把它作为影响测试进度的缺陷,提交缺陷报告。,上面所述的几个方面可以在无需构建自动化测试系统的情况下,大幅度的提高测试效率。改进软件测试过程中花费的构建自动化测试系统的时间,不过改进测试过程无疑可以使你的自动化测试项目更为顺利开展起来。,第七章 软件自动化测试,7.2.2,自动测试的运用步骤,2,定义需求,在实际的测试中,自动化工程师和自动化测试的发起者的目标往往存在偏差。为了避免这种情况,需要在自动化测试需求上保持一致。应该有一份自动化测试需求,用来描述需要测试什么。测试需求应该在测试设计阶段详细描述出来,自动化测试需求描述了自动化测试的目标。,开发管理、测试管理和测试人员实现自动化测试的目标常常是有差别的。除非三者之间达成一致,否则很难定义什么是成功的自动化测试。当然,不同的情况下,有的自动化测试目标比较容易达到,有的则比较难以达到。测试自动化往往对测试人员的技术水平要求很高,测试人员必须能理解充分的理解自动化测试,从而通过自动化测试不断发现软件的缺陷。不过,自动化测试不利于测试人员不断的积累测试经验。不管怎么样,在开始自动化测试之前应该确定自动化测试成功的标准。,第七章 软件自动化测试,7.2.2,自动测试的运用步骤,手工测试人员在测试执行过程中的一些操作能够发现不引人注意的问题。他们计划并获取必要的测试资源,建立测试环境,执行测试用例。测试过程中,如果有什么异常的情况发生,手工测试人员立刻可以关注到。他们对比实际测试结果和预期测试结果,记录测试结果,复位被测试的软件系统,准备下一个软件测试用例的环境。他们分析各种测试用例执行失败的情况,研究测试过程可疑的现象,寻找测试用例执行失败的过程,设计并执行其他的测试用例帮助定位软件缺陷。接下来,他们写作缺陷报告单,保证缺陷被修改,并且总结所有的缺陷报告单,以便其他人能够了解测试的执行情况。,第七章 软件自动化测试,7.2.2,自动测试的运用步骤,千万不要强行在测试的每个部分都采用自动化方式。寻找能够带来最大回报的部分,部分的采用自动化测试是最好的方法。或许你可能发现采用自动化执行和手动确认测试执行结果的方式是个很好的选择,或许你可以采用自动化确认测试结果和手工测试执行相结合和方式。并不是说各个环节都采用自动化方式才是真正意义上的自动化测试。,定义自动化测试项目的需求要求我们全面地、清楚地考虑各种情况,然后给出权衡后的需求,并且可以使测试相关人员更加合理的提出自己对自动化测试的期望。通过定义自动化测试需求,距离成功的自动化测试近了一步。,第七章 软件自动化测试,7.2.2,自动测试的运用步骤,3,验证概念,在测试开始前必须验证自动化测试项目的可行性。验证过程花费的时间往往比人们预期的要长,并且需要来自你身边的各种人的帮助。要尽快的验证你采用的测试工具和测试方法的可行性,站在产品的角度验证你所测试的产品采用自动化测试的可行性。这通常是很困难的,需要尽快地找出可行性问题的答案,需要确定你的测试工具和测试方法对于被测试的产品和测试人员是否合适。你需要做的是验证概念:一个快速、有说服力的测试方案可以证明你选在测试工具和测试方法的正确性,从而验证了你的测试概念。你选择的用来验证概念的测试方案是评估测试工具的最好的方式。,第七章 软件自动化测试,7.2.2,自动测试的运用步骤,下面是一些候选的验证概念的试验:,(,1,)回归测试:回归测试是最宜采用自动化测试的环节。,(,2,)配置测试:在所有支持的平台上测试执行所有的测试用例。,(,3,)测试环境建立:对于大量不同的测试用例,可能需要相同的测试环境搭建过程。在开展自动化测试执行之前,先把测试环境搭建实现自动化。,(,4,)非,GUI,测试:实现命令行和,API,的测试自动化比,GUI,自动化测试容易的多。,无论采用什么测试方法,定义一个看得见的目标,然后集中在这个目标上。验证你自动化测试概念可以使自动化更进一步迈向成功之路。,第七章 软件自动化测试,7.2.2,自动测试的运用步骤,4,支持产品的可测试性,软件产品一般会用到下面三种不同类别的接口:命令行接口(,command line interfaces,,缩写,CLIs,)、应用程序接口(,API,)、图形用户接口(,GUI,)。有些产品会用到所有三类接口,有些产品只用到一类或者两类接口,这些是测试中所需要的接口。从本质上看,,API,接口和命令行接口比,GUI,接口容易实现自动化,去找一找你的被测产品是否包括,API,接口或者命令行接口。有些时候,这两类接口隐藏在产品的内部,如果确实没有,需要鼓励开发人员在产品中提供命令行接口或者,API,接口,从而支持产品的可测试性。,第七章 软件自动化测试,7.2.2,自动测试的运用步骤,5,具有可延续性的设计,自动化测试是一个长期的过程,为了与产品新版本的功能和其他相关修改保持一致,自动化测试需要不停的维护和扩充。,第七章 软件自动化测试,7.2.2,自动测试的运用步骤,6,有计划的部署,有计划的自动化测试部署,保证测试方案能够被产品相关人员获取到,就向成功的自动化测试又迈进了一步。,第七章 软件自动化测试,7.2.2,自动测试的运用步骤,7,开展自动化测试,在开展自动化测试的时候,一个问题摆在面前,测试自动化应该及时的提供给测试执行人员,这个不成问题,但是如何保证需求变更后,能够及时提供更新后的自动化测试就是个大问题了。如果自动化测试与需求变更无法同步,那么自动化测试的效果就无法保证了,测试人员就不愿意花费时间学习如何使用新的测试工具和如何诊断测试工具上报的错误。识别项目计划中的软件发布日期,然后把这个日期作为里程碑,并计划达到这个里程碑。当达到这个里程碑后,自动化工程师要关注当前产品版本的发布,要为测试执行人员提供帮助和咨询,但是,一旦测试执行人员知道如何使用自动化测试,自动化测试工程师可以考虑下一个版本的测试自动化工作,包括改进测试工具和相关的库。当开发人员开始设计产品下一个版本中的新特性的时候,如果考虑了自动化测试需求,那么自动化测试师的设计工作就很好开展了,采用这种方法,自动化测试工程师可以保持与开发周期同步,而不是与测试周期同步。如果不采用这种方式,在产品版本升级的过程中,自动化测试无法得到进一步的改进。,7.2.3,测试工具的运用及作用,软件测试在整个软件开发过程中占据了将近一半的时间和资源。通过在测试过程中合理的引入软件测试工具,能够缩短软件开发时间,提高测试质量,从而更快、更好的为用户提供他们需要的软件产品。,随着对软件测试重视的提高,国内软件测试技术的发展也很快,逐渐从过去手工作坊式的测试向测试工程化的方向发展。要真正实现软件测试的工程化,其基础之一就是要有一大批支持软件测试工程化的工具。因此,软件测试工具对于实现软件测试的工程化来说至关重要。下面就从如何进一步提高软件测试质量和效率的角度出发,讨论测试工具在软件测试过程中的应用。,第七章 软件自动化测试,7.2.3,测试工具的运用及作用,1,引入测试工具的优势,(,1,)提高工作效率,这是引入测试工具给测试带来的一个显著好处。那些固定的、重复性的工作,可以由测试工具来完成,这样就使得测试人员能有更多的时间来计划测试过程,设计测试用例,使测试进行的更加完善。,(,2,)保证测试的准确性,测试是需要投入大量的时间和精力的,人工进行测试时,经常会犯一些人为的错误,而工具的特点恰恰能保证测试的准确性,防止人为疏忽造成的错误。,(,3,)进行困难的测试工作,有一些测试工作,人工进行是很困难的。有的是因为进行起来较为复杂,有的是因为测试环境难以实现。测试工具可以执行一些通过手工难于执行,或者是无法执行的测试。,第七章 软件自动化测试,7.2.3,测试工具的运用及作用,2,测试工具的类别,目前基本上覆盖了各个测试阶段。按照工具所完成的任务,可以分为以下几大类:,测试设计工具,静态分析工具,单元测试工具,功能测试工具,性能测试工具,测试过程管理工具,下面,我们就针对每一类工具展开介绍。,(1),测试设计工具,测试设计工具,更完整的名称应该是测试用例设计工具,是一种帮助我们设计测试用例的软件工具。设计测试用例是一项智力性的活动,很多设计测试用例的原则、方法是固定的,比如等价类划分、边界值分析、因果图等等,这些成型的方法,很适合通过软件工具来实现。,测试用例设计工具按照生成测试用例时数据输入内容的不同,可以分为:基于程序代码的测试用例设计工具和基于需求说明的测试用例设计工具。,第七章 软件自动化测试,7.2.3,测试工具的运用及作用,下面分别对这两类工具进行介绍:,基于程序代码的测试用例设计工具是一种白盒工具,它读入程序代码文件,通过分析代码的内部结构,产生测试的输入数据。这种工具一般应用在单元测试中,针对的是函数、类这样的测试对象。由于这种工具与代码的联系很紧密,所以,一种工具只能针对某一种编程语言。,这类工具的局限性是只能产生测试的输入数据,而不能产生输入数据后的预期结果,这个局限也是由这类工具生成测试用例的机理所决定的。所以,基于程序代码的测试用例设计工具所生成的测试用例,还不能称之为真正意义上的测试用例。不过即使这样,这种工具仍然为我们设计单元测试的测试用例提供了很大便利。,基于需求说明的测试用例设计工具,这种测试用例设计工具,依据软件的需求说明,生成基于功能需求的测试用例。这种工具所生成的测试用例既包括了测试输入数据,也包括预期结果,是真正完整的测试用例。,第七章 软件自动化测试,7.2.3,测试工具的运用及作用,使用这种测试用例设计工具生成测试用例时,需要人工的事先将软件的功能需求转化为工具可以理解的文件格式,再以这个文件作为输入,通过工具生成测试用例。在使用这种测试用例设计工具来生成测试用例时,需求说明的质量是很重要的。,由于这种测试用例设计工具是基于功能需求的,所以可用来设计任何语言、任何平台的任何应用系统的测试用例。,我们来看一个这类工具的例子:,SoftTest,。在使用,SoftTest,生成测试用例时,先将软件功能需求转化为文本形式的因果图,然后让,SoftTest,读入,,SoftTest,会根据因果图自动生成测试用例。在这个过程中,工具的使用者只需要完成由功能需求到因果图的转化,至于如何使用因果图来生成测试用例,则完全由,Softtest,完成。,所有测试用例设计工具都依赖于生成测试用例的算法,工具比使用相同算法的测试人员设计的测试用例更彻底、更精确,这方面工具有优势。但人工设计测试用例时,可以考虑附加测试,可以对遗漏的需求进行补充,这些是工具无法做到的。所以,测试用例设计工具并不能完全代替测试工程师来设计测试用例。使用这些工具的同时,再人工的检查、补充一部分测试用例,会取得比较好的效果。,第七章 软件自动化测试,7.2.3,测试工具的运用及作用,(,2,)静态分析工具,一提到软件测试,人们的第一印象就是填入数据、点击按钮等这些功能操作。这些测试,工作确实是重要的,但它们不是软件测试的全部。与这种动态运行程序的测试相对应,还有,一种测试被称为静态测试,也叫做静态分析。,进行静态分析时,不需要运行所测试的程序,而是通过检查程序代码,对程序的数据流和控制流信息进行分析,找出系统的缺陷,得出测试报告。,进行静态分析能切实提高软件的质量,但由于需要分析人员阅读程序代码,使得这项工作进行起来工作量又很大。对软件进行静态分析的测试工具在这种需求下也就产生了。现在的静态分析工具一般提供以下两个功能:分析软件的复杂性、检查代码的规范性。,第七章 软件自动化测试,7.2.3,测试工具的运用及作用,软件质量标准化组织制定了一个,ISO/IEC9126,质量模型,用来量化的衡量一个软件产品的质量。该软件质量模型是一个分层结构,包括质量因素、质量标准、质量度量元三层。质,量度量元处于质量模型分层结构中的最底层,它直接面向程序的代码,记录的是程序代码的特征信息,比如函数中包含的语句数量、代码中注释的数量。质量标准是一个概括性的信息,它比质量度量元高一级,一个质量标准由若干个质量度量元组成的。质量因素由所有的质量标准共同组成,处于软件质量模型的最高层,是对软件产品的一个总体评价。具有分析软件复杂性功能的静态分析工具,除了在其内部包含上述的质量模型外,通常还会从其它的质量方法学中吸收一些元素,比如,Halstend,质量方法学、,McCabe,质量方法学。这些静态分析工具允许用户调整质量模型中的一些数值,以更加符合实际情况的要求。,在用这类工具对软件产品进行分析时,以软件的代码文件作为输入,静态分析工具对代码进行分析,然后与用户定制的质量模型进行比较,根据实际情况与模型之间的差距,得出对软件产品的质量评价。,第七章 软件自动化测试,7.2.3,测试工具的运用及作用,具有检查代码规范性功能的静态分析工具,其内部包含了得到公认的编码规范,比如函数、变量、对象的命名规范,函数语句数的限制等等,工具支持对这些规范的设置。工具的使用者根据情况,裁减出适合自己的编码规范,然后通过工具对代码进行分析,定位代码中违反编码规范的地方。,以上就是静态分析工具所具有的功能。与人工进行静态分析的方式相比,通过使用静态分析工具,一方面能提高静态分析工作的效率,另一方面也能保证分析的全面性。,第七章 软件自动化测试,7.2.3,测试工具的运用及作用,(,3,)单元测试工具,单元测试是软件测试过程中一个重要的测试阶段。与集成测试、确认测试相比,在编码完成后对程序进行有效的单元测试,能更直接、更有效的改善代码质量。,进行单元测试不是一件轻松的事。一般来讲,进行一个完整的单元测试所需的时间,与编码阶段所花费的时间相当。进行单元测试时,根据被测单元(可能是一个函数,或是一个类)的规格说明,设计测试用例,然后通过执行测试用例,验证被测单元的功能是否正常实现。除此之外,在单元测试阶段,我们还需要找出那些短时间不会马上表现出来的问题(比如,C,代码中的内存泄露),还需要查找代码中的性能瓶颈,并且为了验证单元测试的全面性,我们还想了解单元测试结束后,我们的测试所达到的覆盖率。,第七章 软件自动化测试,7.2.3,测试工具的运用及作用,针对这些在单元测试阶段需要做的工作,各种用于单元测试的工具就产生了。典型的单元测试工具有以下几类:动态错误检测工具、性能分析工具、覆盖率统计工具。,动态错误检测工具,动态错误检测工具,用来检查代码中类似于内存泄露、数组访问越界这样的程序错误。程序功能上的错误比较容易发现,因为它们很容易表现出来。但类似于内存泄露这样的问题,因为在程序短时间运行时不会表现出来,所以不易发现。遗留有这样问题的单元被集成到系统后,会使系统表现的极不稳定。,性能分析工具,性能分析工具,记录被测程序的执行时间。小到一行代码、一个函数的运行时间,大到一个,exe,或,dll,文件的运行时间,性能分析工具都能清晰的记录下来。通过分析这些数据,能够帮助我们定位代码中的性能瓶颈。,覆盖率统计工具,覆盖率统计工具,统计出我们当前执行的测试用例对代码的覆盖率。覆盖率统计工具提供的信息,可以帮助我们根据代码的覆盖情况,进一步完善测试用例,使所有的代码都被测试到,保证单元测试的全面性。,第七章 软件自动化测试,7.2.3,测试工具的运用及作用,动态错误检测工具、性能分析工具、覆盖率统计工具的运行机理是:用测试工具对被测程序进行编译、连接,生成可执行程序。在这个过程中,工具会向被测代码中插入检测代码。然后运行生成的可执行程序,执行测试用例,在程序运行的过程中,工具会在后台通过插入被测程序的检测代码收集程序中的动态错误、代码执行时间、覆盖率信息。在退出程序后,工具将收集到的各种数据显示出来,供我们分析。,目前被普遍使用的单元测试工具中有,Compuware,公司的,NuMega,DevPartner,Studio,,,Rational,公司的,Rational Suite Enterprise,。这些软件产品都是一个工具套件,其中包含了我们前面所讨论的动态错误检测工具、性能分析工具、覆盖率统计工具等。,第七章 软件自动化测试,7.2.3,测试工具的运用及作用,(,4,)功能测试工具,在软件产品的各个测试阶段,通过测试发现了问题,开发人员就要对问题进行修正,修正后的软件版本需要再次进行测试,以验证问题是否得到解决,是否引发了新的问题,这个再次进行测试的过程,称为回归测试。,由于软件本身的特殊性,每次回归测试都要对软件进行全面的测试,以防止由于修改缺陷而引发新的缺陷。进行过回归测试人都会深有体会,回归测试的工作量是很大的,而且也很乏味,因为要将上一轮执行过的测试原封不动的再执行一遍。设想一下,如果能有一个机器人,就像播放录影带一样,忠实的将上一轮执行过的测试原封不动的在软件新版本上重新执行一遍,那就太好了。这样做,一方面,能保证回归测试的完整、全面性,测试人员也能有更多的时间来设计新的测试用例,从而提高测试质量;另一方面,能缩短回归测试所需要的时间,缩短软件产品的面市时间。功能测试自动化工具就是一个能完成这项任务的软件测试工具。,功能测试自动化工具理论上可以应用在各个测试阶段,但大多数情况下是在确认测试阶段中使用。功能测试自动化工具的测试对象是那些拥有图形用户界面的应用程序。,第七章 软件自动化测试,7.2.3,测试工具的运用及作用,一个成熟的功能测试自动化工具要包括以下几个基本功能:录制和回放、检验、可编程。,录制,就是记录下对软件的操作过程,回放,就是象播放电影一样重放录制的操作。启动功能测试自动化工具,打开录制功能,依照测试用例中的描述一步一步的操作被测软件,功能测试自动化工具会以脚本语言的形式记录下你操作的全过程。依照此方法,可以将所有的测试用例进行录制。在需要重新执行测试用例时,回放录制的脚本,功能测试自动化工具依照脚本中的内容,操作被测软件。除了速度非常快之外,通过功能测试自动化工具执行测试用例与人工执行测试用例的效果是完全一样的。,录制只是实现了测试输入的自动化。一个完整的测试用例,由输入和预期输出共同组成。所以,光是录制回放还不是真正的功能测试自动化。测试自动化工具中有一个检验功能,通过检验功能,在测试脚本中设置检验点,使得功能测试自动化工具能够对操作结果的正确性进行检验,这样,就实现了完整的测试用例执行自动化。软件界面上的一切界面元素,都可以作为检验点来对其进行检验,比如文本、图片、各类控件的状态等。,第七章 软件自动化测试,7.2.3,测试工具的运用及作用,脚本录制好了,也加入了检验点,一个完整的测试用例已经被自动化了。但我们还想对脚本的执行过程进行更多的控制,比如依据执行情况进行判断,从而执行不同的路径,或者是对某一段脚本重复执行多次。通过对录制的脚本进行编程,可以实现上述的要求。现在的主流功能测试自动化工具都支持对脚本的编程。像传统的程序语言一样,在功能测试自动化工具录制的脚本中,可加入分支,循环,函数调用这样的控制语句。通过对脚本进行编程,能够使脚本更加灵活,功能更加强大,脚本的组织更富有逻辑性。在传统的编程语言中适用的那些编程思想,在组织测试自动化脚本时同样适用。,第七章 软件自动化测试,7.2.3,测试工具的运用及作用,在测试过程中,使用功能测试自动化工具的大体过程是这样的:,准备录制,保证所有要自动化的测试用例已经设计完毕,并形成文档。,进行录制,打开功能测试自动化工具,启动录制功能,按测试用例中的输入描述,操作被测试应用程序。,编辑测试脚本,通过加入检测点、参数化测试,以及添加分支、循环等控制语句,来增强测试脚本的功能,使将来的回归测试真正能够自动化。,调试脚本,调试脚本,保证脚本的正确性。,在回归测试中运行测试,在回归测试中,通过功能测试自动化工具运行脚本,检验软件正确性,实现测试的自动化进行。,分析结果,报告问题,第七章 软件自动化测试,7.2.3,测试工具的运用及作用,查看测试自动化工具记录的运行结果,记录问题,报告测试结果。,功能测试自动化工具是软件测试工具中非常活跃的一类工具,现在发展的已经较为成熟,象,Mercury Interactive,公司的,WinRunner,,,Rational,公司的,Robot,,都是被广泛使用的功能测试自动化工具。,第七章 软件自动化测试,7.2.3,测试工具的运用及作用,5,)性能测试工具,通过性能测试,检验软件的性能是否达到预期要求,是软件产品测试过程中的一项重要任务。性能测试用来衡量系统的响应时间、事务处理速度和其它时间敏感的需求,并能测试出与性能相关的工作负载和硬件配置条件。通常所说的压力测试和容量测试,也都属于性能测试的范畴,只是执行测试时的软、硬件环境和处理的数据量不同。,对系统经常会进行的性能测试包括:系统能承受多少用户的并发操作;系统在网络较为拥挤的情况下能否继续工作;系统在内存、处理器等资源紧张的情况下是会否发生错误,等等。由于性能测试自身的特点,完全依靠人工执行测试具有一定的难度。比如,我们要检验一个基于,Web,的系统,在,10000,个用户并发访问
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 小学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!