(计算机科学与技术专业论文)uml测试技术的研究与实现.pdf_第1页
(计算机科学与技术专业论文)uml测试技术的研究与实现.pdf_第2页
(计算机科学与技术专业论文)uml测试技术的研究与实现.pdf_第3页
(计算机科学与技术专业论文)uml测试技术的研究与实现.pdf_第4页
(计算机科学与技术专业论文)uml测试技术的研究与实现.pdf_第5页
已阅读5页,还剩94页未读 继续免费阅读

(计算机科学与技术专业论文)uml测试技术的研究与实现.pdf.pdf 免费下载

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

文档简介

国防科学技术大学研究生院学位论文 第一章绪论 随着信息技术的飞速发展,计算机已广泛应用于国民经济和国防建设中的许 多重要领域,如:航空,航天、工业控制、交通、银行和军事指挥自动化系统等。 这类应用对软件提出很高的质量要求,因为即使很小的软件错误也可能导致整个 系统的崩溃,造成极大经济损失。如:1 9 9 6 年6 月阿里亚娜火箭发射时因软件故 障导致升空失败,使欧共体蒙受了2 5 亿美元的损失。软件质量已成为制约计算机 应用的主要因素之一。 鉴于软件质量问题的重要性和追切性,人们提出各种方法和技术来提高软件 质量,如形式化方法、面向对象方法和软件铡试技术等。其中,以软件测试为中 心的质量保障技术在软件生产实践中得到了迅速发展和应用,软件测试已成为保 证软件质量的关键技术之一。它能够有效地发现软件中的任何故障。据统计,在 软件开发成本中,软件测试的工作量往往占软件开发总工作量的4 0 以上。随着 软件规模的不断扩大,软件测试在整个软件开发周期中所占比重日益增大。对于 某些性命攸关的软件,其测试费用甚至高达所有其它软件工程阶段费用总和的三 到五倍。 1 1 立题背景 由于面向对象技术具有易于设计、编程和重用等优点,使它得到广泛应用。 与传统软件相比,面向对象技术的新特征,如:方法重载、继承、信息隐蔽、多 态和动态绑定等,虽然可以提高软件可读性和开发效率,但信息的分散性使得控 制和数据跟踪更加复杂,增加了软件质量保证的难度为测试带来了新的挑战f i 。 目前,面向对象的研究主要集中于面向对象的需求分析、面向对象的开发方 法和规范语言。由r a t i o n a l 公司牵头推出的标准建模语言u m l ( u n i f i e dm o d e l i n g l a n g u a g e ) 脚是近年来软件工程领域约重要成果。它推动了面向对象软件开发的标 准化进程,拓宽了研制与开发软件系统的适用范围。用u m l 进行面向对象软件的 分析和设计建模可以提高软件质量,却不能保证软件的正确性,所开发的软件 必须进行铡试。目前,对u m l 测试的研究还刚刚起步。现有测试技术的研究还存 在许多不足,需要对其进行深入研究,以推动面向对象测试技术的实际应用。 毒癯孽 盈防科学技拳大学研究生院学位论文 1 1 软件测试技术发展回顾 自计算机出现以来,程序编制和程序测试两个课题就同时摆在人们面前。当 时测试程序的基本方法是将程序运行结果同手工计算结果进行h :较,以验证程序 的正确性。 6 0 年代的软件危机导致了软件工程思想的提出。7 0 年代初,提出了软件生存 周期的概念,明确地将软件开发工作划分为若干步骤,并规定需求分析、系统设 计和实现阶段的目标。以及每个阶段生成的产品口】。由于程序中的错误不仅仅是由 编码引起的,而且有可能是分析或者设计本身的问题,因此人们将软件测试的概 念扩展到软件开发的各个阶段,从而使人们对软件测试的认识更加广泛和深刻 这对于软件产品的质量保障以及软件开发过程的组织具有重要的意义。 1 9 7 2 年6 月在美国北卡罗来纳大学召开了首次软件测试的正式会议。会后, 软件测试的研究进入了一个重要时期。j b g o o d e n o u g h 和s l g e r h a r t 【4 l 率先提出 了软件测试的理论,从而把软件测试这一实践性很强的学科提高到理论高度,被 认为是测试技术发展过程中最具开创性的工作w _ e h o w d e m p 修正了上述理论 的缺陷。e j w b y l l l ( e 一1 等加以进步的补充和完善。这一期间,出现了路径测试、 域测试、数据流测试、错误驱动测试以及状态铡试等技术并开始研制相应的测 试工具。 8 0 年代,软件质量问题成为软件工程领域关注的熟点国际标准化组织制定 了与软件测试相关的国际标准如i e e e a n s is t d 8 9 2 规定了软件测试的文档标 准,疆e e 悄n s ls t 【i 1 0 t 2 规定了软件测试确认与验证计划标准,陋e e , n s is 耵) - 1 0 2 8 规定了软件测试复查和审计标准等。 9 0 年代以来随着面向对象技术豹广泛使用,原有的测试技术无法适用于面 向对象软件,面向对象软件测试面临新的困难为此,人们以传统测试技术为基 础,结合面向对象软件的特点,对面向对象软件的测试技术进行研究,也取得了 一些进展。当前,软件测试的研究工作主要集中于测试用例( t e s tc a s e ) ( 指为了 - 测试而设计的输入数据) 的生成、铡试工具自动化、面向对象软件的潮试、分布 对象软件的测试p l s l l f l l ”) 等。 现有的软件测试通常分为静态( s t a 矗c ) 测试和动态( d y a d i c ) 铡试静态测 试是指在分析、检查和测试软件时不实际运行被铡试程序,如:审查、符号演算 及验证。动态测试是指通过运行软件来检验软件的动态行为和运行结果的正确性。 因此,动态测试必须包括被铡程序和用以运行软件的数据( 称为铡试数据) l i 。 从选择或产生测试数据的来源署,动态潮试分为基于规范( s p e c i f i c a t i o n - b a s e d ) 的测试( 又称黑盒测试或功能测试) 、基于程序( p r o g r a m - b a s e d ) 的测试( 又称自 盒测试或结构测试) 、规范与程序的联台测试。基于规范的测试是指测试者不需了 解程序的内部结构,直接根据程序输入和输出之间的关系或程序的需求规范来确 鬻蠢燕 国蒜;学技术大学浒螽壁院窜 虢文 定测试用例,推断测试结果的正确性。基于规范的测试包括:划分测试( p a r t i t i o n t e s t i n g ) 、因果图( c a u s e - e f f e c tg r a p h i n g ) 、判定表( d e c i s i o nt a b l e ) 、边值分析、正 交实验设计、状态测试、事务流测试等( 参见文献【l l 】) 。基于程序的测试是指测 试者根据程序的内部结构特性和与路径相关的数据特性设计测试用例。常用的测 试方法有:路径( p a t h ) 测试、域( d o m a i n ) 测试、符号( s y m b o l i c ) 测试、数据 流c d a t a - f l o w ) 测试、控制流( c o n t r o l - f l o w ) 铡试、程序插装( p r o g r a mi n s t r u m e n t a t i o n ) 和程序变异( p r o g r a mm u t a t i o n ) 等。由于两者相互互补,常常采用联合测试方式。 为提高测试效率,加快软件开发进程,人们从7 0 年代开始研制相应的测试工 具。如:美国程序设计环境署开发了测试数据生成器,用于证明需求的可测试性 产生测试数据并分析测试结果;加利福尼亚大学开发的支持测试过程的t a o s l l 2 l ; r a t i o n a l 公司推出的一系列测试工具:快速查找内存丢失和防止运行错误的 p u r l 白、检查代码覆盖的p u r ec o v e r a g e 、测试软件性能的q u a n t i 毋、测试系统性 能的s q a l o a d t e s t 以及进行功能测试的s q a t e a m t e s t 等口l 。国内也开展了软件测 试工具的开发如:清华大学开发的c o b o l 软件测试环境、f o r t r a n 程序静态 分析和动态分析系统d t f g ,北京航空航天大学开发的c 程序测试系统等。目前, 人们普遍认为软件测试工具不但是有用的而且是必要的。 随着软件复杂度的提高,人们对软件测试的认识也随之提高到一个新的水平。 但是,软件测试技术还存在许多限制,软件测试总体上落后于软件开发技术的发 展。 1 1 2 软件测试目的和基本策略 人们对软件测试目的的认识经历了一个过程。早期的软件测试被认为是调试。 1 9 8 3 年i e e e 给出软件测试的定义:“使用人工或自动手段来运行或确定某个系统 的过程,其目的是检验它是否满足规定的需求或判定预期结果与实际结果之间的 差别”。这就明确地提出了软件测试是以检验系统是否满足需求为目的。g j m y e r s 则认为:“软件测试是为了发现错误而执行程序的过程”嘲。这个定义明确地指出 “查找错误”是软件测试的目的,软件测试只能发现系统存在的故障,而不能保 证系统的正确性。 从保证软件质量的角度看,软件铡试是保证软件质量的重要手段。通常采用 一些经济的、高效的方法,捕捉软件中的错误,以证实软件内在质量 从软件的发展角度看,软件测试与软件产品的整个开发过程紧密关联软件 测试可以为软件产品提供一些系统的、客观的方法来度量软件内在的质量。如果 在开发过程中提供一些有益的支持,可以降低测试开错。 一个成功的测试必须包括两个方面: 据上是正确的;二是测试数据是充分韵, 一是软件在所有的( 足够多的) 测试数 即软件在测试数据上的表现能够充分地 期孵葵 国防科学技术大学研究生院学位论文 反映软件的总体表现。判断一个测试数据集是否充分称为充分性( a d e q u a c y ) 问题 ”j 。为保证测试成功,软件铡试通常采取一些策略来达到规定的目的。软件测试策 略主要考虑:如何在一定条件下,将设计测试用例的步骤组织成一个系统的、有 计划的测试步骤唧。通常先假设需求规范、设计文档等的某些方面是无错的然后 遵循与软件工程目标一致的原则,采取一定的测试步骤,一级一级地测试,直至 整个系统测试完毕。常用的测试步骤包括:单元( u n i t ) 测试、集成( i n t e g r a t e d ) 测试、系统( s y s t e m ) 测试、验收( a c c e p t a n c e ) 测试和回归( r e g r e s s i o n ) 测试。 测试过程中,既要保证软件测试的充分性,又要避免过度测试。在不能完全测试 一个程序的情况下,只选择最主要方面进行测试。 1 1 3 测试覆盖准则 测试充分性准则是根据被测软件在有限测试数据上的行为判断它在所有输入 数据上的行为的逻辑基础,是决定被测软件的测试集是否充分的准则。如果测试 集不充分,必须向测试集中增加更多的测试数据,否则软件可以交付使用。1 9 7 5 年,j b o o o d e n o u g h 和s 。l g e r h a r d ”提出软件测试充分性的概念,指出测试数据 充分性准则是软件测试的中心问题。在过去二十多年中,测试数据充分性准则一 直是软件测试研究的重点。良好的测试充分性准则应具有如下性质( 参见文献 1 ) : 1 )单调性:如果测试数据集对一个软件系统来说是充分的,那么再增加 一些测试数据也是充分的; 复杂性:软件越复杂,需要的测试用例就越多: 可作用性:对任意程序均存在充分的测试数据集: 非外延性:语义相同的两个程序必须进行不同的测试; 非复合性:即使一个测试数据集对软件的所有组成是充分的,也不能 保证对整个软件的测试是充分的; 重命名性:充分测试的软件被系统地重新命名后,也是充分测试的; 空集不充分性:空测试对任意程序都是不充分的; 非穷尽可作用性:一些程序存在有限的测试数据集; 一般多重修改性:语法结构相同的程序也必须进行不同的铡试; 不可分解性:如果一个软件系统整体得到充分爰i 试并不保证系统各 个部分都已经得到充分测试。 8 0 年代中期,提出了充分性准则满足的i l 条公理。这些原则和公理也便于相 关测试覆盖准则的比较。目前,通常用测试覆盖准则( t e s tc o v e r a g ec r i t e r i a ) 度量 测试充分性。到目前为止,已经提出许多针对程序内部结构的测试覆盖准则,主 要包括控制流测试覆盖准则和数据流测试覆盖准则。控制漉测试覆盏准则包括语 1 灞t 礁瓤 毋毋 钟 盼m 犀防科学技术大学研究生院学位论文 句覆盖、分支覆盖、多条件覆盖、路径覆盖和决策支持覆盖等。数据流覆盖准则 包括a 1 1 - d e f i n i t i o n 、a l l - u s e s 和a l l - d e f i n i t i o n - u s e - p a t h s 覆盖准则等。这些准则不 仅可以定量地规定软件测试需求,指导测试数据的选择,而且可以度量测试集揭 发软件特定特征的能力,对测试结果和软件可靠性评估具有重要作用。 1 2 面向对象测试技术的发展现状 面向对象( o b j e c to r i e n t e d ) 技术是一种很实用的软件开发方法。自8 0 年代 初问世以来,得到了飞速发展。面向对象的分析、设计技术以及面向对象的程序 设计语言均取得了丰富的研究成果和广泛应用,但面向对象软件测试技术的研究 还比较薄弱【i ,j 。 面向对象软件铡试技术的研究是以结构化程序测试技术为基础。其中,最早 关注面向对象软件测试的是f i e t c l e r t “1 。他在1 9 8 9 年指出面向对象软件测试与传统 测试之间的差异,包括何时进行单元铡试、选用何种测试技术等,并认为,由于 面向对象软件强调数据抽象和外部行为因此功能测试是首选技术,但结构测试 也是必要的。 2 1 面向对象特征对测试的影响 与传统技术相比,面向对象引入了类、对象、继承等新特征,面向对象方法 可以形象地表示为:面向对象= 对象+ 类+ 继承+ 消息。面向对象软件由一系列类和 对象组成,类和类之间按继承关系或者聚集关系组成一个无环路有向图,对象之 间通过消息传递来实现系统功能。 r v b i n d e r t 1 和s b a 姗16 l 从测试角度研究了类的封装、多态等特征对面向对 象软件测试的影响,认为这些特征增加了测试的复杂性。例如;类的封装是为了 避免类中实现细节信息被错误地引用,而这些细节却是测试所必须考虑的。为解 决上述问题,本文用u m ls t a t e e h a r t s 来描述类内的交互,通过访问状态和迁移来 测试类的实现细节。 继承机制是区分基于对象和面向对象的重要条件。继承机制给测试引入新的 问题:未重新定义的继承特征是否需要进行测试? 如何潮试重新定义的特征? r v b i n d e r i ”1 认为:即使父类被充分测试,曲于予类处于不同韵上下文环境,因此 不应减少子类的测试。e p e r r y 和o e k a i s e r t 啪根据测试充分性公理,认为:在父 类得到充分测试后,被继承的方法在子类环境内需要重新铡试;对重新定义的方 法,需要重新测试相关的类,故封装和继承机制使得测试更加复杂。f i e r l d d 】认 为在父类充分测试的基础上,被继承的方法只需要最小测试。m h a r o l d ! 哺】根据类 鬻囊莹擎 国防科学技术大学研究生院学位论文 间继承关系,将父类的测试用例和测试信息保存在“测试历史”内,并根据父类 的测试历史、修改部分的定义以及实现语言的继承殃射( 如可见性) 来决定予类 中哪些特征应当( 重) 测试以及父类的哪些测试用例可以重用。其实,测试子类 时r 可以重用父类中相关的测试用例,在生成修改部分以及新定义部分的测试甩 例后,指导子类进行测试。 1 2 2 测试层次 面向对象软件的测试应当分为多少级尚未达成共识。根据对象闻相互协作的 特点,p c j o r g e n s e n 和c e r i c k s o n 1 9 l 将面向对象的测试分为五层:方法测试; 方法消息路径( 魁m p a t h ) 测试,即执行一个方法,消息序列直至到达一个不再 发消息的方法:系统基本功能测试,即从一个输入端口事件开始,执行一个方 法消息路径直至某一输出端e l 事件;线程测试; 线程间相互作用的测试。其 中方法测试对应于单元测试,方法,消息路径测试和系统基本功能测试对应于集成 测试,而线程测试和线程间相互作用测试对应于系统测试。 从面向对象软件结构的角度出发,面向对象铡试可分为:类测试、类簇测试 和系统测试。 1 类测试包括:方法测试、方法问的测试和类的各部分问的协作测试。其中, 基于故障的测试、基于方法序列的测试、基于状态的测试比较适合于类测 试。 2 类簇由一组相关联的类构成。类簇测试侧重于类之间的交互,如:一个对 象是否正确地调用另一个对象? 参数类型和参数范围是否正确? 被调用方 法的返回值是否正确? 类之间的关联、聚集等关系是否正确等类的集成 策略是类簇测试的重要问题。传统的基于功能分解的自底向上洲和自顶向 下1 1 s l 的集成策略不适合面向对象。s 。b a 觑) ,【1 q 认为服务类必须在客户类之 前先测试,父类必须在子类之前测试。但是这种方法并不总有效,如在处 理多态时,子类却成为父类的服务方对用u m l 描述的软件可以根据 类之间的关联( 由类圈描述) 确定测试次序如果存在闭环路径,则必须 在消除闭环后再确定测试次序。 3 系统测试类似于传统软件的系统测试,通常直接根据系统规范构造测试用 例,如:k c h m 萨l 采用o b j m - z 描述系统规范然后根据系统的形式规 范获取由改进的状态迁移图( 册) 来描述操作剖面和测试场景。这种 形式化方法存在状态空间爆炸闯题。用u m l 建模时,可以直接从用例( 啪 c 甜p ) 模型生成所需测试用倒 薰淄熏, 国防藉擎技术大学研究生院学位瓷文 1 2 3 测试用例生成 测试用例生成是软件测试的关键。类层测试用例的生成是整个面向对象测试 的基础。面向对象基于程序的测试常根据程序的内部结构构造测试用例,如 a s p a r r i s h 圳根据类的接口规范构造类流图,并根据传统的数据流测试技术定义了 适合于类流图而类似于数据流准则的覆盖准则。面向对象基于规范的测试通常根 据形式规范自动或者半自动地生成测试用例,相应的测试用例生成方法分为基于 外部行为的生成方法和基于内部行为的生成方法。 基于外部行为的测试用例生成主要是根据类的接口规范构造测试用例。一般 采用代数( a l g e b r a i c ) 规范( 如:l a r c h 、o b j 、l o t o s 、c s p ) 或者基于模型 ( m o d e l - b a s e d ) 规范来描述被测类的外部接口。基于代数规范的测试通常以g b e m o t 的抽象数据类型( 彳d r ) 测试理论删为基础,自动构造测试数据。这方面的 主要工作包括: d o o n g 和f r a n k l 口1 采用面向对象代数规范语言l o b a s 描述被测试类,并 实现了原型系统a s t o o t ,用以判断类的实现是否等价于规范。它侧重 于方法交互,但没有区分继承和多态。 s b a i b e y 【”1 提出了基于形式规范c o o p n 2 的面向对象软件测试。该方法 是e s p r i t 项目中d c v a ( d e s i g nf o rv a l i d a t i o n ) 的一部分,目的是对由 l a a s c n r s 开发的统计测试和由e i ,f l 的软件工程实验室开发的功能测 试进行比较。他以测试上下文的细化为基础,采用a d t 测试理论研究了 类层测试用例的生成和选择,分析了多态和子类型所引起的问题。 香港大学的徐志农1 研究了基于两层( t w o - t i e r e d ) l a r c h 的面向对象单元 测试。他以a d t 测试理论为基础,用两层l a r c h 语言描述类的功能特性 和面向对象特性,定义了描述对象状态行为的罚试模型,对该模型的非确 定性等进行研究,通过精化方式研究了类层的穷尽测试和故障测试。它是 对g b e r n o t 理论的推广具有完善的理论基础但是缺乏有效的工具支 持,实用性还有待进一步证明。 澳大利亚q u e e n s l a n d 大学的软件验证中心( s p r c ) 根据基于模型的勰范 语言o b j e c t - z 所描述的软件趣范,对已有的测试模板( t e s tt e m p l a t e ) 和 测试框架( t e s tp a m e ) 1 2 f 叫进行扩充,提出适合于面i 句对象的测试方法 其难点是:对需求空间进行状态划分时,可能导致状态空间的组合爆炸。 基于内部行为的测试用饼生成是以状态机测试理论为基础,蜘重于对象的内 部行为。这种方法一般用状态机描述对象方法表示状态间的转移,状态代表对 象属性值。根据开发过程状态分为实现状态( i m p l e m e n t a t i o ns t a t e ) 和设计状态 ( d e s i g ns t a t e ) 两种方式1 1 6 l 。实现状态对对象结构的依赖性根强,状态的任何改变 ( 即使这种改变对对象的接口没有影响) 都将导致测试用例的修改。而设计状态 蒸i i i 蔫 田防科学技术大学研究生院学位论文 是对类的抽象描述,不存在上述缺陷。 d u r h a m 大学的c d t u r n e r 和d j r o b s o n 提出的状态机测试方法 2 e 3 是以 有限状态机理论为基础,根据被测实现获取对象状态机。他们引入特定子 状态值( s p e c i a cs u b s t a t ev a l u e ) 和通用子状态值( g e n e r a ls u b s t a t ev a l u e ) , 使得对象的状态由一组子状态组成。并通过划分等价集( 通用子状态) 减 少状态数目,以减少铡试集。所选的测试用倒可以使每个状态被访问一次, 每条消息被激活一次,以验证所有的属性和对应的消息。与传统测试技术 相比状态机测试依赖于状态概念,特别适台于面向对象。由于没有提供 一定的算法指导子状态的合成将很难计算实现状态。 j o h nc m c g r e g o r i 娜o p l d 2 1 1 3 3 1 f j 4 1 j 5 1 根据被测类的分析模型或设计模型获取对 象行为模型,依据w 方法,提出了“n - w a ys w 打c h ”准则和测试选择算法。 他采用更加抽象的方式描述状态,纠正了c d t u r n e r 方法的许多缺点。其 缺点是:如果约束不够具体,则很难检测到故障。r v b i n d e r 根据状态机 测试原理提出的f r e e e 3 6 方法,也是以w 方法为基础,根据对象状态机 和系统状态机生成相应的测试用例口7 i p 8 | 3 9 1 。若对象很复杂,且状态空间划 分过细,容易导致状态空间爆炸。 d k u a g 采用了类似于s t a 血e c h a r t s 的a n d 状态机制1 4 0 4 1 l 来解决对象之间的 并发问题。他们采用逆向工程方法从系统源代码获取对象状态图o s d , 它包括简单对象的状态图a o s d 和复杂对象的状态图c o s d 。a o s d 是一 种平坦状态机,采用、玑方法构造测试用例。c o s d 是由多个a o s d 构成 的并发通讯状态机,采用状态复制方式构造测试树,生成所需测试用倒, 以保证不同对象之间交互测试的实现。虽然o s d 模型能够描述并发机制, 但是由于其状态和迁移的概念依赖于实现语言,缺乏通用性。 h o n gh s 4 2 1 根据类的规范定义了类状态机( c s m ) ,在将类的c s m 转换 为类流图( c f o ) 之后,根据数据流测试覆盖标准生成测试用倒。这种方法 没有考虑继承和聚集等相关概念,只能称为基于对象的方法,不能广泛应 用于面向对象软件。 b yt s a i l 4 1 1 4 4 1 根据类的c + + 代码获取相应的s t a 懈抽r t s ,用状态机测试方法 执行功能测试,以遍历所有的状态迁移:同时使用数据流覆盖准则来测试 类的数据成员,保证它们满足数据流覆盖。由于采用数据流测试技术和状 态机测试技术,这种方法可以发现类的成员函数和数据成员内的错误,但 不能发现额外状态等。 由此可知,基于内部行为的测试能够充分地测试类内的交互。基于规范的测 试提供一种更加简单、曼加形式化的方法指导功能测试用例的设计,也利于测试 用例的自动生成和测试自动化。基于规范的测试和状态机测试技术更适合于面向 - - _ _ _ - - _ _ 崎癌曼墨圜矗墨墨盘皇宣- _ _ _ _ - - - - - - _ - _ 嘲_ 纂鼍囊酾_ - _ _ - _ - ,一一 蔫囊蒸 国防科学技术大学研究生院学位论文 对象的类层测试。 1 2 4 测试过程 高质量的测试过程可以提高软件测试效率。j o h nc m c g r e g o r t ”l p 8 所提出的测 试过程模型迭代增量式开发模型是测试过程的一种简单描述。p o s t o n 提出了基于 o m t 方法的测试过程模型 ,该模型认为可以从开发过程内获取测试所需的信息。 b yt s a i l ” 提出交互式测试设计的t s p 模型( t e s td e s i g ns t a g e sp r o c e s s e dm o d e l1 强调测试设计贯穿于开发过程的每个阶段一旦该阶段的开发结束,相应的测试 也必须完成。实际上,开发过程存在许多可以被测试所用的信息,若开发过程有 序、规范严格,则测试过程与开发过程可以充分地相互支持。因此有必要研究 u m l 对测试过程的支持。 t 2 5 测试工具的开发 测试自动化可以大大减少测试开销,而测试工具是铡试自动化的重要保证。 目前已经研制和开发出一些面向对象的测试工具。b r o o k l y n 工业大学研制出基 于列象类代数规范生成类铡试用例集的原型系统a s t o o t 州。t e x a s 大学和富士通 网络传输系统公司联合开发了集成化测试和维护环境o o t m t ( n 。该系统支持类测 试、数据流测试和回归铡试1 4 1 4 9 j s o s 1 】罔。s i l v e r m a r k 公司针对m m 公司的v i s u a l a g e 开发了支持测试用例生成和回归测试的t e s t m e t o r 和o m ld e s i g n e rc o n n e c t i o n 3 1 北京大学在青鸟上开发的面向对象原型系统j b o o t e t 7 。 总之,面向对象软件测试技术是在传统软件测试技术基础上发展起来的,面向 对象铡试可咀通过改进和优化传统的测试技术以增强其能力。目前,面向对象测 试尤其注重实用测试技术的研究和测试工具的研制。 随着面向对象技术的广泛使用,面向对象建模语言也取得很大进展建模语 言是指在软件开发过程中,用来描述和刻画目标软件系统的一种描述性语言。它 包括建模元素的表示法( 建模符号) 和建模元素的语义建模语言首先出现于7 0 年代中期,到9 0 年代中期,先后出现了五十多种语言和方法,最引人注目的是 b o o c h l 9 9 3 、o o s e ,o m t 2 及1 9 9 7 年推出的u m l p 。 u m l 是被o m g 接纳的标准建模语言。它在统一b o o c h 、o m t 、o o s e 等 方法的基本概念和表示符号的基础上瑚,溶入了软件工程领域的新思想、新方茫和 第净赏 国防科学技术大学研究生院学位论文 新技术,是一种通用、易于表达、描述能力强太的可视化建模语言,具有很宽的 应用领域可以对任何具有静态结构和动态行为的系统建模,如:信息系统、机 械系统、企业结构等。它消除了数十种面向对象建模语言之间的差异。它对软件 开发过程中各个阶段之间的相互交互、统一开发人员对系统的认识,具有天然的 优势。它的出现是软件工程领域最重要的成果之一,为建立统一的面向对象开发 方法学走出了坚实的步伐。在世界范围内,至少在近1 0 年内,1 j m t ,将是面向对 象技术领域内占主导地位的建模语言嗍。 u m l 提供了各种图元从不同角度和应用层次刻画系统的特性和复杂的运行环 境,为软件开发人员提供了从系统需求分析、设计到实现的有力支持:用例图、 交互图描述系统需求模型:类图和包图描述系统的静态结构;交互图和行为图描 述系统的行为;实现图描述系统的实现。 与o b j e 圯t - z 、v d m t 圳相比,u m l 更加直观易懂,容易被用户所理解。正是由 子u m l 自身的优势,使它成为目前最受重视的建模语言。并获得了计算机界的广 泛关注,纷纷开展基于u m l 的建模聊i i “l 、模型转换唧、模拟i 、验证【驯和测试【曲j 等的研究。 由于u m l 提供了形式化基础,在u m l 建模过程中,用户可以根据u m l 所 描述的系统规范进行功能测试,开发过程所产生的不同抽象层次的规范模型可直 接作为测试依据,不同的测试小组可根据不同的图元进行相应的测试设计。即可 以根据用例图定义相应的功能铡试集,根据顺序图生成对象间的交互测试集;根 据状态图定义适合对象的测试集。因此,用u m l 进行面向对象建模时,可以进行 相应魄测试研究,构造所需的测试工具。 1 4 存在的问题 虽然u m l 获得广泛支持,面向对象软件测试也取得一些进展,但还存在下列 问题: 1 u m l 建模的过程 u m i , 定义了面向对象软件开发所需的各种建模机制,却没有提供指导软件开 发的“过程”概念。它独立于开发方法和开发过程。实际使用u m l 时,一般根据 不同需求采用不同的建模元素和方法来开发软件。因此有必要研究用u m l 进行 面向对象软件建模的一般过程,保证需求文档和设计文档易于跟踪,保证不同模 型之间的一致性,也便于构造较通用的测试工具和相应的c a s e 环境。 2 u m l 的精确语义 虽然u m l 已经成为o m g 的标准,但是o m g 却没有定义相应的精确语义。 u m l l 1 语义文档采用图和对象描述语言( o b j e c tc o n x t m i ml a n g u a g e ) o c l 描 - _ _ - - _ _ _ _ _ - - - - - _ _ _ _ _ i l l i pi ii j - - - - _ - - _ _ - _ _ _ _ - - - _ _ _ - _ _ - - _ _ _ o _ - - - _ _ _ - _ _ _ - _ _ - - - - 纂禳熏 固肪科学技术大学研究生院学位论文 述基本语义,自然语言描述动态语义,是一种半形式化的规范语言 6 1 1 嗍嘲。它 无法精确地描述面向对象的建模概念和软件模型,在实际应用中容易导致如下 问题: 【1 】无法保证模型和最终产品之间的一致性。可视化建模元素为用户提供 了直观的表达方式,然而,由于缺乏精确语义,使得不同人员存在不同 解释。 2 】开发者需要浪费大量时间来解决项目组内对u m l 存在的争论。 【3 】很难进行严格的语义分析。实际进行需求分析和设计审查时所采用的 非形式化验证和确认技术不能严格她建立模型和实现之问的一致性,也 无法保证系统的不同视角模型之间的致性。如果存在精确语义,严格 的语义分析不仅能够增加模型的可信度,而且可以尽早检测到建模错 误。 【4 】由于缺乏精确语义,多数u m l 工具侧重于建模,很难支持其它功能。 只有定义u m l 建模符号的严格语义之后,才能支持软件模型的分析、验证、求精、 推理等。 3 测试充分性 测试充分性一直是软件测试的重要课题。目前,通常采用结构测试准则,即 基于控制流和数据流的测试准则f 酬嗍,来衡量对控制依赖和数据依赖的充分程度。 但是这些准则主要建立在单元层,不能完全适合于面向对象软件,如语旬覆盖无 法检测到类间交互故障。面向对象软件测试至今尚无相应的可被普遍接受的测试 覆盖标准。在实际工作中,多数还是根据直观经验生成所谓的“高质量”的测 试用例集。 4 测试方法与开发过程的集成 已有的各种软件开发模型,如瀑布模型、快速原型、螺旋模型等。主要侧重 于软件开发过程和开发方法的研究和改进,使人往往将软件测试视为紧随代码实 现之后、揭示软件错误、保证和提高软件质量的重要阶段。其实,软件测试应该 横贯于整个软件开发的各个阶段。通常的软件并发所规定的测试阶段只是软件测 试的具体实施阶段。人们已经提出多种将软件开发方法和澍试方法耜结合的方案。 但是由于软件开发过程包含许多可交因素,使得可测试资源酌维护变得很困难, 而且现有的用,u m l 建模的面向对象开发方法主要考虑如何进行建模,很少考虑如 何充分使用开发过程各个阶段的信息,尽早生成测试用捌。 5 测试数据生成和自动测试工具 测试数据生成是指识别满足测试准则的输入数据过程1 6 1 ”1 。通常根据一些特 定的模型,如:数据流模型、控制流模型、u 辩c 黜模型、状态机模型或交互模型 鬻q l 。赘4 嗣肪科学技术大学研究生院学位论文 等,构造测试用例1 6 5 1 。但根据这些模型生成的测试用例可能不完备。对形式化规 范,通常先根据约束条件进行状态空间划分,选用一些方法( 如遗传算法) 来构 造测试用例嗍删【7 1 l 嗣。现有的类层测试 引列生成方法很少考虑类状态机本身的结 构特性,容易导致状态空间的爆炸。 目前,测试数据的选择具有很大的随意性,使得测试人员很难检测到不熟悉 的错误软件质量存在不稳定性。因此,有! 兽要开发测试工具,尤其是支持测试 用例自动生成的工具删,以提高测试效率。测试过程自动化的关键是测试数据的 自动生成。测试数据自动生成将改变以往靠直觉、经验产生测试数据的做法,同 时减轻人们手工编写测试数据的劳动,提高测试效率。 1 5 本文的主要工作与1 + i 标 基于规范的测试不仅支持测试自动化,还能使测试设计和开发过程并行,而 基于程序的测试必须等到实际代码实现之后才能进行测试。因此,基于规范的测 试比基于程序的测试更加有效。 针对前面提出的问题,本文将实现以下目标:在用u m l 进行面向对象软件建 模过程中,直接根据u v i l t t a t c c h a r t s 所描述的类状态机规范,研究相应的测试方 法,以实现功咀,测试自动化。在课题研究过程中,本文主要做了以下工作: 1 提出用u m t u 开发面向对象软件的递增式模型,支持开发与测试设计并行。 u m l 支持面向对象的分析和设计建模,它提供用例图、交互图、类图和 行为圈等从不同层次和角度刻画系统特性。t _ r t v l 的半形式化语义使得这 些模型可以直接作为系统测试、集成测试和单元测试的测试模型。但u m l 没有定义过程的概念,可以根据实际需要选用任何适合的开发过程和开发 方法。多数已有面向对象开发方法常将测试活动放在实现之后,而实际的 软件测试应该包括从需求分析、设计、实现、测试和维护的各个阶段上 水平测试的集成在总结已有开发方法优点的基础上提出了用u m l 开 发面向对象软件的迭代递增模型该模型允许将测试活动嵌入到每个迭代 的各个阶段,铡试过程和开发过程相互重叠,使测试设计与轵件开发并行。 同时以铁路f - j 题为例,讨论了开发过程的每次迭代所需经历的阶段:首先 确定需求模型,在定义系统结构模型后,才能确定系统的行为模型。同时 根据实际需要和u m l 的设计准则,定义相应的动作语言。该动作语言具 有赋值等工作,能够描述一般的行为动作 2 定义描述对象状态行为的u m l 嘲盘c l 妇i n s 的形式化操作语义。u m l s t a t e c l , a z t s 是一种扩展有限状态机,采用层次、并发和广播通讯机制来描 述对象在其生命周期内的状态行为变化过程。它是经典s m m m b a z t s 的面向 对象变体,支持新的优先级和单事件处理方式。u m l 1 语义文档难以精 i 攀籀藉 国防科学技术大学研究生院学位论文 确描述各种建模概念,且多数形式化语义只定义了其子集,很难开展测试 研究。本文根据u m l l 1 语义文档,定义了u m ls t a t e c h a r t s 的状态层次 结构和迁移尤其是j o i n 、f o r k 、b r a n c h 伪状态和复合迁移的形式化语法。 并根据虚拟机原理引入三个事件队列,描述对象在接受单个外部事件时, 从一组活跃状态转换到另一组活跃状态的执行步s t e p 以及由多个s t e p 组成的五犯田e p 。同时还定义了全复合迁移、格局、状况、最大无冲突 迁移集、迁移优先级等概念。u m ls t a t e c h a r t s 语义是一个k r i p k e 结构, 其中,状态是状况,迁移为r 形田聊。上述语义完整地刻画了u m l s t a t e c h a r t s 的特性,为后续测试研究奠定了基础。 3 以状态机测试理论为基础,依据描述对象状态机的u m ls t a t e c h a r t s 的层 次和并发结构定义相应的测试用例生成方法。状态机测试是类层主要测试 方法,它主要是判断需求规范和实现对测试数据是否行为等价。已有方法 很少考虑u m ls t a t e c h a r t s 的结构。为此在研究功m 。s t a t e c h a r t s 的测试用 例生成方法时,视对象状态机的设计规范的o r - 状态和a n d 状态为抽象 的基本状态,在构造主状态机和复合状态所对应的子状态机测试基( 状态 覆盖集、输入集、特征集、识别集) 之后依据w p 方法定义了相应酌测 试用例合成规则。这些规则保留了对象状态机的结构特性,支持测试用例 的递增生成,满足状态覆盖和使能迁移覆盖准则。理论分析和实验表明: 在满足测试设计条件下,规则4 1 和4 3 能达到全故障覆盖而规则4 2 便于快速测试。与已有方法相比,上述规则较全面地考虑了u m ls t a t e c h a r t s 的特性,无需作实际的平坦化,为u m l 测试走向实用提供支持。 4 实现了测试模拟系统u m l t g e n 。根据上述测试用倒生成方法,在r o s e 9 $ 平台和已有的u m l 交互式开发环境框架上实现了测试模拟工具一 u m l t o e n 。它能够根据u m l 提供的类状态机设计规范自动生成类层铡试 用例,通过状态颜色的变化来演示测试过程及时显示测试结果信息。 1 6 论文结构 本文共分为六章。 第一章为绪论。首先介绍了课题研究背景、软件测试的发展历史、测试目的 和测试覆盖准则。然后介绍了国内外一些著名大学和科研机构在面向对象软件 测试领域内的研究现状、相应的技术、标准建模语言u m l 的特点和对测试技术的 支持。最后讨论了目前存在的主要问题,提出了课题的主要内容和实现目标。 第二章介绍了标准建模语言u m l 的语法和语义特点,分析现有软件开发模型 的弱点,提出用u m l 开发面向对象软件的递增式模型,使开发和测试设计并行, 并讨论了用u m l 进行面向对象系统建模的一般过程。 一- _ -二一二二函嘶- 蕊甬甬i i i i 两两甬i _ i i - 甬_ 第话黄 盈防科学技术大学研究生院学位论文 第三章分析了当前u m l l 1 语义存在的问题,较全面地定义了描述对象状态 机的u m ls t a t e c i m l s 的形式化操作语义。在定义语义的过程中,定义了伪状态、 复合迁移、新迁移优先级并引入事件队列以完整地描述对象状态机的单个执 行步s t e p 和由多个s t e p 组成的r t c - s t e p 。 第四章在分析现有面向对象状态机测试技术缺点之后,提出了依据u 池 s t a t e c 1 a = t t t s 的层次和并发结构生成测试用例的方法,讨论了测试集的故障检测能力 以及如阿根据父类构造子类的测试用例。 第五章介绍了d m l 交互式开发环境框架,着重介绍了测试模拟系统原型 u m l t g e n 的系统结构和主要功能。 第走章总结了本课题的主要研究成果以及下一步工作重点。 本文在最后列出了参考文献和一些算法的实现。 j 囊鬃羹 田防科学技术大学研究生院学位论文 第二章基于u m l 的递增式开发模型 随着面向对象技术的广泛应用,各种面向对象开发方法应运而生。它们按照 客观世界来理解目标软件系统,通过对象及对象之间的消息传递等机制直接模拟 目标系统的行为为面向对象的需求分折和设计提供了直观、自然的支持。面向 对象的需求模型和设计模型广泛用于问题理解、与领域专家进行的通讯、软件开 发过程的各类文档。面向对象技术包括如下核心概念: 对象:对象是对现实世界个体或事物的抽象表示,是对相关属性和操作的封 装。属性表示对象的性质,属性值指明了对象的状态,操作指明对象可以展 现的外部服务,操作的执行可改变对象的状态。 类:类是某些对象共同特征( 属性和操作) 的表示,对象是类的实例。 继承( i n h e r i t a n c e ) :表示类之间的内在联系以及对属性和操作的共享,即子 类可以沿用父类的某些特征,也可以具有独立的属性和操作。 消息( m e s s a g e ) :消息传递是对象与其外部世界相互关联的难一途径。对象 可以向其它对象发送消息来请求服务,也可以响应其它对象传来的消息,完 成自身固有的操作,从而为其它对象服务。 为支持面向对象的需求分析和设计建模,人们提出各种可视化建模机制,如 o f r 、b o o c h 标记和u m l 等。现m 是在众多o o a o o d 方法基础上形成的面向 对象建模语言汇集了多种面向对象方法的研究成果。它己成为面向对象建模语 言事实上的工业标准,具有广泛的应用前景。 2 1u l v l l 简介 u m l 推出之后获得了广泛支持许多大公司纷纷加入其阵营,并推出支持u l 咀。 的工具,如r a t i o n a l 公司的r o s e 9 8 脚i l 0 9 i x 公司的础嘲鼬d 严5 l 等与其它规范 语言相e b ,u m l 提供不

温馨提示

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

评论

0/150

提交评论