软件开发论文范文参考
所属栏目:软件开发论文
发布时间:2014-02-09 16:56:29 更新时间:2014-02-09 16:49:28
本文所涉及的设计模式是指Gamma等人在文献[1]中提出的23个通用的设计模式。Gamma等从动机、目的、参与者、协作、应用效果、解决方案几个方面描述设计模式。为了便于软件工程师在实际应用过程中理解、选择和实现设计模式,除解决方案部分外,设计模式的动机、目的、参与者、协作、应用效果等项内容通常以非形式化的方式描述。解决方案部分使用OMT图描述一个通用的设计结构。从源码中抽取设计模式必然要求对其进行描述,采用某种表示方法如PROLOG规则、抽象语法树,约束可满足问题(CSP)的变量和约束条件等,对设计模式所表达的对象结构和行为进行抽象,并将这些设计模式表示存储在便于修改和维护的设计知识库中。
【摘要】本文主要研究如何从源代码中自动抽取出设计模式,并研究了相关的技术。论文阐述了自动抽取技术的过程,首先是结构分析,通过分析XMI文档,提取出类的结构特征,接着是动态分析。运用结构分析阶段后将产生一些模式候选项,这些模式候选项是一些由类和方法组成的结构,将作为动态分析的输入,动态分析监控模式候选项的动态执行的情况,得出进一步的结果。论文的结论就是作为抽取设计模式的目的是可以自动(或半自动)抽取任何JAVA程序中的设计模式。
【关键词】设计模式,结构分析,行为分析,XMI
一、引言
设计模式是面向对象设计的一个高级抽象,从程序理解和软件维护的观点出发,一个设计模式提供了模式结构中每个类的角色信息和模式各组成元素的关系以及模式组成元素和系统其余部分关系的信息。因此,源码中设计模式的抽取是逆向工程中的一个关键问题。对于缺少分析和设计文档的软件系统来说,从它的源码中抽取设计模式有助于软件系统的理解和文档化,增强软件系统的可维护性。进一步,能识别软件系统中引入设计模式后可以改进的地方并进行相应的修改,提高了源码质量,从而达到软件重构的目的。
二、技术现状
设计模式比源代码更高层次地描述了软件系统,设计模式也是描述部分设计的一种方式。设计模式是一种表示设计结构的技术,通过掌握设计的思路设计模式保存了设计的关键信息,设计模式定义了类、实例、角色、关系和责任分配,一个好的软件结构可以被快速应用解决问题而不用重新设计,设计模式就是被定义好的常见问题解决方案的抽象设计。当一些情形经常出现时,可以选择设计模式解决相应问题而不用每次都分析问题再想办法解决,例如调停者模式被选择来解决一个特定的设计问题而不用重新设计。选择了设计模式无论做文档还是解释说明都显得更容易,在面向对象开发过程中设计模式起了很多作用[1]:
计模式抽取在理论和自动化工具的开发方面的研究都取得了进展,但还存在一些困难和问题,如基于设计模式解法部分的设计模式识别规则的定义多种多样,实现方式各异,没有广泛适用的规范;实际可用的设计模式抽取工具较少,成型的工具大都作为庞大的逆向工程环境的一部分,模块化程度不高;设计模式抽取的结果因设计模式特点、抽取的目标语言和目标系统而差别很大,实际应用困难等。
三、一般基于源代码的设计模式抽取方法的步骤
一般而言,从Java软件中抽取设计模式的过程分解成以下三个步骤:
(1)对设计模式建模和描述,生成设计模式的中间表示模型;
(2)以查找设计模式为目的,分析软件系统的Java代码,抽取源码信息模型;
(3)比较中间模型和信息模型的相似性,从而识别Java代码中的设计模式实例。
四、基于XMI的方法
XML元数据交换(XMLMetadataInterchange,XMI)是一种标准,这种标准能够使用可扩展标记语言(ExtensibleMarkupLanguage,XML)来表达对象,XML也是万维网上表示数据的普遍格式。XMI不仅仅是一套有序的规则,它还与建模标准密切相关,这使得用户可以在XML应用中有效地进行建模操作。XMI2.0详细说明了如何从模型中创建XML模式(schema),而以前的XMI版本则详细说明了如何从模型中创建XML的文档类型定义(DocumentTypeDefinition,DTD)。模式与DTD都定义了XML文档的内容。[2]
XMI是创建应用程序所需要的,由于XML不是面向对象的,因此需要将对象映射到XML。由于XML的灵活性,因此可以有多种映射方式。尽管如此,在交换XML文档的时候,这种灵活性也会带来一定问题。如果一个工具利用了一种方法将对象映射到XML,而另一个工具将对象映射到XML却使用了另外一种方法,那么这两种工具就不可能正确地解释对方的XML文档。XMI使用模型来确认对象是共享的。一个使用了XMI的工具能够与使用XMI的其他工具交换对象。
XMI使用了两个相关的标准:可扩展标记语言(ExtensibleMarkupLanguage,XML)和统一建模语言(UnifiedModelingLanguage,UML)。XMI是以XML为基础的;XMI使用XML从文档中保存及加载对象。而UML定义了对象和类的结构,使用这种定义来解释XMI怎样在XML中说明对象和类的。
五、结构分析
在一个大型软件系统中,包含类的个数往往成百成万个。而每个类都有不同类型的属性和方法。为了提高代码的重用和效率,这些类之间往往以一种相对复杂的方式关联。因此,从这么多类中抽取出一个模式就变成一项非常复杂的任务。为了解决这个问题,我们首先仅仅考虑结构特征,减少了分析类的范围。我们所说的结构特征包含了属性的个数,方法的个数,以及类型,如抽象类,具体类或者接口,以及与其他类的关系。
设计模式抽取工具的输入是XMI文档,它包含了被分析的软件的UML类图的信息。工具直接分析XMI文档,代替了直接分析源代码。从UML类图生成XMI文档,已经在上一章中详细阐述了步骤。就目前而言,通过使用我们使用的RationalRose从源代码逆向工程到顺序图是不可能的。因此,XMI文档仅仅包含了UML类图的相关信息。结构分析过程框架如下结构分析阶段的整个过程的方法框架。与一般的从源代码中设计模式抽取的过程类似。
整个过程可以分成三个步骤完成:
(1)对要抽取的目标设计模式进行分析建立特征模型,分一下两步进行:
a.设定特定设计模式的特征权重;
b.建立特定设计模式的特征权重关系矩阵。
(2)对源代码逆向工程所得的XMI文档进行分析:
a.统计XMI中每个类的特征元素的权重;
b.建立系统特征的关系矩阵。
(3)利用匹配算法把在第一步中获得的模式关系矩阵和在第二步中得到的系统的关系矩阵进行匹配。[3]
六、行为分析
一般而言,设计模式通常包含了结构和行为两方面的信息。结构信息描述了模式中的类之间的静态的结构关系。行为信息表示了模式中对象之间的动作和交互的序列细节。因此,仅仅使用结构分析抽取出的设计模式的方法是不充分的。经过结构分析后的结果中包含了falsepositives实例。而行为分析的结果是减少falsepositives实例。
结构分析已经产生一些可能的设计模式实例的候选模式实例集合,动态分析将把这些经过结构分析获得的候选集合信息作为输入并产生一个相同或更少数目的集合。行为分析将不产生新的设计模式的实例,它只检查候选集合,检查每个设计模式实例的期望的行为特征,也就是说把falsepositives的候选项去除。
结构分析和行为分析之间的不同在于结构分析主要检查类之间的交互而行为分析则关注不同类实例或对象之间的通讯。这就意味着结构分析只会作一次相同检查而行为分析可能重复多次相同的检查,检查次数取决于相同类有多少个对象实例存在以及它们如何交互,重复多次相同的检查的原因是对象可以以不同方式创建,因为这个原因,它们可能拥有不同的属性需要分别分析。行为分析的结果可能和前面做的结构分析结果相似。
行为分析的主要目的是找到类之间存在的依赖关系,或者是否存在一些类委派的方法调用。对每一个特别的设计模式,行为分析是不同的,类似与结构分析阶段我们所做的。对于设计模式的特征的行为分析相对于结构分析要复杂的多。行为分析的主要困难是对于相似的期望行为有多种实现方式。
七、总结
从源代码中抽取出设计模式的实例,对于提高软件可理解性和可维护性、软件设计重用以及软件重构具有重要意义。论文着重论述了基于XMI的两阶段抽取设计模式实例的方法,该方法主要分为结构分析和行为分析两个阶段来完成。其中第一个阶段是结构分析,通过分析XMI文档获得类的结构特征,抽取出候选设计模式实例的集合,第二阶段是行为分析,分析第一阶段中设计模式实例的候选集合,扫描源代码以去除候选集合中的falsepositive设计模式实例。
参考文献
[1]E.Gamma,R.Helm,R.Johnson,etal.设计模式:可复用面向对象软件的基础(第一版)[M].李英军,等译.北京:机械工业出版社,2000.
[2]林辉跃.面向对象软件中设计模式的智能抽取技术研究[D].硕士学位论文,2013.
[3]S.Tilley,K.Wong,H.Muller,etal.Structuralredocumentation:Acasestudy.IEEESoftware,1995,12(1):46-54.
[4]D.Heuzeroth,T.Holl,G.Hostrom,etal.AutomaticDesignPaternDetection.in:Proc.ofthe11thIEEEIntenrationalWorkshoponProgramComprehension.Portland,Oregon.2003.USA:IEEEComputerSociety,2003:94-99.
[5]XMIMetadataInterchange.http://www.omg.org/technology/documents/formal/xmi.htm,Jan.2006.
[6]SUNMicrosytems.AWT,theSUNJavaAbstractWindowToolkit.http://java.sun.com/products/jdk/awt,Feb.2006.