(计算机应用技术专业论文)基于数据驱动的类自动化测试工具设计与系统实现.pdf_第1页
(计算机应用技术专业论文)基于数据驱动的类自动化测试工具设计与系统实现.pdf_第2页
(计算机应用技术专业论文)基于数据驱动的类自动化测试工具设计与系统实现.pdf_第3页
(计算机应用技术专业论文)基于数据驱动的类自动化测试工具设计与系统实现.pdf_第4页
(计算机应用技术专业论文)基于数据驱动的类自动化测试工具设计与系统实现.pdf_第5页
已阅读5页,还剩64页未读 继续免费阅读

(计算机应用技术专业论文)基于数据驱动的类自动化测试工具设计与系统实现.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘要 摘要 目前,面向对象开发技术得到广泛应用,由于其本身带有重载性、封装性、 多态性,在提高了软件生产率和可靠性的同时,也给软件测试带来了诸多的问 题。本文通过分析面向对象技术对软件测试的影响,研究类测试的相关技术, 针对手工测试无法满足测试需求的现状,提出采用自动化测试来解决类测试过 程遇到的问题。 。 本文针对面向对象测试过程的行为进行了详细分析,把适于自动化实现的 测试过程与不适于自动化的测试过程区分对待,为了使自动化测试发挥最大的 效能,就如何设计自动化策略提出科学的设计思路在自动化的核心技术 测试脚本设计上,本文通过对当前脚本技术分析,提出按数据驱动的思想设计 测试脚本为了实现测试过程的自动化,本文按测试行为的结构逻辑,设计了 一种针对面向对象的松耦合的测试工具开发模型,为测试工具的开发提供了实 现思路。 在这个模型基础上,本文在n i 强环境下,利用n e t 中r c n 幽o n 和1 _ y p e 两个类对程序集合信息收集的能力,通过c o d e d 锄自动生成代码类对象,采用 c 躇言开发了一个以饼为测试脚本的类自动化测试工具。该工具可实现对各种 程序集合的功能测试,不需要分析原代码即可得到被测程序集合的内部信息, 系统可根据这些信息,在外部测试数据的驱动下,通过自动生成相应的测试脚 本来提供测试功能,本系统实现了测试全程自动化。在本文最后,通过一个实 例测试过程,论证了本文开发的类测试工具的可行性和实用性。 关键词:软件测试,自动化测试,数据驱动,模型,测试工具 a b s 廿a c t a b s t r a c t a tp r e s e n t ,t e c l l l l o l o g yo fo b j c c t0 d e n t c dw e 坨u s c da 研o a db yd e v c l o p e r s ,w i t l l i n c f e 船i n go fp i o d l l c t i v i t y 卸dm l i a b i l i t yo fs o n w a ,b e c a u s ci th 嬲c h a r a c t e r i s 垃co f o v c rl o a d i n g ,e n c a p s u l a t i o n ,p o l y m o r p l l i s m ,a l s oi tb r i n gs o m eq u e s t i o no fs o f t w 躺 t c s t i n g t t i i sp a p e f 锄a l y 瑚幽c t o f t e c t h l o l o g yo f0 b j c c to f i 咖l c ds o 胁黜t c s t i n g na 王s or c a r c hc o n c 啪i n gt h n o l o g y0 ft e s d n go fc l 舔s a i m e da ta c t i l a l i t yo ft h a t t c s d n go fh a n d c 础c a nn o tm c c td e m 粕d0 ft e s t i n g ,t l l i sp a p 盱b r i n gf o n a r dm a t a d o 毗a u t 鲫a l i o f t h t i n g t os o l v cm e q s 矗吼i nt 1 1 cp r o c e s s0 f t e s t0 f c i 船s a i m c da t 呻s0 fo b j e c to r i e n t c ds o f t w a 融t i n g ,1 k sp a p e rp a r t i c u l 盯 a i l a l y z e si t s t i o n t h r o u 曲d i 虢确晒a l e 仃e 曲e dp f o c so fw l l i c hc o u l da u t o m a t i o n 卸dw l l i c hc i d l l ta u t 0 姗| 虹,i tl e a dt h ea u t o m t i o n0 ft c s t i n g 蜥n g si n t op i a y m a x i m a l 硪i c i c y a i m e da th o w t od e s i 弘s 眦e g yo fa u t o m a t i o n ,i tm n g sf o n 砌 i e n 廿f i ci d e ao fd e s i g n a t 壮p e mo fc o r et c c i i i l 0 1 0 9 yo fa u 锄f n a t i 一鲇r i p t0 f t e s t i n g ,t l l ep a p c rb r i n g sf o 删砌i d e at 1 1 a ti td e s i g n s 粒c o r d i n g 雒p o i mo f “e wo f d a t ad r i v i n g f o ra u t o m a l i 0 ft c s t i n gp c c s s ,t h ep a p 盯d e s i 弘as o 肝弋o u p l i n g m o d e lo ft e s n n g1 b o la i m e da o b j e c to r i o 吼i to f f 白c di d c a0 fi m p l e m tf o r d e v e l o p i n go f t e s t i n g i b 0 1 b 勰e d t l l em o d e l ,t h ep a p e rd e v e l 叩st e s d n gt 0 0 lf o fc l 嬲sa u “) m a l i t e s t i n g w i t i ic # d e v e l o p c dl 锄g l l a g ci i ic d i t i o f n i 强w i mc l 勰so fr e n c c d 锄dt y p e a i l dc o d e d o m i tc 锄t e 8 tt l l e 缸l c 矗0 l lo fm u l 卸l i c i t yp r 0 印咖e d 吼d c rt e s t i n g n e t e s t i n gp e = r s n e lc o u l d l l td e s i 驴趾ym o 他c o d ef b rt h et c s t i n gp r o c e s s i t 8 锄t i f c t y 棚o m a t i o np i o c c s s h it l l ee n do fp a p i t 盯g df e 懿i b i l i t y 锄dp f a c t i c a b i l i t yo ft l l e t e s 石n g t o o l t l l l o u g i l e p r o c e s s0 f 锄i n g t a n c c w 雏t e s 缸 脚o r d s :s 硪w a r et c s t i n g ,t c s t i n g 锄t o 蛐出,d a t a 缸v i n g ,m 0 d e l ,t c s t i n gt 0 0 l 第一章绪论 第一章绪论 第一节研究背景 随着面向对象开发方法和面向对象程序设计语言的广泛使用,人们采用面 向对象技术开发的软件系统和产品也日益增多,人们不仅在程序编码阶段采用 面向对象程序设计语言,而且在分析设计阶段也采用面向对象技术面向对象 技术使程序语言更加贴近人的思维,但由于面向对象语言通常具备三个重要的 特征,即继承、封装和多态【l 】,因此在提高软件性能的同时,也增加了软件代码 内部的复杂度。这对于保证软件质量的软件测试来讲,无益于又提高了测试难 度。 面向对象程序设计方法虽然通过软件重用而大大提高了软件生产率和可靠 性,但也影响了软件测试的方法与内容。和传统的软件一样,面向对象的软件 在开发过程中和使用之前都需要经过测试,但是传统的面向功能或面向数据,过 程的测试理论与方法并不完全适合用于新兴的面向对象软件系统面向对象的 封装性、继承性、多态性和动态链接等新特性给软件测试提出了新的要求。随 着面向对象分析和面向对象设计的成熟,更多的设计模式复用,更加重了面向 对象系统的测试量要想使用面向对象技术构造一个可利用率高、稳定性强、 可靠性强、健壮的系统,需要新的测试技术。对于面向对象的项目,类作为开 发单元已经成为测试的重点内容,对于类的测试可以看作传统测试阶段中的单 元测试,但由于类本身结构和特点,仅仅采用传统的结构化测试方法不能满足 对类测试的目标,为此研究人员开展了一系列对类测试技术的研究圆【3 】【4 j 嘲。 目前,在使用c + + ,j a v a 等面向对象语言开发系统时,盛行的单元测试方 法是由开发人员在编写代码的同时编写测试驱动程序和数据生成程序,可能还 要编写模拟其它类和模块的桩程序。按照这种方法完成单元测试需要的工作量 非常惊人,使得很多系统不可能对每个模块进行良好的单元测试。通常情况下, 只对非常关键的系统和系统的核心模块进行比较严格的单元测试这种测试条 件下,很多错误原本可以,而且应该已经在测试阶段被发现,却被遗留到了最 终系统中人们对于这种现状主要采用两种技术途径,一种是基于代码生成测 第一章绪论 试的方法它主要是对传统过程语言测试技术进行改进的产物。它采用路径覆 盖的覆盖度量标准,不能很好的测试面向对象程序同时,基于代码的测试还 有一个致命的缺点一不可能对代码和设计进行一致性测试。另外一种就是自动 测试辅助工具,它提供了测试工具类库以及嵌入式测试脚本语言,帮助编程人 员编写测试程序,执行测试,以及分析管理程序错误等。使用这种测试方法, 极大的减轻了测试工作量。但是,。它只是对传统测试方法的一种自动化改进, 没有从本质上减少测试工作量和降低测试成本。 “ 为了改善测试效果,提高测试质量,人们冀期望通过自动化测试的手段来 完成面向对象的测试过程。本文从面向对象的技术入手,通过对软件测试自动 化过程的分析研究,提出来一种数据驱动的测试工具开发模型,并结合应用实 现一种类的自动化测试工具,为面向对象单元测试提供了新的模式。 第二节面向对象单元测试工具现状 “工欲善其事,必先利其器”,对于想提高测试的效率,改善目前软件测试 大量手工测试的现状,必然采用科学的自动化测试策略,选择或开发合适的测 试工具综观目前测试工具的市场,测试工具的种类繁多,良莠不齐,选择何 种测试工具来实现测试自动化是当前测试过程中重要因素,不合适的测试工具 不仅不会提高测试效率,反而会加大测试人员的工作量下面介绍几种常见的 单元测试工具。 。 1 ) r 撕o n a l p 嘶f y 自动化测试工具r 撕o n a lp i l r i f y 【6 1 是一个面向v c 、或者j a v a 开发的测试 工具,可测试s u a lc ,c + + 和j a v a 代码中与内存有关的错误,确保整个应用程 序的质量和可靠性。r a t i a lp i l r i f y 无需源代码或特殊的工作版本,就能检查应 用程序代码以及所有链接到该应用程序的构件代码。它可以彻底测试应用程序、 检查错误并查明造成错误的特殊构件,从而有助于您得到真实的质量情况,以 便及早纠正r 撕a lp 嘶f y 可检查以下类型的错误 堆栈相关错误。 堆栈相关错误。 垃圾内存收集一j a v a 代码中相关的内存管理问题。 c o m 相关错误。 2 第一章绪论 指针错误。 内存使用错误 w i n d o w s a p i 相关错误。 w i n d o w sa p i 函数参数错误和返回值错误。 句柄错误。 r a t i o n a lp 嘣印可测试的对象包括:a c 虹v c x ( o u c i c x ) 控件、c o m 对象、 o d b c 构件、j a v a 构件、a p p l c t 、类文件、j a r 文件、s u a lc 肥+ + 源代码、s u a i b 勰i c 应用程序内嵌的s u a lc ,c + + 构件、第三方和系统d l l 、支持c o m 调用 的应用程序中的所有s u a lc ,c + + 构件 , 2 ) d e v p a r t n 盯s t i l d i o c o m 口u 刑a r c 公司的d e v p a r t n 盯s t l l d i o l 7 1 具有自动检测、诊断和帮助解决软件 错误和性能问题的功能。它可帮助开发人员建立可靠,高效的程序和组件,可 以快速解决n e t 的移植、逻辑集成、定位错误、内存分析等功能,确保程序自 动化测试。目前d e v p a 咖e rs t i l d i ov 8 o 已经集成到s u a ls t i l d i o2 0 0 5 中。 其主要功能包括: , 。 + 源代码分析; , 错误检测与诊断; 内存泄漏:通过对内存分析,可以提供大量细节信息; r 提供实时内存使用图:- 。 。 , 提供动态的类执行列表; 代码覆盖率分析; 性能分析; 分布式程序分析;、 可及时收集磁盘的、网络的测试结果 , 工具可以实现内存性能,和覆盖率等测试结果数据输出至结果报告中。 3 ) s u a lu 血单元测试工具 s u a l t i 射,简称,着力解决实施单元测试面临的主要问题,使用简 单,完全可视化,不需编写测试代码。的测试结果使程序行为一目了然,有 助于整理编程思路,提高编程效率和正确性,并能快速排错;v u 还增强调试器 功能( 如自由后退、用例切换) ,提高调试的效率;v u 能达到测试完整性,完 成语句、条件、分支及路径覆盖;w 提供详尽的测试报告。v u 不仅是单元测 3 第一章绪论 试工具,更是一种使程序开发变得更高质更高效更舒适的工具。目前版本适 用于c 卜+ 语言。 ,主要实现了以下功能: 黑盒方面,可以完成功能测试、边界测试、速度测试 自盒方面,可以完成语句覆盖、条件覆盖、分支覆盖、路径覆盖。 ” 使用w ,随时可以用回归测试检验修改是否引入新的错误,因此,随时可 一 以对项目的设计进行或大或小的修改,轻松进行螺旋式的迭代开发,或边开发 边设计,使项目或产品符合用户的需求 、 w 4 ) c 阡t c s t 单元测试工具 c + + 乳s t 【9 】是一个功能强大的自动化c c + + 单元级测试工具,可以自动测试 任何c ,c + + 函数、类,自动生成测试用例、测试驱动函数或桩函数,在自动化的 环境下极其容易快速的将单元级的测试覆盖率达到1 0 0 。c h 髓吼测试类型: 自动化测试代码构造( 白盒测试) 、自动化测试代码的功能性( 黑盒测试) 和自 动化测试代码更新以维护代码的完整性( 回归测试) 目前支持面向对象的单元测试工具有很多,由于篇幅有限,在此不再赘述。 但由于受测试技术的制约,目前的类测试工具大部分通过程序插装,编写 测试脚本由计算机来执行测试,对于类成员通常通过对单个函数的一一测试来 实现,面向对象测试仍有许多困扰测试人员的问题不能解决。另外目前的单元 测试工具虽然支持面向对象的测试,但其测试目标大部分是定位于软件结构测 、试,而对于如何解决面向对象本身重载性、多态性、封装性并没有有效手段, 这些问题对测试的影响依然存在。 。 第三节本文的研究内容及组织结构 本文通过对面向对象测试特点进行研究,分析类测试的相关技术,着重分 析了面向对象测试自动化应采用的方法,并根据当前测试自动化发展的现状, 提出一种数据驱动的测试脚本生成方法。深入分析了自动化测试过程,创建了。 一个通用的测试工具开发模型,为面向对象测试自动化提供了一种新思路。在 本文的最后,本文在陋r 平台下开发了一个类测试自动化的工具。力图通过理 论与实践相结合的方式,为测试自动化提供一种新的解决方案。 本文主要研究以下几方面的内容: 4 第一章绪论 1 ) 分析当前面向对象测试的特点与方法,提出针对性的解决方案; 2 ) 深入研究澳憾的自动化过程,分析如何设计自动化测试; 3 ) 提出一种数据驱动的测试工具开发模型; 4 ) 开发一个类自动测试工具,并通过实例来验证该系统的应用性和可行性。 本文共分五章,第一章绪论,主要是阐述了本文产生的背景技术,介绍当 前几种面向对象的单元测试工具,并对本文的研究内容进行了简要介绍。第二 章面向对象软件测试技术,主要研究面向对象测试面l 瞄的问题,介绍和分析相 关的解决方法,介绍类测试相关技术。第三章软件测试自动化及模型设计,针 对当前自动化测试现状进行研究,通过对自动化过程存在问题进行分析,提出 科学的自动化测试策略,通过研究测试脚本的使用提出脚本设计的方案,并设 计一种数据驱动的测试工具开发模型。第四章类测试工具开发与实现,按照模 型的思路,根据类测试的需求,通过自动生成脚本的方式在n e t 平台下开发了 一个类自动化测试工具,实现对类的测试,并通过实例的测试,论证其具备的 可行性和应用性。 5 第二章面向对象测试技术 第二章面向对象软件测试技术 随着面向对象技术广泛应用,尽管软件具备更高了的质量,但无论采用什 么样的编程技术,编程人员的错误都是不可避免的,同时由于软件代码重用率 提高,错误繁衍的可能增大。因此,软件测试并没有因为面向对象编程的兴起 而丧失掉它的重要性。但由于面向对象程序本身所具有的封装性、继承性、多 态性、动态绑定等特性,使得面向对象软件测试的策略和内容有很大不同。测 试的视角扩大到包括复审分析和设计模型,测试的焦点也从模块转向了类。 第一节面向对象技术对软件测试的影响 由于面向对象具有封装性、继承性、多态性和动态绑定等几大特性在测 试过程中这些特性给测试带了种种问题。 1 ) 封装性限制了对象属性对外的可见性和外界对它们的使用权限,在一 定程度上简化了类的使用,避免了不合理的操作并能有效地阻止错误的扩散。 但正是由于封装,使得类的一些属性和状态对外部来说是不可见的,这就给测 试用例( 尤其是预期结果) 的生成带来了一定的困难。为了能够观察到这些属性 和状态,以确定程序执行的结果是否正确,往往要在类定义中增添一些专门的 函数。而这些方法的缺点是增加了测试的工作量,并在一定程度上破坏了封装 性。 、 2 ) 继承性继承由扩展、覆盖和特例化三种基本机制实现,扩展是子类自 动包含父类的特征:覆盖是子类中的方法与父类中的方法有相同的名字和消息 参数,接口相同。但方法的实现通常不同;特例化是子类中特有的方法和实例 变量。继承给程序开发人员带来了很多方便,然而对于测试人员来说,问题却 并未简化。p e r r y 和鼬8 d 1 0 1 等人通过研究w j ”k 盯的测试资料集充分性公理认 为,对父类进行了充分的测试未必能保证子类继承的特征的正确性,因为父类 和子类的运行环境是不同的同时,多重继承会显著地增加派生类的复杂程度, 导致一些难以发现的隐含错误。 第二章面向对象测试技术 3 ) 多态性和动态绑定多态性和动态绑定是面向对象方法的关键特性之 一多态的概念是指同一消息可以根据发送消息对象的不同而采用多种不同的 行为方式。多态性和动态绑定为程序的执行带来了不确定性,并且增加了系统 运行中可能的执行路径,加大了测试用例选取的难度和数量。多态性为软件测 试带来的问题目前仍然是研究的重点及难点之一 第二节面向对象软件测试策略 面向对象软件测试的目的与传统的测试一样,测试过程也可分为以下几个 阶段:制定测试计划、产生测试用例、执行测试和评价但在测试的具体内容 上,因面向对象软件的特殊性而不能再套用传统的测试思想和方法。要充分地 测试面向对象系统,第一,必须扩大测试的视角,从复审面向对象分析和面向 对象设计的模型开始测试;第二,传统的单元和集成测试策略必须有很大的改 变。 一般来说。面向对象软件的测试可分为4 个层次:方法测试、类测试、类 簇测试和系统测试“ 1 ) 方法测试方法测试是指对类中的各个方法进行单独的测试。但实际上 类中的方法是不能脱离类而单独存在的,因此不少人反对将方法测试作为一个 独立的层次来考虑,而主张将其看作类测试的部分不过,如果我们以类的 实例化为前提,并考虑到设置相应的对象状态,对各个方法进行相对独立的测 试还是可行的。对独立方法的测试类似于对独立过程的测试。 2 ) 类测试与传统软件相比,面向对象程序的子过程( 方法) 的结构趋于简 单,而方法问的耦合程度却有了较大的提高,交互过程也变得复杂,因此面向 对象程序测试的重心就由对各独立过程进行的单元测试转移到了过程间的集成 测试上,即测试的重点是类及类以上的各个层次况且类是面向对象组成和运 行的基本单元,对它的测试也就显得更加举足轻重。在对传统软件进行测试时, 我们着眼的是程序的控制流或数据流。但对类进行测试时则必须考虑类的对象 所具有的状态,着重考察一个对象接收到一个消息序列之后,是否达到了一个 正确的状态。因此类测试的重点是类内方法间的交互和其对象的各个状态,类 的测试用例主要是由方法序列集和相应的成员变量的取值所组成。 8 第二章面向对象测试技术 3 ) 类簇测试类簇也叫子系统,由若干个类所组成,这些类之间存在着诸 如派生、聚集和联系等关系,对类簇的测试应着重于考察上述关系的正确实现。 如果将类簇看作一个整体,其行为特点与类有许多相似之处,因此类簇的测试 方法往往参照类而得到。 4 ) 系统测试系统测试检验整个软件系统是否符合需求由于系统测试不 考虑内部结构和中间结果,因此面向对象软件的系统测试与传统软件的系统测 试区别不大,可套用传统的系统测试方法。 由于本文着重研究类测试工具的研究与实现,下面我们针对类测试过程中 遇到的问题进行进一步的分析 第三节类测试分析 面向对象软件的类测试蚴与传统软件的单元测试相对应,但和传统的单元 测试不一样。类包含一组不同的操作,并且某特殊操作可能作为一组不同类的 一部分存在。 1 输入数据 输入数据 初始状态 传统的测试模型 输出结果 输出结果 结束状态 类的测试模型 图2 1两种不同的测试模型 同时一个对象有它自己的状态和依赖于状态的行为,对象操作既与对象的 状态有关,但也可能改变对象的状态。因此,类测试时不仅要将操作作为类的 一部分,同时要把对象与其状态结合起来,进行对象状态行为的测试。类的测 试按顺序分为以下3 部分: 基于服务的测试:预0 试类中的每一个服务( 方法) ; 基于状态的测试:考察类的实例在其生命周期各个状态下的情况; 9 第二章面向对象测试技术 基于响应状态的测试:从类和对象的执行出发,以外界向对象发送特定的 消息序列的方法来测试对象的各个响应状态。 其示意图如图2 2 所示 系统 图2 2 类测试示意图 类测试可以使用一系列不同的方法:随机测试、划分测试、基于故障、规 约、流图、状态的类测试技术等,下面从基于服务的、基于状态的、基于流图 的以及基于规约的4 个方面论述类测试的思想,方法 1 ) 基于服务的类测试技术 基于服务的类测试主要考察封装在类中的一个方法对数据进行的操作。它 可以采用传统的白盒测试方法,如:控制流测试、数据流测试、循环测试、排 错测试、分域测试等。但由于受面向对象软件测试技术发展水平等方面因素的 限制,测试人员在选择测试用例时往往都是根据直觉和经验来进行,给测试带 来很大的盲目性;再者由于测试人员的个性及倾向性也使得选择的测试用例仅 能测试出其所熟悉的某一方面的错误,许多隐含的其它错误不能被检测出来, 这在无形中降低了软件的可靠性。 2 ) 基于状态的类测试技术 对象状态测试【l3 】是面向对象软件测试的重要部分,同传统的控制流和数据 流测试相比,它侧重于对象的动态行为,这种动态行为依赖于对象的状态。测 试对象动态行为能检测出对象成员函数之间通过对象状态进行交互时产生的错 误。基于状态的测试是通过检查对象的状态在执行某个方法后是否会转移到预 期状态的一种测试技术。 3 ) 基于流图的类测试技术 1 0 第二章面向对象测试技术 把传统的基于流图的测试技术“4 】应用于类测试,提出了一种构造类流图的 框架。传统程序流图的测试充分性准则可以在类流图中找到对应,如类流图的 节点覆盖要求测试时的操作序列应使每个操作至少执行一次,分支覆盖要求测 试时的操作序列应覆盖类流图中的每条边至少一次。 ” 4 ) 基于规约的类测试技术 以需求和功能规约为基础的类测试技术1 1 5 】通过分析软件的需求和功能规 约来选择和产生测试数据,重点测试一个作用于被测类的对象的消息序列是否 将该对象置于“正确”的状态。在这方面有一定影响的工作是d o o n g 和f m n k 提 出的方法。该方法根据类是抽象数据类型的实现这一原理,设计了一种和面向 对象语言语法相似的代数规约语言l o b a s 。基于规约的测试完全依赖于系统的 规格说明,往往可根据规约自动或半自动地生成测试数据,但未必能够提供充 分的代码覆盖率。 从耳前的研究现状来看,现有的针对面向对象软件测试的方法还存在许多 问题第一,类不能直接测试,测试类只能通过类的实例对象进行,随之 而来的一个问题是,对于无法实例化的抽象类如何进行测试。第二,现有的针 对面向对象软件测试的方法都忽略了动态绑定的作用和影响。面向对象程序设 计的继承和动态绑定所带来的多态性对软件测试的影响有些文献中虽然有所论 及,但是不仅缺乏针对这一特点的测试方法,而且还有许多问题有待进一步研 究。 第三章测试自动化及工具开发模型设计 第三章测试自动化及工具开发模型设计 第一节软件测试自动化发展及现状 随着软件向规模化、产业化发展,传统的测试模式受到了前所未有的冲击, 仅仅采手工测试远远无法满足现代软件产品的测试需求,自动化测试已经成为 不可逆转的趋势。自动化测试就是希望能够通过自动化测试工具或其它手段, 按照测试工程师的预定计划进行自动的测试。只要有简单重复劳动的地方就有 自动化测试的用武之地。测试自动化涉及到测试流程、测试体系、自动化编译、 持续集成以及自动化测试等方面整合。目前,软件测试自动化主要集中在软件 测试流程的管理自动化和动态测试的自动化,如功能测试自动化和性能测试自 动化方面,还有是少部分的静态测试,如代码走查,它们常常比较容易从开发 过程剥离出来。自动化测试能完成许多手工测试无法实现或难以实现的测试, 正确、合理地实施自动化测试,能够快速、彻底地对软件进行测试,从而提高 软件质量,节省经费,缩短产品发布周期。 最早的软件测试自动化,是通过工具实现记录测试者输入的测试实僦,供 回归测试使用。它实际上是一种操作捕捉、回放程序。使用这种工具可以明显 的降低回归测试的劳动量。但这种自动软件测试工具只实现了对回归测试的准 备测试用例和执行测试用例两个环节的自动化,对于其它内容诸如集成测试、 系统测试、性能测试等,仍无法提供有力的自动化支持。但随着自动化测试的 实践经验的积累,现在自动化测试已经发展并形成了一些复杂的高度集成的测 试套件,这些套件构成了一个自动化测试框架,对于解决日益复杂的软件产品 测试问题,提供了越来越多的测试方案。 从测试自动化的发展历程上来看主要经历了以下几个阶段【1 6 】: 1 ) 录制和回放:这是测试自动化的初级阶段,此时自动化的测试脚本能够 被自动的生成,而不需要测试人员有任何的编程知识,它在完成自动化过程的 同时也带了其固有的缺陷,就是产生大量的测试脚本都是硬编码,当需求和应 用发生变化时,相应的测试脚本也必须被重新录制,仅仅适用于测试的系统不 会发生变化时,通常可实现小规模的自动化 1 3 第三章测试自动化及工具开发模型设计 2 ) 录制、编辑和回放:人们为了解决大量脚本所带来了的额外测试工作量, 通过减少脚本的数量和增强其可维护性来进行测试自动化这一阶段要求测试 员具备维护脚本的编程知识,但仍不适用于变化频繁难以维护的回归测试,可 适用于被测试的应用程序有很小变化的测试自动化 3 ) 编程和回放:为了提供测试的灵活性和针对性,人们采用设计测试脚本 方法,从而使自动化测试在项目的早期就可以开始,这一阶段要求测试人员具 有很好的软件技能,包括设计、开发大规模的测试套件,这一模式开创了开发、 执行和维护的专业自动化测试进程。 4 ) 数据驱动的测试:为了能够维护和使用有效的模拟真实生活中数据的测 试数据,人们在设计测试脚本时,把测试数据分离出来,通过数据来决定测试 过程。这个阶段软件开发的技能是基础,并且需要访问相关的测试数据。数据 驱动的应用标志着大规模的测试套件被开发、执行和维护的专业自动化测试的 开始。 5 ) 使用动作词的测试自动化:这种模式是当前理论前沿,正处于研究阶段, 其主要思路是把测试用例的设计从测试工具中分离了出来,需要开发用于描述 测试用例的逻辑层,通过逻辑层把被测对象与测试用例分离开,实现专业的测 试自动化和技能的使用最优化结合 随着自动化测试经验的积累和理论的深化,目前国内软件企业实施或有意 向实施测试自动化的数量正在逐渐增加,从市场和实施自动化的软件企业的现 状来看,目前的自动化测试基本上还停留在简单的利用第三方测试工具上,主 要是作为亡羊补牢式的测试过程完成测试自动化。其内容包括录制、编写、维 护测试脚本,来实现局部测试的自动化,对于一些复杂的软件产品不能准确的 测试出软件中存在的缺陷及问题。在以x p 编程、r u p 设计成为主流开发模式的 今天,自动化测试仍未发挥其应有的效果。造成这种现状的原因主要包括以下 两方面: 。 一方面因为目前市场上的测试工具的核心思想虽然采用了数据驱动的脚本 技术,但由于大都在早期的测试自动化框架的基础上开发出来的,数据脚本没 有完全与执行脚本分开,在开发技术日新月异的今天,很多测试工具可能无法 有效使用。 目前测试工具支持的自动化测试框架模式有以下缺点【l 7 】: 1 4 第三章测试自动化及工具开发模型设计 1 ) 需要人工把测试输入信息( 如设计文件,测试策略等) 转换为测试数据和 测试辅助脚本程序 2 ) 在现有测试工具的支持下,测试脚本只能用于测试特定类型系统,编写 脚本成为了实施自动化测试的一个负担,增加了自动化测试的实施代价。 3 ) 人工生成测试数据不能保证测试的彻底性。 4 ) 测试结果评估工作量大现有工具提供的自动验证功能较弱 另外一方面,软件企业实施测试自动化,绝对不是拍脑袋说干就能干好的, 更不能仅仅使用了测试工具就说是实现了测试自动化,它不仅涉及测试工作本 身流程、组织结构上的调整与改进,甚至也包括需求、设计、开发、维护及配 置管理等其它方面的配合。 目前软件企业在开展自动化测试时常陷入以下误斟1 6 】: 1 ) 购买或试图使用一些针对性不强的通用自动化测试软件。最后往往不是 让自动化测试为自己服务,而是最后去迁就自动化测试软件。不仅没达到自动 化测试的效果,反而由于花了很多精力搞自动化测试,大大增加测试工作内容, 造成本末倒置的结果 2 ) 在自己开发测试自动化软件时缺少必要的资源,或开发目标不够实际。 有些企业用一些缺少编程经验的测试人员开发、维护自动化测试软件,往往造 成开发时间过长,软件质量问题过多等弊端。 3 ) 一些企业要么编出的自动化软件灵活性过差,只能使用一小段时间。要么 就把摊子铺得过大,等自动化软件能用的时候已接近产品发布了 这些问题在一定程度上大大限制了自动化测试的实施与效果,不仅没有提 高测试效率,反而增加了测试人员的额外工作量,降低了测试质量,致使测试 周期增长,不能在即定的时间完成测试任务正是以上两个方面因素的影响下, 国内软件产业对自动化测试的实施仍处在实验期,没有能把自动化的作用发挥 出来。其关键是问题还是自动化测试策略没有规划好,自动化测试是在没有计 划的前提下进行的,从而使测试过程经常陷入无序和无效的境地,浪费了测试 资源,加大了测试成本 本章针对目前这种现状,通过自动化测试的深入研究,挖掘面向对象自动 化测试实施不科学不到位的本质原因,提出科学的自动化测试策略,并有针对 性设计出一种基于数据驱动的面向对象测试工具模型,为当前测试自动化提供 理论和实践的思路。 1 5 、 第三章测试自动化及工具开发模型设计 第二节自动化测试策略分析 3 2 1 实施自动化测试的时机 软件测试由一系列有序活动组成,始于测试策划,着重测试开发。软件测 试自动化是针对这一系列活动及其管理的自动化,包括软件测试过程规范管理 的自动化和软件测试活动的自动化蜘,测试策划是建立测试目标以及实现目标 的测试策略。测试自动化通过较少的开销可以获得更彻底的测试,并提高产品 的质量但是测试自动化具有局限性,不可能取代手工测试手工测试可以比 自动测试发现更多的缺陷,而测试自动化对期望结果的正确性有极大的依赖性。 因此在自动化测试过程中,要正确认识和设计科学的自动化测试策略,使测试 自动化可以大大促进软件测试的质量和产品化,而不是让测试陷入更加无序和 繁杂的额外事务中。 测试开发是指对软件测试设计与执行过程的开发,它包括5 个不同活动: 即标识测试需求条件、设计测试用例、建立测试( 软件、脚本、数据等) 、执行测 试用例和比较结果【1 9 】,如图3 1 所示 。 结果同期望结果比较 图3 1 测试五个活动 测试开发的前3 个活动主要是依赖于软件测试人员的创造性智力,这些智 力活动在软件测试过程中只执行1 次,对这部分活动只能实现一定程度的自动 1 6 第三章测试自动化及工具开发模型设计 化或者说计算机辅助,但应引起高度重视的是这些活动的质量决定着测试用例 的质量,为切实提高软件测试质量,必须提高测试人员的技术水平、综合素质 和实践经验。测试开发的后2 个活动是需多次执行的机械活动,从自动化特点 来看,这两个阶段是适合采用自动化测试的,主要包括对于那些手工测试很难 完成的测试、多次执行的回归测试、需合理调配和调度软硬件资源的测试、重 用测试等工作,测试数据的动态生成与注入、测试用例的实时调度与管理、测 试结果的动态获取与记录等内容:7 畏用测试软件或测试工具软件对测试过程管 理控制后,可以实现软件测试工作的可行和高效,如图3 2 所示。 f 控制测试质量i , 智力活动一 执行一次 适 用 。j | : 。 于 重复多次一 自 ;机械 动 5 化 图3 2 人工测试与自动化测试阶段区分 软件测试自动化的根本目的是提高测试的质量、效益和效率嗍。为此,一 方面需要对软件测试过程的规范管理实现一定程度的计算机辅助管理,另一方 面需要对测试开发的上述5 个活动进行自动化。把测试自动化作为一项技术手 段,融入到综合测试乃至整个软件工程中,将会最大程度地发挥自动化测试的 作用。 3 2 2 测试工具介绍与分析 测试自动化自然离不开测试工具,软件测试工具是提高软件测试效率的重 要手段,选择或开发合适的测试工具是关系到测试自动化成败的重要因素,在 确定了测试自动化的内容后,首当其冲的任务就是选择或开发测试工具,由于 测试需求的不同决定了测试工具的选择上也有很大的差别目前测试工具种类 繁多,功能齐全,但或多或少都受其开发目标的影响,存在其固有的测试限制, 因此在自动化策略中应对测试工具需求做出明确的要求下面本文对当前测试 1 7 第三章测试自动化及工具开发模型设计 工具进行了分类和总结,为测试自动化选择或开发什么样的测试工具提供依据。 软件测试工具是伴随软件测试技术的发展而发展的,目前,应用比较广泛的测 试工具主要包括以下几种类型。 1 ) 测试设计工具测试设计工具有助于准备测试输入或测试数据,测试设 计工具包括逻辑设计工具和物理设计工具。逻辑设计工具涉及到说明、接口或 代码逻辑,有时也叫做测试用例生成器。物理设计工具操作已有的数据或产生 测试数据,如在随机人数中抽取记录的工具就是物理设计工具。从说明中获取 测试数据的工具就是逻辑设计工具。 2 ) 测试管理工具测试管理工具是指帮助完成测试计划,跟踪测试运行结 果等的工具这类工具还包括有助于需求、设计、编码测试及缺陷跟踪的工具。 其代表工具有m 【公司的t e s tm 锄a l l g 盯,c o m p u r c w a l e 公司的t m c h r e c o r d 等 3 ) 静态分析工具静态分析直接对代码进行语法扫描,找出不符合编码规 范的地方,根据某种质量模型评价代码的质量。生成系统的调用关系图。代表 工具有t c l e l o 舀c 公司的l o 垂s c o p e 软件,p r 公司的p r q a 软件,r e 嬲i n g 公司 的l u m 软件。 j -+t 一 一 4 ) 动态分析工具与静态分析工具不同,动态测试工具一般采用“插桩” 的方式,向代码生成的可执行文件中插入一些监测代码,用来统计程序运行时 的数据。其与静态分析工具最大的不同就是动态分析工具要求被测系统实时运 行其代表有c 伽叩u w a 北公司的d e v p a 咖e r 软件,r a t i a l 公司的p 嘶f y 系列 产品 5 ) 覆盖测试工具通过一系列的测试,评估测试软件被测试覆盖的程序。 覆盖工具大量的用于单元测试中 。 6 ) 负载和性能测试工具检测每个事件所需要的时间。例如性能测试工具 可以测定典型或负载条件下的晌应时间,负载测试可以测定系统流量,例如, 产生许多代表典型情况或最大情况下的事物,这种类型的测试工具用于容量和 压力测试。专用于性能测试的工具有r a d v i e w 公司的w g b io a d ,m i c r o f t 公司 的w 曲s 仃e s 8 ,m i 公司的k 蛐幔岫n c r 等工具。 7 ) g u i 测试和捕获,回放工具这类测试工具可使测试自动执行,然后将测 试输出结果与期望输出进行比较,此类测试工具可在任何层次中执行测试,单 元测试,集成测试,系统或验收测试。捕获回放工具是目前使用的测试工具中 第三章测试自动化及工具开发模型设计 最流行的一种。其代表有r a t i o n a l 公司的t e 觚1 1 b 8 t ,r o b o t ,c o m p u w a i e 公司的 q a c 阴t c r ,蛐公司的w i n r u 咖贸等。 8 ) 基于故障的测试工具首先给出软件的故障模型,在此故障模型下,给 出基于该故障模型的软件测试工具。随着人们对软件故障认识的不断深入,软 件故障模型也会越来越完备,并更加符合实现。 3 2 3 自动化测试策略 自动化测试必须从企业的测试需求出发,通过系统的测试设计,测试执行, 测试管理等多方面的综合规划,才能达到自动化测试的目标其中最重要的是 要对测试过程进行合理设计,在测试每个阶段采用相应的方法或选择相应的测 试工具。自动化测试过程如图3 3 所示,将自动测试分成三个部分,测试中使用 的各种工具集合、测试件集合和测试过程其中测试件是指测试过程中产生或 设计的测试相关文件和数据 嚣萎喜堡置1 测试过程l 测试件 的各种工具l 。 i i 调用测试脚本 式执行工具 调用 - 打开 输入文件 黾回放工具 调用 产生 测试过程记: 交过滤器调用 。 打开 期望输出 盂比较工具器 调用 - 产生 差异报告 式工具 调用 - 耋拿 - 测试报告 产生 - 氯主5 三 图3 _ 3 测试自动化流程 如果实现测试的自动化,那么工具集合和测试件集合是必须完备的,在此 基础之上,才能有效的实现自动测试。 1 9 脚本 第三章测试自动化及工具开发模型设计 测试件集合中的文件有两种产生方法,一是测试人员生成的,如文件、测 试脚本、输入、期望输出等,二是测试过程中由测试工具产生的,如输出、报 告、日志等无论哪一种,都需要注意命名规则及其它管理事项。 对于测试工具,可以通过购买或开发得到。测试工具可以以独立的方式存 在,按照测试阶段逐渐介入测试中,实现自己特定的功能,在测试中调入测试 件或是在测试中产生测试件 。 自动化测试策略是对自动化测试进行规范化、科学化管理的计划,通过有 针对性的分析测试需求、制定测试目标、选择或开发合适的测试工具、统筹安 排整个测试过程,来实现自动化测试的高效与节能。自动测试的“自动”只是相 对积极的,无视自动测试或是把自动测试视为万能的观点都是不可取的。手工 测试未必比不上自动测试,自动化侧试也有失败的前例。因此做好测试计划, 以实现测试目的为前提,合理自动化才能达到最有效的测试。 一 第三节自动化测试脚本研究 ,- , 3 3 1 自动化测试脚本分类及特点 自动化测试脚本是软件程序。它们有自己的适用于软件测试的编程语言或 语言扩展。脚本语言通常嵌入在捕获,回放工具中,该工具带有源码编辑器。这 里所说的脚本编写是指测试脚本的编码,它可以使用测试工具自带的测试脚本 语言;也可以使用现有的一些应用编程语言,比如j a v a 或8 u a lb 私i c ;或者使 用标准的脚本语言p e d ,c g i 或、,bs c r i p t 或者使用操作系统的命令过程语言。 测试脚本是实现软件测试自动化设计的重要部分,使用合适的脚本技术可以减 少脚本的大小、数量及复杂度,每个脚本技术都有其不同的适用场合,并且在 支持脚本完成测试用例的时间和开销上都各有长短,但它们并不是相互排斥的, 根据所采用的测试方法,综合应用这些脚本技术,以最好的方法来实现测试用 例的执行 。 测试脚本分为:线性结构脚本、共享脚本、数据驱动脚本、关键词驱动脚 本【2 | 】,脚本中包含测试工具中使用的数据和指令,包括同步、比较信息、读取 数据和保持信息以及控制信息,如:使用,i f 语句、循环语句等。实际脚本语言 与使用的工具有关,为了说明问题,便于理解,下面详细描述: 第三章测试自动化及工具开发模型设计 1 ) 线性结构脚本线性脚本是录制手工执行的测试时得到的脚本,这种脚 本包含所有的击键、功能键、控制测试软件的控制键及输入数据的数字键等, 在录制或回放时,线性脚本还可添加比较指令,如果一个测试用例一旦采用线 性脚本技术进行录制就必须保证能够正确回放,然而实际情况并非如此,因为 当增加新的比较指令时,需要对增加的部分进行测试,这将花费更多的时间。 因此,我们应将线性脚本结

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论