(计算机应用技术专业论文)基于源代码的设计模式自动抽取技术的研究.pdf_第1页
(计算机应用技术专业论文)基于源代码的设计模式自动抽取技术的研究.pdf_第2页
(计算机应用技术专业论文)基于源代码的设计模式自动抽取技术的研究.pdf_第3页
(计算机应用技术专业论文)基于源代码的设计模式自动抽取技术的研究.pdf_第4页
(计算机应用技术专业论文)基于源代码的设计模式自动抽取技术的研究.pdf_第5页
已阅读5页,还剩56页未读 继续免费阅读

(计算机应用技术专业论文)基于源代码的设计模式自动抽取技术的研究.pdf.pdf 免费下载

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

文档简介

论文独创性声明 本论文是我个人在导师指导下进行的研究工作及取得的研究成果。论文中除了特别加以标注和 致谢的地方外,不包含其他人或机构已经发表或撰写过的研究成果。其他同志对本研究的启发和所 做的贡献均已在论文中做了明确的声明并表示了谢意。 名倘秣期:扣8 、n l 学位论文知识产权权属声明 本人完全了解上海师范大学有关保留、使用学位论文的规定,即:学校有权保留送交论文的复 印件,允许论文被查阅和借阅;学校可以公布论文的全部或部分内容,可以采用影印、缩印或其它 手段保存论文。保密的论文在解密后遵守此规定。 皇月少1日 l 厂月 日 ,年 年 嘶劈 函黟 摘要 设计模式为设计者们交流讨论、书写文档以及探索各种不同的设计提供了一 套通用的设计词汇。在许多大型软件系统的开发过程中,开发者们有意识的应用 设计模式,为设计模式的抽取提供了丰富的数据来源。从源代码中抽取出设计模 式的实例,对于提高的软件可理解性和可维护性、软件设计重用以及软件重构具 有重要意义。 本论文研究的课题是如何从j a v a 源代码中抽取出设计模式实例。论文最终 将得出一个分析结果,首先利用现有工具把源代码生成m i 文档,避免了直接 分析源代码。整个抽取过程由两阶段组成,第一阶段是结构分析,在这个阶段, 为设计模式定义了权重和关系矩阵两类结构特征。通过分析x m i 文档,提取出 类的结构特征信息。接着第二阶段就是行为分析。通过结构分析阶段后将产生一 些模式候选项,行为分析将不产生新的设计模式的实例,它只检查候选集合,检 查每个设计模式实例的期望的行为特征,也就是说把f a l s ep o s i t i v e s 的候选项 去除,得出进一步的结果。论文最后设计并实现了设计模式抽取工具d p 盯,来 支持前面的方法。 作为抽取设计模式的目的是可以自动( 或半自动) 抽取任何j a v a 程序中的设 计模式。虽然本论文的目的是只针对几种设计模式进行研究并抽取出结果,但是 其结果可以提供一些研究思路基础,将来可以进一步研究开发出可以抽取其它设 计模式的工具。本论文使用的抽取方式和算法与抽取其它设计模式的方法有许多 共同之处。 关键词:设计模式,逆向工程,结构分析,行为分析,x m i a b s t r a c t u s i n gr e c o v e r e dd e s i g np a t t e r n si n s t a n c e st or e c o n s t r u c tt h e d o c u m e n t so fs o f t w a r es y s t e m sh e l p su sc o m p r e h e n dc o m p l e xd e s i g n s , o p t i m i z et h ec o d e ,i m p r o v et h ed o c u m e n t a t i o na n d m a i n t e n a n c eo fe x i s t i n g s y s t e m s m a n yd e v e l o p e r su s e dg o fd e s i g np a t t e r n sc o n s c i o u s l ya n dp r o v i d e d a na b u n d a n c eo fd a t as o u r c e sf o rd e s i g np a t t e r n se x t r a c t i o n e x t r a c t i n g d e s i g np a t t e r n sf r o ms o u r c ec o d ei so n eo ft h em o s tp r o m i s i n gm e t h o d sf o r i m p r o v i n gs o f t w a r em a i n t a i n a b i l i t y ,r e u s i n ge x p e r i e n c ea n df a c i l i t a t i n g s o f t w a r e r e f o r m a ti o n t h i sm a s t e rt h e s i sp r e s e n t si fi ti s f e a s i b l et oe x t r a c tp a t t e r n sf r o m as o u r c ec o d ea n d h o wt h i se x t r a c t i o nf r o ma n yj a v ap r o g r a m ss o u r c ec o d e w o u l db ei m p l e m e n t e d t h er e s u l to ft h et h e s i si sa na n a l y s i s ,f i r s ta x m id o c u m e n t a t i o ni sg e n e r a t e df r o ms o u r c ec o d e sb ye x i s t i n gt o o l s ,w h i c h a v o i d sad i r e c ta n a l y s i so fs o u r c ec o d e s t h ea n a l y s i si sc o m p o s e do ft w o s t a g e s t h ef i r s ti ss t r u c t u r a la n a l y s i s t h es t r u c t u r a lc h a r a c t e r i s t i c s o fc l a s sa r ee x t r a c t e db ya n a l y z i n gx m id o c u m e n t a t i o n ,a n dt h e nad y n a m i c a n a l y s i sf o l l o w s a f t e rs t r u c t u r a la n a l y s i ss t a g e ,as t r u c t u r eo fa l lt h e c l a s s e s a n dm e t h o d s a n ds o m ep a t t e r nc a n d i d a t e sa r ep r o d u c e d t h e s e c a n d i d a t e sc o n s t i t u t et h ei n p u tf o rt h ed y n a m i cc h e c kt h a tm o n i t o r st h e e x e c u t i o no ft h ec a n d i d a t e s t h eg o a lo ft h i sd e v e l o p e dt o o li st h a t t h i se x t r a c t i o nh a st ob e a u t o m a t i c ( o rs e m i - ) i e a n yj a v ap r o g r a mc a nb ee x t r a c t e d j u s taf e w d e s i g np a t t e r n sa r er e s e a r c h e da n de x t r a c t e di nt h i st h e s i sb u tt h i s r e p o r tc a nc o n s t i t u t eag r o u n df o rad e v e l o p m e n tt oe x t r a c ta n yo t h e r p a t t e r n s t h ed e v e l o p e dt o o la n da l g o r i t h m sh a v em a n yc o m p o n e n t sc o m m o n w i t ho t h e rp a t t e r n se x t r a c t i o nm e t h o d sa n ds o m ep a r t sh a v eb e e nr e u s e d k e y w o r d s :d e s i g np a t t e r n ,r e v e r s ee n g i n e e r i n g ,s t r u c t u r a la n a l y s i s , b e h a v i o r a la n a l y s i s ,x m i 上海师范大学硕士学位论文 第一章绪论 第一章绪论 本章首先介绍了本课题的相关学术背景即逆向工程和设计模式。然后介绍了国内 外的研究现状和课题的研究意义和目标。最后概述了论文的主要工作及文章的结构。 1 1 本课题的学术背景 1 1 1 逆向工程 术语“逆向工程力( r e v e r s ee n g i n e e r i n g ) 来自于硬件领域,是通过检查样品开发 复杂硬件系统规约的过程,主要指研究他人的系统,发现其工作原理,以达到复制硬 件系统的目的。但随着软件业的发展,逆向工程这一术语被引入软件工程领域,软件 逆向工程可以用于描述揭示已有系统工作原理的过程,或者是用于描述创建现有文档 的联机文档的过程等。当然逆向工程还适用于软件的其它领域,比如图像滤波、自由 曲面建模等。我们研究的对象是在软件工程领域中口1 。 在软件工程领域中,迄今为止还没有软件逆向工程的标准定义。一般将软件逆向 工程定义为包含抽取和抽象这两个步骤的过程:第一步分析目标系统,标识目标系统的 组件以及它们之间相互关系,第二步创建不同形式或更高抽象层次的系统表示。s c o t t r 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 ) :对目标系统进行抽象,以辅助系统理解并允许浏览、分析和表示 抽象结果。 国家自然科学学科发展战略报告计算机科学技术部分中是这样定义软件逆向工程 的:从可运行的程序系统出发,生成对应的源程序、系统结构以及相关设计原理和算法 思想的文档等。从这个定义可以看出,软件逆向工程可以用于较低级的抽象层次,例 如把可执行程序转换为源代码,但主要是用于将源代码转换为更高抽象层次上的表示, 如控制图、数据流图和类关系图等。 现实中,人们并不总是完全需要逆向出目标软件的所有功能,如果那样的话将会 6 上海师范大学硕士学位论文第一章绪论 是一个艰苦而漫长的过程。大多数情况下是试图通过对软件进行逆向,从中获取软件 的算法,或破解软件及进行功能扩展等。 1 1 2 为什么要逆向工程 大多数既有系统都存在着很多问题: 原有开发者和用户的离开,导致有关系统内部隐性知识的缺失,对整个系 统缺乏完整的理解,需要花费很长的时间才能够处理简单的改进。 过时的文档或者缺乏文档。拥有过时的文档甚至比没有文档更有害于软件 逆向工程,因为这将导致对系统的误解。 对系统不断的修改或打补丁。将会引起系统设计的不断更新,理解系统设 计更加困难。 对任何软件需求上的改变都需要对软件代码进行改变。换句话说,软件设计的任何 修改都以代码的修改的结束告终。代码中的变化通常用于:强化代码( 用于加强功能) , 去除错误,代码优化,维护等等。如果不改变代码就不可能改变软件的任何属性。软 件设计的改变可以用于加强代码、添加软件新属性,优化代码,使软件设计更健壮, 修改新发现的问题等等。 与软件设计阶段相比,编程被认为是公司里经验相对较少的人员设计的。这些人 员都是被雇来进行编程,经常为了学习知识和经验在不同的软件公司跳来跳去。因此, 他们所实现的代码都会随着本人的离开也带走。而新来的人没有很长时间来理解现有 代码的思想和流程。了解实现代码的设计模式能够帮助设计者之间了解知识,缩短准 确了解实现思想的时间。 代码任何一个部分的改变对系统都会有局部和整体的影响。对像j a v a 这样的面向 对象的代码,任何界面结构的改变都会影响实现那个界面的所有类,而且之前那些界 面扩展后也会受到影响。仅仅看代码很难弄明白代码的变化。如果把代码变化以一个 更抽象的级别从视觉上显示出来,就可以更准确的了解影响( 例如在设计级) 。因此 如果代码的整个内容以诸如类图、协作图、活动图等等设计图形式表示出来,那么就 可以更快的理解影响的变化。 为了提高对代码的理解,有几种典型的方法,当前仍然在使用。但是它们都有优 点和缺点。几种方法如下: 7 上海师范大学硕士学位论文 第一章绪论 ( 1 ) 给代码添加注释: 这种方法的优点是可以在代码实现的地方局部的解释代码,在程序设计语言中这 是一个琐碎的功能。 缺点是对于面向软件代码的大规模对象,很难实现代码改变的全局影响。 ( 2 ) 设置代码: 、 这种方法的优点是对所有静态和动态u m l 结构图,可以有很详细的解释。 缺点是设置不能与代码分离,而且必须常常随着代码的改变进行更新。并且它往 往留在阅读器上,用以解释代码变化中哪些是影响的可能区域。 逆向工程技术有助于显示代码知识。软件的逆向工程过程浏览代码,提取不同类 和关系的信息。逆向工程工具的最新改进,以顺序图或协作图的形式,给逆向工程类 方法属性给予保证。因此,把静态和动态图放在一起可以很容易的了解软件结构,而 且使代码变化影响视觉化过程更方便。 1 1 3 设计模式概述 现代大多数规模较大的面向对象系统都使用设计模式来提高开发效率和代码质 量。设计模式是“对一些经过定制、能相互通信的对象和类的描述,用来解决特定场 景下某个普遍的设计问题哺1 。每个设计模式系统地命名、解释和评价了面向对象系 统中一个重要的和重复出现的设计。经典设计模式( 也称g o f 设计模式,指g a m m a 等四人 ( 被称为g a n go ff o u r 四人组) 于1 9 9 5 年出版的设计模式:可复用面向对象软件的基础 一书中介绍的2 3 种设计模式) 收录那些在不同系统中多次使用过的成功设计,使人们可 以更加简单方便地复用成功设计和体系结构。将已证实的技术表述成设计模式也会使 新系统开发者更加容易理解其设计思路,帮助做出有利于系统复用的选择,避免设计 损害了系统复用性。简而言之,设计模式可以帮助设计者更快更好地完成系统设计n 1 。 设计模式通过提供一个显式的类和对象作用关系以及它们之间潜在联系的说明规 范,能够提高已有系统的文档管理和系统维护的有效性,但大多数软件文档都是描述 程序的算法和数据结构的小粒度文档,注重于刻划系统的各个部分,在使用设计模式 等抽象形式描述系统的体系结构方面实施不够。对大型软件系统而言,更重要的是理 解系统的总体结构。使用逆向工程技术重建系统总体结构文档的过程称为“结构化再 文档( s t r u c t u r a lr e d o c u m e n t a t i o n ) ,设计模式抽取( d e s i g np a t t e r n se x t r a c t i n g ) 8 上海师范大学硕士学位论文第一章绪论 是实现结构化再文档的重要手段之一。 设计模式抽取是从程序原始数据中提取出所使用的设计模式的实例的过程,也是 从原始数据中推导并提取那些并不显式存在的信息,产生关于系统的深层视图的过程, 属于逆向工程的研究领域。逆向工程主要用于将程序源代码转换为更高抽象层次的表 示,如控制流图、数据流图和类关系图等。设计模式抽取把系统采用的设计模式提取 出来,以此重建系统的总体结构,有助于理解复杂设计,为已有系统的文档管理和系 统维护提供支持们。 设计模式基于面向对象语言,是一个设计阶段的概念实体,表示较高层次的抽象。 由于模式语言还未成熟,目前还没有真正意义上的模式语言能直接编写程序,因而必 须通过具体的程序语言来实现设计模式。但程序语言中并没有设计模式的对应概念, 不能充分表达设计模式。如采用面向对象语言,一个设计模式被实现为一些对象、 类和方法以及它们之间的关系等,这些关系并不显式存在,因而不能直观地获知使用 设计模式的有关信息。跟踪这些设计模式实现方式是重新获得系统结构的方法之一, 采用逆向工程技术如设计模式抽取则是另一种思路,也是设计模式抽取得到研究的技 术原因之一。 设计模式的抽取过程不仅可以抽取已经发布的设计模式,而且可以抽取未公认的 准设计模式,甚至未被发现的模式使用已经发表的设计模式作为抽取对象更有效率, 抽取出来的结果更具通用性。比如g o f 的设计模式已经得到广泛应用,出现的频率较高, 许多开发者在代码中有意识地以各种方式表现所使用的设计模式,使得这类设计模式 更容易抽取。如果不考虑效率和通用性,使用未公认的准设计模式、有可能是模式的 类对象结构也是可行的,只要为它们写出与公认设计模式类似的规则定义,其抽取同 于公认设计模式的抽取过程。 在设计模式应用的过程中,有过度使用的倾向。实际上一个设计模式只有当它提 供的灵活性是真正需要的时候,才有必要使用n 1 。对程序代码进行设计模式抽取,有助 于测量软件的质量,帮助设计者只将易读易改而不影响其它部分的代码添加进项目中, 去掉不必要的模式实现,提高代码优化的效率。设计模式抽取也是是学习如何组织他 人的知识的好方法。 设计模式抽取工作对软件开发过程有诸多重要作用,而采用人工抽取困难多又效 率低,因此开发有效的自动化设计模式抽取工具是实施设计模式抽取最重要的手段。 9 上海师范大学硕士学位论文 第一章绪论 j a v a 作为面向对象程序设计语言,使程序员能够将更多的精力专注于业务逻辑与系统 架构,它的广泛应用产生了大量规模较大的软件系统:同时,许多j a v a 开发者有意识地 应用g o f 设计模式,为设计模式抽取提供了丰富的数据来源。研究设计模式抽取和开发 面向j a v a 的设计模式抽取工具都有着较高的科研价值和广阔的应用前景。 1 2 课题研究背景及目的 大部分软件项目在它的生命期里经常需要改变,这时开发者通常只修改源码, 却不更新系统文档和设计文档。人们只关心系统是否正常运行而很少人关心相关文档 是否正确。当系统将要做一些修改时,问题就出现了,开发人员没有最新和正确的文 档。这时开发者要修改系统,可能需要先一行一行地分析源码,这可能是没人希望做 的一个过程。一种更好的想法是开发者可以通过分析工具,把设计从源码中逆向抽取 出来。 本论文的主要目的是研究能否运用某些方法检查源代码并可以找出代码中存在的 设计模式,这样将节省开发者大量的分析时间,系统将更容易理解,在系统缺乏文档 时显得更为需要。分析源代码并抽取更高抽象层次设计的过程叫逆向工程,本论文更 关注抽取设计这个抽象层次。 1 3 课题研究意义及目标 设计模式是面向对象设计的一个高级抽象,从程序理解和软件维护的观点出发, 一个设计模式提供了模式结构中每个类的角色信息和模式各组成元素的关系以及模式 组成元素和系统其余部分关系的信息。因此,源码中设计模式的抽取是逆向工程中的一 个关键问题。对于缺少分析和设计文档的软件系统来说,从它的源码中抽取设计模式有 助于软件系统的理解和文档化,增强软件系统的可维护性。进一步,能识别软件系统中 引入设计模式后可以改进的地方并进行相应的修改,提高了源码质量,从而达到软件重 构的目的。 1 4 范围 本论文研究的课题范围可以是很大的,因此有必要对课题研究范围作一些约定。 1 0 上海师范大学硕士学位论文第一章绪论 本论文将从设计模式中选择四种模式作为研究对象。 分析的源代码仅限于j a v a 源代码。 分析可以检测出大部分指定的设计模式,但是结果中可能存在少量错误。 这次分析将参照g a 砌a 书标准n 1 来查找符合该定义的设计模式。 1 5 本文工作及文章结构 本文主要进行了三个方面的研究。第一是u m l 类图和) ( m i 文档之间的映射,即在x m i 文档中如何用x m i 标签来表示u m l 类图中的信息的,如具有属性和方法的类、泛化关系、 关联关系等等。第二是结构分析,从x m i 文档中提取结构特征,即类和它们的关系。在 本论文中,我们用权重和矩阵来描述这些特征。一般结构分析都要包含三个步骤,对 设计模式抽取结构信息,接着以查找设计模式为目的,分析软件系统,抽取系统的结 构信息,最后比较两者的相似性,运用相应的匹配算法,抽取出j a v a 源代码中的设计 模式实例。第三是行为分析,主要考虑依赖关系。因为每个设计模式包括了结构和行 为两方面的信息。结构分析第二部分已经解决,接下来要分析的是参与者之间的动态 协作关系。本文中通过从控制流图构造顺序图,完成了对每个实例的行为特征的分析。 第一章绪论介绍了本课题的相关学术背景以及课题的研究意义和目标。 第二章描述与课题有关的概念和术语,以及设计模式抽取技术的研究现状。 第三章通过r a t i o n a lr o s e 和依托m d e 环境描述了x m i 文件的创建过程中的具体细 节,这章的其余部分描述了u m l 图和x m i 文档内容之间的映射。 第四章,第五章分别对论文中提出的设计模式抽取过程中的结构分析、行为分析两 个阶段做了具体介绍。首先根据给定的j a v a 源代码生成x m i 文档,结构分析是把x m i 文档作为输入的,从x m i 文档中提取的结构信息。运用结构分析将产生一些模式候选 项,这些模式候选项是由一些类和方法组成的结构,动态分析去除那些在第一个阶段 中发现的不满足设计模式动态方面的设计模式实例。 第六章,开发了一个工具d p e t 来支持本论文的方法,介绍了工具的各个主要模 块的设计和实现,最后选取了一个j a v a a w t 包实例来验证工具的抽取设计模式的效果。 最后,第七章对所做的工作进行了总结,并提出了下一步要开展的工作。 上海师范大学硕士学位论文 第二章相关概念与技术现状 第二章相关概念与技术现状 2 1 设计模式相关概念 2 2 1 设计模式及其基本要素 所谓模式( p a t t e r n ) ,就是在特定场合( c o n t e x t ) 下,对特定问题( p r o b l e m ) 的惯用 解决方案( s o l u t i o n ) 。在软件开发过程中,经常在某一特定场合中遇到某些以前经常 出现或感觉似曾相识的问题,直截了当地解决方案就是套用原有的己经过证明的解决 方案,或参考别人成熟的思路来解决,久而久之,通过不断完善并文档化就形成了针 对这种问题的模式。通过这种方式,便将专家头脑中的经验和技巧固化下来,就可以 一次又一次地使用己有的解决方案,无需再重复相同的工作。 设计模式比源代码更高层次地描述了软件系统,设计模式也是描述部分设计的一 种方式。设计模式是一种表示设计结构的技术,通过掌握设计的思路设计模式保存了 设计的关键信息,设计模式定义了类、实例、角色、关系和责任分配,一个好的软件 结构可以被快速应用解决问题而不用重新设计,设计模式就是被定义好的常见问题解 决方案的抽象设计。当一些情形经常出现时,可以选择设计模式解决相应问题而不用 每次都分析问题再想办法解决,例如调停者模式被选择来解决一个特定的设计问题而 不用重新设计。选择了设计模式无论做文档还是解释说明都显得更容易,在面向对象 开发过程中设计模式起了很多作用: 简单说,设计模式就是面向对象软件的一些成功设计经验。 设计模式提供了一个公共词汇表给设计者进行沟通、做文档和选择设计方 案,通过命名和抽象类和实例减少了系统的复杂性。 设计模式建立了一个可重用经验的基础可用于构造可重用软件。 设计模式作为构造模块可以构建更复杂的设计。 设计模式可以帮助减少学习类库的时间,也可以帮助初学者设计更像专 家。 设计模式可以帮助对类层次进行重构。 1 2 上海师范大学硕士学位论文第二章相关概念与技术现状 一般而言,一个模式有四个基本要素: ( 1 ) 模式名称( p a t t e r nn a m e ) 一个助记名,它用一两个词来描述模式的问题、解决 方案和效果。命名一个新的模式增加了我们的设计词汇。设计模式允许我们在较高的 抽象层次上进行设计。基于一个模式词汇表,我们自己以及同事之间就可以讨论模式 并在编写文档时使用它们。模式名可以帮助我们思考,便于我们其他人交流设计思想 及设计结果。找到恰当的模式名也是我们设计模式编目工作的难点之一。 ( 2 ) 问题( p r o b l e m ) 描述了应该在何时使用模式。它解释了设计问题和问题存在的前 因后果,它可能描述了特定的设计问题,如怎样用对象表示算法等。也可能描述了导 致不灵活设计的类或对象结构。有时候,问题部分会包括使用模式必须满足的一系列 先决条件。 ( 3 ) 解决方案( s o l u t i o n ) 描述了设计的组成成分,它们之间的相互关系及各自的职 责和协作方式。因为模式就像一个模板,可应用于多种不同场合,所以解决方案并不 描述一个特定而具体的设计或实现,而是提供设计问题的抽象描述和怎样用一个具有 一般意义的元素组合( 类或对象组合) 来解决这个问题。 ( 4 ) 效果( c o n s e q u e n c e s ) 描述了模式应用的效果及使用模式应权衡的问题。尽管我 们描述设计决策时,并不总提到模式效果,但它们对于评价设计选择和理解使用模式 的代价及好处具有重要意义。软件效果大多关注对时间和空间的衡量,它们也表述了 语言和实现问题。因为复用是面向对象设计的要素之一,所以模式效果包括它对系统 的灵活性、扩充性或可移植性的影响,显式地列出这些效果对理解和评价这些模式很 有帮助。 2 1 2 基本的设计模式 本文所涉及的设计模式是指g a m m a 等人在文献中提出的2 3 个通用的设计模式。 g a m m a 等从动机、目的、参与者、协作、应用效果、解决方案几个方面描述设计模式。 为了便于软件工程师在实际应用过程中理解、选择和实现设计模式,除解决方案部分外, 设计模式的动机、目的、参与者、协作、应用效果等项内容通常以非形式化的方式描 述。解决方案部分使用o m t 图描述一个通用的设计结构。从源码中抽取设计模式必然要 求对其进行描述,采用某种表示方法如p r o l o g 规则、抽象语法树( 图) ,约束可满足问题 ( c s p ) 的变量和约束条件等,对设计模式所表达的对象结构和行为进行抽象,并将这些 1 3 上海师范大学硕士学位论文 第二章相关概念与技术现状 设计模式表示存储在便于修改和维护的设计知识库中。 下面是一些基本的设计模式n 1 : a b s t r a c tf a c t o r y :提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们 具体的类。 a d a p t e r :将一个类的接口转换成客户希望的另外一个接口。a d a p t e r 模式使得原本由 于接口不兼容而不能一起工作的那些类可以一起工作。 b r i d g e :将抽象部分与它的实现部分分离,使它们都可以独立地变化。 b u i l d e r :将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同 的表示。 c h a i no fr e s p o n s i b i l i t y :为解除请求的发送者和接收者之间祸合,而使多个对象都 有机会处理这个请求。将这些对象连成一条链,并沿着这条链传递该请求,直到有一 个对象处理它。 c o m m a n d :将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对 请求排队或记录请求日志,以及支持可取消的操作。 c o m p o s i t e :将对象组合成树形结构以表示“部分一整体刀的层次结构。它使得客户对 单个对象和复合对象的使用具有一致性。 d e c o r a t o r :动态地给一个对象添加一些额外的职责。就扩展功能而言,它比生成子类 方式更为灵活。 f a c a d e :为子系统中的一组接口提供一个一致的界面,f a c a d e 模式定义了一个高层接 日,这个接口使得这一子系统更加容易使用。 f a c t o r ym e t h o d :定义一个用于创建对象的接口,让子类决定将哪一个类实例化。 f a c t o r ym e t h o d 使一个类的实例化延迟到其子类。 f l y w e i g h t :运用共享技术有效地支持大量细粒度的对象。 i n t e r p r e t e r :给定一个语言,定义它的文法的种表示,并定义一个解释器,该解释 器使用该表噢日示来解释语二言中的句子。 i t e r a t o r :提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内 部表示。 m e d i a t o r :用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相 互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 1 4 上海师范大学硕士学位论文第二章相关概念与技术现状 m e m e n t o :在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存 这个状态。这样以后就可将该对象恢复到保存的状态。 o b s e r v e r :定义对象间的一种一对多的依赖关系,以便当一个对象的状态发才改变时, 所有依赖于它的对象都得到通知并自动刷新。 p r o t o t y p e :用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建 新的对象。 p r o x y :为其他对象提供一个代理以控制对这个对象的访问。 s i n g l e t o n :保证一个类仅有一个实例,并提供一个访问它的全局访问点。 s t a t e :允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它 所属的类。 s t r a t e g y :定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本 模式使得算法的变化可独立于使用它的客户。 t e m p l a t em e t h o d :定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。 t e m p l a t em e t h o d 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步 骤。 v i s i t o r :表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素 的类的前提下定义作用于这些元素的新操作。 2 1 3 设计模式分类 g a m m a 等人把设计模式分为三类,即结构型、创建型和行为型。如何针对不同类型 的设计模式确定建模所需要信息。 结构型模式这类设计模式处理类或对象的组合,如c o m p o s i t e 模式。为了描 述结构型设计模式,需要定义类的层次结构和它们之间的关系如聚合、关联关系。 创建型模式这类设计模式与对象的创建有关,如s i n g l e t o n 模式。它们确定 对象的类型和多重性。为了描述创建型设计模式,除类的继承、聚合、关联关系外,还 需要包含对象的创建信息。 行为型模式这类设计模式对类或对象怎样交互和怎样分配职责进行描述, 女h o b s e r v e r 模式。为了描述行为型设计模式,我们还需要在设计模式描述中加入方法之 间的调用关系以及方法之间的重载关系等。 1 5 上海师范大学硕士学位论文 第二章相关概念与技术现状 设计模式不是软件开发的方法和过程,但是在软件开发过程中,设计模式可以帮 助现有的方法和过程。 2 2 一些术语 t r u ep o s i t i v e s :被抽取出并被验证时正确的那些设计模式实例; f a l s ep o s i t i v e s :被抽取出但被验证是错误的那些设计模式实例; f a l s en e g a t i v e :没有被抽取出的那些设计模式实例。 2 3 相关标准 为了完成从源代码中抽取到设计模式,必须有标准衡量是否达到目标。这个标准 说明了分析是如何完成以及选用的方法。在前面研究目的和背景( 1 3 节) 部分,研究的 目标己经提出了。但在研究过程中,可能会遇到一些问题:目的是抽取设计模式但是 分析可能得不到准确的结果。这个问题也意味着标准选择的问题。理想的情形是所有 指定模式都可以检测出来,这种情形事实上不一定能实现。采用的标准决定了本论文 情形研究的结果是否是好的。标准的选择相当于在二种方法中选择其一,这二种方法 工作的方式不同依赖于如何得到结果。 对于分析过程来说,标准也是一种选择,这个选择决定了分析有多难实现。制定 完整的精确定义可以找到设计模式,但是可能找到的设计模式没有包含所有指定的真 正的设计模式。找到的虽然是真正的指定的设计模式,但是可能还有一些真正的指定 的设计模式没有抽取出来。另一种选择是分析者希望找出更多的模式即使所有找出的 模式都不完全满足精确的模式查找定义。在这种情况下,数量比质量更重要。一些模 式找出来作为候选但是分析不能1 0 0 确定这些模式都符合查找定义。二个主要的标准 如下: ( 1 ) 积极的。这种方法识别设计模式重在质量。所有抽取出来的模式都是正确的但 不一定所有模式都能找到。 ( 2 ) 保守的。这种方法识别设计模式重在数量。一组设计模式抽取出来但是你不知 道是否都是正确的,可能有一些模式是错误的,取决于分析的难度。本论文中的分析 方法属于保守的。 开始的时候,模式还没抽取出来,分析面对的是大量可能构成模式的源代码,结 1 6 上海师范大学硕士学位论文 第二章相关概念与技术现状 构分析对代码进行了严格检查后产生了一个可能的候选模式的集合,行为分析对候选 模式的集合进行了更严格的筛选,但是由于行为分析采用的也是一个保守的方法,由 于只关注数量,虽然行为分析会多次执行程序希望得到正确的结果但是分析程序可能 并没有把错误的模式筛选出来。如果没有结构分析检查,行为分析是没有足够能力去 约束和抽取出模式的。 2 4 一般基于源代码的设计模式抽取方法的步骤 一般而言,从j a v a 软件中抽取设计模式的过程分解成以下三个步骤,如 2 - 1 所示。 图2 1 从j a v a 软件抽取设计模式的方法框架 ( 1 ) 对设计模式建模和描述,生成设计模式的中间表示模型m l ; ( 2 ) 以查找设计模式为目的,分析软件系统的j a v a 代码,抽取源码信息模型m 2 ; ( 3 ) 比较m 1 和m 2 的相似性,从而识 l j j a v a 代码中的设计模式实例。 2 4 1 源代码信息模型的抽取 为了识别源码中的设计模式实例,需要分析目标系统的源代码,根据源码语言的特 点,选择和存储源码中与设计模式抽取相关的信息并利用这些信息构造初始的源码模 型,如o b j e c tm o d e l 、u m l 类图、顺序图等。基于传统的程序理解技术并不能完全满足 构造源码设计信息模型的需要,原因是:( 1 ) 设计模式抽取过程中,使用传统的程序理解 1 7 上海师范大学硕士学位论文第二章相关概念与技术现状 技术得到的部分信息对于设计模式的抽取来说是多余的,因此我们需要在此基础上过 滤:( 2 ) 传统的程序理解技术得到的是源码的最基本的信息,而抽取设计模式需要在此 基础上更高层的抽象信息。 在这个阶段需要考虑的问题主要有: ( 1 ) 源码设计信息的定义问题,即定义需要抽取哪些信息。对于基于模式的设计发现来 说,我们感兴趣的信息只是源码信息的子集,因此,需要对传统逆向工具抽取的源码 信息进行过滤,只保留与设计模式抽取相关的信息。这些信息大致可以分为两类: 编译时的静态结构信息,如类、类的属性和方法、类之间的关系( 主要有继承,关 联,聚合) ;运行时的动态行为信息,如方法调用依赖关系、方法创建对象、方 法实现的多态性等。 ( 2 ) 源码设计信息的抽取方法问题。确定了需要获取的信息后,需要对要抽取的信息进 行分析,判断哪些信息是可以直接从源码中或者使用传统的程序理解技术能够获取 的,哪些是需要对源码信息进行分析之后才能得到的,以及获取这些间接信息的分 析方法 ( 3 ) 如何识别对象在运行期间的类型信息。在抽取过程中,我们希望能识别对象在运行 期间的类型信息,主要有两个原因:继承关系的存在使得对象在运行期间类型信 息与其声明类型不一致,导致得到的信息并不是我们期望的乜;有些语言中存在 容器类型,但通常我们感兴趣的不是该容器类型信息,而是容器中存放的对象的类 型信息。因此,一般源码抽取过程都要包含对一些对象的类型分析,从而识别出更 多、更期望得到的信息。 ( 4 ) 源码设计信息的表示模型问题获取设计模式抽取需要的源码设计信息后,需要构造 一个模型来组织获取的源码设计信息。 2 4 2 查找源码中设计模式的实例 从设计库中取出要查找的设计模式模型,在源码模型中查找它的实例。根据源码模 型和设计模式模型的特点可以选择适合的查找算法。在这个阶段需要考虑的问题主要 有: ( 1 ) 如何提高模式查找方法的效率。随着软件规模的增大,搜索空间成指数集增长, 为了降低计算复杂度,在查找过程中可采用适当的策略进行优化,避免组合爆炸问题。 1 8 上海师范大学硕士学位论文第二章相关概念与技术现状 ( 2 ) 如何解决设计模式变体的查找问题1 。软件工程师通常对设计模式实例化后将 其应用于系统设计和实现中,在实例化过程中可能根据实际应用的需要对设计模式的 结构作微小改动,随之产生了设计模式变体问题。如何在设计模式抽取过程中查找这些 记录设计信息的模式变体是亟待解决的关键问题,可以引入人工智能领域的模糊查询 策略来完成部分设计模式变体的查找。 2 5 国内外的研究现状 早期的设计模式抽取研究面向s m a l l t a l k ,c + + 等语言。k y l eb r o w n 使用s m a l l t a l k 作为抽取的目标语言,分析设计模式的属性及如何表示设计信息,考察了设计模式可 自动探测的原因,指出探测工具必须同时支持静态和动态的模型结构,以适合不同特 点的设计模式。他采用设计信息和模式规则统一处理的策略抽取,并给出了一些设计 模式的抽取算法概要口1 。b a s i l i 采用手工抽取,考察设计模式的结构、意图、实现。他 的探测方法分六步:阅读设计文档和问题说明;利用类声明建立类关系模型;据类的实 现代码完善类关系模型;从该模型中找模式;分析找出的模式;询问原开发者以更好 理解系统。他们的研究成果是设计模式抽取研究的基础。 p r e c h e l t 等抽取c + + 系统中结构型设计模式实例,开发了一个系统名为p a t 。该系 统包括- j p r o l o g 解释器,考虑g o f 模式中的五个结构型模式,利用面向对象c a s e - f 具的 结构分析机制从c + + 头文件中获取设计信息并表示为p r o l o g 事实,模式表示为p r o l o g 规 则,模式实例的搜索通过执行p r o l o g 查询来完成h 。a n t o n i o l 等采用多级归纳的策 略,使用软件量度( m e t r i c s ) 和结构属性来从o o 设计或c h 源码中提取结构型设计模式 实例。设计和代码被映射为称作抽象对象语言a o l ( a b s t r a c to b j e c tl a n g u a g e ) 的中 间表示。a o l 基于u m l 覆盖u m l 有关类图的部分,与o m t 兼容一1 。k e l l e r 等人对c + + 系 统描述了一种静态分析方法,主要考虑了t e m p l a t em e t h o df a c t o r ym e t h o d 和b r i d g e 等模式。其实现系统名为s p o o l ,巨大的逆向工程环境,该环境的目标是通过对模式 的组织来支持软件理解。它的“基于模式的设计恢复部分实现设计模式抽取。k e l l e r 等人指出对少数g o f 设计模式的抽取需要人的参与,而不能完全自动化伯q 0 1 。a n g e l a s e n c i o 等人开发了名为o s p r e y 的系统,类似于s p o o l 环境。他们抽取c + + 源码,使用基 于集合理论的结构化规范语言来描述识别模式的模板,并讨论了设计模式抽取的实际 作用n 。 1 9 上海师范大学硕士学位论文第二章相关概念与技术现状 h e u z e r o t h 等人指出分析系统的结构和行为对抽取来说是必须的。他们把被抽取的 设计模式实例定义为一系列程序元素如类、方法、字段等,并使之符合该模式的约束 或规则。他们的方法分两个阶段,在静态分析阶段通过j a v a 代码的类结构识别出备选 模式的集合,第二阶段采用行为分析观察模拟出的类运行期行为及其相互作用,过滤 掉“有效错 的模式,完善探测结果n 羽。n i e r e 等人对j a v a 源码信息的提取和组织基于 对抽象语法图( a b s t r a c ts y n t a xg r a p h ,a s g ) 的标注,使用类似u m l 元模型的a s g 模型, 方法类似于语言及图解析技术,其设计模式匹配部分基于模糊逻辑n 3 1 4 og u s t a f s s o n 等人计算常用软件量度和基于模式的量度,将模式抽取问题定义为约束满足问题 ( c o n s t r a i n ts a t i s f a c t i o np r o b l e m ,c s p ) ,其目标之一是进行设计模式抽取n 胡。 设计模式抽取是以设计模式的准确定义为基础的,必须选择适合设计模式抽取的 设计模式形式化( f o r m a li z a ti o n ) 描述来定义设计模式的抽取规则。现有的形式化方法 可以分为精确规范语言和对象表示法两大类n 叼。精确规范语言集中于表达g o f 设计模式 目录的结构、参与者和协作部分乜。形式化的另一类方法是对象表示法。由于u m l ( u n i f i e dm o d e l i n gl a n g u a g e ) 己经成为在软件开发中占支配地位的建模语言,并在许 多领域

温馨提示

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

评论

0/150

提交评论