(计算机软件与理论专业论文)基于uml的面向对象软件测试方法的研究.pdf_第1页
(计算机软件与理论专业论文)基于uml的面向对象软件测试方法的研究.pdf_第2页
(计算机软件与理论专业论文)基于uml的面向对象软件测试方法的研究.pdf_第3页
(计算机软件与理论专业论文)基于uml的面向对象软件测试方法的研究.pdf_第4页
(计算机软件与理论专业论文)基于uml的面向对象软件测试方法的研究.pdf_第5页
已阅读5页,还剩61页未读 继续免费阅读

(计算机软件与理论专业论文)基于uml的面向对象软件测试方法的研究.pdf.pdf 免费下载

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

文档简介

中文摘要 摘要 随着面向对象软件丌发方法的广泛应用 面向对象软件测试方法也得到了人 们的广泛重视 由于面向对象自身的特征 传统的测试方法已不再适用于面向对 象的软件测试 因此 必须找出一种适合于面向对象软件的测试方法 这便给测 试增加了难度 本文以面向对象软件的特点为依据 讨论了面向对象软件测试层 次划分和测试方法等问题 并提出了一种测试用例生成的具体解决方法 统一建模语言u m l 具有定义良好 易于表达 功能强大的特点 同时还提供 了非常强大的图例模型 它不仅支持面向对象的分析和设计 而且支持从需求分 析开始的软件开发的整个过程 这就为u m l 引入到面向软件测试中提供了可能 测试用例生成是软件测试的核心问题之一 所以将测试用例设计作为本文研 究的重点 本文将u m l 与统一软件歼发过程 r u p 有效结合起来 针对面向对 象软件测试的各个阶段特点 在r u p 迭代的基础上 采用不同的u m l 图来讨论 测试各个阶段中测试用例的生成方法 其中重点讨论了类簇级测试阶段的测试用 例生成方法 该方法以分析 设计阶段的顺序图为基础 然后结合顺序图中交互 的类的状态图合并成组合状态图 最后对组合状态图进行优化 在优化后的状态 图的基础上生成测试用例 该方法完全基于u m l 利用分析 设计阶段的图例 摆脱了由于编码阶段引入的错误而导致测试用例错误的情况 关键词 面向对象软件测试 测试用例 类簇级测试 u m l 顺序图 英文摘要 o os o f t w a r et e s t i n gm e t h o ds t u d yb a s e do nu m l a b s t r a c t w i t ht h e b r o a d l y u s e d o ft h e o b j e c t o r i e n t e dd e v e l o p i n gm e t h o d t h e o b j e c t o r i e n t e ds o f t w a r et e s t i n gi sg e t t i n gm o r ea n dm o r ea t t e n t i o nb ym a n i nv i r t u e o fo b j e c t o r i e n t e ds o f t w a r e sf e a t u r e s t h et r a d i t i o n a ls o f t w a r et e s t i n gm e t h o d sa r en o t a d a p tt ot h eo b j e c t o r i e n t e dt e s t i n g m a k et h es o f t w a r et e s t i n gm o r ed i f f i c u l t b a s e do n t h ec h a r a c t e r i s t i c so fo b j e c t o r i e n t e ds o f t w a r e t h ea r t i c l ed i s c u s s e st h et e s t i n g l a y e r sa n d m e t h o d sf o ro b j e c t o r i e n t e ds o f t w a r et e s t i n ga n dg e n e r a t e st h es p e c i f i cs o l u t i o n sf o r t e s tc 蹴 t h eu n i f i e dm o d e l i n gl a n g u a g e u m l i sm o r ed e f i n e da n de a s yt od e s c r i b et h e s o f t w a r e a tt h es o m e t i m e s t h eu m la f f o r d sal o to fg r a p hm o d e l i ti sn o to n l y b a c k u pt h eo o aa n do o d b u ta l s ot h ew h o l ep r o c e d u r ef r o mt h ed e m a n dt o d e v e l o p m e n t i ti sp o s s i b l et ol e a du m li n t os o f t w a r et e s t i n g i ns o f t w a r et e s t i n g t h ed e s i g no fg e n e r a t i n gc a s e st e s t i n gi st h ek e yp o i n t s o ip u t i ta st h ee m p h a s e si nt h ea r t i c l e t h i sp a p e rw i l le f f e c t i v e l yc o m b i n et h eu m la n d r a t i o n a lu n i f i e dp r o c e s s r u p i nr u po nt h eb a s i so fi t e r a t i v e i n t r o d u c ed i f f e r e n t u m ld i a g r a m sa i ma tt h eo b j e c t o r i e n t e df e a t u r e so ft h ev a r i o u sp h a s e so fs o f t w a r e t e s t i n ga n dd i s c u s st h em e t h o d so ft h ed i f f e r e n ts t a g e so ft h et e s tc a s eg e n e r a t i o n t h e r e i n t o t h ee m p h a s i so fr e s e a r c hi sc l u s t e r st e s t i n g t h em e t h o do nt h eb a s eo ft h ea n a l y s i s t h ed e s i g np h a s es e q u e n c ed i a g r a m t h e n c o m b i n ec l a s s ss t a t ed i a g r a mi nt h es e q u e n c e i n t e r a c t i v ed i a g r a mt oc o m b i n e ds t a t ed i a g r a m f i n a l l y w i t ht h ec o m b i n e ds t a t ed i a g r a m o p t i m i z i n g a n dt h et e s tc a s eg e n e r a t i o no nt h eb a s i so fi t t h eu m l b a s e dm e t h o do f u s i n ga n a l y s i so ft h ed e s i g ns t a g ed i a g r a ma v o i d st h em i s t a k e s t h a ta r em a d eb y i n t r o d u c i n gt h ep h a s ec o d i n ge l r o r so nt h et e s t i n g k e yw o r d s 0 b j e c t o r i e n t e ds o f t w a r et e s t i n g c l a s s c l u s t e r st e s t i n g t e s tc a s e u m l s e q u e n c ed i a g r a m 大连海事大学学位论文原创性声明和使用授权说明 原创性声明 本人郑重声明 本论文是在导师的指导下 独立进行研究工作所取得的成果 撰写成硕士学位论文 基王型丛l 的面囱过盈筮往型达友这的班究 除论文中已 经注明引用的内容外 对论文的研究做出重要贡献的个人和集体 均已在文中以 明确方式标明 本论文中不包含任何未加明确注明的其他个人或集体己经公开发 表或未公开发表的成果 本声明的法律责任由本人承担 论文作者签名孝耳厢甬勿哆车弓月污同 学位论文版权使用授权书 本学位论文作者及指导教师完全了解 大连海事大学研究生学位论文提交 版权使用管理办法 同意大连海事大学保留并向国家有关部门或机构送交学位 论文的复印件和电子版 允许论文被查阅和借阅 本人授权大连海事大学可以将 本学位论文的全部或部分内容编入有关数据库进行检索 也可采用影印 缩印或 扫描等复制手段保存和汇编学位论文 不保密口 请在以上方框内打 一案群焉嚣硎 同期 2 棚年 月饼日 基y u m l 的面向对象软科测试方法的研究 第1 章绪论 1 1 选题的背景和意义 软件测试在软件的整个开发过程中占有非常重要的地位 是保证软件质量 提高软件可靠性的关键 软件测试工作做得怎样 直接决定着软件产品质量的好 坏 美国质量保证研究所对软件测试的研究结果表明 越早发现软件中存在的问 题 开发费用就越低 在编码后修改软件缺陷的成本是编码前的1 0 倍 软件质量 越高 软件发布后的维护费用越低 另外 根据对国际著名i t 企业的统计 它们 的软件测试费用占整个所有研发费用的5 0 以上 而在软件测试的过程中 测试 的关键之处在于测试用例的选取 强揭错能力的测试用例可以缩短软件测试的周 期 大大节省软件的开支 所以 不仅要提高对软件测试的认识 同时还要加强 对测试用例生成设计的重视程度 面向对象技术规范中的数据抽象 继承 多态等概念和机制使得面向对象技 术具有许多原有的过程化程序设计语言 p r o c e d u r a ll a n g u a g e s 所无法企及的优点 因而为软件业界所广泛的接受和应用 但是 正如任何事物的两面性一样 面向 对象技术在给软件开发带来众多好处的同时也给原有的软件开发过程带来了许多 新的问题 其中对于软件测试技术的影响尤为巨大 针对面向对象技术自身的特 点 传统的软件测试技术己不再适用 因此必须作相应调整 统一建模语言u m l u n i f i e dm o d e l i n gl a n g u a g e 是在总结面向对象技术应用 实践的基础上 博采众长 建立的一个标准的 统一的建模语言 它是一种定义 良好 富于表达 功能强大且普遍适用的建模语言 在面向对象的分析和设计中 得到了广泛应用 还支持从需求分析开始的软件开发的全过程 测试工作的核心 主要是生成测试用例 在基于u m l 的面向对象软件系统中 分析 设计模型是软 件在其生存期不同阶段的变体 是生成最终程序的基础 也是生成测试用例的信 息来源 因此 收集分析 设计阶段的u m l 图信息就可以生成测试最终程序的测 试用例 第1 章绪论 2 0 0 1 年首次召开的全国测试学术会议 将软件测试作为一个主要的议题 以 推进软件测试工作的研究 另外 2 0 0 5 年8 月2 2r 在上海举办的 首届中国软 件测试与软件产业发展战略研讨会 上 与会专家认为 首先需要软件企业提高 对于测试环节的重视程度 其次 需要有企业从事测试理论与技术服务 测试在 软件产业的地位 由此可见一斑 本次研究的课题也正是基于这样的背景下产生 的 本文把重点放在了类簇级测试用例生成的研究上 该方法基于u m l 分析 设 计阶段的顺序图 同时结合相应类的状态图生成组合状态图 然后对组合状态图 进行优化生成极小状态图 最后基于优化后的组合状态图生成类簇级测试用例 1 2 国内外研究现状 面向对象软件测试对保障面向对象软件质量有非常重要的意义 而且软件测 试在整个软件生存周期所花费的成本中也占了很大的比重 由于面向对象的软件 具有的特征使得针对对它进行的软件测试变得比较困难 而测试过程的关键是测 试用例的设计 如果能够研究出可以自动化并且有很强揭错能力的测试用例 那将 极大地减少面向对象软件开发成本 介于此 很多学者对面向对象软件的测试用 例分别进行了研究 关于面向对象测试的研究主要集中在两个方面 一是研究类 级测试 二是研究类簇级测试 目前国内外类级的测试理论已比较成熟 相对而 言 面向对象软件的类簇级测试发展得比较缓慢 关于类测试 h a r r o l d 把类中的操作分成三个不同的级别 并相应给出三种定 值一引用对 他提出要按照操作的级别来进行相应的数据流分析f 2 1 c d t u r n e r 最 早提出要根据对象的状态来进行测试 他认为属性描述了对象的本质特征 同时 属性值决定了对象的状态 每个属性可以看作是一个子状态 3 1 d k u n g 在t u r n e r 的基础上做了深入研究 他提出了基于对象状态的测试模型 即对象状态图o s d 采用逆工程的方法从源代码中构造出o s d 然后给出相应的测试用例 4 1 在国内 龚红仿等人中提出了一种面向对象类的状念测试技术的研究 张庆等人提出了一 种基于u m t 0 t 态图的面向对象类级测试模型1 5 1 基丁u m l 的面向对象软f q 测试方法的研究 关于类簇级测试 陈火炎教授等提出了一套基于形式规格说明的面向对象类 级和簇级测试方法t a c c l e t e s t i n ga tt h ec i a s sa n dc l u s t e rl e v e l s t a c c l e 方法学将类级测试统一起来 使之都是基于形式规格说明 其中类级测试基于代 数规格说明 簇级测试是基于合约规格说明 c o n t r a c ts p e c i f i c a t i o n 6 1 d e p e r r y 和g e k a i s e r 给出了面向对象类簇级测试的两种不同策略 基于类间协作关系的测 试和基于类间继承关系的测试n 前者是由系统的一个输入端口事件作为激励 对 其触发的一组类进行测试 执行相应的方法 最后终结于某一输出端口事件 后 者 首先通过测试独立类来开始构造系统 在独立类测试完成后 下一层继承独 立类的类被测试 这个测试类层次的测试序列一直持续到构造完整个系统 在基 于u m l 模型的测试技术方面 y k i m 等人则从面向对象软件需求分析和设计语言 u m l 的状态图出发构造扩充的有穷状态自动机 进而生成测试用例对面向对象类 问交互进行测试 南京大学王林章教授在一个基于u m l 协作图的集成测试用例生 成方法中 介绍了基于协作图的集成测试用例的生成方法 s l 张毅坤等人研究了一 个基于u m l 顺序图的面向对象软件类簇级测试方法 9 l o 文献 7 给出了两种基于协 作图的集成测试 成对出现的类的测试和相邻类的集成测试 1 3 本文的工作 本文的研究内容是将基于u m l 的面向对象软件测试与统一开发过程 r u p 结合起来 在r u p 框架下 针对测试过程的不同阶段特点采用不同u m l 图进行 测试用例生成的设计 分别为类测试用例 类簇级测试用例和系统测试用例的设 计 基于目前的研究现状 本文主要把研究的重点放在了类簇级测试用例的生成 上 其方法是用灰盒方法 以u m l 顺序图为基础 同时结合参加交互对象的状态 图共同生成测试用例 此方法可以系统地直接处理设计阶段的u m l 顺序图和状态 图 生成可以测试最终程序的测试用例 避免以往白盒测试对程序代码进行反向 工程的开销 既防止了由于代码本身的错误导致的结构与规约不一致的错误 又 充分利用黑盒测试方法在对软件预期结构分析的基础上获取相应执行路径上的输 入 输出的合理组合生成最终的测试用例 同时使用设计阶段的模型生成测试用 第1 章绪论 例还可以避免使测试工作过早陷入最终平台的细节 从而有利于在本质上处理问 题 便于系统移植时最大限度地复用由规约生成的测试 本文的工作有 1 介绍了软件测试的基本概念 步骤 方法和测试用例生成的方法 同时提 出了用灰盒方法来生成测试用例 2 介绍了面向对象的特征及对测试的影响 面向对象与传统软件测试技术的 区别 同时讨论了面向对象测试的层次划分 3 将基于u m l 的面向对象测试技术与r u p 结合 在r u p 的框架下 针对 测试过程中不同阶段的特点选取不同的u m l 图来进行测试用例生成的设计 4 提出了一种基于u m l 顺序图结合状态图生成类簇级测试用例的方法 同 时给出了相应的算法 5 基于以上理论 实现了类簇级测试用例生成的工具 1 4 本文的组织结构 本文结构组织如下 第一章介绍了立题的背景 国内外研究现状 本文的工作和组织结构 第二章概述了软件测试的基本概念和传统测试用例的生成方法 第三章介绍了面向对象的特征及对测试的影响 面向对象测试与传统软件测 试技术的区别 面向对象软件的测试层次划分和基于u m l 的面向对象软件的测 试 第四章介绍了u m l 顺序图和状态图 同时在统一软件过程r u p 框架下 用 不同u m l 图来解决测试过程中各阶段的测试用例生成的问题 第五章阐述了依据u m l 顺序图和状态图进行类簇级测试的可行性和充分 性 并给出其类簇级测试用例生成方法的详细说明 第六章给出了基于u m l 顺序图和状态图生成类簇级测试用例的实现工具 并结合具体的实例加以说明 最后总结全文并提出下一步工作 基tu m l 的面向对象软什测试方法的研究 第2 章传统软件测试 2 1 软件测试的基本概念 2 1 1 软件测试的定义 在一个软件项目的开发过程中 面对错综复杂的问题 人的主观认识能力具 有局限性 而且与软件项目相关的各类人员之 日j 的通信和配合不可能完美无缺 因此在软件项目的每个阶段都可能会引入错误 为了保证软件的质量 软件生命 期的每个阶段结束都要进行严格的技术复审 以便尽可能地发现并纠正错误 但 实际情况是 这种复审并不能检查出所有的差错 此外 编码过程中还会不可避 免地引入新的错误 所以要进行软件测试 软件测试的目的在于 在软件投入使 用之前 以可接受的代价尽可能检查出软件中隐藏的所有错误 就目i 来讲 软 件测试仍然是保证软件质量的关键环节 由于软件及软件错误的复杂性 长期以来 人们对软件测试的认识一直是模 糊的 许多科学家从不同的角度给出了软件测试的不同定义 但总体来看 都是 不全面的 g m y e r s 认为程序测试是为了发现错误而执行程序的过程1 1 0 h e t z e l 认为测试是对程序或系统能正确工作建立信心的过程 1 1 1 按照g m y e r s 的观点 好的测试用例是能发现错误的测试用例 成功的测试用例是发现了至今尚未发现 的错误的测试 g m y e r s 认为软件测试就是为了发现软件中的错误 这一概念目前 被人们所公认 但该定义认为软件测试仅仅是对程序编码的测试 并且测试只能 在编码完成之后才能开始 这显然是有局限性的 而且是不全面的 在某种意义 上讲是有害的 因为 软件错误发现得越晚 改正错误越就困难 所需要付出的 代价也就越高 我们需要把测试看作是贯穿于软件开发全过程中的一种活动 而 不仅仅是一个阶段或一个步骤 所以 在整个软件生命周期的每个阶段结束时 都需要对该阶段的成果和产品进行复查 不断地进行检验 以利于发现和纠正错 误 第2 章传统软什测试 1 9 8 3 年 i e e e 给出一个比较全面的定义是 使用人工或自动手段来运行或 测试某个系统的过程 其目的在于检验它是否满足规定的需求或是弄清楚预期结 果与实际结果之间的差别m 2 1 2 软件测试的目的 基于不同的立场 存在着两种完全不同的测试目的 1 从用户的角度出发 普遍希望通过软件测试暴露软件中隐藏的错误和缺 陷 以考虑是否可接受该产品 2 从软件开发者的角度出发 则希望测试成为表明软件产品中不存在错误的 过程 验证该软件已正确地实现了用户的要求 确立人们对软件质量的信心 g r e n f o r dj m y e r s 在 t h ea r to f s o f t w a r et e s t i n g 一书中指出了软件测试的目的 1 软件测试是程序的执行过程 目的在于发现错误 2 一个好的测试用例在于能发现至今未发现的错误 3 一个成功的测试在于发现了至今未发现的错误 1 0 l 换言之 软件测试的目的是 第一确认软件的质量 软件测试是程序的执行过程 目的在于发现错误 其 一方面是确认软件做了你所期望的事情 d ot h er i g h tt h i n g 另一方面是确认软 件以正确的方式来做了这个事件 d oi tr i g h t 第二提供信息 比如提供给开发人员或程序经理的反馈信息 为风险评估所 准备的信息 第三软件测试不仅是在测试软件产品的本身 而且还包括软件开发的过程 如果一个软件产品开发完成之后发现了很多问题 这说明此软件开发过程很可能 是有缺陷的 因此软件测试的第三个目的是保证整个软件开发过程是高质量的 2 1 3 软件测试的步骤 软件测试过程按4 个步骤进行 即单元测试 集成测试 确认测试和系统测 试 如图2 1 所示 基丁u m l 的面向对象软件测试方法的研究 图2 1 软件测试过程 f i g 2 1t h ep r o g r e s so fs o f t w a r et e s t i n g 1 单元测试 u n i tt e s t i n g 单元测试又称模块测试 是针对软件设计的最小模块 程序模块 进行正 确性检查的测试工作 其目的在于发现模块内部可能存在的各种差错 单元测试 需要从程序的内部结构出发设计测试用例 即采用白盒测试方法 尽可能发现单 元内部的程序错误 一般情况下 单元测试用例是利用一种或多种白盒测试方法 对单元的结构进行分析 得到一些测试用例 然后根据单元规范再用黑盒方法对 原有的测试用例加以补充的 在面向对象的软件开发中 以类作为测试的最小单 元 2 集成测试 i n t e g r a t e dt e s t i n g 集成测试是在对每个单元的单元测试完成后 按照设计时作出的结构图 在 把软件单元逐步组装的过程中 同时有序进行的测试 集成测试要求每增加一个 新的单元 必须验证所加入的单元和已存在的单元之间接口的正确性 并且必须 在集成所得构件的新层次上进行类似单元测试的测试 3 确认测试 v a l i d a t i o nt e s t i n g 第2 章传统软f 1 测试 确认测试又叫功能测试 f u n c t i o n t e s t i n g 或合格测试 q u a l i f i c a t i o n t e s t i n g 其前提是 在集成测试中发现的软件接口缺陷已经纠正 确认测试是按规定的需 求 逐步进行有效性测试 以决定开发的软件是否合格 能否提交用户使用 4 系统测试 s y s t e mt e s t i n g 系统测试是把软件 硬件和环境连在一起进行的全面的测试 以检查被测试 软件同需求说明书是否相符 经过单元测试 集成测试和确认测试后 被测软件 很可能仍旧隐含错误 这时可通过系统测试 继续发现一些模块内部的错误和模 块间接口错误 系统测试包含性能测试 强度测试 安全测试和恢复测试等多种 综合性测试 系统测试的测试用例应根据需求分析说明书来设计 并在实际使用 环境下运行 2 1 4 软件测试的主要方法 1 自盒测试 w h i t e b o xt e s t i n 酚 又称结构测试 逻辑驱动测试或基于程序的 测试 p r o g r a m b a s e dt e s t i n g 采用这一测试方法 测试者可以看到被测试的源程 序 可用以分析程序的内部构造 并且根据其内部构造设计测试用例 这时测试 者就可以完全不顾程序的功能 通过测试来检测产品内部是否按照规格说明书的 规定正常运行 按照程序内部的结构测试程序 白盒测试的主要依据是程序的控 制流图或数据流图 它常被用来分析程序的内部结构以及检验测试的充分性 2 黑盒测试 b l a c k b o xt e s t i n g 又称功能测试 数据驱动测试和基于规格说 明的测试 用这种方法进行程序测试时 被测程序被看作一个打不开的黑盒 测 试者是在完全不知道程序内部的情况下进行的 而只需知道程序的输入和输出之 间的关系即可 因此 黑盒测试是基于用户的测试 测试者正是依靠这个关系来 产生测试用例 并判断运行结果的正确性 黑盒测试常被用来验证软件功能的正 确性和可操作性 这两种测试方法从完全不同的起点出发 各有侧重 各有优缺点 构成互补 关系 白盒测试可以有效地发现程序内部的编码和逻辑错误 但无法检验出程序 是否完成了规定的功能 黑盒测试可以根据程序的规格说明检测出程序是否完成 基丁 u m l 的面向对象软悄测试方法的研究 了规定的功能 但未必能够提供对代码的完全覆盖 而且规格说明往往会出现具 有歧义或不完整的情况 这在一定程度上降低了黑盒测试的效果 在实际测试中 这两种方法往往被结合起来使用 一般来说 在单元测试阶段 白盒测试法使用 较多 而在集成测试阶段 则较多偏向于黑盒测试方法 2 2 测试用例生成方法 测试用例是软件测试的核心 一个测试用例就是一个文档 描述输入 动作 或者时间和 个期望的结果 其目的是确定应用程序的某个特性是否正常的工作 软件测试的成功与否完全取决于测试用例设计的好坏 下面介绍几种测试用例生 成的方法 2 2 1 基于代码的测试用例生成 基于代码的测试用例生成被认为是白盒测试 因为它更加关注程序的代码 基于代码的测试用例生成通常用于单元测试 它可以非常容易地保证所有代码的 语句都被执行 很多方法都使用了基于代码的测试 例如语句覆盖 分支覆盖 扩展分支覆盖 特定值测试 分割域等 使用这些方法生成的测试集可以通过变 异分析的方法来进行评估 1 2 1 基于代码的测试用例生成最主要的缺点就是测试是基于实际代码的 而不是 基于需求规格的 对于需求中出现但没有实现的错误 或者实现不满足需求规格 说明的错误 这种方法都无法发现 然而 对于重点考虑程序是如何编写的而不 是如何设计的 基于代码的测试用例生成还是非常有效的方法 目前 测试生成技术研究更加侧重于基于代码 而基于规格说明的相对困难 一些 其主要原因是 基于结构性语言的定义是严格的 测试用例生成自动化比 较容易 但规格说明不够形式化 并且也不完整 这使得测试自动化非常困难 2 2 2 基于规格说明的测试用例生成 基于规格说明的测试用例生成被认为是黑盒测试 因为它主要关注软件规格 说明所描述的系统功能 这些功能描述被认为是黑盒的 是输入到输出的变换 第2 章传统软件测试 基于规格说明的测试生成通常用于集成测试和系统测试 通过它可以确保软件提 供了预先约定好的功能 这恰好弥补了基于代码的测试用例生成方法的不足f 1 2 j 从规格说明中生成测试数据具有很多的优点 1 在软件开发过程中 测试活动可以尽早进行 这可以更加有效地进行计划 并可实现资源的合理利用 2 在规格说明实现以前 可以发现需求中缺少的功能或相互矛盾的错误 3 由于它是独立于实现 因此可以应用于任何实现技术和平台之中 4 它支持系统级的测试 5 它能够有效地支持测试用例的自动生成 由于基于规格说明的测试用例生成只是考虑到软件的外部视图 可以说它主 要是测试 产品 而不是测试 设计 并且它不可能覆盖程序的所有语句 对于基于规格说明的测试用例生成 可以通过与基于代码同样的技术来进行评价 2 2 3 灰盒测试法的测试用例设计 上面介绍的两种方法都是传统的设计方法 而基于代码的测试用例生成方法 是从开发者的角度在源代码级使用软件分析和理解的技术 对程序的内部逻辑结 构进行分析来测试系统 基于规格说明的测试用例生成方法是通过从用户的角度 测试软件系统是否符合需求规约f 1 3 l 这两类方法各有侧重 在软件测试的实践中 都是有效的 互补的和实用的 但它们又各有缺点 并且不能在方法内部进行完 善的解决 而且 在面向对象语境下 软件的设计思路和软件的结构与传统的面 向过程的软件相比有了很大的变化 而传统的软件测试方法不能适应这样的变化 1 4 1 上面介绍了基于代码的测试用例生成和基于规格说明的测试用例生成 这两 种方法各有缺点 但是如果将两者有效结合起来 可以实现优势的互补 灰盒测 试 g r a y b o xt e s t i n g 是近年束提出的方法 基于预期的软件结构和行为的高级设 计模型生成测试 设计是需求规约和代码实现的中间产品 保持了需求规约罩的 信息 也是最终代码实现的依据 灰盒测试方法介于白盒测试与黑盒测试二者之 基丁u m l 的面向对象软什测试方法的研究 i 日j 有效结合了黑盒测试和白盒测试的要素1 1 5 i 先基于扩展的白盒方法分析结构 的逻辑覆盖 然后基于黑盒方法生成满足覆盖条件的输入和输出组合生成测试用 例 能够发现容易被黑盒测试和白盒测试所忽略的问题 根据灰盒测试方法生成 的测试用例主要由三部分组成 输入序列 操作序列以及期望的输出序列 第3 章面向对象的软什测试 第3 章面向对象的软件测试 面向对象程序设计语言的出现不仅改变了程序设计的风格 而且还影响了软 件开发的全过程 与此同时 面向对象的软件需求分析方法 设计方法也应运而 生 然而 面向对象方法对软件测试的影响直至近年来才开始为人们所注意川 下 面 分析一下面向对象程序设计语言的特征对软件测试的影响 3 1 面象对象技术的特征及对测试的影响 面向对象程序设计语言的基本特征是提供了数据抽象 继承和动态绑定等设 施 面向对象程序通常由一系列类组成 在类定义中封装了数据 用于表示对象 的状态 及作用在数据上的操作 方法 数据和操作统称为特征 对象是类的 实例 类和类之间按继承关系组成一个有向无环图结构 父类中定义了共享的公 共特征 子类除继承了父类中定义的所有的特征外 还可以引入新的特征 在面 向对象程序中 计算是通过向对象发信件 即调用该对象所属类中所定义的方法 来进行的 调用方法可以改变对象的状态并向其他对象发信件 特别地 允许对 继承的方法进行重定义 从而可以产生类似功能的不同实现 面向对象的技术因 为能够解决传统程序设计语言存在的问题 自提出后 一度成为研究热点 事实 上采用面向对象技术减少不少错误的发生 对于提高软件质量起到了很大的作用 面向对象软件的封装性 继承性 多态性和动念绑定等特性提高了软件的可重用 性 使软件开发更快 质量更高 而且软件易于维护 易于修改 通过组装可复 用子系统而产生更大的系统 但是面向对象技术本身在任何情况下都不会排除测 试的动机 同时面向对象语言本质特征 如继承 封装和多态等也带来了新的故 障风险 并给软件测试提出了新的挑战 1 6 3 1 1 信息隐藏对测试的影响 类的重要作用之一是信息隐藏 它对类中所封装的信息的读取进行控制 从 而避免类中有关实现细节的信息被错误地使用 而这样的细节信息j 下是软件测试 所不可忽略的 由于面向对象的软件系统在运行时刻由一组协调工作的对象组成 基丁 u m l 的面向对象软件测试方法的研究 对象具有一定的状态 所以对面向对象程序的测试来说 对象的状态是必须考虑 的因素 测试应涉及对象的初态 输入参数 输出参数 对象的终态 对象的行 为是被动的 它只是在接受有关信件后才被激活来进行所请求的工作 并将结果 返回给发信者 在工作过程中对象的状态可能被修改 产生新的状态 面向对象 软件测试的基本工作就是创建对象 包括初始化 向对象发送一系列信件 然 后检查结果对象的状态 看其是否处于正确的状态 问题是对象的状态往往是隐 蔽的 若类中未提供足够的存取函数束表明对象的实现方式和内部状态 则测试 者必须增添这样的函数 因为 类的信息隐蔽机制给测试带来困难 3 1 2 封装和继承对测试的影响 在面向对象的程序中 由于继承的作用 一个函数可能被封装在多个类中 子类中还可以对继承的特征进行重定义 问题是 未重定义的继承特征是否还需 要进行测试呢 重定义的特征需要重新测试是显然的 但应该如何测试重定义的 特征呢 e j w c y u k e r 曾经提出了l l 条基于程序的测试数据集的充分性公理 d e p e r r y 与g e k a i s e r 根据w e y u k c 公理对这些问题进行了讨论 7 1 w e y u k c 的非外延性公理认为 若有两个功能相同而实现不同的程序 对其中 一个是充分的测试数据集未必对另一个是充分的 这一公理表明若在子类中重定 义了某一继承的方法 即使两个函数完成相同的功能 对继承方法是充分的测试 数据集未必对重定义的方法是充分的 w e y u k e 的不可分解性公理认为 一个程序进行过充分的测试 并不表示其中 的成分都得到了充分的测试 因此 若一个类得到了充分的测试 当其被子类继 承后 继承的方法在子类的环境中的行为特征需要重新测试 w e y u k c 的非复合性公理认为 一个测试数据集对程序中的个各程序单元而吉 都是公开的 并不表示它对整个 集成后的 程序是充分的 这一公理表明 若 对父类中某一方法进行了重定义 仅对该方法自身或其所在的类进行重新测试是 不够的 还必须重新测试其他有关的类 如子类和引用类 第3 章面向对象的软件测试 3 1 3 对集成测试的影响 对于传统程序设计语言书写的软件 软件测试人员普遍接受3 个级别的测试 单元测试 集成测试和系统测试 当各单元被分别测试后 集成测试根据设计阶 段形成的功能分解树 自底向下或自底向上逐渐用各个单元来替换残桩和驱动程 序 集成测试强调软件的结构和界面 测试者往往要取得存储的状态 而系统测 试强调软件的行为 虽然传统的集成测试和面向对象的程序测试中的对应尚没有 一致的看法 但是显然基于功能分解的自项向下和自底向上的集成策略并不适合 于面向对象方法构造的软件 在各个方法分别测试之后 每次任选一个方法集成 到类中逐渐进行测试直到形成一个完整的类的集成策略也未必适合 原因是各个 方法之问可能有相互作用 某一方法可能要求对象处于某个特定的状态 而状态 必须由其他方法设置 所以还需要考虑集成的次序问题 从上述分析可知 虽然 信息隐藏与封装使得类具有较好的相对独立性 有利于提高软件的易测试性和保 证软件的质量 但是 这些机制与继承机制和动态绑定给软件测试带来了新的课 题 尤其是面向对象软件中类和类之间的集成测试和类中各方法之间的集成测试 具有特别重要的意义 与传统语言书写的软件相比 集成测试的方法和策略也应 该有所不同 3 2 面向对象软件的测试层次 软件测试是软件过程的重要组成部分 软件测试的框架和测试方法也与开发 过程密切相关 对于传统程序设计语言书写的软件 软件测试人员普遍接受三种 级别的测试 单元测试 集成测试和系统测试 对面向对象的程序测试应当分为 多少级别尚未达成共识 m d s m i t h 和d j r o b s o n 从面向对象程序的结构出发 认 为面向对象的程序测试应分为4 个级别 方法级 类级 类簇级和系统级p 他们 认为 上述四个层次中的方法测试和传统的单元测试相对应 但是 在面向对象 的软件中 类是方法和数据的封装 测试类的方法时必须考虑对象的状态 另一 方面 类的多个方法也并不是互相独立的 它们通过对象的数据相互联系 相互 作用 因此 我们认为 不能脱离类对象的环境 孤立地测试类的方法 换句话 墓tu m l 的面向对象软件测试方法的研究 说 方法测试不宣作为面向对象测试的独立层次 我们认为 从面向对象的结构 和数据封装性出发 面向对象软件测试的最小单元不应该是方法 而应该是类和 类的实例 将面向对象测试划分成类测试 类簇级测试和系统测试三个层次更为 合理 面向对象软件测试的测试层次划分见表3 1 表3 1 测试层次的划分 t a b 3 1t h ep a r t i t i o no ft e s tl a y e r 传统测试面向对象测试 单元测试类级测试 集成测试类簇级测试 系统测试系统测试 3 3 面象对象软件测试与传统软件测试技术的区别 就测试而言 面向对象软件丌发中测试的目的与以往传统的测试目标是完全 相同的 都是为了确保软件能够正确地执行预定的功能 测试过程都包括了测试 计划 测试用例的设计 测试运行 测试结果分析 传统的单元测试的对象是软件设计的最小单位 模块 单元测试的依据是 详细设计描述 单元测试应对模块内所有重要的控制路径设计测试用例 以便发 现模块内部的错误 单元测试多采用白盒测试技术 系统内多个模块可以并行地 进行测试 当考虑面向对象软件时 单元的概念发生了变化 封装驱动了类和对 象 这意味着每个类和类的实例 对象 包装了属性 数据 和操纵这些数据的 操作 而不是个体的模块 最小的可测试单位是封装的类或对象 类包含一组不 同的操作 并且某特殊操作可能作为一组不同类的一部分存在 因此 单元测试 的意义发生了较大变化 我们不再孤立地测试单个操作 而是将操作作为类的一 部分 传统的集成测试 有两种方式通过集成完成的功能模块进行测试 一 白 顶向下集成 自顶向下集成是构造程序结构的一种增量式方式 它从主控模块开 第3 章面向对象的软 测试 始 按照软件的控制层次结构 以深度优先或广度优先的策略 逐步把各个模块 集成在一起 二 自底向上集成 自底向上测试是从 原子 模块 即软件结 构最低层的模块 开始组装测试 因为面向对象软件没有层次的控制结构 传统 的自顶向下和自底向上集成策略就没有意义 此外 一次集成一个操作到类中 传 统的增量集成方法 经常是不可能的 这是由于 构成类的成分的直接和间接的交 互 对0 0 软件的集成测试一般有两种不同策略 第一种称为基于线程的测试 集成对回应系统的一个输入或事件所需的一组类 每个线程被集成并分别测试 应用回归测试以保证没有产生副作用 第二种称为基于使用的测试 通过测试那 些几乎不使用服务器类的类 称为独立类 而开始构造系统 在独立类测试完成 后 下一层的使用独立类的类 称为依赖类 被测试 这个依赖类层次的测试序 列一直持续到构造完整个系统 传统的测试计算机软件的策略是从 小型测试 开始 逐步走向 大型测 试 即从单元测试开始 然后逐步进入集成测试 最后是有效性和系统测试 而面向对象程序的结构不再是传统的功能模块结构 作为一个整体 原有集成测 试所要求的逐步将开发的模块搭建在一起进行测试的方法已成为不可能 而且 面向对象软件抛弃了传统的开发模式 对每个开发阶段都有不同以往的要求和结 果 已经不可能用功能细化的观点来检测面向对象分析和设计的结果 因此 传 统的测试模型对面向对象软件已经不再适用 3 4 基于u m 的面向对象软件测试 统一建模语言 u m l 是被o m g 所接纳的 用于面向对象系统的一套图形符 号 它是一种功能强大和复杂的建模语言 它提出了一些建模机制及一系列的可 视化图形 以帮助开发和管理系统 被测试的系统的责任和体系结构都可用u m l 模型表示 它是面向对象软件系统建模的工业标准 u m l 模型构建了软件系统的 工件和相关文档 在软件丌发的整个过程中 u m l 都可以使用 在软件丌发的各 个阶段 通过将系统的分析 设计和实现等工件转化为u m l 的规格说明 并把它 们作为测试需求的直接来源 驱动测试的整个过程 如果模型是完全的 一致丽 基丁u m l 的面向对象软干1n i 蒯 y 法的研究 正确的 模型将能提供一个丰富的测试设计信息源 1 2 1 所以 如果能充分利用这 些设计阶段的信息源 就可以设计出比较完整的测试用例 同时 也摆脱了由于 编程人员自身的错误而导致设计出有偏差的测试用例的弊端 将u m l 引入到面向对象软件测试中是一个突破 并得到了越来越多的关注 可以采用u m l 和对应的辅助建模工具r o s e 建立系统的需求分析和设计信息 即 采用u m l 的多种图元从不同视图刻画面向对象软件的静态结构和动态特征 然后 收集这些图的信息 设计测试用例来对系统进行测试 由于u m l 的顺序图 协作 图和状态图是刻画类和类之间的交互关系 所以可以将这几种图引入到面向对象 软件的类簇级测试中 但是具体采用哪种图例还要根据具体的情况而定 u m l 协 作图和时序图偏重于描述类之间的交互协同关系 是类簇级测试研究的重点 而 u m l 状态图描述了一类对象的所有可能状态 以及事件发生时对象状态的转移说 明和对象的所有可能的动态行为 是类级测试研究的重点 各个图在面向对象测 试的各个阶段各有偏重 可以考虑将几个图结合 作为生成测试用例的依据 因 为这样可以得到相对完整的信息 从而设计出相对完整且强揭错能力的测试用例 这也是目前基于u m l 的面向对象软件测试研究的一个方向 在类簇级测试用例生 成的研究中 本文是采用将顺序图和状态图结合 共同生成测试用例的策略 这 也是本文研究的重点 具体的解决方案在第六章详细说明 第4 章u m l 模型与测试 第4 章o m t 模型与测试 4 1u m l 介绍 面向对象的软件工程与传统的面向过程的软件工程相比 在需求获取 系统 分析 设计和实现方面都有着很大的区别 然而过去数十种面向对象的建模语言 都是相互独立的 使得设计跟用户需求之间存在一些潜在的不必要的差异 混淆 用户的真正目的 这就急需一个统一的 易理解的工具来对整个软件开发过程进 行描述 u m l 就是这样的产物 1 2 1 统一建模语言 u n i f i e dm o d e l i n gl a n g u a g e u m l 是一个通用的可视化建模 语言 用于对软件进行描述 可视化处理 构造和建立软件系统制品的文档 1 2 它合并了由b o o c h o m t o o s e 等方法的基本概念和表示符号的基础上 溶入 了软件工程领域的新思想 新方法和新技术 是一种通用 易于表达 描述能力 强大的可视化建模语言 具有很宽的应用领域 可以对任何具有静态结构和动态 行为的系统建模 如 信息系统 机械系统 企业结构等 它消除了数十种面向 对象建模语言之间的差异 它对软件开发过程中各个阶段之间的相互交互 统一 开发人员对系统的认识 具有天然的优势 它的出现是软件工程领域最重要的成 果之一 为建立统一的面向对象开发方法学走出了坚实的步伐 在世界范围内 至少在近1 0 年内 u m l 将是面向对象技术领域内占主导地位的建模语言1 1 8 l u m l 提供了各种图元从不同角度和应用层次刻画系统的特征和复杂的运行环 境 适合于面向对象系统开发的全过程 为软件开发人员

温馨提示

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

评论

0/150

提交评论