(计算机应用技术专业论文)类的状态自动测试平台研究.pdf_第1页
(计算机应用技术专业论文)类的状态自动测试平台研究.pdf_第2页
(计算机应用技术专业论文)类的状态自动测试平台研究.pdf_第3页
(计算机应用技术专业论文)类的状态自动测试平台研究.pdf_第4页
(计算机应用技术专业论文)类的状态自动测试平台研究.pdf_第5页
已阅读5页,还剩56页未读 继续免费阅读

(计算机应用技术专业论文)类的状态自动测试平台研究.pdf.pdf 免费下载

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

文档简介

独创性申明 秉承祖国优良道德传统和学校的严谨学风郑素申明:本人所呈交的学 位论文是我个人在导师指导下进行的研究工作及取得的成果。尽我所知, 除特别加以标注和致谢的地方外。论文中不包含其他人的研究成果。与我 一同工作的同志对本文所论述的工作的任何贡献均已在论文中作了明确的 说明并已致谢。 本论文及其相关资料若有不实之处,由本人承担一切相关责任 论文作者签名:勉墨堡护乒年6 月谚日 保护知识产权申明 本人完全了解西安理工大学有关保护知识产权的规定,即:研究生在 校攻读学位期间所取得的所有研究成果的知识产权属西安理工大学所有。 本人保证:发表或使用与本论文相关的成果时署名单位仍然为西安理工人 学无论何时何地,未经学校许可,决不转移或扩散与之相关的任何技术 或成果。学校有权保留本人所提交论文的原件或复印件,允许论文被查阅 或借阅;学校可以公布本论文的全部或部分内容可以采用影印、缩印或 其他手段复制保存本论文。 ( 加密学位论文解密之前后,以上申明同样适用) 论文作者签名:i 基! 茎堡导师签名彬年莎月谚h 摘要 类的状态自动测试平台研究 学科:计算机应用技术 作者:张保卫 导师:张毅坤 职称:教授 答辩日期:2 0 0 4 7 摘要 作者签名: 导师签名: 独堡兰 随着社会信息化的发展,软件规模在不断的增跃。软件工程的思想方法也 在从无到有不断发展,从瀑布模型到螺旋模型,从螺旋模型到喷泉模型以及敏 捷开发、测试驱动开发不断演变。同时,软件编程模型也伴随着面向对象语言 的诞生和应j = ;j 从面向过程向面向对象以及面向方面的编程思想转变。无论编程 语言、编榉模型以及软件 :程方法的变化,软件测试都在软件开发过程中_ 据 重要的地位。 本文讨论了面向对象软件的特点及其对软件测试的影响,同时分析了类状 态测试模型对u m l 分析的类状态机做适当的约束和构造,使其适台测试过 程的自动化。 在此基础上,本文设计和实现了一个基于u m l 的c + + 测试集成开发环境 c p p t e s t l d e 。它以基于u m l 的分析设计规约文档作为0 0 软件测试的重要依据, 通过对u m l 文档的词法语法分析,提取类状态机模型;对类状态机模型分析手 工生成测试用例;并根据生成的测试用例构造驱动模块,生成测试装置。同时, 对源代码插装,以便度量代码覆盖率。在此基础上,编译测试装置和源代码, 生成测试装置执行文件。最后,驱动测试装置执行文件,分析测试结果,生成 测试报告。 关键字:软件测试,u n i l 状态圈,插装器,测试驱动器 本文受陕两省教育厅科研基金资助( 编号:0 0 j k 2 6 5 ) 辫 西安理工大学硕士学位论文 c l a s ss t a t e b a s e da u t o m a t i o nt e s t i n gi d es t u d y s u p e r v is o t sn a m e :z h a n gy i k u n s t u d e n t sn a m e : z h a n gg a o w e i a b s t r a ct s i g n a t u r e s i g n a t u r e w i t ht h ed e v e l o p m e n to fs o c i a li n f o r m a t i o n ,t h es e a l eo fs o f t w a r e i n c r e a s e sc o n t ir l u o u s lyi d e a sa n dr i l e t h o d so fs o f t w a r ee n g i n e e r i n gh a v e b e e nd e v e l o p i n g c o n s t a n t l yf r o mn o t h i n gt ow a t e r f a l lm o d e l ,s p i r a l l o d e l ,f o u n t a i nm o d e l ,a g i l ed e v e l o p m e n t ,t e s t d r i v e nd e v e i o p m e n t a t t h es a m et i m e 。w i t ho b j e c t - o r i e a r e dl a n g u a g en a i s s a n c ea n da p p l i c a t i o b m o d e lso fs o f t w a r ep r o g r a m m i n gt r a n s f o r mi n c r e a s i n g l yf r o mp r o c e s s o r i e f t t e dt o o b j e c t o f i e n t e d a s p e c t o r ie n t e d n om a t t e rh o w t r a n s f o r m a t i o no fp r o g r a m m l n gi a n g u a g e ,p r o g r a m m i n gm o d e la n ds o f t w a r e e n g i n e e r i n gi f l e t h o dv a r y ,s o f t w a r et e s t i n ga l w a y sp l a y s a ni m p o r t a n t r 0 1ei ns o f t w a r ed e v e i o p i n gp r o e e s s t h ep a p e rd is e a s s e sc h a r a c t e r is t i c so f0 0s o f t w a r ea n dic si n f l u e n e e t os o f t w a r et e s t l n gt h e nc l a s ss t a t e - b a s e dt e s t i n gm o d e lisa n a l y z e d , t h a tist os a y ,t h es t a t e m a c h i n eo fc i a s sf r o mu m lisr e s t r i c t e d p r o p e r l ya n dc o n s t r u e t e dt os u i tf o ra u t o m a t e dt e s t i n g o nt h eh a s i so ft h e t h e o r y a b o v e a nu m l b a s e d t e s t i n g t o o l 一一c p p t e s t i d e ( c + + t e s t i n t e g r a t e dd e v e l o p m e n te n v i r o n m e n t ) ls d e s i g n e da n dd e v e l o p e d a c c o r d i n gt ot h es p e c i f i c a t i o nu m l b a s e d o f o o a d ,t h et o o ic a np i c ku pt h es t a t e m a e h in eo fc l a s s ,g e n e r a t et e s t i n g c a s eb yh a n d e r a f t ,c o n s t r u e ta n dg e n e r a t eat e s t i n gd e v i c e a n dt h et o o i c a ni n s e r ts o m ep r o b ef u n e t i o ni n t os o u r c ec o d e sf o rm e a s u r i n gc o d e c o v e r a g e w i t ht h i su n d e r s t a n d i n g ,t h et 0 0 1g e n e r a t e sa ne x e e u t a b l e f i l et h r o u g hc o m p i i i o gt e s t i n gd e v ic ea n ds o u r c ec o d e s f i h a l l y ,t h e e x e c u t a b l ef i l ei se x e c u t e db yt e s t i n gd r i v e r t e s tr e s u l tisa n a l y z e d a n dat e s tr e p o r tis g e n e r a t e d k e yw o r d s :s o f t w a r et e s t i n g ,u m ls t a t e c h a r t ,p r o g r a mi n s t r u m e n t o r ,t e s t i n g d r iver 攀 第一章绪论 第一章绪论 随着社会信息化的发展,软件规模在不断的增长,在这一增长过 程中,软件工程的思想方法也从无到有不断发展,从瀑布模型到螺 旋模型,从螺旋模型到喷泉模型以及敏捷丌发、测试驱动开发。同 时,软件编程模型也伴随着面向对象语言的诞生和应用从面向过程 向面向对象以及面向方面的编程思想在转变。 无论编程语言、编程模型以及软件工程方法的变化,软件测试都 在软件开发过程中占据重要的地位。它是提高软件可靠性( 即在规 定的条件和时间内,软件完成规定功能的能力) 和保证软件质量的 重要途径。 1 1 立题背景 软件测试是根据软件开发各阶段的规格说明或程序的内部结构 而精心设计一批测试用例( 包括输入数据及其预期的输出结果) ,并 利用这些测试用例来运行程序,观察程序的执行结果,验证该结果 是否与预期的致,然后作相应的纠错、调整和评价。简而言之, 软件i f , 0 试就是输入测试数据、处理、验证输出结果这三个步骤,其 目的就是为了发现软件中潜在的软件失效。 软件分析、设计技术可分为传统的面向结构的分析设计和面向对 象的分析设计两种技术。传统的面向结构设计的软件测试技术自 1 9 7 0 年起得到了充分的研究和发展,相对比较成熟;1 9 9 0 年以来, 西安理工大学硕士学位论文 面向对象的分析、设计技术得到了广泛的应用,而面向对象的软件 测试技术虽有所发展,但还相对薄弱,尤其是面向对象程序设计语 言的特征一数据封装、继承、多态,对软件测试增加了困难、产 生了深刻的影响。 无论编程语言、编程模型以及软件工程方法的变化,软件测试都 在软件丌发过程中占据重要的地位。但是,软件测试在实际工作中 耗费了大量的人力物力,占到软件开发总成本的3 0 到5 0 。因 此,提高软件测试的工作效率、减少测试成本是软件项目能够取得 成功的重要一环。而软件测试过程的自动化,自动测试工具的使用 是提高软件测试的工作效率、减少测试成本的必由之路。 同时,面向对象的软件开发技术在目前软件工程中得到广泛应 用。面向对象编程语言与以往各种编程语言的根本不同点在于,它 能够更直接的描述客观世界中存在的事物( 即对象) 以及它们之间 的关系。面向对象的编程语言将客观事物看作具有属性和行为的对 象,通过抽象找出同一类对象的共同属性( 静态特征) 和行为( 动 态特征) ,形成类。通过类的继承与多念可以很方便地实现代码重 用,大大缩短了软件开发周期,并使得软件风格统一。而类作为面 向对象编程思想中的基础部件一一犹如高楼大厦中的一砖一瓦,它 的质量是保证软件项目质量的根本。 另外,面向对象的软件工程也得到充分发展。特别是u m l 在面 向对象的分析( o o a ) 中得到了广泛的应用。 因此,本课题将面向对象软件中类的测试作为主要的研究对象, 实现一个基于u m l 的类状态测试平台。通过这个测试平台,将面向 对象的分析、设计、测试有机结合,实现类的测试自动化,迈出面 向对象软件测试过程自动化的第一步,为后续实现整个过程测试自 第一章绪论 动化打下一个良好的基础。 1 2 面向对象程序的特点对软件测试的影晌 面向对象软件的封装性、继承性、多态性和动态绑定等特性提 高了软件的可重用性,使软件开发更快、质量更高,而且软件易于 维护、易于修改,通过组装可复用子系统而产生更大的系统。但是, 面向对象软件的这些特性对软件测试产生了深刻的影响“ 。 一般认为,面向对象的程序也和其他语言的程序一样,都要进 行系统级测试。m d s m i t h 和d j r o b s o n 从面向对象程序的 结构出发,认为面向对象的程序测试应当分为四个级别o “:方法级, 考察一个方法对数据进行的操作;类级,考察封装在一个类中的方 法和数掘之间的相互作用;类簇级,考察一组协同操作的类之间的 相互作用;系统级,考察由所有类和主程序构成的整个系统。方法 级测试类似于传统的结构化设计中的模块测试,其测试方法可采用 传统的测试方法;类级和类簇级测试相似于传统的集成测试;系统 级测试类似于传统的系统测试。但是,在面向对象的软件设计中类 的方法并不能单独存在,可单独存在的最小模块是类。所以类的测 试成为面向对象程序的基本测试单位,近年来,研究的重点都集中 在类的测试以及测试策略,特别是类的状态测试。这是因为软件开 发的最终目的是能够正确实现系统的功能,其最小粒度为类的动态 行为,即类的状态能够得到正确实现,所以类的状态测试具有特殊 的意义。 3 西安理工大学硕士学位论文 1 2 1 封装和信息隐蔽对测试的影响 封装是类的重要特性之一。它将一个对象的各个部分聚集在一 个逻辑单元内,对对象的访问被限制在一个严格定义的接口上;信 息隐蔽则是只让用户知道那些确保用户正确使用一个对象所必须的 信息,其它信息对用户来说被隐藏起来。为使用一个对象,用户必 须向对象发送消息。封装和信息隐蔽将类的具体实现与它的接口相 分离,减低了一个类和程序其它各部分之间的依赖,促进了程序的 模块化,并在一定程度上简化了类的使用,避免了不合理的操作并 能有效地阻止错误的扩散。但同时,它们也给程序的测试带来了一 定的问题。 封装和信息隐蔽为面向对象测试带来的主要问题是对象状态的 观察问题。由于信息隐蔽机制的存在,类的内部对外界来说是“不 可见的”,它的属性和状态只能通过类自身的方法或函数来获得。 这就给测试用例( 尤其是预期结果) 的生成带来了一定的困难。为 了能够观察到这些属性和状态,以确定程序执行的结果是否正确, 测试时往往要在类的定义中增添一些专门的函数,该函数用于读取 ( 而不是修改) 对象的状态信息,以便在测试时考察对象的状态变 化。 1 2 2 继承对测试的影响 继承作为面向对象程序的特征之一,主要通过三种机制来实现: 扩展是子类自动包含父类的特征;覆盖是子类中的方法与父类中的 方法有相同的名字和消息参数,接口相同,但方法的实现通常不同; 特例化是子类中特有的方法和实例变量。继承又可分为单继承和多 第一章绪论 继承等。继承有利于代码的复用,但对于测试者来说,带来一些问 题,未重定义的继承特征是否还需要进行测试呢? 重定义的特征需 要重新测试是显然的,但应该如何测试重定义的特征昵? e j w e y u k e r 曾经提出了1 1 条基于程序的测试数据集的充分性公理2 1 , d e p e r r y 与ge k a i s e r 根据w e y u k e r 公理对这些问题进行了讨论 2 1 ,w e y u k e r 的非外延性公理认为若有两个功能相同而实现不同的程 序,对其中一个是充分的测试数据集未必对另一个是充分的。这一 公理表明若我们在子类中重定义了某一继承的方法,即使两个函数 完成相同的功能,对被继承方法是充分的测试数据集未必对重定义 的方法是充分的。w e y u k e r 的不可分解性公理认为一个程序进行过充 分的测试,并不表示其中的成分都得到了充分的测试。因此,若一 个类得到了充分的测试,当其被子类继承后,继承的方法在子类的 环境中的行为特征需要重新测试。 同时,继承使源代码变得难于理解,一个深层次的最底层的予 类可能只有一两行代码,但却继承了上百种特征;多重继承会显著 地增加派生类的复杂程度,导致一些难以发现的隐含错误。这些都 在一定程度增加了测试的难度。 1 2 3 多态性和动态绑定对测试的影响 多态性和动态绑定是面向对象方法的关键特性之一。多态的概 念是指同消息可以根据发送消息对象的不同而采用多种不同的行 为方式;而多态行为操作指的是根据当前指针引用的对象类型来决 定使用正确的方法。动态绑定则决定了一个消息只有在编译或运行 时才能够确定它的具体行为。 例如有一个程序中存在三个类:类a 、类b 和类c ,类b 继承 5 西安理工大学硕士学位论文 类a ,类c 又继承了类b c l a s sa v o i d d 0 0 ; j : c l a s s b :p u b l i c af v o i dd o0 ; : c l a s s c :p u b l i cbf v o i d d 0 0 ; ; 成员函数d o ( ) 分别存在于这三个类中,但在每个类中的具体实现 不同。使用类a 的任何函数只要声明基类,但可在该层次中任何类 的对象上操作:例如在程序中存在一个函数f o o ( ) ,其相关实现如 下: f o o ( a + s t ) | | s t 一 d o ( ) ; j 、 该函数在形参中创建了一个类a 的实例s t ,并在函数中调用了 方法d o ( ) ,在执行过程中,程序会根据传递过来的实参决定究竟执行 哪一个类中的d o ( ) 。即相当于执行下列多路分支语句( 假设t y p e 代 表类的类型,取值为a 、b 、c ) : v o i d f o o ( a * s t ) f s w i t c h ( t y p e ) c a s e a : 第一章绪论 s t a c a s eb : s t b : c a s e 乙: s t ,c : , d o ( ) ;b r e a k : d o ( ) ;b r e a k : d o ( ) ;b r e a k ;) 这样,多态性和动态绑定为程序的执行带来了不确定性,并且 增加了可能的执行路径,加大了测试用例选取的难度和数量。 1 3 面向对象程序的软件测试 1 3 1 面向对象的软件测试技术 面向对象软件测试根据使用的信息源不同,类似面向结构设计 软件也可分为基于规约的测试和基于程序的测试,但也不是完全绝 对,更多根据实际两者相互结合。 基于规约的测试“5 1 “以需求和功能规约为基础的测试通过分 析软件的需求和功能规约来选择和产生测试数据。基于规约的类测 试技术主要有三种模式:代数规约,基于模型,有限自动机。其中 有一定影响的工作是d o o n g 和f r a n k l 提出的方法a s t o o t 。“1 ( as e t o ft o o l sf o ro b j e c t o r i e n t e dt e s t i n g ) 。该方法根据类是抽象 数据类型的实现这一原理,设计了种和面向对象语言语法相似的 代数规约语言l o b a s 。l o b a s 语言书写的规约中,运算符分为三类: 构造符、转换符和观察符。若类c 用以实现抽象数据类型t ,则t 中的每一个函数和c 中的一个方法相对应,向函数输入一个t 类型 7 西安理工大学硕士学位论文 的值对应于向类c 的对象发送一个消息,被发送消息的对象称为目 标对象,而被返回的对象称为返回对象。对过程来说,目标对象和 返回对象是同一对象( 但目标对象的部分状态可能被改变) 。对函 数来况,除了显式的返回对象外,目标对象实际上也是返回对象。 基于程序的测试”以程序为基础的测试通过对程序的分析来 产生或选择测试数据。基于程序的面向对象的程序测试大多是在传 统的基于程序测试技术的基础上, 之适应面向对象程序测试的要求。 术。 结合类的实现特点加以改进,使 其中最主要的测试技术是o m t 技 使用o m t ( o b j e c tm o d e l i n gt e c h n i q u e ) 技术,应描述三种模型, 即对象模型、功能模型和动态模型。对象模型给出数据、数据之间 的关系:功能模型定义动作和对于动作的限制条件;动态模型刻画 事件、:状态、状态转换及转换条件等等。为了使这些模型是可测试 的,就要对模型进行扩充和限制,如在对象模型中应给出数据的取 值范围、何种输入数据为不合法等信息。在动态模型中应刻画一个 对象的每一种状态和状态的转换即动作、动作执行所需的条件等等。 在功能模型中应给出对象模型和动态模型中所涉及的所有操作和限 制条件的定义等等。测试工具从一个易于测试的对象模型中抽取数 据的边界条件等定义,从功能模型中抽取操作的输入和前置、后置 条件,在动态模型中发现各种逻辑表达式的定义,测试数据生成工 具是根据一组测试策略,如功能测试、边界值分析、等价类分析、 事件指导的测试等等,自动生成测试数据。测试执行工具运行测试 数据,将结果与预期值进行比较,并生成测试报告。 第一章绪论 1 3 2 基于u m l 的类状态测试 基于u m l 的类状态测试实际是基于规约测试中u m l 和状态机测 试的结合。 u m 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 是被o m g 所 接纳的标准建模语言,己经被许多著名厂商和学术机构所接纳,并 得到广泛应用。采用u m l 和对应的辅助建模工具r o s e 建立系统的需 求分析和设计信息,即采用u m l 的多种图元t ( d i a g r a m ) 从不同视 角刻画面向对象软件的静态结构和动态特性。然后根据对象状态图 的u m ls t a t e c h a r t s 的层次结构和并发特征,递增地构造测试用例, 判断被测类实现的行为是否与设计等价。同时,随着设计的逐步精 化,可以根据现有的测试用例构造新的测试用例。 在u m l 中,类图描述了组成面向对象程序的各个类之间的关系, 包括联系、聚集、子类型和递归包含等。采用类图可以检查类之间 的这些关系是否得到了正确的实现,确定类的测试顺序,提取前置 后置条件。顺序图用来描述对象之间动态的交互关系,着重体现对 象间消息传递的时间顺序,因此它可以作为类簇测试的依据。顺序 图可以转换为流程图,这种流程图表示了对象间消息传递的顺序, 与程序流程图在形式上极为类似,也包括了顺序、分支和循环等, 是一种高度的可测试模型。顺序图测试方法与程序控制流图的测试 方法类似。用例模型描述的是外部执行者( a c t o r ) 所理解的系统功 能,它可以为整个的软件系统建模,因此用例模型的图形化表示一 9 西安理工大学硕士学位论文 用例图可被用在系统测试中。用例图中的每一个用例都可以转换为 一个状态转换图,然后参照状态测试的方法进行测试。 状态图描述了一个对象在其生命周期中所有可能的状态,以及 由于事件的发生而引起的状态f 刮的转移。而基于状态的测试在文献 1 0 ,1 1 ,1 2 ,1 3 ,1 4 ,1 5 ,1 6 中做了讨论。基于状态的测试是以状态机 模型或某些模型化规约( 如o b j e c t z ) 为基础的测试。测试时按照 一定的覆盖准则对状态转换图进行遍历,以产生消息序列,并依据 状态图检查每一消息序列是否使被测对象达到了规定的状态。基于 状态的测试充分考虑了对象的消息序列和状态,且按照一定的覆盖 标准产生测试用例,是一种较为有效的面向对象的类级和簇级测试 方法,也是目前研究和使用得较多的。状态图可作为前面提到的基 于状态测试的依据。 1 4 本文的目标和主要工作 软件测试在软件开发过程中占到了开发成本的3 0 5 0 ,尤其是 测试过程耗费大量的时间和人力成本。软件测试过程自动化可以将 软件测试人员从繁重的工作中解脱出来,节约软件开发的成本和时 削,具有重要的社会价值和经济价值。 所以,本课题针对面向对象软件设计的特点,研究软件测试自动 化过程中的方法、策略及实现,做一些有益的探索和尝试。课题的 主要目标是在课题组前人对面向对象的软件测试理论、方法研究总 结的基础上。“3 “= “,设计开发一套相对通用的基于u m l 的类状态测试 工具,其覆盖标准为语句覆盖和状态转换覆盖。 根据上述研究背景和课题目标,本文需要完成一下工作: ( 1 ) 确定类测试模型 第一章绪论 针对课题目标基于u m l 的类状态测试工具,首要任务是确 定一个适合类状态测试的测试模型。该模型应结合类的行为特征和 u m l 状态图特点,使之能够基于u m l 分析规约中,从状态图中确定测 试需求和目标。 ( 2 ) 确定系统体系结构 在确定了测试模型的基础上,作为一个自动测试工具,应分析 设计工具的系统结构。确定系统的输入输出,输入输出经过那些功 能模块转换,使之能够从u m l 状态图中获取测试模型,对代码插装, 执行测试装置,最后获得语句覆盖和状态转换覆盖的度量。 ( 3 ) u m l 分析器设计 设计u m l 分析器的目的是为了从u m l 状态图中获取测试模型, 结合测试用例生成装置生成测试序列。分析器应能够读入 r a t i o n a l r o s e 分析设计的结果文档 m d l ,从中自动提取类的状态及 模型。 ( 4 ) c + + 代码插装装置设计 c + + 代码插装器的主要任务是在源代码中植入探针函数。它应能 够读入源代码文件,进行词法语法分析,在语句分支处插装,自动 完成插装过程。 ( 5 ) 构造测试驱动器装置设计 该装置的主要任务是从测试用例文档中构造测试驱动器。通过 对测试用例文档的扫描分析,根据消息序列产生测试驱动源代码( 其 中应有状态监测代码) ,自动构造测试驱动器。 第二章类状态测试模型 第二章类状态测试模型 正如上一章所分析,首先要确定一个测试模型。所有的测试实 现都是基于定的测试方法或模型。针对课题目标基于u m l 的 类状态测试工具,本章内容讨论了以状态机模型为基础,在o o a d 过程中对类的行为建模时,对u m l 状态图做适当的约束,对模型进 行确定性、一致性检查,构造一个基于f r e e 的、具有完备性的类状 态可测试模型。 2 1 类状态可测试模型一一f r e e 模型 在文献 2 1 中r v b i n d e r 提出一个基于状态的测试模型f r e e ( f l a t t e n e dr e g u l a re x p r e s s i o n ) 模型。f r e e 模型要求状态机是展平 的,一个状态机可转换为一个正则表达式。测试序列从基于状态模型 生成状态转移树中产生,能够揭示四种错误:丢失的转换;不正确的 转换;不正确的输出;不正确的状态。作为o o a d t 过程的统一,在软 件开发过程中对类的行为建模时,对u m ls t a t e c h a r t 语义做以下约束 : ( 1 ) u m ls t a t e c h a r t 模型采用m e a l y 机模型; ( 2 ) 状态由个状态不变量表达; ( 3 ) 一个必需的初始状态o 状态; ( 4 ) 一个可有的终止状态u 状态。 在上述约束基础上,基于f r e e 的类u m ls t a t e c h a r t 可由一个扩展 西安理工大学硕士学位论文 自动机e f s m ( e x t e n d e df i n ir e - s t a t em a c h i n e ) 表示,是一个七元组 0 s ? e ? e g a ? t ? 、,真寺: s 是合法的状态集合,是类状态空间划分的子集; c 1 是初始状态,qgs f 是事件集合,构造函数和析构函数是两个特殊的事件: 占是监视条件集合,包含e ( 空监视条件) 即覆盖全部监视条 件域: 是输出动作集合,包含e ( 空输出动作) ; ,是合法的状态转换t ( s 。e ,g ,a ,s 。) 集合( 其中s edu s e e 臣g a a ,s ,s u ( ) ) ,是转移函数,:( qu 5 ) f 乎一爿( 占uu ) 的子集: 是终态,( | ) 诺s o 而在文献 1 7 ,1 8 中,以扩展层次自动机e h a ( e x t e n d e d h i e r a r c h i c a la u t o m a t o n ) 作为中间模型,把状态图转换为模型检验工 具s p i n ( s i m p l ep r o m e l ai n t e r p r e t e r ) 的输入语言p r o m e l a ( p r o c e s s m e t al a n g u a g e ) 来进行验证。文献 1 9 以时态逻辑c t l ( c o m p u t a t i o n t r e el o g i c ) 为基础,将u m l $ t a t e c h a r t s 输入s m v ( s y m b o l i cm o d e l v e r i f i e r ) 中,进行模型检验,产生测试数据。文献 2 0 在文献 1 7 ,1 8 基础上对扩展层次自动机的定义进行了一些扩充,用基于自动机理论 的模型检验方法验证u m ls t a t e c h a r t s 的线性时态逻辑l t l ( l i n e a r t e m p o r a ll o g i c ) 性质。上述方法使用的工具最初并不是针对软件测试 设计,所以虽然上述方法能够检验、验证许多复杂状态系统,但是对 于软件测试而言,上述方法不够直接,特别是在模型确定性、一致性、 完备性检查上。 另外,u m l 是一种不完全形式化的建模语言,对于分析与设计人员 1 3 第二章类状态测试模型 而言具有较好的理解性,得到广泛的使用。但是,在通常情况下,u m l s t a t e c h a r t 并不能直接作为类的测试模型,这是因为:模型可能存在 二义性;模型可能存在冗余;模型可能是不完备规约。 所以,在状态测试过程中,首先测试人员应进行规约u m l s t a t e c h a r t 的确定性、一致性检查;其次在模型是确定的、一致的基 础上,构造具有完备性的测试模型;然后是进行后续的测试数据分析 设计,测试驱动设计。因此,u m ls t a t e c h a r t 的分析检查,是整个测 试过程的基础,具有重要的意义。 2 2 测试模型检查与构造 一个基于f r e e 的状态测试模型,根据自动机理论,结合面向对 象软件测试的特点应对模型进行确定性、一致性检查。所谓确定性 即模型中不存在二义性;一致性即模型中不存在等价状态、不可达 状态和不可终结状态。如果模型存在二义性,则编程实现具有非确 定性,说明分析设计存在错误。如果模型不一致,则说明模型具有 冗余及现实不存在状态,说明分析设计存在错误。如果模型存在不 确定性或不一致,则反馈给分析设计人员,进一步完善模型;否则, 可以进一步构造具备完备性的测试模型,以便进行测试序列、测试 数据生成,及构造测试驱动程序。 2 2 1 确定性检查 状态模型确定性:任意的s ,s ,e 丘g 岔有f t ( s 。,e ,g ) l = l 。 即从状态s ,出发的所有转换t ,不存在两个t 。,t ,其t ,e = t e 且 t 。g n t 。g 中。 西安理工大学硕士学位论文 在状态转换集t 中,如果存在以状态s 为接受状态的状态转换 t 。,t j ,其二者事件相同,监视条件域有交叉,则t ,t ,产生非确定性。 在u m ls t a t e c h a r t 中,对于前述事件相同的t ,t 。,如果t g 为空, 则认为t 。g = 一t ,g ,即t 的监视条件是t 。的监视条件的补集。其确 定性检查的步骤为: ( 1 ) 在状态集0us 中任取状态s : ( 2 ) 遍历以s 为接受状态的状态转换集丁,如果t e = t ea n d t g n t g 巾,则t 。和t 。产生二义性; ( 3 ) 在状态集qus 中删除s ,如果us ( p ,重复( l ) 至( 3 ) 。 如图2 - 1 ,在状态a ,当5 n 7 时,发生e 1 事件,则状态转换 不确定,既可以到状态a ,也可至状态b 。 e j n 5 bf 2 2 2 一致性检查 图2 一l 存在缺陷的状态图 g h 状态模型一致性:任意的s ,s j s ,所有以s 、,s 。为接受状态的t , 都不存在完全俩俩对应的t ( s 。,e ,g ) = t ( s ,e ,g ) ;任意的s s , 有t ( u ,e + + e ,g g 。) = ( a ,s ,) ;任意的s e s ,有r ( s ,e e , g l g ,) 2c o ,e 。e j 是事件序列,g io g ,是监视条件序列,t 表示转换序 列t - tz t 。即状态图中不存在等价状态,不存在不可达状态,不存在 不可终结:帙杰。 15 第二章类状态测试模型 一致性检查包括不存在等价状态,不可达状态,不可终结状态 的检查。 a 等价状态检查步骤: ( 1 ) 在状态集s 中任取状态s 。,令s = s 一 s t : ( 2 ) 遍历状态集s ,如果it 。l = lt i ,则做( 3 ) ,否则至( 4 ) ; ( 3 ) 遍历r 和r 。,如果t 。e = t ,ea n dt ,9 2 t 。ga n dt i a 2 t j a a n d ( t s f t 。s to r ( t s 1 :s 。a n dt ,s t = s ) ) ,则s ,和s j 等 价,在状态集s 中删除s j ; ( 4 ) 如果s 巾,重复( 1 ) 至( 3 ) 。 如图2 2 ,在状态b 、c ,事件、监视条件、动作相同,结果状 态相同或是自身,则状态b 、c 等价,合并b 、c ,即状态不变量谓词 相并。 e 1 i9 1 a l 图2 2 具有等价状态的状态图 b 不可达状态检查步骤: ( 1 ) 令s o = a ) ,s l = o ,s 2 = 中; ( 2 ) 对每一状态s 。s o ,做( 3 ) 至( 5 ) ; ( 3 ) 遍历以s ,为接受状态的状态转换集t 7 ,s 1 2 s 1 u t s t 7 f = t - t ,s 2 = s 1 : ( 4 ) s 0 = s 0 + s 卜 s , ,s 1 = 中: ( 5 ) 如果t v so ,重复( 2 ) 至( 4 ) ,否则至( 6 ) ; 。 一 一, 一 8 2 一g h 一 2 一 厶 一 “ 眦 一= 二一 一 西安理工大学硕士学位论文 ( 6 ) 如果s - $ 2 中,则s s 2 中的s 为不可达。 c 不可终结状态检查步骤: ( 1 ) 令s o = ) ,s l = 中,s 2 = 中: ( 2 ) 对每一状态s 。卯,做( 3 ) 至( 5 ) : ( 3 ) 遍历以s 。为接受状态的状态转换集r ,s 1 = s lu t s 。 , t = t 一 t ) ,s 2 = s 1 : ( 4 ) s o = s o + s l 一 s , ,s 1 = 中; ( 5 ) 如果t 中,重复( 2 ) 至( 4 ) ,否则至( 6 ) ; ( 6 ) 如果s s 2 中,则s - s 2 中的s 。为不可终结状态。 如图2 1 所示,状态c ,d ,e 是不可达的状态:状态f ,g ,h 是不可终结 的状态。如果状态图中不存在不可达状态和不可终结状态,则不存在 状态转换死环如图2 - 1 中环c d e 和f g h 。 2 2 3 完备性检查与构造 状态模型完备性:任意的s 。e eg e 占,有r ( s 。,e ,g ) 爿5 。 即使在一个简单的类状态图中,状态事件对的组合也是一个很 大的集合,在实际测试中要做到完全测试是不现实的。所以在u m l s t a t e c h a r t 中,对于t 相对于映射( ud 占口一爿x ( 占u 【i ) ) 的补 集为t ”: 如果在以s 为接受状态的状态转换集r = t ,t 矿,t 中存在t ( s ,e ,g ) ,且t 。g ut 。g u t 。g :c o n d ( g ) ( 监视条件域) , 则构造t ( s ,e ,一( t ,g ut :g ut n g ) ,e x c e p t i o n ,s 。) ;如果在 丁中不存在t ( s 、,e ,) ,则构造t ( s 。,e ,e x c e p t i o n ,s 、) , e x c e p t i o n 是例外输出。在实际测试中依据不同的测试策略,在t ” 选取适当的t 同t 中的全部t 组成相对完整的测试包,在节约测试 1 7 第二章类状态测试模型 成本的基础上发现更多的错误。下面是完备性检查与构造的步骤: ( 1 ) 在状态集s 中任取状态s ,。如果e 中含有析构函数( 意即指 明u 状态) 在e 中去除构造函数和析构函数;否则去除构造 函数。令e = e : ( 2 ) 遍历以s - 为接受状态的状态转换集丁,如果t 。e = t 。e ,令 g = t g u t ,g ,在t 中删除t ,t 。,在e 中删除e ;否则令 g = t g ,在e 中删除e ,在t 中删除t ; ( 3 ) 如果g = c o n d ( g ) ,构造t ( s ,e ,_ 1 9 ,e x c e p t i o n ,s ) ,添 加至t ”: ( 4 ) 重复( 2 ) 一( 3 ) : ( 5 ) 如果e 中,构造t ( s ,e ,e ,e x c e p t i o n ,s 。) ,添加至 t ”,在s 中删除s 。; ( 6 ) 如果s 中,重复( 1 ) 至( 6 ) 。 如图2 3 ,类s t a c k 的状态图是一个不完备的状态图。其中s : e m p t y l o a d a b l e ,f u l l ,有三个状态,e m p t y 状态不变量为i s e m p t y 0 ,即 n = = o ;l o a d a b l e 状态不变量为i s l o a d a b l e0 ,即o n m a x ;f u l l 状态不 变量为is f u l l ( ) ,即n = = m a x 。e = s t a c k 0 ,p o p ,p u s h ( x ) ) ;g = ,n = = l , n l ,n = = m a x - i ) ;a = e ,r e t u r nt o p ( x ) ;t = ( o ,s t a c k 0 , e ,e m p t y ) ,( e m p t y ,p u s h ( x ) ,l o a d a b l e ) , ,有七个状态 转换。其中n 为栈顶位置。 n ) 【m 。一l 】 w i s h i l l 一 i :_ “p 坤【i ,- i o nl o p l p 叩t - u r n o - l i ) p “3 - i ,i l h _ i j f u i l 图2 3 类s t a c k 的状态图 西安理工大学硕士学位论文 首先在状态图中添加u 状态,对于状态集s 中的状态s 、添加转移 t ( s :,“s t a c k 0 ,f i 0 ) 。然后构造完备性。对于状态e m p t y 添加转 移t ( e m p t y ,p o p ,e x c e p t i o n ,e m p t y ) ,对于状态f u l l 添加转移 t ( f u l l ,p u s h ( x ) ,e ,e x c e p t i o n ,f u l l ) 。一个完备的s t a c k 类的状态 模型如图2 4 所示。 f 。 h c l l mp u ) n t _ a i l ) 皇坐”! 蛳7 。训l fm 1 h ( 2 3 小结 图2 4 类s t a c k 的完备状态图 在软件测试过程中,模型检查具有特殊的地位,是软件测试过 程的第一步。对类的u n s t a t e c h a r t ,检查其模型确定性、一致性, 构造一个基于f r e e 的、具有完备性的类状态可测试模型,是软件测 试分析的主要工作。只有保证了测试模型的确定性、一致性和完备 性,基于此模型的测试设计和实现才有意义。 但是,对于由于状态转移的监视条件互斥而引起的模型不一致 ( 不可终结状态、不可达状态、死环) 问题,还需进一步研究。 1 9 第三章c p p t e s t l d e 系统结构 第三章c p p t e s t i d e 系统结构 在确定了类的测试模型后,本章分析了c p p t e s t l d e ( c + + t e s t i n t e g r a t e dd e v e l o

温馨提示

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

评论

0/150

提交评论