英语原文共 8 页,剩余内容已隐藏,支付完成后下载完整资料
从Web应用程序抽象业务级UML图
摘要
在本文中,提出了一种用于在Web应用程序的应用领域的业务级重构UML图的逆向工程方法。 特别是该方法允许的UML类图提供应用领域的面向对象的概念模型的重建,序列图建模识别业务对象之间的交互和用例图建模Web应用程序所提供的用户功能。 使用源代码分析的启发式标准用于恢复图。 用于实施这些标准工具已经产生,并且用于验证他们的实验已经与支撑案例研究的进行。 实验结果表明该方法的可行性和有效性。
关键词:逆向工程,网络工程,面向对象
- 介绍
互联网在现代社会中的快速和渐进的传播已经引发了对Web应用的越来越多的要求,要求其实现越来越复杂的功能和严格的质量。 在这种快速发展的背景下,开发人员通常在短时间上市和极高竞争的压力下构建Web应用程序。
尽管在文献中提出了用于构建Web应用(WA)[11,12,17,18,4]的若干开发方法,但是良好的软件工程原理通常不在实践中被应用。 事实上,大多数Web技术实际上是鼓励坏的,而不是好的做法,软件工程原理的模块化,数据封装,关注的分离或信息隐藏的应用实际上不能很好地支持HTML,XML和脚本语言 (例如Javascript,JSP,VBScript,PHP)广泛应用于当前的WA实现。
由于当前Web技术的开发问题和局限性,维护现有的WA不是一个简单的任务。 逆向工程技术和工具已被证明有助于支持大规模传统应用的理解和维护。 研究团体现在正在解决定义和验证用于逆向工程现有WAs的类似方法的问题。
最近,在文献中已经提出了用于逆向工程WAs的多种方法。 它们中的一些目的在于获得描绘WA组件(即,页面或内页面组件)以及它们在不同细节程度上的关系的WA的架构视图。 其他一些方法利用聚类技术来抽象描述由WA实现的功能需求,这被转换为UML用例图。
然而,在一些维护过程中,现有应用的架构视图和功能架构视图都不足以支持软件工程师任务。 在某些情况下,确实,描述应用领域的概念模型提供了在维护或测试活动期间要利用的宝贵信息。 这些概念模型的示例包括在业务层面上的面向对象模型,根据业务对象和它们之间的逻辑关系描述应用的领域,以及表示这些对象的行为和动态的模型。
例如,从程序上遗留系统中提取的面向企业级的对象模型已被用于对面向对象的平台系统的支持包装技术的迁移。 此外,来自对象概念模型的对象已被证明对支持系统重用是有用的,因为每个经验证的对象表示可以集成到新系统的生产中的可重用组件。
在文献中,已经提出了几种逆向工程方法用于从传统软件中恢复对象和面向对象的模型。 在Web应用程序的上下文中定义和验证类似的方法代表了相关的研究问题。
在本文中,将解决逆向工程Web应用程序的问题,旨在恢复在业务层面描述应用程序的概念模型。利用启发式标准的反向工程技术将被提出用于获得面向对象的概念模型,包括类图,用例图,和企业级序列图。 UML符号将用于表示这些模型。
已经产生了用于实施所提出的技术的工具,并且在案例研究的支持下进行了用于验证它们的实验。 实验结果表明所提方法的可行性和有效性。
本文的结构如下:在第2节中,介绍了从现有WA的代码重建业务类图的方法,而第3节描述了获得用例图的技术,以及与业务类相关的序列图。 在第4节中,描述了从为了验证所提出的方法而进行的实验中选择的案例研究。 最后,第5节提供了结论性意见。
- 在业务层恢复类图
给定一个Web应用程序,业务级别的类图将描述来自WA解决的问题的域中的相关概念组件(业务对象)及其相互关系。 此模型可用于记录现有的未记录或不良记录的WA,以及它为重新设计,重新创建或将现有应用程序迁移到不同的技术平台提供了有效的工具。
根据传统软件的背景下提出的方案,可以通过包括三个主要步骤的逆向工程过程从现有WA的代码恢复业务级别类图:- 候选类及其属性的识别;- 方法与候选类的关联;- 类之间的关系的识别。在下面,我们将使用术语类和对象作为同义词。
在传统软件中,候选对象及其属性的识别是通过查找组成对象状态的逻辑相关数据组来进行的。 这种搜索通常基于这些语言机制,其允许在代码中定义实现相关概念的相关数据组,所述相关概念来自应用程序的域或来自解决方案的域。 这些机制包括用于数据结构的定义和使用的那些机制,例如数据库中的记录,用户数据类型和表模式。 此外,对象操作(即,方法)的识别集中在可根据特定耦合准则与候选对象相关联的合适的代码段(例如程序,子例程,片段)。 最后,具体启发式的标准,例如在定义的,可用于定义对象之间的关系。
当尝试将这些方法移植到WA上下文时,必须解决几个问题。
第一个问题涉及WA中对象和对象属性的识别,因为通常用于实现相关数据组的机制的选择对于WAs不是显而易见的。 大多数Web技术和语言(例如HTML,ASP,PHP,VBS,JSP等)提供用于声明数据组(如RecordSet或Collections或Classes)的句法结构,但其中一些不经常使用。 此外,由于WA通常被实现为多层系统,其中数据库服务器实现架构的一个层,所以简单的WA代码分析可能不允许识别持久性数据存储器和数据存储器模式。 在这种情况下,的确,这样的数据存储的说明可以被部署在不同的层中的应用,并且可能无法访问,如在一个WA,使得现有的信息系统的服务在网络上可用的情况下,实施前端系统。
第二个问题涉及识别实现对象方法的代码块,因为通常被考虑用于传统软件(例如,程序,子例程,片段等)的代码片段对于WAs可能不是有意义的。 在这种情况下,要考虑的可能的功能单元应该包括网页,页面内的脚本块,页面中的功能,这取决于所请求的粒度程度。此外,用于选择这些块的代码的适当标准对象方法并将它们与正确的对象相关联应该被精确地定义,以及用于定义恢复的对象之间的可能关系的合适的规则应当被定义。
在下面的小节中,提出了克服这些问题的方法。
2.1识别候选类及其属性
我们提出的从WA识别候选类的方法包括两个步骤。 第一步骤包括识别来自WA码的相关数据项组;在第二步骤中,执行自动过程以从在前一步骤中识别的组的列表中定义候选类别。
在WA中用于标识候选类的属性的感兴趣的元素将是在相同的用户输入/输出操作(例如在输入/输出HTML表单或HTML表格中显示的数据)中涉及的数据项组,或者对数据存储(例如ASP记录集或PhP语言的异构数据阵列)的相同读/写操作或数据库查询操作中涉及的数据集。此外,传递中抛出不同的页面或在页面中使用的类的实例数据组将被考虑在内。
该选择背后的原理是,用户通过输入表单输入或通过输出表单向用户显示的数据项集合通常表示用户在应用程序域中感兴趣的概念。 类似地,从持久性数据存储读取或写入持久性数据存储的数据项可以表示业务域的有意义的概念。
在该方法的第一步,将需要在代码检索这些数据组及其引用WA源代码的静态分析。 每个组的每个数据项将与用于在代码中引用它的标识符相关联。
因此,来自组的项将被提交到旨在解决同义词(即,具有不同名称但具有相同含义的标识符)和同音词(即,具有相同名称但不同含义的标识符)的问题的细化步骤。同义词标识符必须分配相同的唯一标识符。同义词标识符必须与不同的名称相关联。另外,在执行同义词和同音词分析有意义的名称时,根据业务域的规则合成数据的含义,被分配给每个数据项。当然,名称的定义,同义词和同义词分析都是基于代码读取和检查可用的文档,并且是人类密集的任务。
在这一点上,每个数据组可以被认为是潜在类的属性,并且应该进行验证以区分有效业务类(即,实际上与来自业务域的概念相关联的类)与无效的业务类。该验证通常手动完成。
为了减少此分析所需的工作量,我们的方法利用自动过程来分析数据组,以便识别更可能表示有意义的类的那些。因此,仅将选定的数据组提交到验证过程。此过程称为Produce_Candidate_Objects,基于启发式标准,如图1所示,其中:
- GList是数据组的列表;
- g是GList中的通用组;
- Card(g)是g组的基数;
- Nref(g)是对g组的引用的数目;
- a是g中的通用数据项;
- CAND是候选对象的列表;
- C是来自CAND的通用候选对象;
- SORT(A,K)是根据K中描述的标准对列表A进行排序的函数;
- TOP(A)是用于访问列表A的顶部元素的函数;
- REMOVE(A,x)是用于从列表A中移除项x的过程;
- INSERT(A,x)是用于在列表A中插入项x的过程;
- ADD(C,h)是用于添加C组中的组h的所有项目的过程。
过程Produce_Candidate_Objects分析数据组的输入列表Glist并且产生候选类的输出列表CAND。
由该过程实现的第一启发式规则指出,代码中相同数据组的引用越多,其表示有意义概念的可能性越大。 第二启发式规则确定具有小尺寸的群组可以表示比较大群组更简单和原子的概念,并且较大群组可以表示由相连的较小群组组成的更复杂的概念。
根据这两个规则,来自Glist的组按照每个g组的参考数量以降序排列,并且按照每个组的基数以升序排列。 此顺序由过程SORT生成,过程SORT的输出由数据组的有序列表“OrdList”组成。
图1:生成候选对象列表的过程
从OrdList中的顶部组开始,过程分析每个组,并且如果组包括至少还没有包括在CAND中的任何其它组中的新数据项,则它将被插入到候选对象的CAND列表中。检查OrdList,直到它包括至少一个组,或者直到CAND中的候选对象的所有数据项的并集,以及Glist中的组的所有数据项的并集是相等的。
当来自OrdList的组h包括组成CAND中的一个或多个组Ci的所有数据项时,只有尚未包括在任何CAND组中的h中的k个数据项被添加到其元素全部包括在原因是组h可能表示由Ci组之间的逻辑链路产生的复合概念。添加到Ci组的属性是记录此链接所必需的,根据第2.3节中提出的方法,这些属性将用于推断对象之间的关系。
作为这种情况的示例,我们可以考虑与报告相关联的数据组,其显示关于应用程序域的一些不同对象的信息。
在过程结束时,CAND列表将包括已经被选择为候选对象的数据组的集合。 CAND列表中的每个组都必须分配一个有意义的名称,描述其代表的概念。每个组的数据项将构成对象的属性,例如其状态。出现在多个候选对象中的属性将在后续步骤中根据下一节2.3中提出的方法进行分析。
为了精确起见,CAND是可以实例化业务对象的候选类的集合。
作为所提出的方法的应用的示例,如果我们具有以下OrdList:
OrdList = {G1 =(a,b,c),G2 =(d,e,f)
G3 =(a,b,c,d,e,f,g),G4 =(a,b,c,m,n)
G5 =(a,b,q,r),G6 =(d,f,s,t,u)}
最终的CAND列表将包含以下候选业务对象组:CAND = {(G1,m,n,g),(G2,g),G5,G6}。
2.2将方法与类关联
与类相关联的方法的识别基本上取决于两个因素:要被视为潜在方法的代码块的粒度,以及用于将潜在方法分配给类的准则的定义。
在WA中,类方法的搜索可以集中在具有细粒度级别的代码块上,诸如包括在页面中的脚本或模块的内页面组件,或者诸如页面或页面组的粗粒度组件。更细粒度级别,从代码中提取组件所需的工作量更大,并将其重新设计为对象方法。
我们的方法提出考虑物理网页(例如,服务器页面,客户端页面)作为与WA的候选对象相关联的潜在方法,而不是内部页面组件。这种选择允许减少WA的面向对象的重新设计所需的努力。
对于定义用于将方法关联到对象的标准的问题,将采用旨在使不同对象之间的耦合最小化的方法。
基于页面到候选对象的访问来计算页面和对象之间的耦合度量。当包括定义或使用某些对象属性的值的指令时,页面访问候选对象。我们假设定义一些对象属性的值的访问产生比使用一些对象属性的访问更大的耦合。
因此,通过将每个页面与其最高耦合的对象相关联来实现对象之间的耦合的最小化。特别地,如果页面仅访问一个对象,则它将被分配为该对象的方法。如果一个页面访问更多的对象,它将被分配给它访问的对象。在该第二种情况下,页面对其他对象的访问可以被认为是从页面被分配给的对象交换到其他对象的消息。
为了实现将页面关联到对象的标准,我们引入了以下定义:
- M = {mi},是页面集合(例如,潜在对象方法 - 下面我们将使用术语page和method作为同义词);
- c是来自候选对象的CAND列表的通用元素;
-alpha;def是表示与每个定义对对象的访问相关联的权重的正数;
- alpha;use是表示与对对象的每个使用访问相关联的权重的正数;
- alpha;defgt;alpha;use;
-Ndef,m,c是由页面m对对象c进行的类型定义的访问次数;
- N use,m,c是由页面m对对象c进行的类型使用的访问次数。
此外,我们定义表示由m到c做出的加权访问次数的函数Acc(m,c):
Acc(m,c)=alpha;def* Ndef,m,c alpha;use* Nuse,m,c(1)
所述MAX [X]是从集合X的值返回最大值的函数,下面的标准将用于将方
剩余内容已隐藏,支付完成后下载完整资料
资料编号:[137994],资料为PDF文档或Word文档,PDF文档可免费转换为Word
以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。