软件自动化测试理论及应用课件.ppt
1,第五章 软件自动化测试理论及应用,一个例子:Rational Funtional Tester,2,第五章 软件自动化测试理论及应用,5.1自动化测试概念5.2自动化测试在软件开发周期中的位置 5.3自动化测试局限性5.4自动化测试基本理论5.5自动化测试实施5.6常用工具介绍5.7IBM Rational自动化测试解决方案架构5.8负载测试工具设计与开发5.9自动化测试成熟度,3,5.1自动化测试概念,用工具代替/辅助人工完成软件测试活动的过程,泛指所有能用工具辅助进行的有关测试活动。 测试自动化的目标是对被测试系统进行自动测试。总的来说,测试自动化的目标是通过较少的开销,得到更彻底的测试,并提高产品的质量。,4,5.1自动化测试概念,自动化测试有如下特点: 可以对程序的新版本自动执行回归测试 可以执行一些手工测试困难或不可能进行的测试 可以更好地利用资源 测试具有一致性和可重复性 测试的重用性 可以更快地将软件推向市场 可以增加软件信任度,5,5.1自动化测试概念,测试自动化误区 : 不现实的期望 期望自动测试发现大量新故障 安全性错觉 自动测试的维护开销 技术问题,6,5.2自动化测试在软件开发周期中的位置,7,5.3自动化测试局限性,自动化测试不能取代手工测试。下列情况不适合于自动化测试:测试很少进行软件不稳定 :如软件升级版本时,用户界面和功能频繁变化,此时自动化测试相应部分修改的开销较大。而软件不稳定时,手工测试可以很快发现故障。结果很容易通过人验证的测试 :该种情况下的自动化测试非常困难甚至不可能,如彩色模式的合适程度、屏幕轮廓的直观效果,或选择制定的屏幕对象是否能够播放正确的声音等。 涉及物理交互的测试 :如在读卡机上划卡,断开设备的物理连接,开关电源等。,8,5.3自动化测试局限性,手工测试比自动测试发现的故障要多 自动化测试主要是进行重复测试,一般情况下,自动化测试进行的工作是以前进行过的,因此被测试软件在自动化测试中暴露的故障要少得多。测试自动化主要用于回归测试,进行正确性验证测试,而不是故障发现测试。据经验数据统计,自动测试只能发现约15的故障,而手工测试可以发现85的故障。,9,5.3自动化测试局限性,自动化测试不能提高测试的有效性。自动化测试只是用于提高测试的效率,即减少测试的开销和时间。 自动化测试不具有想象力 自动化测试是通过测试软件进行,测试过程只是按照运行机制执行。手工测试时可以直接判断测试结果的正确性,而自动测试许多情况下测试结果还需要人工干预判断。手工测试可以处理意外事件,如网络连接中断,此时必须重新建立连接。手工测试时可以及时处理该意外,而自动化测试时该意外事件一般都会导致测试的中止。,10,5.4自动化测试基本理论,自动化测试过程中主要涉及以下内容:测试驱动、桩和驱动数据的自动生成:主要是依据所采用的测试方法,如等价类、边界值等自动产生多组测试数据。自动测试输入:工具录制测试者所做的所有操作,并将这些操作写成工具可以识别的脚本。被录制的脚本中含有测试输入(包括文本和鼠标移动、点击菜单和按钮等动作)测试脚本技术:用于自动测试过程存放测试步骤、测试数据等相关内容。测试结果的自动比较:将预期输出与程序运行过程中的实际输出进行比较。自动测试执行:工具读取脚本并执行脚本命令,可以重复测试者的操作。在执行脚本过程中可以完成测试结果的自动比较。自动测试管理:完成测试计划、测试大纲、测试缺陷管理等工作。,11,5.4.1自动测试输入,对于支持命令行的软件系统,采用批处理方式输入是最好的测试用例自动化输入方式 对于不支持命令行的软件系统,一般来说可以采用商用化录制回放测试工具生成输入脚本,或自己编制测试用例输入脚本,12,5.4.2自动比较,简单比较 复杂比较 动态比较 执行后比较,13,5.4.3测试结果输出和转储,测试结果输出一般有以下形式:基于磁盘的输出:包括数据库、文件和目录/文件夹;基于屏幕的输出:主要是文本和特殊图形字符、图形图像等;多媒体信息的输出:包括不易比较的测试输出形式如播放的声音、显示的视频等;通讯报文的输出:主要是网络中传送的通讯报文,一般以帧形式出现。,14,5.4.4脚本技术,线性教本 结构化脚本 共享脚本 数据驱动脚本 关键字驱动脚本,15,5.4.4.1线性教本,线性脚本是通过录制手工执行的测试用例时得到的脚本,这种脚本包含所有的击键(键盘和鼠标)、控制测试软件的控制键及输入数据的数字键,可以添加比较指令实现结果比较 线性脚本的优点主要是:不需要深入的工作或计划,只需坐在计算机前录制手工任务;可以快速开始自动化;对实际执行操作可以审计跟踪;用户不必是编程人员;提供良好的(软件或工具)演示。线性脚本的缺点主要是: 一切依赖于每次捕获的内容;测试输入和比较是“捆绑”在脚本中的;无法共享或重用脚本;容易受软件变化的影响;修改代价大,维护成本高。,16,5.4.4.2结构化脚本,结构化脚本类似于结构化程序设计,含有控制脚本执行的指令,支持顺序、选择和循环(叠代控制)3种基本控制结构,一个脚本可以调用另一个脚本。另外由于引进其他指令改变控制结构,可以提高重用性,增加功能和灵活性,改善维护性。需要一定的编程技术。 主要有优点是健壮性更好,更灵活;但是脚本更加复杂,测试数据依然“包含”脚本中。,17,5.4.4.3共享脚本,共享脚本可以被多个测试用例使用,脚本之间可以相互调用;可以允许同一软件应用或系统的测试之间共享脚本;在不同的软件应用或系统的测试之间也可共享脚本。 共享脚本的优点是:以较少的开销实现类似的测试;维护开销低于线性脚本;删除明显的重复;可以在共享脚本中增加更智能的功能。 共享脚本的缺点是:需要跟踪更多的脚本 ,文档、文字以及存储,如果管理得不好,很难找到适当的脚本;每个测试仍需要一个特定的测试脚本,维护成本仍然比较高 ;共享脚本通常只是针对被测软件的某一部分。,18,5.4.4.4数据驱动脚本,数据驱动脚本是将测试输入存储在独立的(数据)文件中(*.XLS、*.TXT、*.DAT等),而不是存储在脚本中,脚本中只存放控制信息。用变量取代在录制的脚本代码中固定输入内容,如:名字、地址、数据等,然后通过变量从外部(文件、电子表格、数据库等)读取数据的测试 数据驱动脚本的优点是:可以很快增加类似的测试(脚本相同,数据不同);测试者增加新测试不必具有工具脚本语言的技术或编程知识;对于第二个测试及后续测试无额外的脚本维护开销 。数据驱动脚本的缺点是:初始建立的开销较大;需要专业(编程)支持。,19,5.4.4.5关键字驱动脚本,关键词驱动脚本实际上是较复杂的数据驱动技术的逻辑扩展。用变量取代在录制的脚本代码中的对象标识,如:按钮、编辑框等控件ID等,然后在脚本中通过这些变量来操作这些对象进行。关键字驱动脚本有如下特征:测试脚本由控制脚本、测试文件、支持脚本组成;控制脚本不再受被测软件或特殊应用的约束;测试文件中使用关键字描述测试事例;控制脚本依次读取测试文件中的每个关键字并调用相关的支持脚本。关键字驱动脚本的优点:独立于测试脚本语言开发测试事例所需脚本数量是随软件的规模而不是测试的数量而变化的可以用与工具(及平台)无关的方法实现测试实现测试的方法可以剪裁适合测试者而不是测试工具,20,5.4.5系统运行数据统计,性能测试和内存泄露检查的测试过程中,不是预期输出与实际输出的比较,而是运行数据采集并统计输出结果。主要利用操作系统提供的API函数,测试软件获得系统信息并进行统计和分析。,21,5.5自动化测试实施,被测试软件的测试方式选择并不是所有的软件都需要进行自动化测试。,22,5.5自动化测试实施,自动化测试实施前的准备工作 在进行测试自动化之前,对被测试软件的可测试性接口的分析和处理是非常重要的工作;通过对接口的分析,制定出测试输入和输出的脚本文件结构。,23,5.5自动化测试实施,自动化测试流程 自动化回归测试在实施上,一般分为两个主要步骤,一个是测试结果输出脚本模板生成,该部分需要人工进行,一个是自动化回归测试。,24,5.5自动化测试实施,测试结果输出脚本模板生成流程图,25,5.5自动化测试实施,整个自动化回归测试流程图 :,26,5.6常用工具介绍,27,5.6常用工具介绍,性能测试工具 Loadrunner嵌入式软件测试工具CodeTest LogiScope 缺陷管理跟踪工具TestDirector Buzilla,28,5.6.1 LoadRunner,LoadRunner 是一种预测系统行为和性能的工业标准级负载测试工具。通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题,LoadRunner 能够对整个企业架构进行测试。通过使用LoadRunner ,企业能最大限度地缩短测试时间,优化性能和加速应用系统的发布周期。,29,5.6.1 LoadRunner,30,5.6.1 LoadRunner,创建虚拟用户 创建真实的负载 实时监测器 分析结果以精确定位问题所在重复测试保证系统发布的高性能 其他特性 Enterprise Java Beans 的测试 支持无线应用协议 支持Media Stream 应用 完整的企业应用环境的支持,31,5.6.2嵌入式软件测试工具,纯软件测试工具 纯软件的测试工具采用的软件插桩技术,在被测试代码中插入一些函数,用这些函数来完成数据的生成,并上传数据到目标系统的共享内存中。 纯硬件测试工具 :主要是逻辑分析仪和仿真器。 逻辑分析仪主要通过监控系统在运行时总线上的指令周期,并以一定频率捕获这些信号,通过对捕获的信号进行分析来判断程序当前运行状况。 仿真器通常采用内存标记技术,它所关心的也是处理器从外存的代码段读取数据的情况 纯硬件测试工具是不具备对内存分配进行分析和检查的能力,32,5.6.2.1CodeTest,CodeTest系统包括3种嵌入式软件测试和分析工具:CodeTest Native,CodeTest Software-In-Circuit和CodeTest Hardware-In-Circuit,每一种工具代表了嵌入式系统开发的每一个周期的不同阶段,它们分别由于:在开发阶段早期,没有目标硬件,只有宿主机开发环境和测试环境。在开发阶段中期,系统的集成工作、硬件开发板已出现。在产品确认阶段,此时产品进入系统综合测试阶段。,33,5.6.2.1CodeTest,CodeTest是一个硬件辅助软件的测试与分析工具,它一方面吸取软件插桩技术,并对这种技术进行改善,纯软件工具插入的是一个函数,而CodeTest插入的是一条赋值语句,它在汇编级也是一条语句,所以它执行的时间非常短,同时避免了被其他的中断所中断,所以它对目标系统的影响非常小。 另一方面,CodeTest从纯硬件的测试工具那里吸取了从总线捕获数据的技术并且对它进行了改善,CodeTest改变了采样方式,它通过监视系统总线,当程序运行到插入的特殊点的时候才会主动地到数据总线上去捕获数据。,34,5.6.2.1CodeTest,由于CodeTest对软件插桩技术和从总线捕获数据进行改善和提升,具有很强的性能分析、内存分析、高级覆盖率分析和代码跟踪功能。性能分析:CodeTest能同时对128000个函数和1000个任务进行性能分析,可以精确地得出每个函数或任务执行的最大时间、最小时间和平均时间,精确度达到50ns;能够精确地显示各函数或任务之间的调用情况,帮助开发人员和测试人员发现系统瓶颈、优化系统。覆盖率分析:CodeTest在系统真实的环境下,可以从单元级、集成级、系统级以及产品终端现场阶段进行嵌入式软件的分析与测试,帮助测试工程师掌握当前的测试覆盖率数据,指导测试用例的编写。内存分析:CodeTest可以动态追踪内存分配,报告内存出错和相应的原始数据。它不仅可以在程序运行时报告为每条语句分配多少字节的内存,而且可以鉴别20多种内存分配的错误。代码跟踪分析:CodeTest提供400KB的追踪缓冲空间,能追踪150万行源代码。开发人员可以设置触发器来追踪自己感兴趣的事件,可以显示运行过程中程序运行的实际情况,帮助查找程序的Bug所在。,35,5.6.2.2LogiScope,LogiScope是一组嵌入式软件测试工具集。它贯穿于软件开发、代码评审、单元测试、集成测试、系统测试,以及软件维护阶段。LogiScope的重点是帮助代码评审和动态覆盖测试。总体来说,LogiScope有两方面的功能:静态质量分析功能:LogiScope的静态分析功能非常直观,都以图表的方式显示和报告,并且可以简单地分析程序的函数结构,对于质量度量的指标都给出了具体的定义。动态测试分析功能(覆盖率分析):具有很好的结构分析和浏览器,可以很直观地显示程序的分支(语句)覆盖情况。,36,5.6.2.2LogiScope,LogiScope产品线有3个产品,即RuleChecker、Audit、TestChecker。它们的功能分别如下:RuleChecker:根据为产品定制的规则自动地检查代码编程规则,可以避免错误陷阱和代码错误。Audit:帮助定位错误的代码模块,一旦发现错误代码模块,Audit提供基于软件度量和图形的质量信息,能够帮助用户诊断问题和作出判断。TestChecker:分析代码测试覆盖率和显示未覆盖的代码路径,发现未测试源代码中隐藏的Bug,提供软件的可靠性。TestChecker产生每个测试的测试覆盖信息和累计信息。用直方图显示覆盖比率,并根据测试运行情况实时在线更改,随时显示新的测试所反映的测试覆盖情况。,37,5.6.3缺陷跟踪管理工具,Compuware公司的TrackRecord软件 Mercury Interactive公司的TestDirector Mozilla公司的Buzilla软件 国内的微创公司的BMS软件,38,5.6.3.1 TestDirector,TestDirector是业界第一个基于Web的测试管理解决方案,它可以在公司内部进行全球范围的测试协调。 TestDirector能够在一独立的应用系统中提供需求管理功能,并且可以把测试需求管理于测试计划、测试日程控制、测试执行和错误跟踪等功能融合为一体,因此极大地加速了测试的进程。测试需求管理 测试计划管理 安排和执行测试 错误管理 图形化和报表输出,39,5.6.3.2 Buzilla,Mozilla公司向我们提供了一个共享的免费工具Buzilla.作为一个产品缺陷的记录及跟踪工具,它能够建立一个完善的Bug跟踪体系,包括报告Bug、查询Bug记录并产生报表、处理解决、管理员系统初始化和设置四部分。并具有如下特点: 基于Web方式,安装简单、运行方便快捷、管理安全 有利于缺陷的清楚传达系统灵活,具备可配置能力 自动发送Email,通知相关人员,40,5.7 IBM Rational自动化测试解决方案架构,41,5.7.1 IBM Rational Test Manager,42,5.7.1 IBM Rational Test Manager,主要特点和功能 自动化测试计划 管理所有类型的测试 一次执行多种测试类型 链接测试用例与需求 测试评估 有意义的报告 管理手动测试,43,5.7.2 IBM Rational Test RealTime,代码级测试工具 代码静态分析 代码编辑、测试和调试相集成 Test RealTime通过分析源代码,自动生成测试驱动(Test Driver)和桩(Test Stub)模版。测试执行后自动生成测试报告和各种运行时候报告,44,5.7.3 IBM Rational PurifyPlus,PurifyPlus是一套完整的运行时分析工具,它设计用于提高应用程序的可靠性和性能,PurifyPlus将内存错误和代码覆盖分析结合到一个单一的、完整的软件包中,它包括三个应用程序:Rational Purify - 一个内存分析工具(收集方法和对象层次的内存分析数据,并指出应用程序的内存热点所在) Rational Quantify - 一个应用程序执行时间分析工具(收集方法和线层次的分析数据并指出应用程序的性能瓶颈) Rational PureCoverage - 一个代码覆盖率分析工具(通过突出未执行的方法和代码行来收集没有测试到的部分的数据),45,5.7.3 IBM Rational PurifyPlus,Purify :可以自动识别出二十多种内存使用错误,包括: 未初始化的局部变量未申请的内存使用已释放的内存数组越界内存丢失栈溢出问题栈结构边界错误等 Purify 系列现已支持C、C+、FORTRAN语言,以及UNIX和Window NT等操作系统,如Sun OS、Solaris 2.3,HP-UX,Windows NT Server以及IBM A/ X等。,46,5.7.3 IBM Rational PurifyPlus,Quantify Quantify 是一个面向VC, VB 或者Java 开发的测试性能瓶颈检测工具,它可以自动检测出影响程序段执行速度的程序性能瓶颈,提供参数分析表等等直观表格。帮助分析影响程序短执行速度的关键部分。 利用Rational Quantify 各种数据图表窗口,您可以直接识别应用程序的性能瓶颈。只需单击鼠标,Quantify 就可以轻松地描绘出整个应用程序或仅仅某个特定部分的性能曲线。,47,5.7.3 IBM Rational PurifyPlus,PureCoverage PureCoverage 是一个面向VC, VB 或者Java 开发的测试覆盖程度检测工具,它可以自动检测测试完整性和那些无法达到的部分.作为一个质量控制工程,可以使用PureCoverage 在每一个测试阶段生产详尽的测试覆盖程度报告。,48,5.7.4 IBM Rational Functional tester,由于测试是一个需要反复进行的过程,常常要数十次甚至数百次地重复。因此,这一特性大大地提高了软件“再测试”(Re-Test)和回归测试(Regression)的自动化程度,把测试人员从繁杂的、重复性的手工测试中解脱出来,从而显著地提高软件测试效率。,49,5.7.5 IBM Rational Performance Tester,50,5.7.5 IBM Rational Robot,可开发三种测试脚本:用于功能测试的GUI脚本、用于性能测试的VU以及VB脚本。主要作用如下:执行完整的功能测试。记录和回放遍历应用程序的脚本,以及测试在查证点(verification points)处的对象状态。执行完整的性能测试。Robot和Test Manager协作可以记录和回放脚本,这些脚本有助于你断定多客户系统在不同负载情况下是否能够按照用户定义标准运行。在SQA Basic、VB、VU环境下创建并编辑脚本。Robot编辑器提供有色代码命令,并且在强大的集成脚本开发阶段提供键盘帮助。测试IDE下Visual Basic、Oracle Forms、Power Builder、HTML、Java开发的应用程序。甚至可测试用户界面上不可见对象。脚本回放阶段收集应用程序诊断信息,Robot同Rational Purify、Quantify、Pure Coverage集成,可以通过诊断工具回放脚本,在日志中察看结果。,51,5.8负载测试工具设计与开发,负载测试工具总体结构如下图,52,5.8.1脚本工具,脚本工具的主要功能是可以实现捕捉用户的操作;可以用脚本语言模拟用户事务操作,并将用户的操作转换为脚本语言描述,每个事务交易成为脚本语言的一句或几句;脚本工具可以解释运行脚本语言;脚本工具有自己的编辑器,可以对脚本语句进行编辑、增加注释,还可以对两个脚本进行比较。 脚本语言需要同时记录客户端和服务器端的活动。对于数据库系统,记录客户端发出的每一个需求,也要记录服务器端的响应。脚本语言执行时需要直接调用服务器的API功能运行。使用脚本工具可以: 监视客户端和服务器端的通信;生成功能调用执行脚本语言。,53,5.8.2控制工具,当要模拟上百万的用户并发操作时,一台计算机上运行几百万个进程会受到本机资源的限制,必须使用多台计算机来运行这几百万个进程。为了协调控制,必须设置一台主控制器,在主控制器上要建立与参与并发计算机的连接;实现对多台机器进行控制,包括分配每台计算机上运行的脚本个数,及启动脚本。 为了测试事务的响应时间,必须建立计时机制。 当并发运行时,主控制器还要收集记录测试结果数据,包括随时间变化的各种参数(脚本运行的个数、事务的处理个数、资源的使用情况等),每个脚本运行的事务的开始时间、结束时间、持续时间,每个事务的最快响应时间、最慢响应时间等,计算平均响应时间。,54,5.8.3监测工具,监视工具可以调用操作系统和数据库系统软件的资源监测工具对系统资源进行监测。还需用特殊工具监测一些别的资源。包括下面内容:脚本运行状态(几个通过,几个失败),当前时刻多少个脚本在运行。被测事务处理时间响应图(包括成功运行和失败运行)。,55,5.8.4分析工具,控制工具记录下了测试结果数据,对于测试结果数据的分析,需要使用工具进行分析,以便得出结论,分析内容如下: 原始记录数据导出功能;各事务随用户增多的时间响应变化;事务平均响应图,事务完成在整个测试运行时间所处的阶段,各个事物在整个测试运行时间分布。每个事务完成的最快、最慢、平均时间,大部分(90%)完成时间,事务的完成个数随响应时间的分布,描述在不同测试时间段内完成的事务个数。比较工具可以在同一图形上显示多次测试运行的结果,以显示优化设置和不同硬件环境下负载测试的效果。 分析工具包括测试报告自动生成工具,如生成word文件。报告内容可以包括:测试执行脚本名称,环境,测试运行时间,被测试的每个事务通过个数,失败个数,最快响应时间等。,56,5.9自动化测试成熟度,在过去的日子中,自动化的测试工具只是被看作是一种捕获和回放的工具。当前这个神话仍然在很多测试人员的思想中。而事实上自动化测试已经远不止捕获和回放这么简单了。按照成熟度自动化的测试可以被划分为5个级别。,57,5.9自动化测试成熟度,级别1:捕获和回放 :这是使用自动化测试的最低的级别,同时这并不是自动化测试最有用的使用方式。,58,5.9自动化测试成熟度,级别2:捕获、编辑和回放 :在这个级别中,使用自动化的测试工具来捕获想要测试的功能。将测试脚本中的任何写死的测试数据,比如名字、帐号等等,从测试脚本的代码中完全删除,并将他们转换成为变量。,59,5.9自动化测试成熟度,级别3:编程和回放 :这个级别是面对多个构建版本的有效使用测试自动化的第一个级别。,60,5.9自动化测试成熟度,61,5.9自动化测试成熟度,级别4:数据驱动的测试:对于自动化测试来说这是一个专业的测试级别。拥有一个强大的测试框架,这个测试框架是基于能够根据被测试系统的变化快速创建一个测试脚本的测试功能库。维护的成本相对是比较低的。在测试中会使用到大量真实的数据。,62,5.9自动化测试成熟度,63,5.9自动化测试成熟度,级别5:使用动作词的测试自动化:这是自动化测试的最高级别。主要的思想是将测试用例从测试工具中分离出来。,64,5.9自动化测试成熟度,