(计算机软件与理论专业论文)面向对象软件变更影响分析工具的研究及实现.pdf_第1页
(计算机软件与理论专业论文)面向对象软件变更影响分析工具的研究及实现.pdf_第2页
(计算机软件与理论专业论文)面向对象软件变更影响分析工具的研究及实现.pdf_第3页
(计算机软件与理论专业论文)面向对象软件变更影响分析工具的研究及实现.pdf_第4页
(计算机软件与理论专业论文)面向对象软件变更影响分析工具的研究及实现.pdf_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

面向对象软件变更影响分析王具的研究及实现 摘要 在软件开发豹整个生禽溺嬲墨,软件变更是不可避免的。懿 西应对不断出现 的燮更是人们一直关注的一个热点问题。 由于分析、设计鞠实现阶段的侧重点各有不同,变更邀现的原嚣和表现形式 也不尽穗藏。本文对这三个阶段出现豹变更进行了分祈研究,并重点研究了如何 分析、追踪代码的变更。 本文鲍主要工作包括: 总结了面向对象软件歼发的需求分析阶段和设计阶段的变慝影响处理方 法,提出了编码阶段酶变更影瞧处理方法。 类成员依赖关系可分为类内依赖和类间依赖,本文重点分析了继承依赖、 关联依赖和多态依赖三种类间成员依赖关系的建立过程。提出了基于类成员依赖 关系翦变更影响分析算法。算法的总体思路是:先扫播代羁,建立类或类成 员之间的依赖关系;再确定变更影响源和变更类型;最后根据变更影响源、 变更类型和依赖关系确定变更影响的范围。其体包括:类成员依赖关系算 法、变更影响源和变更类型识别算法、变更影响追踪算法。 提出了一个面向对象软件代码变更影响分析原型,并以此为基础实现了一 个变更影响分辑工具。试验表鞠此工具是畜效麴,置对变更影螭对象酶追踪是毙 较准确的。 关键词:面向对象变更管理变更影响分析变更影响追踪 r e s e a r c ha n d i m p l e m e n t a t i o no fo r i e n t e d 一0 b j e c ts o f t w a r e c h a n g ei m p a c ta n a l y s i st o o l a b s t r a c t c h a n g ei m p a c ti si n e v i t a b l ei nt h ew h o l ep r o c e s so fs o f t w a r ed e v e l o p m e n t i ti s a h o t s p o tp e o p l er e g a r d e dt h a th o w t od e a lw i t ht h ec h a n g e t h em a s o nf o ra p p e a r a n c ea n dm a n i f e s t a t i o no fc h a n g ei m p a c tw e r ed i f f e r e n t f o rt h ee m p h a s e so fa n a l y s i s ,d e s i g na n da c h i e v e m e n tw e r en o ts a m e t h i sd i s s e r t a t i o n a n a l y z e dt h ec h a n g ea p p e a r e di nt h e s es t a g e sa n dp a i dm a i n l ya t t e n t i o nt oa n a l y z ea n d t r a c et h ec o d ec h a n g ei m p a c t t h em a i nw o r k so ft h i sd i s s e r t a t i o na r ea sf o l l o w s : t os u m m a r i z et h em e t h o do fd e a l i n gw i t hc h a n g ei m p a c to fr e q u i r e m e n t a n a l y s i sa n dd e s i g ns t a g eo fo b j e c t - o r i e n t e ds o f t w a r e ,a n dp r o v i d eam e t h o dt od e a l w i t hc h a n g ei m p a c ta p p e a r e di nc o d i n gs t a g e 1 1 1 ed e p e n d e n c er e l a t i o n s h i po fc l a s sm e m b e rc o u l db ec l a s s i f i e dt o i n n e r - c l a s sd e p e n d e n c ea n di n t e r - c l a s sd e p e n d e n c e ,t h i sd i s s e r t a t i o nm a i n l ya n a l y z e d t h e p r o c e s s o f e s t a b l i s h i n g i n t e r - c l a s s d e p e n d e n c ew h i c h i n c l u d ei n h e r i t a n c e d e p e n d e n c e ,a s s o c i a t i o nd e p e n d e n c ea n dd y n a m i cd e p e n d e n c e a n dt h e np r o v i d e da c h a n g ei m p a c ta n a l y s i sm e t h o db a s e do nt h ec l a s sm e m b e rd e p e n d e n c e t h et o t a li d e a o ft h i sm e t h o di s :e s t a b l i s h i n gt h ed e p e n d e n c er e l a t i o n s h i pb e t w e e nc l a s s e so rc l a s s m e m b e r sb ys c a n n i n gt h ec o d e ,a n dt h e nm a k i n gs u r et h ec h a n g ei m p a c tr e s o u r c ea n d c h a n g et y p e ,f i n a l l y , m a k i n gc e r t a i nt h ec h a n g ei m p a c ts c o p ea c c o r d i n gt ot h ec h a n g e i m p a c tr e s o u r c e ,c h a n g et y p ea n dd e p e n d e n c er e l a t i o n s h i p t h em e t h o di n c l u d et h r e e a l g o r i t h m s :c l a s sm e m b e rd e p e n d e n c ea l g o r i t h m s ,c h a n g et y p ea n di d e n t i f y i n gc h a n g e r e s o u r c ea l g o r i t h m sa n dt r a c i n gc h a n g ei m p a c ta l g o r i t h m s t h i sd i s s e r t a t i o np r o v i d e dac h a n g ei m p a c ta n a l y s i sm o d e lo fo b j e c t o r i e n t e d s o f t w a r e ,a n da c h i e v e dat o o lb a s e do ni t b ye x p e r i e n c e ,w ec a l ls a yt h et o o li s e f f e c t i v ea n dm o r ea c c u r a t et ot r a c et h ec h a n g ei m p a c t e do b je c t k e y w o r d s :o b j e c t o r i e n t e d ,c h a n g em a n a g e m e n t ,c h a n g ei m p a c ta n a l y s i s ,c h a n g e i m p a c tt r a c i n g 。 论文插图清单 图2 1 变更控制和变更请求流1 1 图2 2 三层体系结构图1 5 图3 - 1 关联依赖的例图2 0 图3 2 多态依赖的例图2 l 图4 - 1 变更影响分析器原型图2 8 图4 2 变更影响分析流程图2 9 图4 3 安徽省科学技术奖励网上申报评审管理系统主页面3 3 图4 4 业务逻辑层的部分源码3 3 图4 5 数据库连接层的部分源码3 4 图4 - 6 实验结果截图3 5 论文表格清单 表2 1 可追踪性信息的类型。1 2 表2 2 可追踪性表。1 3 表2 3 可追踪性列表1 3 表2 - 4 原子变更分类表1 7 独创性声明 本久声甓所呈交的学位论文是本入在导师指导下进行觞研究工捺及取得的研究成暴。 据我所知,除了文中特别加以标志和致谢的地方外,论文中不包含其他人已经发表或撰 写过的研究成果,邀不包含为获得金篷兰些太堂 或其他教育机构的学位或证书瓶 使用过的材料。与我一同z i z 作的同志对本研究所傲的任何贡献均己在论文中作了明确的 说明并表示谢意。 。学位论文作者签字:铂蚪签字日期:夕年印月厂园 学位论文版权使用授权书 本学位论文作者宪全了解 佥筵王些态堂 有关保留、使用学位论文的规定,有权 保留并向国家有关部门或机构送交论文的复印锌和磁盘,允许论文被查阅或借阅。本人 授权 佥旦墨王些盔堂 可以将学位论文的全部或部分论文内容编入有关数据库进行检 索,可数采溺影印、缩印或扫描等复翎手段保存、汇编学位论文。 ( 保密的学位论文在解密质适用本授权书) 学位论文者签名:孑矧 签字眺如哆年乒月旷日 学位论文作者毕业后去向: 工作单位: 通讯地址: 导师签名: 签字聃:1 年9 月咖 | 致谢 首先在此特别感谢我的导师李心科副教授,本论文从选题、研究到写作的整 个过程都是在李老师的悉心指导和帮助下才得以圆满完成的。李老师知识丰富、 治学严谨、平易近人,对学生要求严格,对论文质量严格把关。在李老师三年来 的悉心指导之下,我在软件工程方向无论是在理论上还是在实践中都收获良多。 在此,谨向敬爱的李老师致以崇高的敬意和衷心的感谢。 感谢合肥工业大学研究生院和计算机与信息学院里的各位领导和老师,谢谢 你们在这三年中对我的关心和教导。 同时,也非常感谢各位同学对我的支持、关心和帮助。 最后,感谢我的家人在这三年里对我的鼓励、支持和关爱。 作者:杨明 2 0 0 9 年3 月 第一章绪论 重。董弓l 言 2 0 世纪7 0 年代,结构化程序设计几乎完全统治了第二次计算机浪潮后的 软件开发豹黄金时代。结构化编程给入粥集中于创造性思考翡同时,也带给程 序员们松散凌乱的代码和难寻其宗的复杂流獠。软件变更对程序员来说往往需 要付出极大的代价。直到面趣对象技术的出现,使得入们终于可以从尽可能自 然的角度计算这个世界。然焉,随着软件开发技术的不断发展,软佟所能搐述 的问题越来越多,范围越来越广,变更亦越来越频繁。可见,软件变更并没有 随着软谗开发技术的发震两逐渐减少。 究其原因,是因为软件开发所面对的问题域从不同的角度看会呈现不同的 侧越,这是事物所固有的属性。然丽,人们对| 藤题的认识常常受限于各个方垂, 不可能一下予就看到闯题豹全部。褥加上系统本来豹复杂性,使得各种阏题交 叉在一起,软件出现变更也就在所难免了。在软件开发的过程中,往往一次小 小豹变动,就会零l 起整个软件系统熬轩然大波。在交菱出现之蜃再虻予应付危 局已经晚了。那么,我们如何面对这些变更呢? 实践证明,对变更置之不理或祈望通过某种方式“冻结变更都是不切实 际的。在没有工具辅助的情况下,仪靠程序员人为地应对变更,那是场灾难。 然磁,紧盯糟代码,一味对细节刨根问底地追寻,只会使人迷失方向。 必须从细节中瓣脱出来,对变蔓进行全面、有效的管理和控制。然丽,要 想对软件开发全过程进行全方位的综合治理不是一件容易的事情。 匿囱对象软件开发过程大致可以分为嚣个阶段:需求分析、设计、编码、 测试,而软件变更可能出现在各个阶段中,且各个阶段出现变更的原因及应对 变更的办法各有不感。随着软件开发方法学的发展,对变更影响的处理方法也 在不断翡发震之中。 重。2 变更影响分板磷究现状 在不同的时期,入们对变更影响的研究侧重点有所不同。有通过对控制流 的追踪从函数层来分析变更影响的传播范围;有通过对矩阵进行运算从构件 层对需求变更影嗡的进行分析瞎】;有依据对变更嚣分类姨j a v a 语言酶语法特点 来圈定变更影响的范围【3 】等等。下面就从面向过程和面向对象这两个不同时期 来总结一下人锏对变更影确辩题的分桥方法。 i 2 1 面向过程的变更影响分析 在以面淘过程为主要开发方法的畦裁,人霰就已经注意到了变更影嚷薛润 题。1 9 8 8 年,文献 5 】提出了种关于模型的变更影响分析技术,主要观点是使 用数据流图来鉴别受影响鲍定义。使用d e f i 毪s e ) 对和予路径。文献【6 1 提滋了种 控制流图分析方法,以此来鉴别模型中受影响的控制路径。此后,h k 。j l e u n g 和l w h i t e 提出了一种防火墙技术,防火墙的作用是将程序变更所受影响的模块 与其他模块分割开来f 】瓦引。防火墙内的模块可以是与变更模块交互的模块,也可 以是变更模块的直接祖先或子孙。文献 9 】利用一种程序切片技术定义了一个选 择重测的集会,对每一个测试用例f 毫t ,采用不同的重测技术创建不同的切片。 并把切片技术分为四种不同的类型:执行切片、动态切片、相关切片和近似相 关切片。利用这四种切片技术中的任何一种,为测试用例t 创建切片s 1 ,如果s l 包含一个交受的状态,那么就选择测试用倒l 菱测。 2 0 0 3 年,文献【10 提出了基于状态模型的切片技术,其研究侧重于系统测 试,利用形式化语言基于模型测试来测试软件系统,利用e f s m ( e x t e n d e df i n i t e s t a t em a c h i n e ) 模型进行依赖性分析,得出的测试组件可以减少回归测试用例。 1 2 。2 面向对象软件的变更影响分析 随着面向对象语言的快速发展,人们对变更影响问题又有了新的认识。文 献【l l 】将变更影响分析技术运用于面向对象的环境中,所提出的类依赖图、程 序依赖图分别表示数据依赖和控制依赖。这里强调当一个类发生变化,通过图 确定类与类之间的继承、多态、动态绑定和封装等关系。19 9 7 年,文献 1 2 将 以前震予过程语言软件中的防火墙概念扩展到了面向对象的软件中。该方法把 变更后的类或对象以及与它们交互的类或对象圈到防火墙内。依据类之间和对 象之间的不网关系,分别构造了类放火墙和对象防火墙。 文献【1 3 】提出了一种类层次上的变更影响分析方法。该方法基于类防火墙, 使用成员函数作为测试单元,处理与各种面向对象特征相关的变更影响。采用 了成员依赖图来描述类中成员的依赖关系,进面对变更影响做出分析。 文献【1 】提出了一种基于控制依赖图变更影响追踪方法,它可以追踪各相关 元素的调用控制,并生成不阕的程序控制路径。这种方法可以用来预测变更秘 筛选回归测试的测试用例。 文献f 2 7 提出了一种软件需求变化追踪方法,分别从基于需求信息传播与 建横、需求变化信崽传播路径和需求变纯信息跟踪方法三个层面,阐述了软件 变化跟踪的整体过程框架。通过构建各种变化跟踪矩阵和可达矩阵,并对这些 矩阵进行运算,给爨了实旄变化所付懑代价高低的初步判定方法。 文献【2 】通过对原子变更的定义和对面向对象各种语法特点的分析,针对 j a v a 语言实现了一个变更影响的追踪工具。最后,利用此工具对回归测试的测 试用饲进行了筛选。 总之,研究者们从不同的侧面对变更类型进行了分类,对变更影响的追踪、 控制进行了分析研究。 本文立足于面向对象软件开发的整个过程,系统地分析了各个阶段对变更 的管理、追踪方法,并在代码层次上实现了对代码变更影响的分析跟踪。 2 1 3 本文的主要研究内容及意义 本文的主要工作包括四个部分,首先介绍了面向对象的一些基本概念和面 蠢对象软件酶特点,分析了霹向对象软件的特点对测试产生的影响,讨论了瑟 向对象软件的需求变更管理和追踪方法,并定义了变更影响分析相关基本概念。 然后,分别从类内和类间两个层次,对变更影响的传播机制进行了分析,提出 了类内变更向外传播的充要条件。接着,基于类成员图提出了变更影响的分析 算法。最后,提出了一个面向对象软件变更影响分析模型,并结合c 群语言实现 之。其具体的研究工作阐述如下: 阐述了面向对象软件在需求、设计、编码阶段的变更处理方法。 分析了需求变曼的原因,介绍了一种有效进行变更管理的五步过程启发式 和追踪需求变更的方法。分别阐述了分层思想和设计模式所能应对的变更类型 和处理变更的方法。提出了一种编码阶段处理变更的方法。 分柝了类成员之闻依赖关系,给_ 出了基于类成员依赖关系的交更影响分 析算法。根据不同类型的类成员依赖关系,分析了相应的依赖关系建立过程。 在此基础上,进一步提出了确定类成员依赖关系的算法、变更影响源和变更类 型识别算法、变更影响追踪算法。 构造了一个面向对象软件变更影响分析模型,并结合c 撵语言的特点,实 现了一个变更影响分析工具。 本文的研究意义:分析清楚了编码阶段的变更影响、较准确地追踪到了变 有影响的对象,就打遥了需求分析的变更影响追踪和测试用铡的筛选的关键环 节,为最终评估需求变更的代价和回归测试的成本铺平了道路。保存软件的每 次变更影响分析结果,可以为软件演化提供支持。 1 4 论文的组织结构 本文从面向对象软件开发的整个过程出发,分析了各个阶段对软俸变更的 处理方法,并着重研究了编码阶段的变更影响分析技术。 第一章绪论 介绍了面向对象软件的基本概念,讨论了国内终对变更影响的研究成栗, 分析了论文的研究意义。 第二章面向对象软件的变受影响分析 介绍了面向对象软件的基本概念和特点,以及面向对象软件在需求、设计、 编码阶段的变更处理方法。 第三章基于类成员依赖关系的变更影响分析算法 分析了类成员之间的依赖关系,提出了基于类成员依赖关系的变更影响分 析算法。算法总的来说分为王步。第一步,季叠攒代码,建立类或类成员之间的 依赖关系。第二步,确定变更类型和变更影响源。第三部,根据变更影响源、 变更类型和依赖关系确定变更影响的范围。 第圜章面向对象软件变更影晌分析原垄系统 构造了一个面向对象软件代码变更影响分析原型,并以此为基础实现了一 个变更影响分析工具。通过把该工具应用于“安徽省科学技术奖励网上申报评 审管理系统,证明该工具是有效的,对变更影响的追踪是比较准确的。 第五章总结与展望 总结了本文的研究内容,并对未来的工作进行了展望。 4 第二章面向对象软件的变更影响分析 传统的计算机编程方法将数据和过程分离开,但是许多分析员发现,这种 分离是不自然的。一个现实世赛中的对象,无论是天然的还是人造的,都有特 性( 类似于数据) 和行为( 类似于过程) ,这二者是结合在一起的。从这个角度 看,在计算机编程中也将数据和过程结合起来似乎是符合逻辑的。这种方法就 是西向对象软件开发方法。廉于面向对象软件具有封装、继承、多态等良好的 特性,面向对象的软件开发方法得以迅速普及。 2 1 面向对象的基本概念 面向对象系统利用抽象来降低软件的复杂度,抽象让人们从细节中解脱出 来。蔼向对象系统把过程抽象与数据抽象结合在一起。在早期的程序设计中, 软件是围绕着过程( 有些语境称之为函数或例程) 概念组织的。当使用某个过 程时,程序员无需关心过程内部执行计算的细节,瑟只需知道怎么样调用该过 程以及该过程完成什么样的计算即可。在所谓过程式范型中,整个系统由一组 过程组成。一个主过程调用若干其他过程,这些过程再调用其他过程。当程序 敕主要目的是使用相对简单的数据完成计算时,过程式范型的效果菲常好。但 是,如果许多不同的过程需要操作各自类型的数据,或是每个过程都需要操作 多种类型的数据,使用过程式范型编写的系统就交褥毒鎏常复杂了。 数据抽象有助于降低系统的复杂性。记录和结构是引入的第一级数据抽 象。从6 0 年代后期开始,程序员看到了围绕数据抽象组织程序的优点。如果把 所有访问与修改某对象类的过程都集中在一个地方,而不是让这些过程散步在 整个系统中,就会使系统简单得多。这种思想是面向对象范型的根源,到了9 0 年代,它邑经被认为是组织大多数系统的最佳方法了。 面向对象范型是一种解决问题的方法,其中所有的计算都是针对对象进行 的。对象是通常被称为类的程序设计结构的实例。类是一种数据抽象,它包含 着作用于对象上的过程抽象。在面向对象范型中,运行中的程序可以看成是一 组对象相互协作,共同完成指定的任务。 对象是在运季亍静软件系统中的一缀结构化数据。它可以描述任何可以将属 性和行为关联起来的事物。属性是对象的特征,描述对象的当前状态。行为是 对象动作与反应的方式,它有可能改变对象的状态。 类是面向对象程序中数据抽象的单元。特别是,类是一个软件模块,它描 述并定义了一组相似的对象。所有具有相同属性与行为的对象是同一个类的实 例。作为软件模块,类包含了与它的对象相关的所有代码,包括:描述类的 对象如何组织的代码,即每个对象内部实现属性的数据。过程,也称为方法, 它稍实现对象的行为。 变量是可以存放数据的地方。每个类声明了一个变量列表,其中的变量对 应予出现在每个实例中的数据,这样的变量称作实铡变量。属性是用来表示对 象特征的简单的数据项。关联表示一个类的实例与其他实例的关系。实例变量 可用于实现属性或用于实现关联。 变量与对象是完全不同的实体。在任意时刻,变量可以指向一个特定的对 象,也可以根本不指向任何对象。指向对象的变量称为引用。在程序执行过程 中,一个给定的变量可以指向不同的对象,或者说,一个对象可以同时被若于 不同的变量引用。 类所具有的变量称为属性。 面向对象程序中的“方法”一词与其他程序中的过程、函数或例程相对应。 方法是实现类的行为的过程抽象。操作是更高层的过程抽象,它用于描述和确 定一种类型的行为,并独立于任何实现该行为的代码。不同的类可以有同名豹 方法以各自的方式实现抽象操作。之所以使用“方法”一词,是因为在英文中 它的含义是“执行一个操作的方式”。 操作有时被称为方法,虽然严格来说,方法被限定为操作的实现,并且不 包括操作的特征。 一个操佟的特征提供了名字、参数和返圈类型。操彳乍在某种意义上是特征 加上方法,其中,方法是代码部分,它描述达成操作期望的行为所需要的逻辑。 如果运行中的程序在每次调焉操作时都要确定究竟调用哪一个同名方法, 就说该操作是多态的。多态是面向对象范型的一个基本特征。 2 2 谣南对象软件的特征 面向对象语言有以下特征: 标识。标识对象唯一性的符号。 类。程序员能够将代码组织成类,每个类描述一组对象的结构与功能。 继承。这种机制能将这些类构造成继承层次结构,子类可以从超类继承 特征。 多态。通过这种机制,与类相关的几个方法可以同名并实现同一个抽象 操作。这就是最终的动态绑定机制,即允许程序在执行的过程中决定调用哪个 方法。 抽象。建立一个抽象意味着建立对某个事物的简化表示,可以使用这种 简纯表示来代替原有的事物。抽象有助子处理复杂性。面向对象程序中有许多 抽象内容,如:对象、类、超类等。 模块化。面向对象系统可以完全蔫一系列类来构造,每个类负责特定的 功能子集( 与特定数据类型相关联的功能) ,而不是将这些功能散步于系统的许 多部件之中。 6 封装。类就像一个容器,其中包含着它的特征( 变量和方法) ,它还定 义了接口,使得只有一部分特征对外部可见。这就产生了信息隐藏。使用类的 程序员不需要了解类的所有细节。德佛只需知道该类的用户可以访问的特征。 这简化了整个系统,因为设计者和程序员需要了解的细节比使用其他方法少得 多。 2 2 1 封装性 封装性就是将对象内部的属性或方法封装在自己的对象内部,在对象内部 可以被使用或访问,但在对象的外部或者其它对象里不能使用封装的成员。一 般认为对数据和过程的隐藏就是封装。把数据和对数据操作的方法封装在一起 形成类。且类的封装限制了对象属性对外的透明性和辨赛对它的操作权限,这 在一定程度上避免了不合理的操作并能有效地防止错误的扩散,从而改善和提 高了软件的可靠性。 封装是一种信息隐蔽技术。用户只能见到对象封装界面上的信息,对象内 部对用户是隐蔽的。其目的在于将对象的使用者与设计者分开,使用者不必了 解对象行为的具体实现,只需用设计者提供的消息来访闯该对象。 封装应该具有如下几个条件: 具有一个清楚的边界,对象私有数据、内部程序( 成员函数豫l 节都被限 定在这个边界内。 具有一个接髓,这个接口描述对象和其它对象之间的相互作用、请求和 响应,即消息。 对象内部的实现细节受边界保护,其它对象不能直接修改对象所拥有的 数据和代码。 另一方面,面向对象软件系统运行时由一组协调工作的对象组成,对象具 有一定的状态,测试应涉及对象的初态、输入、输出、对象的终态,信息隐蔽 机制给对象状态的观察、测试用例的生成、测试点的选取等带来了障碍,测试 者往往要添加一些表明对象内部状态的函数。因此,信息隐蔽和封装加大了测 试瀚难度。 2 2 。2 继承性 在面向对象的程序中,继承性是一种概括对象共性和组织结构的机制,使 得面向对象设计更具自然性和直观性,是一种有效的重用手段。继承是予类对 超类特征的隐式占有。壶于继系的作焉,一个丞数可麓被越装在多个类幸,子 类不但具有父类中的特征( 数据与方法) ,还可以对其进行重定义。 在面向对象系统中,良好的类层次结构有助于提高软件的可重用性。但多 重继承( m u l t i p l ei n h e r i t a n c e ,一个子类有多个父类时) 和重复继承( r e p e a t e d i n h e r i t a n c e ,类层次图中一个子类能通过多条路径继承同一父类的特征) 虽然使 7 软件的共享程度有所增加,德也显著增加了予类的复杂性,并且会导致一些从 功能角度很难发现的隐含错误。总之,继承性使测试更加复杂。 继承是逝向对象描述类之间相似性的一个重要机制。在现实世界中大量的 实体都存在一定程度的相似性。这种相似性可能表现在实体的外形上,也可能 表现在实体的行为和内在特性上。人们总是希望能够最大程度地利用种种相似 性,不仅在管理系统的类的时候,在定义新熬类的时候也希望透过利用这种相 似性来简化工作,并重用以前的工作。面向对象利用继承来表达这种相似性, 这使得可以剥用继承来管理类,同时也使褥在定义一个与先前已经定义的类相 似的类时能简化类的定义工作。 继承也刻画了类的一般性和特殊性,被继承的类可称为父类或超类,继承 的类可称为子类。可以看出,继承这种机制使得类的接述具有了层次结构,处 于同一层次结构中的类共享顶层类所定义的属性和操作。因此继承机制使类从 一开始就具有了继承和被继承的能力,简丽言之,就是具有了重月和被重用的 能力。 与继承相对应的是泛化这一概念。泛化是一个一般的事物( 称为超类或父 类) 和一种更特殊的该类事物( 称为予类或孩子) 之闻的关系。泛化一般用“是 一种或“是一类规则来验证。当一个子类多于一个类继承时,泛化关系会 导致多继承。 2 2 3 多态性 多态性是指对象的某个行为具有多种形态的特性。或者说,囝一消息可以 根据发送消息对象的不同采用多种不同的行为方式,就是多态的概念。运行时 系统能量动必给定消息选择合适的实现代码,这给程序员提供了很多好处,如: 柔性代码、便于问题抽象等。它的突出优点是使程序具有良好的扩展性。行为 的多种形态封装在对象内部,外界并不知道。一个行为的多种形态从外界看来 具有相同的行为名称( 也繇相同的消息名) ,因此外界看到的只是一种行为。其 体应该执行哪种形态由对象自己根据接收到消息里的相关参数决定。 僵多态性和动态绑定所带来麴不确定性,使褥传统测试实践中静静态分析 方法遇到了很大的障碍。而且它们也增加了系统运行中的执行路经,加大了测 试用例的选取难度和数量。 多态性可以靠动态绑定技术实现。当试图调用变量的操作时,程序“即时 地”决定运行哪个方法,这个决定做出的过程称为动态绑定,或晚绑定。可以 假定动态绑定是按照以下过程完成豹: 程序查看实际存储在变量中的对象的类,如果该类含有操作的具体方 法,则程序运行这个方法。 否则,它在直接超类中查看是否有方法存在。如果有,则运行这个方法。 程序重复第2 步,在相继的高层超类中查找,鱼到找到一个具体方法, 8 并运行它为止。 如果没有找到方法,则产生一个错误。 2 2 4 关联性 关联是类的实例( 或对象) 之间的一种关系,它可以是同一个类的对象之 闻酶一种关系。尽管关联是在对象酶层次上被认知静,但抽象表示将它显示势 类之间的个链接。当一个对象通过对另个对象的引用去使用另一个对象的 服务戴操侔对,两个对象之阕便产生了关联。 关联的一种更强的形式是聚合,也被称为整体部分关系。在聚合中,没有 部分整体就没有意义,但是没有整体时,部分可能存在,也可能不存在。例如 汽车与轮胎麴关系就是聚合关系。 一种更强的聚合情况被称为组合。在组合中,没有部分时整体就没有意义, 没有整体时部分也没有意义。铡魏久巍入鲢心脏就是缀合关系。 2 3 两向对象软件需求分析阶段的变更处理 需求分析是面向对象软髂开发最早开始熬一个阶段,其毯的是定义清楚所 要解决的问题。因此这一阶段与问题域邻接最紧,在这一阶段出现的变更也最 复杂。 2 3 1 需求变更的原因 需求发生变更酶原因是多方匿的,有属于开发过程可激攘裁的范黧之肉熬 内部原因,也有超出需求相关者所能控制的范围的外部原因。需求变更可能的 外部骚霸包攒: 首先,外部原因可能使闷题本身发生了变化。饪何软件系统的开发和部署 都是有目的的,即期望它能解决软件加强型系统中的某个或某些问题。如果解 决煞闻题发生了交傀,也就是系统熬雾的发生了变化,当然需求提供者的期鋈 也必然发生变化。问题的变化可能是由于社会经济情况发生了变化,也可能是 出于玻惑规章发生了变化,还霹能惠予市场情况和客户壤好发生了交纯,等等。 其次,需求提供者的意图可能发生了变化。即关于待开发系统要做什么, 需求提供者改变了原来的想法。发生这种情况,可能是因为需求本身就是需求 提供者的想法,丽想法总是易变的,也可能燕嚣隽箍稍的观念会随着社会经济 情况、政府规章、或者市场情况等的改变而改变。同时,随着对系统意图的变 能,霹畿涉及戆需求穗关者也发生了变能,嚣来的需求提供者不褥是现在的需 求相关者。而原来不属于需求相关者范围的人进入了需求相关者的行列,前一 组人和羼一组人很可能有截然不嘲的想法。 第三,外部环境的变化绘待开发系统带来了新酶约束或新的视会。比如, 环境变化的一个最明显的例子就是硬件或软件系统的升级。如果以后的计算机 9 ( 比如量子计算祝) 要远远超越现在计算视的计算筏力,很多现在不能实现的 算法或许就变得容易实现,因此对什么是可满足的需求就有另外的说法。 第四,在当蓠系统的周圈鲞现了新的系统。因为弓| 入一个新系统,会弓| 起 对当前系统本身的需求发生变化,这是因为e l j 于新系统的引入引起了组织行为 的变化,旧的工作方式已经不再适合,出现对新的信息类型的需要,因此对系 统的新的需求不可避免地会出现。 当然,除了这些外部因素导致的需求变化之外,还有很多一些变化来源予 系统开发小组内部和系统开发过程之中。比如,在初始需求采集的过程中,没 有在正确的时间找到正确的人问正确的问题,因而导致需求描述本身禽有这样 那样的问题。例如,需求抽取时没有囊括所有的需求相关者,提的问题不全或 者不正确,等等。这些问题都可以归结为没有理解关于系统的真正需求。要避 免这种情况引起的需求变化,需要有一个合理的需求理解过程。又如,没有采 取有效的过程来帮助管理不断增加的需求变化。铡如,曾经试图“冻结摊需求, 即不允许改,从而使得需求变化越积越多,直到给需求工程师和需求提供者带 来无法避免的需求崩溃的压力,导致返工。即使一切都没有问题,设计的时候 也会弓l 入新的需求,从而带来需求的必要的变化。这对软件开发系统来说是好 的变化。避免这种变化的发生可能会丧失设计过程中由设计决策或技术变化带 来昀创新能力。 2 。3 2 需求变更管理及追踪 实际项舀实施中一般有两种常用的方法来管理变更。第一种方法包含一些 变更管理的基本原则和策略,实施过程中则主要基于需求工程师在需求管理中 的经验。第二种方法提供一定的手段来帮助需求工程师实施变更的管理。 关于变更管理,l e f f i n g w e l 中给出了有效进行变更管理的过程启发式,主 要包括如下5 个步骤: 步骤1 :认识到特定需求的改变是不可避免的,为这个改变制定计划。当 改变需求的请求出现时,需求工程师必须首先站在改变是不可避免而且是必要 的这个立场上来认识这个改变,并置割定褶应的l 汁划来准备管理这个改变。关 于改变的合理性问题,也要首先承认任何来囱需求相关者的现实和潜在需要都 是合理的,除毒有明显和充分的否定理由。 步骤2 :为需求文档制定基线。在需求文档的每次迭代周期中,都要为需 求文档建立基线,也就是说,固化需求文档的版本,然后利用需求文档版本控 制手段去管理需求文档的发布及需求文档中需求条款的增加、删除和更新等。 建立需求文档的基线,使得更容易识别和管理新需求,对新需求的请求可以与 现有的基线版本进行琵较,从蒸找到新需求的位置,以及它可能弓| 起冲突的地 方,这样可以更好地帮助需求工程师判断目前是否可以接受这个变更。这样, 可以使变更管理以一种有序、有效和及时响应的方式进行,让需求提供者更愿 1 0 意合作。 当然,能够有序有效地进行需求改变并不意味着我们可以随意地接受任何 的交曼请求。对饪俺项霹来说,需求赫变更数超过了一定盼限度,都会导致当 前系统开发的失败。 步骤3 :建立单一的渠遭来控制需求舱变位。任簿对鬟求变更的请求都通 过网一个渠道提交,经过两样的影响分析,并统一做出是否采纳这个变化的决 定。在任何情况下,系统需求的变更都要等到这个变更被变更管理机制确定为 “富方静的才起馋震。 步骤4 :使用变更控制系统来捕捉变蔓。在某种意义上,外部的和客户请 隶的变更更容易获褥,因为这种变傀毙较容易判别,黑顼墨警理或变更控铡麓 方法也比较好找到这些变更将影响的地方。僵在软件开发过程中,变更的类型 是多种多样的,有与需求相关的,也有针对代码和设计方案的,很难制定统一 的标准来判断哪些变更需要考虑,哪些变更必绥忽略。步骤3 曾指密褥一个通道 来接纳变更将能更好地支持变更的管理,为了管理和捕获这些变更,在这个通 道上设置了一个交受控制系统来识捌、评佶翻决定最终需要采纳的变曼,将是 一种有效途径。图2 1 示意了这个变更控制系统的作用。 被批 图2 - i 变更控制和变更请求流 变更控剿系统的功能包括:评 吉变更对系统开发酶开销积系统功麓性静 影响;分析变更对客户和其他外部需求相关者的影响;研究变更对破坏系 统的稳定性的可能。 步骤5 :层次讹遮管理变更。没经过分挺和管理麴变更可靛会带寒阏题, 因为如果需求是相互关联的话,需求的变更会引起连锁反应。层次化地管理需 求变更,批臻变曼也需要扶最底层的需求变更开始,将这些变更带来戆对上一 层的需求的影响结合到上一层的需求变化一起进行分析和影响评估,直到所有 的变更都考虑到。下面介绍的需求追踪链可以用来支持这种层次的变更管理。 必须说明的是,需求翡变更开销是很大,焉且开发越往前走,变更的开锩 越大。因而在实际项目管理中,对每个变更请求都需要慎重对待,必须从技术 可行性、对其他部分的影响以及开销上进行综合考虑。另外,变更管理涉及需 要跟踪大量跨越较长时闻段的相互联系的信息,没有工具的支持,变更管理可 能很难成功。这就需要对需求进行跟踪。 让需求之闻、需求和设计之闯具有可追踪关系有两个方面的含义:第一, 开发过程中的两个或多个制晶之间能够建立某种程度上的关系,特别是前件 后件关系、主从关系等,从褥发现制品变更的影响;第二,可以建立软件制品 中各个元素与其存在理由之闻的关系。 其中,第一方面定义是关于项目元素的后续关系,第二方面定义希望保证 没有多余的项誉元素存在。为了将这些元素关联起来,必须零i 入第三个元素, 用于将上述两个元素关联起来,这个元素就是可追踪关系,也就是说,可追踪 关系是两个元素之闻的关系。值得声唆的是,这里元素鲍说法比较笼统,它可 以是软件开发过程中的中间制品,也可以是这些中间制品中的一部分或者一个 条目。关系也有不同的类型,如由满足、是部分、从导出等。这 些关系隐含了一种依赖关系,这个依赖关系说明一个元素的变更可能会影响另 一个元素。 这种项霹元素之间的依赖关系有缀多种,表2 1 绘出了常见的六种。 表2 1 可追踪性信息的类型 可追踪性类型描述 需求源可追踪性把需求和说明需求入或文档链接起来,记录需求 源 需求理由可追踪性把需求和为骨么说骥该需求的描述链接起来,记 录需求理由 需求需求可追踪性把需求和其他要依赖于该需求的需求链接起来, 记录需求之间的依赖关系 需求体系结构可追踪把需求和实现该需求的子系统链接起来,这对子 性系统由不同的开发奎组开发来说特别重要 需求设计可追踪性把需求和用来实现该需求的系统中的特定组件 链接起来,这些组件可熊是软件或者硬 牛组件, 对于关键系统来说维护这种类型的信息特别重 要 需求界面可追踪性把需求和用于提供该需求的外部系统界面链接 起来,应该维护对其他系统有很高依赖性的信息 1 2 鼙前有三种基本的技术,可以用予维护可追踪性信息,它们是可追踪性表、 可追踪性列表和自动化可追踪性链接。 可追踪性是一个顼量元素前后参照的矩阵,表中的条基表示在行项基和列 项目之间的某种可追踪性的链接。可追踪性表格显示了需求之间或者需求和设 计组件之间的关系,需求在水平和垂直轴上列如,需求之间的关系标在表格的 单元中。例如,如栗行x 所代表的需求依赖予到p 、q 和r 所代表的需求,则应 该在表的( x ,p ) ,( x ,q ) 和( x ,r ) 单元格上标记记号。这样顺着一列读, 可以看到依赖于这一列所代表的需求的所有需求,顺着一行读,可以看翻这一 行所代表的需求依赖的所有需求。表2 2 显示了一个简单的含六个需求的系统的 可追踪性表格的例子。 表2 。2 可追踪性表 r tr 2r 3 r 4 r 5r 6 r 1 幸臻 r 2 幸幸 r s 臻毒 r 4 木 r s r 6 可追踪性列表是可追踪性表的简化形式,对每个需求描述来说,维护一个 或多个相关霈求的标示符的捌表。表2 3 给出了表示表2 2 中的依赖性的哥追踪 性列表。 表2 - 3 可追踪性列表 需求依赖 r lr 3 ,r 4 r e r 5 ,r 6 r 3r 4 ,r 5 r 4r e r 5r 6 自动化可追踪性链接指相应的数据库来包含可追踪性信息,可追踪性链接 在数据库记录中作为一个字段。这样可以管理大量的需求之闻的依赖关系,并 可以利用数据库系统来维护和操作这样的需求依赖关系库,如快速查询、提取 相关的需求和需求依赖关系,自动生成可追踪性表和列表等。 2 4 面向对象软件设计阶段的变更处理 如果说需求分析是与决定需要做什么相关的,那么设计就是与如何实现穗 关。在软件设计阶段的变更主要包括:软件运行环境的变更、开发工具的变更、 要勰决的闻题的变更。这一阶段应对变受的焦度有两种,即:利焉分层思想在 体系结构上隔离、封装变更;利用设计模式对某一领域的具体问题进行设计。 下西分别论述之。 2 4 1 分层体系结构 在一个分层或层次体系结构中,系统被分为层,这样每个层执行特定的一 种功能并通过接口与和它邻接的层通信。给定的一个层只需要关心它自己的实 现,其他层的接口保证了它们的功能。常见的层次体系结构有:两层系统结构、 三层体系结构和n 层体系结构。 两层体系结构,或客户一一服务器系统结构,包括两个层:应用层( 也称 前端) 和数据层( 也称后端) 。应用层有一个图形纯用户界面和应用逻辑,它篇 本地驱动程序或支持数据访问的中间件和一个数据库通信。数据库安装在服务 器上,而且是被共享的。但是,应用程序需要被单独安装在客户机上。这秭体 系结构对简单应用程序是足够的,但是对复杂的应用程序,有以下问题:客 户端厚重。对应用程序的任何修改都需要在各个客户端重掰安装。两层应 蔫程序通常用专有的技术实现,丽专有的技术不能缀好的集成。 两层体系结构只适合比较稳定的系统,不适合经常变化的系统。 三层体系结构把两层体系结构的应用层细分为表示层和业务规则层。表示 层处理用户界面,表示层可以用各种程序设计语言开发,如j a v a 、v b 等。业务 规则层不仅包含业务逻辑,还包含与一端的表示层和另一端的数据库层交互的 类和构件。褥这些类和构俘可以采用一种非专有的标准,毙如基于x m l s o a p 的体系结构。在三层体系结构中,一些嵌入在存储过程中的逻辑可以被转移到 中闻层并仍被共享,丽且可以用一种菲专有的语言编写,以便最小化对一种特 定技术的依赖。三层体系结构具体以下优点:该体系结构是松散耦含的。可 以对一个层进行修改,只要接口( 结构) 不变,变更就应该引起对系统中其它 层的最少修改。该体系结构导致的不仅是数据的复用,而且是业务规则的复 用。处理负载遍布在多个计算机上,因此,系统更加可伸缩。 三层体系结构可以很好的应对软件环境的变更、舞发工具的变曼和数据库 的变更。下图所示的w e b 应用三层体系结构就可以很好的处理这些变更。 1 4

温馨提示

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

评论

0/150

提交评论