




已阅读5页,还剩57页未读, 继续免费阅读
(计算机软件与理论专业论文)遗产软件的系统理解方法.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
山东大学硕士学位论文 摘要 随着信息技术产业的飞速发展,出现了大量的遗产软件。这些软件被维护 了很长时间,软件结构日趋混乱。而且由于新技术、新需求的产生,必须对这 些软件进行更新。然而全新开发一个系统,要浪费很大的人力和物力,充分利 用遗产软件是一种积极的态度。再工程技术,是在遗产软件的基础上,开发一 个新系统的方法,使遗产软件得到了充分利用。它包括三个过程:逆向工程、 重构、正向工程。系统理解是逆向工程中最困难的部分,怎样能够充分理解遗 产软件是一个非常重要的问题。 元对象分析法是理解面向过程遗产软件系统的一种形式化方法,这种方法 以面向对象的上下文无关文法为基础。本文的重点是研究面向对象遗产软件的 系统理解,我们用形式化的方法得到遗产软件的度量值,这些度量值能够反映 面向对象的遗产软件的一些特性,但是它的数据量太大,人们对遗产软件系统 很难有一个整体的把握,而且速度较慢。用图形形象化地表示面向对象的遗产 软件的度量值,能够使人们从整体上了解遗产软件的内部结构,和一些结构方 面的缺陷。使用不同的图来反映遗产软件的不同侧面,在这些图中用节点的大 小( 长和宽) 、颜色和位置代表不同的度量值来描述遗产软件,可以很容易看 出软件的结构及其缺陷。为了能较好地画出各种图,本文设计了多种不同的映 射算法,把度量值映射到不同的整数范围。本文详细讨论了几种形象化表示软 件度量值的图:树、相互关系图、柱状图、格状图、分类图、对峙图、圆和盒 状图,以及它们的主要思想、适用范围、可以表示的度量值、节点分类影响和 优缺点。 最后把度量值的图形表示理论应用于实际项目的再工程,主要做了纳尔数 码图像系统的类内聚图、类耦合内聚图和方法效率图。 关键字:遗产软件、再工程、系统理解、面向对象上下文无关文法、面向对象 的软件度量 山东大学硕士学位论文 a b s t r a c t w i t ht h er a p i dd e v e l o p m e n to fi ti n d u s t r y , al o to fl e g a c ys o f t w a r ea p p e a r s t h es o f t w a r ew a sm a i n t a i n e df o rl o n gt i m e ,s oi t sa r c h i t e c t u r ei st a n g l y w h a t m o r e , n e wt e c h n i q u ea n dn e wr e q u i r e m e n tb r i n go u tq u i c k l y , s ot h es o f t w a r em u s tb e r e n e w e d h o w e v e r , i f w ed e v e l o pt h e s y s t e ms t a r tf r o ms c r a t c h m u c ht i m ea n d m o n e yw i l l b ew a s t e d i t sag o o di d e at om a k ef u l lu s eo fl e g a c ys o f t w a r e r e e n g i n e e r i n gi sag o o dm e t h o d t om a k ef u l lu s eo f i t ,w i t hw h i c hw ed e v e l o pt h e n e w s o f t w a r e r e - e n g i n e e r i n g i n c l u d e st h r e e p r o c e d u r e s :r e v e r s ee n g i n e e r i n g , r e c o n s t r u c t i o n ,f o r w a r de n g i n e e r i n g s y s t e mc o m p r e h e n s i o ni st h em o s td i f f i c u l ti n r e v e r s ee n g i n e e r i n g h o wt ou n d e r s t a n dl e g a c ys o f t w a r es y s t e mt h o r o u g h l yi sv e r y i m p o r t a n t m e t a o b j e c tp a r s i n g i saf o r m a l i z e d m e t h o d ,w h i c h i su s e df o r s y s t e m c o m p r e h e n s i o no f t h ep r o c e d u r e o r i e n t e dl e g a c ys o f t w a r e t h em e t h o di sb a s e do n o b j e c t o r i e n t e d c o n t e x tf r e e g r a m m a r o b j e c t o r i e n t e dl e g a c ys o f t w a r e ss y s t e m c o m p r e h e n s i o ni st h ee m p h a s i si nt h et h e s i s w eo b t m nt h em e t r i c so ft h el e g a c y s o f t w a r eb yf o r m a l i z e dm e t h o d t h em e t r i c si m p l ys o m ec h a r a c t e ro ft h el e g a c y s o f t w a r e b u tt h e ya r et o om a n y , s ow ec a n tu n d e r s t a n dt h es y s t e mh o l i s t i c a l l y m o r e o v e r , s y s t e mc o m p r e h e n s i o nn e e d sm u c ht i m e i fm e t r i c sa r ec o m b i n e di n t o g r a p h s ,t h ea r c h i t e c t u r eo ft h el e g a c ys o f t w a r ec a nb eu n d e r s t o o dh o l i s t i c a l l y , a n d t h ed e f e c t so ft h ea r c h i t e c t u r ec a nb ef o u n de a s i l y d i f f e r e n tg r a p h sa r eu s e dt o r e v e a ll e g a c ys o f t w a r e sd i f f e r e n tp r o f i l e i nt h eg r a p h s ,t h en o d e ss i z e ( 1 e n g t ha n d w i d t h ) ,c o l o ra n dp o s i t i o nc o m b i n ed i f f e r e n tm e t r i c so ft h el e g a c ys o f t w a r e t h u s t h ea r c h i t e c t u r ea n dt h ed e f e c t sa r ef o u n de a s i l y s o m ek i n d so fa l g o r i t h m sa r e d e s i g n e dt om a p p i n gm e t r i c st oa ni n t e g e ra r r a yf o rc o n v e n i e n c eo fl a y o u t s o m e g r a p h sc o m b i n i n gm e t r i c sa r ed i s c u s s e di nd e t a i li nt h et h e s i s ,s u c ha st r e eg r a p h , c o r r e l a t i o ng r a p h ,h i s t o g r a m ,c h e c k e r g r a p h ,s t a p l e dg r a p h ,c o n f r o n t a t i o ng r a p h , c i r c l eg r a p ha n db o x g r a p h ,a sw e l la st h e i rm a i ni d e a ,s c o p e ,m e t r i c s ,s o r ti n f l u e n c e a n d p r oe tc o n t r a a tl a s t ,t h eg r a p h sc o m b i n i n gm e t r i c sa r eu s e di na ni n d u s t r i a l s u b j e c t t h e c o h e s i o ng r a p h ,t h ec o u p l i n g & c o h e s i o ng r a p ha n dt h em e t h o de f f i c i e n c yg r a p ho f n a r lp h o t om a n a g e m e n t s y s t e m a r e p o r t r a y e d k e y w o r d s :l e g a c ys o f t w a r e ,r e - e n g i n e e r i n g ,s y s t e mc o m p r e h e n s i o n ,0 0 c f g , o om e t r i c s i i 原创性声明 本人郑重声明:所呈交的学位论文,是本人在导师的指导下,独立进 行研究所取得的成果。除文中已经注明引用的内容外,本论文不包含任何 其他个人或集体已经发表或撰写过的科研成果。对本文的研究作出重要贡 献的个人和集体,均已在文中以明确方式标明。本声明的法律责任由本人 承担。 论文作者签名: 关于学位论文使用授权的声明 本人完全了解山东大学有关保留、使用学位论文的规定,同意学校保 留或向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅 和借阅;本人授权山东大学可以将本学位论文的全部或部分内容编入有关 数据库进行检索,可以采用影印、缩印或其他复制手段保存论文和汇编本 学位论文。 ( 保密论文在解密后应遵守此规定) 论文作者签名:鲤导师签名:日期:乏虹壁! 三! 蟹 山东大学硕十学位论文 第一章绪论 1 1 研究背景 随着计算机技术的飞速发展,计算机软硬件的更新速度越来越快。出现了 越来越多的遗产软件,这些软件已经被应用和维护了很长的时间,它们采用 的是传统的开发工具和技术,而且随着时间的推移,出现了许多新的需求,它 们对于现在的环境已经不适用了。如果抛弃遗产软件,重新开发一个全新的系 统,肯定要浪费很大的人力和物力。如果能够充分利用遗产软件,在分析遗产 软件的基础上开发一个新的系统,那么将节省很大的人力和物力,这就是软件 再工程【2 l 。现存的遗产软件有用面向过程的语言开发的软件也有用面向对象的 语言开发的,所以我们对不同的遗产软件采用不同的再工程方法。 遗产软件由于当时开发或后来维护的原因,存在很多缺陷:文档资源不详 细,设计语言陈旧,长期维护使得结构混乱,因此它的软件结构比较难于理解。 这些都是软件再工程需要解决的问题。一般把软件再工程分为以下几部分:逆 向工程、软件重构、正向工程。通过软件的再工程,增强了对软件结构的理解, 形成了完善的开发文档,增强了软件的可重用性,可维护性,可扩展性。软件 再工程的难点是逆向工程,它主要的工作是系统理解,它关系着软件再工程的 成败。逆向工程通过对遗产软件的源代码、设计文档、以及其他文档资源的分 析,得到系统的全面而详细的信息,为软件重构奠定坚实的基础。 1 2 论文结构 第一章绪论介绍了选题背景。 第二章介绍了软件再工程的一些相关概念:软件维护、逆向工程、重构、 正向工程和再工程,并讨论了系统理解的重要性。 第三章讨论了一种面向过程的遗产软件的系统理解方法。先讨论了面向过 程的遗产软件的问题,接着引出面向对象的上下文无关文法,最后讨论了基于 面向对象的元对象分析法。 第四章讨论了一种面向对象的遗产软件的系统理解方法一度量。先讨论了 面向对象遗产软件需要再工程的原因,接着讨论了面向对象软件度量的相关内 容,特别是c k 度量集、m o o d 度量集及m o o d 2 度量集。 山东大学硕士学位论文 第五章讨论了另一种面向对象的遗产软件的系统理解方法一软件度量的 图形表示方法。先根据实际应用选择了一些容易用图形表示的度量,其中包括 类的度量集,方法的度量集和属性的度量集。接着提出了度量值的图形表示方 法,设计了几种度量值映射算法,还有一些实施法则。最后提出了几种可以形 象化表示软件度量值的图形,如:树、相互关系图、柱状图、格状图、分类图、 对峙图、圆、盒状图等。 第六章把度量值的图形表示方法应用到具体实际项目中。主要做了纳尔数 码图像系统的类内聚图、类耦合内聚图和方法效率图。 结束语是本文的总结,概括了本文的主要内容、个人工作及将来需要做的 工作。 山东大学硕士学位论文 第二章相关概念 2 1 软件维护 a n s i 这样定义软件维护( a n s i i e e es t d7 2 9 1 9 8 3 ) :软件产品交付使用 阱后,对其修改错误,提高性能或其他属性,或使软件产品适应环境的改变, 称为软件维护。就是软件产品交付使用以后对软件进行修改,目的是为了:改 正在特定的使用条件下暴露出来的一些潜在的程序错误或设计缺陷;使软件适 应在软件使用过程中数据环境或处理环境所发生的变化;改进现有功能,增加 新的功能,以及改善总体性能。 软件维护活动可以归结为以下几类:改正性维护、适应性维护、完善性维 护和预防性维护等。通常软件的维护者并不是软件的设计者,所以他们必须利 用大量的资源,花费大量的时间来了解软件系统。但是由于现在软件系统越来 越庞大,不可能把整个软件系统理解地特别清楚,所以在对源程序进行修改时, 原有的软件系统结构必然会慢慢地变得混乱起来。 2 2 逆向工程 术语“逆向工程i 2 】,最初出现在硬件领域,是公司为了复制竞争对手的硬 件产品,对产品的实际样品进行分解,以得到该产品的结构,导出该产品的一 个或多个设计与制造的规格说明,这个分解获取制造方法的过程就称作“逆向 工程”。随着软件业的发展,逆向工程这一术语被引入软件工程领域,软件的 逆向工程是类似的。软件逆向工程的目的是获取对软件系统设计的各个层次上 的充分理解,支持软件系统的维护、更新和扩充。 逆向工程是一个系统理解的过程,通过对已有系统分析的过程,通过分析 识别出系统中的模块、组件及它们之间的关系,并以另一种形式,或在更高的 抽象层次上创建出系统表示。逆向工程的目的就是要在缺少文档说明、或根本 没有文档的情况下,还原出软件系统的设计结构、需求实现,并尽可能地找出 内部的各种联系,相应接口等,从而恢复出已遗失的信息,侦测出存在的缺陷, 生成完善的系统视图,综合出较高的抽象表示。 一般将软件逆向工程定义为包含信息抽取和信息抽象这两个步骤的过程: 山东火学硕士学位论文 第一步分析目标系统,标识目标系统的组件以及他们之间的相互关系,第二步 创建不同形式或更高抽象层次的系统表示。s c o t tr t i l l e y 将这两个步骤迸一步 细化为建模、抽取和抽象三个步骤: 1 建模( m o d e l ) :采用概念建模技术构造应用程序的领域模型。 2 抽取( e x t r a c t ) :利用适当的抽取机制从目标系统中收集原始数据。 3 抽象( a b s t r a c t ) :对目标系统进行抽象,以辅助系统理解并允许浏览、 分析和表示抽象结果。 国家自然科学学科发展战略报告计算机科学技术部分中是这样定义软件 逆向工程的:从可运行的程序系统出发,生成对应的源程序、系统结构以及相 关设计原理和算法思想的文档等。从这个定义可以看出,软件逆向工程可以用 于较低级的抽象层次,例如把可执行程序转换为源代码,但主要是用于将源代 码转换为更高抽象层次上的表示,如控制图、数据流图和类关系图等。软件逆 向工程过程如图2 1 : 图2 1 逆向工程与其他相关过程关系 2 3 重构 重构【2 】是在保持目标系统的外部行为( 功能和语义) 的前提下,从一种表 示形式到相同抽象级别的另一种表示形式的转换。逆向工程中所恢复的设计结 果,为重构提供了可供变更的对象;正向工程根据重构结果进行一个新的软件 系统开发实施过程。所以,重构是连接逆向工程与正向工程的纽带。下面是几 种比较重要的重构: 1 。代码重构 代码重构能够生成具有相同功能的设计,而该设计的质量要比源程序更 山东大学硕士学位论文 高。代码重构技术通常用布尔代数对程序逻辑建模,然后应用一系列变换规则 来重构逻辑,其目标是导出符合结构化程序设计要求的过程设计。 2 数据重构 开始数据重构之前,必须先进行分析源代码的逆向工程活动,评估所有包 含数据定义、文件描述、i 0 以及接口描述的程序语句,目的是抽取数据项和 对象,获取关于数据流的信息,以理解现存的已实现的数据结构。 3 设计重构 很多遗产软件的结构已经变得混乱,也可能有了新的需求,要对原来的设 计进行重构,这就是设计重构。设计重构的主要工作是结构上的调整,使得新 的系统设计更合理,结构更清晰。它涉及的是最抽象的部分,主要是系统结构 逻辑上的更改。 2 4 正向工程 新的目标系统的生成是通过正向工程 2 】来完成的。它从前期工作生成的与 逻辑实现无关的抽象描述开始,一步一步地向下精化,直至生成可替换旧软件 系统的新系统及相关的详细文档。这一过程与通常的软件开发过程相类似。但 由于软件再工程的费用一般都比较少,怎样有效地重用原有的代码,怎样做最 方便的替换,以便更好地节省开支,是正向工程要考虑的特殊问题。同时,正 向工程的成败与逆向工程的深入程度密切相关。 正向工程也就是传统的软件开发过程,即把用户的需求转变成软件产品的 过程,引入正向的概念是为了区别逆向工程和软件再工程。软件正向工程包括 对用户的需求进行分析,根据需求作出总体设计和详细设计,再用代码实现, 测试该代码,进行代码安装和软件交付运行使用,以及软件维护。这些活动可 以重叠,执行时也可以迭代,但活动的总体次序是从上到下,从软件的高层抽 象到软件的低层抽象,从系统的逻辑设计到系统的物理实现,即正向的过程。 正向工程过程如图2 2 9 】: 山东大学硕士学位论文 图2 2 正向工程的瀑布模型 2 5 软件再工程 由于软件再工程涵盖的方面比较广,软件再工程还没有一个统一的概念。 l i n d a h r o s e n h e r g 博士这样定义软件再工程:“软件再工程是为了以新的形式 重构己存在的软件系统而进行的检测、分析、更替及随后的对新形式的实现, 这个过程包括了其他一些过程,诸如逆向工程、文档重构、结构重建、相关转 换以及正向工程等。它的目的是理解已存在的软件( 包括规范、设计、实现) 。 然后对它重新实现以期增强它的功能,提高它的性能,或降低它的实现难度, 客观上达到维持软件现有功能并为今后新功能的加入做好准备的目标。” 从广义上讲,软件再工程属于软件维护范畴。软件再工程的具体目标有以 下几个方面:为功能追加、增强作准备。软件再工程通过对原系统用新的设计 思想重新实现,对原文档的更新,使今后能方便地对系统进行功能的追加和增 强。软件再工程在以下方面可以提高软件的质量: 提高可维护性。经过不断的维护日趋复杂的系统,经过软件再工程,其模 块划分会更合理,接口定义更清晰,文档更齐全,从而更易维护。 提高可移植性。软件再工程将一些优秀软件移植到新的硬件平台、操作系 统或语言环境从而使它们能够利用新环境的新特性,更好的发挥作用。 提高可靠性。因为软件的各个部分有着千丝万缕的联系,所以在软件的维 护的时候,修改一处,波及多方。这将导致系统的稳定性和可靠性逐渐降 低,直至让人无法接受。软件的再工程可较好地解决这一问题。 山东大学硕士学位论文 提高可扩充性。经过软件再工程,使得软件结构更合理,而且提供了软件 扩充的接口,如果有了新的需求,软件扩充更加容易。 软件再工程模型如图2 3 : 压匝因 t 现存系统- - 目标系统 图2 3 软件再工程模型 从图2 3 中可以看出,逆向工程在遗产软件的再工程中起非常重要的作用, 重构和正向工程以逆向工程的结果为起点,而系统理解是逆向工程的基础,所 以,系统理解是软件再工程的基石,决定着软件再工程的成败。 山东大学硕士学位论文 第三章面向过程遗产软件的系统理解方法 3 1 面向过程遗产软件的问题 现在有一些面向过程遗产软件还在使用,但是他们已经不能适应环境的变 化,迫切需要更新换代。提高软件适应性的个可行的途径就是将软件系统移 植到面向对象的技术中,然而,这个移植工作是非常复杂的。必须先识别出遗 产软件系统中的候选对象。目前有几种方法可以进行对象标识,但是将这些方 法应用于实际的遗产软件系统时会带来如下的几个问题: 不同的遗产软件系统在源代码语言、应用领域、采用的数据库系统等方面 有很大的差异,很难选出最适合当前遗产软件系统的标识方法。 由于不同遗产软件系统的语言、数据库系统、事务管理可能有很大的差别, 所以不可能只选用单一的对象标识方法。 由于缺乏实际的对象标识工程方面的经验,使得移植后的系统有可能会暴 露出以前没有碰到过的问题。 在面向过程的语言翻译成面向对象的语言过程中,我们用再工程的方法来 进行系统移植。第一步进行系统理解,用逆向工程的方法分析和分解源代码, 使之成为独立的分层的系统结构,然后进行重构,重新建立抽象模板。接着进 行正向工程,最终完成系统移植。所以从面向过程的语言翻译成面向对象的语 言的过程,是通过再工程来实现的。其中,逆向工程的系统理解是最困难的部 分,因为要从面向过程的程序语言中分离出对象及其方法,这必须以整个系统 的充分理解为基础。这也是再工程成败的关键所在。 我们假定软件工程生命周期包括三个阶段:需求分析,系统设计,系统实 现。从总体上说,面向过程遗产软件的系统移植是一个软件再工程的过程,经 过逆向工程、重构、正向工程来实现。再工程从现有系统源代码出发,先经过 逆向工程,从面向过程的程序中识别出对象,和它们的方法,理清软件结构。 现在已经有几种对象识别方法,一些还可以半自动完成,如:簇分析法 3 1 、概 念分析法口j 等。再根据用户的新需求,重新组织软件的概念模型、逻辑结构, 最后设计人员重新设计系统并实现,最终完成系统移植。 山东大学硕士学位论文 3 2 面向对象的上下文无关文法 通常的程序设计语言都是上下文无关语言,为了进行系统移植,我们通过 系统理解得到类层次结构,然后用上下文无关语言来描述出来。这样,对系统 的理解就比较容易了。 为了更好的描述面向对象的结构,我们引入了面向对象上下文无关文法 ( o b j e c t o r i e n t e dc o n t e x t f r e eg r a m m a r ) o o c f g 【io j 。在o o ,c f g 中,每一个非 终极符对应一个类,可变的非终极符是它的子类。因为每个类必须有自己的名 字,所以图3 1a ) 中的语法不是o o c f g ,因为b c 和d d 的结构没有名字。但 是,我们可以把它修改为o o c f g 。如图3 1b ) ,把结构b c 命名为a ,把结构 d d 命名为b l 。为了更好的处理,把选择结构也作相应的处理,如图3 ib ) 中, 把d - - - ) e le 转化为d d l i d 2 。这样就把图3 1a ) 中得c f g 转化成了o o c f g 。 一个o o c f g 把非终极符分成两类:结构非终极符和概念非终极符。那些 有简单结构规范的非终极符和终极符构成的非终极符叫做结构非终极符( 如 c ) ,那些有特殊子类非终极符的非终极符叫做概念非终极符( t t h a ) 。为了更 好的区分结构非终极符,我们把它分为两类:那些只有简单终极符结构规范的 非终极符叫做简单结构非终极符;其他的结构非终极符叫做复杂结构非终极 符。 cf go o cf g a b c a a a lia2 b dd | ba ,专b c c - - ) ca ,a d 专e e bb i i b 2 b dd b ,- - ) b c - - c d d l d2 d t e d , a )b ) 图3 1c f g 和o o c f g 有了结构非终极符和概念非终极符的定义以后,我们很容易得到以下两种 山东大学硕士学位论文 规则:1 ) 结构规则,规则的右边由非终极符和终极符组成,如图3 1b ) 2 、3 、 5 、6 、7 、9 、1 0 规则为结构规则;2 ) 概念规则,规则的左边和右边是子类关 系,图3 1b ) l 、4 、8 规则就是概念规则。在不同的规则中我们用不同的箭头, 如图3 1b ) ,结构规则用“专”,意思是包含以下成分;概念规则用“ ”, 表示有以下子类。如果规则的右边仅包含一个非终极符,那么这个规则的类型 就是模糊的,很难说它是什么规则。我们规定这样的规则是非法的。 在概念非终极符中,如果b 是a 的子类,那么任何上下文接受a ,肯定也能 接受b ;这样在语法中,a 可以用b 来代替。如果a 是概念非终极符,有如下规 贝t j a i b i ,我们说a 是b 的父非终极符,b 是a 的子非终极符。这种关系的传 递闭包被分别叫做祖先非终极符和后裔非终极符。 在u m l 中允许多继承,所以0 0 一c f g 也允许多继承,如规i j a b ,c b , 但是实际上许多系统往往禁止这种继承。因为类层不能循环( 如一个类不能继 承它自己) ,所以我们需要0 0 一c f g 是非循环的,不允许a b l b k a ( k 2 0 ) 。 我们把o o c f g 表示成六元组o = ( s ,c ,t ,p ,h ,z ) ,s 是结构非终极符 集合,c 是概念非终极符集合,t 是终极符集合,p 是形如n - - ) w ( n e s , w e ( s u c w t ) ) 的产生式集合,h 是形女h a b ( a e c ,b ( s u c ) ) 的分层关系的集 合,z e ( s u c ) 是起始符。我们为0 0 c f g 作以下限制: 1 1s n c = g : 2 ) 如果a e s ,那么存在w t 使( a 专w ) p :如果( a 专w ) p 且( a 专w ) e p ) 那么删: 3 )不存在a b 】 b k a ( k 0 ) ; 4 ) ( a b ) e h ,( d e ) h ,如果a d 那么b e ; 5 ) 对每一个a e ( s w c ) :z _ 夸u 4 a v + = w + ,u ,v e ( s w c u t ) * 且w p 。 0 0 一c f g 在概念非终极符和类之间建立了一个关系。对同一个条目,当从 语法的角度考虑时,我们要用术语“非终极符”。当讨论描述时,我们要用术 语“类”。概念规则对应一个子类关系,规则左边非终极符对应的类是规则右 边非终极符对应的类的超类。我们引入0 0 c f g 的概念,很容易把类的层次关 系表示出来。 0 山东大学硕士学位论文 3 3 元对象分析法 通过面向过程遗产软件的逆向工程,从面向过程的程序中识别出了对象, 和它们的方法,下一步要得到了类的层次关系,进一步得到整个系统的软件结 构,这样才能完成整个遗产软件的系统理解。我们必须对对象进行分析,因此 我们引入了元对象分析法【10 1 。0 0 一c f g 中的每一个非终极符对应一个类。因为 它们是真实存在的,所以这些类被叫做真实类。在元对象分析法中,非终极符 类独立是个基本条件。每一个真实类有一个元类,它有非终极符的所有的性 质。元类的实例我们定义为元对象。这样,类和对象的实例关系与相应的元类 和元对象的实例关系就构成了一种平行的关系。如果对象a 是类a 的实例,则元 对象a 是元类a 的实例。 如果我们要建立个真实类的对象,因为类和非终极符的一一对应关系, 这个类对应的非终极符有这个类的所有的信息,所以它的元对象具有这个非终 极符类所有必需的操作和信息。 一个元类有三个基本操作:前瞻、构造、匹配。前瞻是个布尔函数,当 且仅当相应的非终极符有下一个非终极符,返回t r u e ;否则,返回f a l s e 。构 造是一个实例化操作,它返回一个当前非终极符类的新实例。匹配仅用于概念 非终极符,它返回概念非终极符的结构子类。 元对象分析法基于l l ( 1 ) ,在这个分析中,根据一个输入符,能选出下一 个非终极符。非终极符的元类有一个起始表,这个表包含所有可能的非终极符 的起始符。如果创建了相应的当前对象,那么建立起了一个起始表,构造过程 象一个流程。每一个元对象具有相应规则的造句法结构。如果第一个符号是终 极符,那么它被加到起始表中。如果规则的第一个符号是非终极符,它们所有 的起始符被加到起始表中。如果规则的第一部分是可选的,一个空的起始符e 被加到起始表中,在这种情况下,规则的下一个部分被看作是第一个不可选的 部分出现。当一些特殊的起始符被发现的时候,一个起始表告诉哪一个非终极 符应该被创建。元对象和它们对应的起始符表如图3 2 。 山东大学硕士学位论文 abcde a a 2a 1a 1 a 1a 】a l a 2 a , b b 2b j b , b lb j b 2 b , cc d d id 2 d 】 d l d 2 d , 图3 2 兀对象和它们对应的起始符表 图3 2 中描述了图3 1b ) 语法中的每一个非终极符相应的元对象和它们对 应的起始符表。第- t y 描述的是所有可能的起始符,第一列列出了语法的每一 个非终极符对应的元对象。例如第一行,元对象a 有个起始符表a ( 和元对象 a 。相关联得到) 、b ( 和元对象a 相关联得到) 、d ( 和元对象a 湘关联得到) 。 结构非终极符都是通过自己的元对象和它的起始符相关联,概念非终极符总是 通过它的子终极符和它的起始符相关联。 假设语法的开始符是a ,输入是d c 。分析开始,让a 的元对象创建一个 适当的对象。这个元对象建立他的开始符列,发现下一个输入符( d ) 。因为这 个符号是和元对象a l 相关联的,把创建任务交给元对象a l ,把元对象a ,实例 化为一个真实类。这样就激活了a ,- b c ,分析b c ,b 的元对象就成了下一个 创建的目标。元对象b 通过元对象b ,和d 相关联,元对象b 实例化为一个真 实类,然后把任务交给元对象b 。这样就激活了d d 。元对象d 在起始符表中 找不到d ,但是它的起始符表中有e ,在这个上下文无关文法中,只能给d 指 派。因为d 通过元对象d 。和e 相关联,实例化d 为一个真实类,然后把任 务交给d 。类d :被实例化,控制权交给a 。,d 被扫描完毕。a ,把任务交给元 对象c ,因为元对象c 通过自身和c 相关联,元对象c 被实例化为真实类,c 被扫描,分析结束。这样,我们根据一段代码,就把相应的类建立起来了。 面向过程遗产软件的系统理解的目的是系统移植,所以要先从面向过程的 2 山东大学硕士学位论文 程序中抽取出对象,和它们的方法,理清软件结构,然后建立类层次结构。元 对象分析法从对象和它们的方法出发,分析出类的层次结构,进一步完成整个 系统的软件结构,这样才能完成对整个面向过程遗产软件的系统理解。 山东大学硕士学位论文 第四章面向对象遗产软件的度量 4 1 面向对象遗产软件的问题 因为软件应用于越来越多的复杂领域,软件系统越来越复杂。为了适应更 加复杂的情况,引入了面向对象语言。然而面向对象技术也不是万能钥匙,不 可能解决软件危机带来的种种问题。因为要做的系统越来越复杂,软件在大小 和复杂度方面快速增长。如果为了改变一个软件系统的某个功能而重新建立一 个系统费用非常昂贵,所以系统主要作维护和扩充。随着时间的推移,扩充越 来越难,因为日渐混乱的结构使得系统进化非常困难。 面向对象的语言有很多重要的优点:它们把世界分离成对象,这些对象互 相通信,每个对象都有自己的属性。这样的特性可以使开发人员在更高的抽象 层次上工作,处理复杂的系统更加容易。 然而,这些年的开发实践表明即使使用面向对象语言,在处理大型的软件 系统时就会出现一些问题。比较复杂的软件系统有几百万的代码,需要许多人 共同开发,开发时间也很长,有的需要几个月,长的可能要花数年的时间。大 系统的开发可能出现如下问题: 开发人员中没有人全部理解系统初始设计 文档不够详细,而且有可能出现错误 程序开发工具可能比较陈旧,使得很少人知道这样的技术,很少人愿意去 处理这样的问题,如千年虫闯题。 维护经常交给缺少经验的程序员做,这些程序员不仅要面对复杂的问题, 而且要面对未知领域的代码。 没有足够的接口扩充系统,使得系统扩充非常困难 面向对象的遗产软件的再工程在现在软件产业中非常重要。早期采用的面 向对象的遗产软件系统由于结构e l 趋混乱,需要转换成具有良好的构架的系 统,因此我们需要理解这些遗产软件的内部工作方式,识别潜在的设计异常。 然而,因为遗产软件往往有成千上万行的代码,而设计文档却少得可怜,所以 需要有系统理解和问题探测的方法的辅助,才能更好地理解这些系统。 在现在存在的各种不同的方法中,有两种方法看起来非常适合大的面向对 象的遗产软件的系统理解。个方法是软件度量【”】,因为度量经常被用在软件 山东大学硕士学位论文 系统质量评估中,它们能很好的度量软件质量。利用度量能定量理解系统的体 系结构和详细设计,利用度量的反馈信息可以构造质量更好的系统。另一个是 遗产软件图形表示方法。因为一个好的图形能使人的大脑并行的理解复杂问题 的多个方面,对人们理解复杂的软件系统非常有帮助。本章先讨论面向对象的 软件度量的一些问题。 4 2 面向对象度量 4 2 1 导论 提高软件产品的质量、性能和开发团队的效率,已经成为每个计算机研究 组织优先考虑的问题。以前的软件开发和系统维护做得不是很好,结果造成了 很大的浪费。究其原因,主要是估算时间和花费时都是基于感觉而不是基于数 字。在遗产软件的逆向工程中,系统理解是一个最重要的问题,如果用精确的 数字来表示软件的各种属性,那么对软件的理解应该是非常准确的。 i e e e 在“s t a n d a r df o rs o f t w a r eq u a l i t ym e t r i c sm e t h o d o l o g y ,i e e es t d 1 0 6 1 1 9 9 2 ,1 9 9 3 ”中,对“软件度量”作了如下定义:软件度量是一个函数, 它的输入是软件数据,输出是单一的数值,能用来解释软件所具有的一个特定 属性对质量影响的程度。 软件的度量分为如下两部分: 设计度量。这些度量值被用来评估软件的大小、复杂性和质量的一些 情况。他们注重开发过程中工程设计的一个特殊的方面。设计度量主 要着重局部和特殊的方面,因此,允许他们有效的直接测量和提高产 品组件的质量。 工程度量。他们处理工程的动态部分,着重开发生命周期的某一个方 面。他们能被用于预测,如评估职员需求。它位于比抽象层更高的层。 他们说明性的东西少,比较模糊,对一个工程的应用前景非常重要。 软件属性可分为内部属性和外部属性。内部属性,如软件体系结构、控制 流、耦合度、内聚度等,通常描述软件结构上的复杂性。内部属性一般有清晰 的定义并能进行客观的度量。外部属性,如复杂性、可维护性、可读性、可扩 充性、可移植性等,涉及到人和环境等外部因素。外部属性的度量才能真正给 山东大学硕士学位论文 出人们所需的可靠数据并预示软件的开发行为。但是,外部属性常缺乏清晰的 定义,也无法进行直接的客观度量,只能通过内部属性进行推测性的度量。度 量研究的任务之一就是建立外部属性和内部属性之间的合理联系。 经验关系系统【“i 给出了一个基于软件开发经验的模型。譬如,设计者认为 包含方法多的类比方法少的类复杂。经验关系系统可以表示为: d = ( a ,r 。,o j )仁l ,2 ,3 n ,j = 1 , 2 ,3 m 其中: a 是非空的软件属性集合; r 。是a 元素之间的经验关系,如大于、更复杂等: o 是a 元素之间的二元操作。 建立经验关系系统之后,就要找到一个度量准则m ,把经验关系系统映射 到形式关系系统。形式关系系统可以定义为: f = ( c ,s 。,耳)i = l ,2 ,3 n ,j = 1 ,2 ,3 m 其中: c 是非空集,如实数集; s 。是c 元素之间的形式关系,如 、= 等; b i 是c 元素之间的二元形式操作。如+ 、一、等; 度量准则m 是d 到f 的同构映射,满足: v a a ,3 c c ,使得m ( d 1 = c ; v a ,b a ,尼( 口,6 ) 营( m ( d ) ,m ( 6 ) ) v a ,b a ,m ( a o j b ) 铮m ( a ) b j m ( b ) ; 既然软件度量已经有了比较严密的理论体系,那么有必要将度量评估也纳 入形式化范畴。w e y u k e r 提出了组形式化评估软件度量性质的定理f 1 3 】: 性质一:( 3 p ) ( 3 q ) ( 1 p 蚓q 1 ) 。该性质表明所有程序的度量值不会都相同。 性质二:对于非负数c ,只有有限个程序具有度量值c 。该性质保证度量 准则有足够的精度。 性质三:( 3 p ) ( 3 q ) ( p q & i p i 刊q 1 ) 。该性质表明度量准则不能太精细, 以致所有程序有不同的度量值。 性质四:( 3 p ) ( 3 q ) ( j p s q & i 尸h q l ) 。该性质表明功能相同的两个程序, 6 山东大学硕士学位论文 由于实现细节不同,其度量值不一定相同。 性质5 k :( v p ) ( v q ) ( i p l d p ;q i l q l 类的子类数目; 类的耦合度: 类的内聚度; 系统中代码的复用比例。 上述面向对象特性需要专门的适合面向对象的度量。c h i d a m b e r 和k e m e r e r 提出了六条适于面向对象设计的度量准则,我们定义为c k 度量集【1 7 】: ( 1 ) 类方法的带权和( w e i g h t e d m e t h o dp e r c l a s s ) w m c :如果类c 定义 有n 个方法m l ,m 2 , - ,州。,设c l ,c 2 , , c n 是这些方法的复杂性,则 w m c ( c ) = d 。w m c 是开发和维护类的时间和精力的指示器。类的 w m c 越大,对子类的影响就越大,其通用性和可复用性就越差。 ( 2 ) 继承树深度( d e p t ho fi u h e r i t a n e et r e e ) d i t :d i t 定义为类在继承 树中类节点到根节点的最大深度。 嘶,_ k 。凹。胁。,雪霉鬟撬黼个超类 类的d i t 越大,其继承的方法就越多,因而很难预示其行为;但另一 山东大学硕士学位论文 方面所继承的方法可复用性越大。越深的继承树涉及了更多的类和方 法,从而设计复杂性越大。 ( 3 ) 子类数目( n u m b e r o f c h i l d r e n ) n o c :n o c 定义为该类的直接子类 数目。类的n o c 越大,其可复用性越大,但其影响就越大,从而需要 更多的测试。 ( 4 ) 对象类的耦合度( c o u p l i n gb e t w e e no b j e c tc l a s s e s ) c b o :c b o 定 义为与该类耦合的类数目。设c 表示系统中全部类的集合。 c ,d c ,u s e s ( c ,d ) 表示类c 的方法调用了类d 声明的方法或实例变量, c b o ( e ) = | d c 一 c ) u s e s ( c ,d ) v u s e s ( d ,c ) i 由于同一个类对象具有相同的属性,当在一个类的方法中调用了在另 一个类中声明的方法或实例变量时,我们就说这两个类是耦合的。类 的c b o 太大,有害于模块化设计并限制了复用,其改变对系统的其它 部分
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025浙江宁波市第二十七届高层次人才智力引进洽谈会宁波市卫生健康委直属事业单位招聘363人笔试备考试题及答案解析
- 贵德县2025年度面向社会公开招聘社区工作者笔试参考题库附答案解析
- 2025黑龙江人才周齐齐哈尔市事业单位招聘155人笔试参考题库附答案解析
- 2025年10月贵州遵义赤水市公益性岗位人员招聘5人笔试备考题库及答案解析
- 2025某公司劳务服务人员招聘笔试模拟试题及答案解析
- 2025下半年天津医科大学临床医学院招聘15人计划笔试备考试题及答案解析
- 2025国家电投集团经研院招聘3人笔试备考试题及答案解析
- 2025内蒙古鄂尔多斯实验室职能岗位招聘2人笔试参考题库附答案解析
- 2026国家开发银行校园招聘(重庆有岗)笔试参考题库附答案解析
- 2025年新材料行业新材料研发与应用前景探究研究报告
- 国庆中秋课件
- 艾滋病合并马尔菲青霉菌感染
- 乡镇卫生院检验检查分级管理制度
- 科技金融管理课件下载
- 国内道路运输安全管理培训指南
- 大健康连锁店商业计划书
- 停车场突发事件应急处理预案
- 腹壁切口疝课件
- 《人工神经网络设计 》 课件 第3、4章 感知器;径向基函数神经网络
- 幼儿园培训返岗汇报
- 岩土钻掘工程学课件
评论
0/150
提交评论