没有合适的资源?快使用搜索试试~ 我知道了~
将历史作为软件演化的一级实体:一个以历史概念为中心的元模型的分析和实用性
理论计算机科学电子笔记127(2005)75-86www.elsevier.com/locate/entcs将历史视为一级实体的软件演化St'ephaneDucasse1,4TudorGırba2,4瑞士伯尔尼大学软件组合小组Jean-Marie Favre法国格勒诺布尔大学LSR-IMAG实验室摘要软件系统的历史在推理手头的系统或软件演化的一般规律时包含有用的信息。 然而,迄今为止开发的方法并不依赖于 在一个明确的元模型,并不方便不同的演变比较。 我们认为因为需要将历史定义为第一类实体,并提出一个以历史概念为中心的元模型。 我们通过讨论不同的分析来展示我们的元模型的有用性它使。保留字:软件演化,历史元模型1电子邮件地址:ducasse@iam.unibe.ch2电子邮件地址:girba@iam.unibe.ch3电子邮件:jean-marie. imag.fr4Ducasse和G irba非常感谢瑞士国家科学基金会对“软件分解和组合的工具和技术”项目(SNF项目编号2000-067855.02,2002年10月至2003年9月)的财政支持2004)和“RECAST:面向对象应用程序的演变”(SNF项目编号620-066077,9月10日)。2002年8月2006年)。1571-0661 © 2005 Elsevier B. V.在CC BY-NC-ND许可下开放访问。doi:10.1016/j.entcs.2004.08.03576S. Ducasse等人理论计算机科学电子笔记127(2005)751介绍观察和建模软件演化的重要性在20世纪70从那时起,越来越多的研究已经花在识别软件演化的驱动力然而,迄今为止开发的方法,不依赖于一个明确的Meta模型的演变分析,不便于不同的演变比较。这项工作的目标是提出一个元模型,它允许使用历史信息,就像任何其他类型的信息。在详细讨论之前,我们定义了三个术语:版本,进化和历史。版本是实体在特定时刻的快照。进化是从一个版本到另一个版本的过程历史作为一种具体化,它封装了关于进化和版本信息的知识。根据这些定义,我们说我们用历史来理解进化(即,历史是进化的模型)。本文展示了Hismo,在其中心的历史概念的元模型,并认为,我们需要这样一个元模型的原因软件系统的进化。作为验证我们的方法,我们提出了历史测量和历史操作的例子,并显示不同的用途,逆向工程。在下一节中,我们将列举元模型应该支持的需求,并分析现有的技术来分析软件演化。在第3节中,我们介绍了Hismo,我们的历史元模型。在第4节中,我们展示了历史测量的示例,在第5节中,我们给出了元模型支持的分析示例最后,对本文的工作进行了总结,并提出了进一步的研究方向.2软件演化分析基于我们对该领域的分析,分析软件系统演化的元模型满足的要求是:• 元模型应该更容易量化和比较不同实体的不同属性演化。例如,我们必须能够比较不同类中方法数量的演变。• 元模型应允许基于不同属性的演变进行分析就像我们现在可以推理多种结构属性一样,我们希望能够推理这些属性是如何进化的。例如,当一个类只有几个方法,但有大量的代码行时,它应该重构。在同一行中,添加S. Ducasse等人理论计算机科学电子笔记127(2005)7577或者删除类中的代码行而保留方法可能是bug修复的标志。• 元模型应该在不同的抽象级别提供变更信息,例如包、类、方法(即,而不仅仅是文本修改)。• 元模型应提供对同一实体的两个不同版本的详细比较。• 分析应该适用于任何版本组(即, 我们应该能够选择历史的任何部分)。在下面,我们列举了用于分析软件演化的不同技术,以及这些技术与上述需求的关系。2.1演化图可视化自1970年以来,研究一直致力于通过基于经验观察制定法律来建立进化理论[15][14]。 观测是基于解释代表垂直方向上的一些属性的演变图(即,模块数量)和时间(见图1)。最近,同样的方法被用来理解开源项目的发展[2][3]不图1.一、进化图的例子,垂直方向上有一些属性,水平方向上有时间当我们需要根据一个属性进行推理时,这种方法是有用的,但它使同时根据更多属性进行推理变得困难,并且只提供了有限的方法来比较不同属性的演变。例如,它适合于使用这种技术来分析系统中模块的演化数量,但是很难将模块的数量与代码的总行数以及开发人员的数量在图1的左侧部分,我们显示了一个实体的属性P的演变图。从图中我们可以得出结论,P随时间增长。在图的右边部分,我们展示了12个实体中属性P的演变。几乎所有的图都显示了P性质的增长,但它们的形状不同单独使用图表,P78S. Ducasse等人理论计算机科学电子笔记127(2005)75说哪些是困难,如果他们是重要的。此外,如果我们想把性质P的演化与另一个性质Q联系起来,那么我们就有了一个更加困难的问题,而演化图并没有显著地减轻任务。2.2演化矩阵可视化可视化也被用来推理多个演化属性,并比较不同实体的不同演化。Lanza和Ducasse将系统历史的类别排列在演化矩阵中,如图2所示。每个矩形代表一个类的一个版本,每行包含该类的所有版本此外,矩形的大小由应用于类版本的不同测量给出从可视化可以检测到不同的演化模式:脉冲星,闲置,超新星或白矮星。脉冲星空闲超新星方法数属性数白矮星图二、在进化矩阵中可检测到的类进化模式的样本通过这种可视化,我们可以同时根据两种属性进行推理,并且我们可以比较不同的进化。该方法的缺点在于元模型的隐含性(即,不存在向其分配演进属性的显式实体),并且因此难以将演进信息与版本信息相结合。例如,我们想知道脉冲星或空闲类是否很大。基于检测到的模式,我们可以构建一个词汇表来表征类。因此,在一个系统中,我们可以有脉冲星类或空闲类。但是,脉冲星和空闲的特点是一个完整的线,而不仅仅是一个细胞的矩阵。因此,脉冲星和闲置的特点是一个类随着时间的推移而演变的方式,而不是一个类。根据这一观察,我们得出结论,我们需要一个名词,赋予脉冲星的特性:历史。其他可视化方法基于类似的元模型。Jazay- eri分析了体系结构的稳定性[11],类S. Ducasse等人理论计算机科学电子笔记127(2005)7579CVSItemLog变化 Taylor和Munro [18]使用一种称为修订塔的技术可视化版本数据。Ball和Eick [1]开发了可视化来显示源代码中出现的更改。Collberg等人使用 基 于 图 形 的 可 视 化 来 显 示 作 者 对 类 层 次 结 构 所 做 的 更 改 [4] 。Rysselberghe和Demeyer使用基于版本控制系统中信息的简单可视化来提供系统演化的概述[19]。2.3发布历史元模型Fischer等人对与版本控制系统(CVS)项相关的错误报告进行了建模[7]。在图3中,我们展示了发布历史元模型的摘录。这个元模型的目的是在版本控制系统和错误报告之间提供一个链接。这个元模型承认历史的概念(即,CVSItem),其包含多个版本(即,CVSItemLog)。CVSItemLog与描述和错误报告相关。作者使用此元模型来恢复基于错误报告的功能[6]。这些功能与一个CVSIitem相关联。类似的元模型已被用于检测系统各部分之间的逻辑耦合[8]。作者使用CVSItemperature来检测系统中一起变化的部分,然后他们使用这些信息来定义耦合测量。1 *1 1----1 1图3.第三章。摘自发布历史模型模型。该元模型的主要缺点是它没有考虑版本级的软件结构,即,该系统仅用文件和文件夹来表示,但不表示语义单元(例如,类或方法)。因此,该元模型不再支持不同的变化语义,即,它没有给出关于系统中究竟发生了什么变化的信息。Zimmerman等人旨在提供一种机制来警告开发人员:“改变这些函数的程序员也会改变。. .“.作者将他们的分析放在元模型中的实体级别(例如,方法)[20]。不幸的是,他们没有明确地描述他们的底层Meta模型.错误报告描述错误报告CVSItemLog描述特征CVSI项目80S. Ducasse等人理论计算机科学电子笔记127(2005)75历史版本结构实体抽象实体*我的天啊***ver.1ver.4**系统版本ver.3ver.2系统历史课程历史ClassVersion调用参数继承方法类命名空间接入属性......属性历史访问历史空间历史阶级历史方法历史传承历史参数历史调用历史3历史元模型见图4。 历史和进化矩阵图4显示了如何构建一个以历史概念为中心的元模型:矩阵中的每个单元格都是一个Class Version,这使得每一行都代表一个Class History。此外,整个矩阵实际上是由SystemVersions形成的一条线,这意味着整个矩阵可以被视为一个SystemHistory。在图的右侧,我们构建了一个小的元模型,它显示SystemHistory有更多的ClassHistories。1 1* *图五. Hismo的摘录及其与源代码元模型的关系。 我们没有代表 所有的继承关系,不影响图片的可读性在图5中,我们展示了一个基于源代码元模型的简化的历史元模型。在我们的例子中,我们使用FAMIX [5]。 每个版本实体具有对应的历史实体。此外,版本级别的关系(例如,S. Ducasse等人理论计算机科学电子笔记127(2005)7581*EHistory/rank [*]:integer1历史0..1个版本秩HasVersion0..1外翻/rank:integer*1pred0..1succ{rank= self.HasVersion.rank->sortedBy(i|(一)rank->for(r1,r2|r1 collect(i|self.versions[i]. evolutionOfP)->sum()latestEvolutionOfP =序列{minRank+1..maxRank}->collect(i|self.versions[i]. evolutionOfP*2.exp(i-maxRank))->sum()earliestEvolutionOfP =序列{minRank+1..maxRank}->collect(i|self.vp[i]. evolutionOfP*2.exp(maxRank-i+1))->sum()}/evolutionOfP:real外翻秩/evolutionOfP:real/latestEvolutionOfP:real/earliestEvolutionOfP:real/isPulsar:booleanminRank:integermaxRank:integerfilter[0.. 1]:同品种EHistory类具有更多方法)在历史级别具有对应者(例如,ClassHistory有更多的MethodHistories)。历史与版本实体没有直接关系,而是通过版本包装器。在图6中,我们展示了History和Version之间关系的细节。见图6。 历史、版本和结构实体之间关系的细节(E)。我们使用OCL符号。4Hismo中的历史测量在本节中,我们将展示一些如何使用元模型来度量演化的示例。我们还展示了元模型如何支持历史选择,以及如何测量可以应用于任何这样的选择。图7.第一次会议。历史测量定义的示例在图7中,我们介绍了三种度量:P的演化、P的最新演化和P的最早演化82S. Ducasse等人理论计算机科学电子笔记127(2005)751 2 3 4 5版本图例说明:x一个P =x属性P(EP)的演化-此度量定义为后续版本中P的绝对差异之和。这一衡量标准可用作变化的总体指标。P的最新演化(LEP)P的最早进化(EEP)图7还显示,给定一个历史,我们可以对其进行过滤以获得子历史。由于定义的测量适用于历史,而历史的选择是另一个历史,因此测量也可以应用于任何选择。P的演变最新演变最早的进化图8.第八条。历史测量示例在图8中,我们展示了将定义的历史度量应用于5个历史的示例,每个历史有5个版本。• 在显示的D(5个版本)历史期间,P保持2。这就是为什么所有三个历史测量值均为0的原因。• 在A类、B类和E类的历史中,P的性质的变化与P(EP)的演化所示的相同。P(LEP和EEP)值的最新和最早演变对于三个类历史来说是不同的,这意味着(i)在类B的历史中变化是最近的(ii)在类E的历史中过去发生的变化,(iii)在A类的历史中,变化在历史中分散得更均匀。的P的P一2435773.503.25B2234975.751.37C4222331.252.12D22222000E0423371.505.25S. Ducasse等人理论计算机科学电子笔记127(2005)7583• 类C和类E的历史具有几乎相同的LEP值,因为它们最近历史的变化量相似。EP值差异很大,因为E类在其历史上比C类变化更多。P属性可以是一个属性,如:类的方法数,方法的复杂度等。此外,我们可以定义其他度量,如:P的添加/删除,P的稳定性/不稳定性等。5Hismo应用程序历史测量的好处是,我们可以了解实体发生了什么,而无需详细查看每个版本-即,测量结果将时间总结为分配给相应历史的数字。在本节的其余部分,我们将描述基于元模型的三个应用程序:• 建立更复杂的历史测量,• 可视化不同的历史测量,以确定相关性和演变模式。• 构建结合不同演化特征和版本信息的自动查询,以提高设计缺陷的检测。5.1昨天上述测量被用来定义另一种测量:昨天YW被定义为对这样一种现象的回顾性经验观察,即在最近的历史中发生了重大变化的阶级中,至少有一个阶级在不久的将来也是变化最大的阶级之该方法包括在确定,为每个版本的主题系统,在最近的历史中改变最多的类,并在检查这些是否也是在连续的版本中改变最多的类。YW值由该假设成立的版本数除以分析的版本总数得出。 如果YW的值很高,我们认为从最近变化最大的类开始重新设计是有用的,因为它们很有可能在不久的将来也会是变化最大的类之YW是通过组合应用于子历史的不同历史测量而获得的历史测量84S. Ducasse等人理论计算机科学电子笔记127(2005)755.2Hierarchy Evolution Complexity视图基于Hismo,已经提出了一种可视化来检测高分辨率进化的模式[9]。可视化基于多度量视图[13]。图9显示了应用于六个类层次结构历史的可视化。节点表示类历史,边表示继承历史。节点和边都用历史测量值进行注释。可视化结合了不同属性的演变,用于构建词汇表来表征类层次结构的演变:旧层次结构,稳定层次结构等。见图9。类层次结构演化的例子。节点表示类历史,边表示继承历史。节点宽度=方法数量的演变;节点高度=语句数量的演变;节点颜色=类年龄;边宽度=年龄;边颜色=年龄。5.3设计缺陷检测历史测量的另一种用途是提出改进设计的锯齿检测[17]。特别是,这项工作显示了如何通过考虑以下信息来改进基于版本测量的数据类和上帝类[16]例如,Marinescu将GodClasses定义为集中系统的智能“他还定义了基于测量的表达式来检测GodClass。我们使用历史信息来限定GodClass是无害的,如果它们在其历史的大部分时间内是稳定的,因为这意味着这些类在过去不是可维护性问题(例如,95%)。下面我们来介绍一下我们使用的表达式。上下文类历史导出isHarmlessGodClass:(self.versions->last().isGodClass)&(self. stability OfNOM> 0.95)在这个表达式中,我们展示了如何将历史信息与其他类型的信息相结合来构建我们的推理。S. Ducasse等人理论计算机科学电子笔记127(2005)75851历史版本0..1HasVersions*1*前任*接班人{非循环}版本来源{predecessors.datesuccessors.date}E/id:stringdate:日外翻6结论和今后的工作理解软件演化是很重要的,因为演化拥有可以用于逆向工程或开发演化规律的信息。我们浏览了用于理解演化的各种技术,讨论了它们的缺点,并收集了元模型的要求:• 同一属性的不同演化比较,• 不同属性演化的组合,• 历史导航/选择,• 变化的不同语义• 详细版本比较基于这些要求,我们提出了Hismo,一个以历史概念为中心的元模型,我们给出了应用于历史的测量的例子。作为验证,我们展示了我们的元模型在不同分析中的用法EGenericHistory/versionIds[*]:stringversionId{versionIds = HasVersions.versions->asSet()}见图10。 广义Hismo在图10中,我们展示了GeneralizedHistory如何不仅仅是一个序列,而是一个图;因此我们可以对分支进行建模。今后,我们也希望探讨分行提供的信息。引用[1] T. Ball和S.真恶心大范围的软件可视化。 IEEE计算机,第33-43页[2] 安德里亚·卡皮鲁比操作系统项目发展的模型。在Proceedings of the International Conferenceon Software Maintenance(ICSM 2003),第65[3] Andrea Capiluppi、P. Lago和M. 莫里西奥 开放源码软件项目中可理解性的演变。第八届欧洲软件维护和再工程会议论文集,第58-66页,2004年86S. Ducasse等人理论计算机科学电子笔记127(2005)75[4] Christian Colberg,Stephen Kobourov,Jasvir Nagra,Jacob Pitts,and Kevin Wampler. 一个基于图形的软件演化可视化系统。2003年ACM软件可视化研讨会集,第77ACM Press,2003.[5] 塞尔日·德梅,桑德·蒂克·希拉尔,和斯特法恩·杜卡斯。FAMIX2.1-FAMOOS信息交换模型。技术报告,伯尔尼大学,2001年。[6] Michael Fischer,Martin Pinzger,and Harald Gall. 分析并关联bug报告数据以进行功能跟踪。在第10届逆向工程工作会议(WCRE 2003)中,第90[7] Michael Fischer,Martin Pinzger,and Harald Gall.从版本控制和错误跟踪系统填充发布历史数据 库。 在Proceedings of the International Conference on Software Maintenance ( ICSM2003),第23[8] Harald Gall,Karin Hajek,and Mehdi Jazayeri.基于产品发布历史的逻辑耦合检测。1998年软件维护国际会议论文集[9] 杜多 尔 · 戈培尔巴 , 圣 伊法 恩 · 杜 卡 斯 , 还 有 我 的 妻 子 兰 扎 。YesterdayICSM 2004(International Conference on Software Maintenance),2004年。[10] 杜多尔·吉尔巴和我的助手兰扎。可视化和描述类层次结构的演化第五届面向对象再工程国际研讨会(WOOR 2004),2004年。[11] Mehdi Jazayeri关于建筑的稳定性和进化。在可靠的软件技术- Ada-Europe 2002,第13SpringerVerlag,2002年。[12] 我是兰扎和迪卡斯。使用软件可视化和软件度量的组合来理解软件的演化在Proceedings of LMO2002(Langages et Mod`elesa`Objets,pages 135-149,2 002.[13] 我的妻子兰扎和圣埃凡·杜卡斯。投影视图-逆向工程的一种轻松的可视化方法IEEE软件工程学报,29(9):782[14] 曼尼·M雷曼兄弟软件演化定律再访。在欧洲软件过程技术研讨会上,第108-124页[15] 曼尼·M雷曼和莱斯·贝拉迪程序演化-软件变更过程。伦敦学术出版社,1985年。[16] 拉 杜 · 马 里 内 斯 库 面 向 对 象 设 计 中 的 度 量 和 质 量 。 博 士 毕 业 论 文 , 计 算 机 科 学 系 ,“Politehnica”Uni versi t y o f Tim i Grossoara,2002年。[17] DanielRatiu,StephaneDucasse,TudorGirba,andRaduMarinescu.利用历史信息改进设计缺陷检测。在CSMR 2004(欧洲软件维护和再工程会议)的会议记录中,第223-232页[18] Christopher M. B.泰勒和马尔科姆·门罗。翻修塔。在第一届国际研讨会的论文集可视化软件的理解和分析,第43-50页。IEEE计算机学会,2002年。[19] 菲利普·范·雷塞尔伯格和塞尔日·德迈尔。通过可视化的变化历史来研究软件演化信息。第20届IEEE软件维护国际会议(ICSM 2004),2004年。出现。[20] Thomas Zimmermann,Peter Weißgerber,Stephan Diehl,and Andreas Zeller.挖掘版本历史以指导软件更改。第26届国际软件工程会议,第563-572页
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 5
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Java集合ArrayList实现字符串管理及效果展示
- 实现2D3D相机拾取射线的关键技术
- LiveLy-公寓管理门户:创新体验与技术实现
- 易语言打造的快捷禁止程序运行小工具
- Microgateway核心:实现配置和插件的主端口转发
- 掌握Java基本操作:增删查改入门代码详解
- Apache Tomcat 7.0.109 Windows版下载指南
- Qt实现文件系统浏览器界面设计与功能开发
- ReactJS新手实验:搭建与运行教程
- 探索生成艺术:几个月创意Processing实验
- Django框架下Cisco IOx平台实战开发案例源码解析
- 在Linux环境下配置Java版VTK开发环境
- 29街网上城市公司网站系统v1.0:企业建站全面解决方案
- WordPress CMB2插件的Suggest字段类型使用教程
- TCP协议实现的Java桌面聊天客户端应用
- ANR-WatchDog: 检测Android应用无响应并报告异常
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功