论文格式
电气工程 会计论文 金融论文 国际贸易 财务管理 人力资源 轻化工程 德语论文 工程管理 文化产业管理 信息计算科学 电气自动化 历史论文
机械设计 电子通信 英语论文 物流论文 电子商务 法律论文 工商管理 旅游管理 市场营销 电视制片管理 材料科学工程 汉语言文学 免费获取
制药工程 生物工程 包装工程 模具设计 测控专业 工业工程 教育管理 行政管理 应用物理 电子信息工程 服装设计工程 教育技术学 论文降重
通信工程 电子机电 印刷工程 土木工程 交通工程 食品科学 艺术设计 新闻专业 信息管理 给水排水工程 化学工程工艺 推广赚积分 付款方式
  • 首页 |
  • 毕业论文 |
  • 论文格式 |
  • 个人简历 |
  • 工作总结 |
  • 入党申请书 |
  • 求职信 |
  • 入团申请书 |
  • 工作计划 |
  • 免费论文 |
  • 现成论文 |
  • 论文同学网 |
搜索 高级搜索

当前位置:论文格式网 -> 免费论文 -> 其他论文

一种基于度量的重构定位方法的研究与应用

本论文在其他论文栏目,由论文格式网整理,转载请注明来源www.lwgsw.com,更多论文,请点论文格式范文查看 一种基于度量的重构定位方法的研究与应用
1.选题意义
 Martin Flower在其著作中是这样定义重构的:是对软件的内部结构所作的一种改变,这种改变在可观察行为(Observable behaviour)不变的条件下使软件更容易理解,而且修改更廉价。熟练地掌握重构技术,具有十分重要的意义,它是编程的基本准则,是每个程序员能够并且应该依靠的一项基本技术,是极限编程的基本组成部分。
 “坏味道”是指示程序代码的某一部分必须重写的一种隐喻。它的鉴别始终是程序员面临的主要问题之一,他们必须手工复查程序源代码以发现代码中有潜在错误的地方。因而,似乎觉得没有任何度量规矩比得上一个见识广博者的直觉。但是,对于成千上万条代码行的大程序而言,如果有自动探测代码“坏味道”的工具支持,那么程序员就可以克服上述障碍。然而“在哪使用哪种重构方法”是始终是重构技术面临的主要问题之一。因此要自动探测代码“坏味道”必须有一个好的重构定位的数学理论。我们提出的基于度量的重构定位方法,为自动重构的定位奠定了理论基础。
 此方法一旦应用于自动重构,就能加快“坏味道”的定位速度和精确度,可以弥补“人的直觉”的缺陷,从而更有效地运用重构技术。
 综上所述,此课题具有一定的研究价值。
2.选题背景
 在软件开发与维护的长期实践中,人们普遍认识到的一个事实是代码太容易变坏。坏的代码总是趋向于有更大的类、更长的方法、更多的开关语句和更深的条件嵌套。实际上这些大的类看上去更象传统的过程性方法,做得有过之而无不及。到处可以看到在大的开关语句和复杂条件语句中遍布着重复的代码,特别是那些初看相似细看又不同的代码泛滥于整个系统:条件表达式,循环结构、集合枚举。信息被共享于系统一些关系甚少的组成部分之间,通常,这使得系统中几乎所有的重要信息都变成全局或者重复。全部代码都以非常密集的样式被书写,要么缺乏注释,要么带有许多无用的或者过时的注解。你根本看不到这种代码还有什么良好的设计。除了现实是这样以外,当项目进行或者完成之后,保持代码与最初系统设计的一致性是非常困难的。需求被改变,功能被增加,程序员改变代码,所有这些情形都倾向于在非常紧的工期下发生。这些因素意味着代码不被维护,只是被扩展,导致难于阅读和理解的复杂代码。随着时间的漂移,代码中只有很少的一部分代表了系统的设计。
 如果要在这样一种系统上添加功能,第一个反应应该是拒绝。因为这样的代码难以理解,更不要说对它加以修改。存在的第二种可能性是抛弃现在的系统,然后从头编写。我们经常听到程序员说“要我阅读修改别人的程序,不如让我重新编写”。如果项目的规模较大,或者系统已经在运行,不可能进行重新编写,这时人们就得面对第三种选择,硬着头皮进行维护,进行修改和扩充。
 由于维护工作并不被大多数程序员视为一种富于创造性的工作,所以维护人员通常采取一种快速和消极的方法。如果系统有问题,那么就尽快地找到问题,直接修改它。如果要增加一项新功能,就会从原来的系统中找到一块相近的代码,拷贝出来,作些修改,再粘贴进去。绝大多数的人都认为,对于原来的系统,既然不能重头写,而且它们已经在运行,让它去吧。于是,一个程序员增加的代码变成了下一个程序员咒骂的对象。系统变得越来越难以理解,维护越来越困难、越来越昂贵。系统变成了一个十足的大泥潭。每个人都不愿意看 到这种情况,但奇怪的是,这样的情形却一次又一次地在现实中不断地出现。
 这是长期以来一直困扰人们而必须加以解决的问题。实际上,这就是在软件维护研究中提出的软件熵(software entropy)的概念。软件熵是软件的结构随着时间而变坏的现象。Fred Brooks 说:所有维修都倾向于破坏结构,增加了系统的熵和凌乱。在修理原始设计缺陷上所花的时间越来越少,越来越多的时间是花在修理由早期修理所引入的错误上。随着时间的流逝,系统变得越来越混乱。迟早修理变得不可能而停止下来。
 解决这个问题的最好方法当然是不让它发生,即使发生了,我们也应该有办法来对付。由此引发了软件重构技术(software refactoring technology)的研究。如果编码时小心,代码的结构和设计应没有机会变坏。每次在修改或者增加代码之前,通过查看代码,如果代码具有良好形状和味道(code smell),那么添加功能就应该没问题;如果理解代码要很多时间,代码应该先被重构(重新组织修改)以获得易维护属性,然后才能够容易扩展代码。当然,要阻止代码的腐化,人们也需要付出额外的代价。
 软件重构技术是软件工程近十年来非常活跃的一个研究领域。重构研究的动机是由某些有关的研究所激发的。这些研究主要包括软件重用、软件维护、和软件的重新组织(Software Restructuring)。
1) 软件重用(Software Reuse)
 为了降低开发软件的高成本,软件重用的研究是为了使一个系统开发的知识再次容易地用于另一个软件系统的开发。然而,可重用软件经常需要很多设计迭代。使软件更容易改变将使设计迭代更简单。这样的软件将更可重用。
 抽象、封装、继承、多态和模块性这样的面向对象程序设计特性给软件再利用提供了基础结构。在Smalltalk 和其它的一些面向对象语言中提供了这些特性的结合,以鼓励再利用现有的代码,而不是从头开始编码。这样,通过添加新类或者在现存类上添加操作能对软件作出某些改变,而使软件的大部分保持不变。然而,大部分的改变涉及类似改变类间关系,移动类间的变量和函数这样的结构上的变化。用手工进行这些改变是费时、困难并易于出错的。
 除代码级再利用之外,设计级的再利用也是研究的内容。而且,从长期的观点来看,人们认识到设计级的再利用更为重要。面向对象应用框架(framework)是这种研究努力的结果。框架是抽象和具体类的集合。从而,能够添加新的子类对它进行重定义。因此,框架支持抽象级,并允许部分的规范说明。不过,好的框架需要多次的设计迭代,涉及很多结构上的变化。
2) 软件维护(Software Maintenance)
 软件重用与软件维护紧密相关。维护是软件生产所有方面中最为困难的。主要的理由在于维护包容了软件过程所有其他阶段的各个方面内容。在软件生命周期中,在维护上所花的时间比任何其它阶段都更多。实际上,现行软件的维护工作量能占到全部开发工作量的60 %以上。软件维护经常需要重新组织软件。
3) 软件重新组织(Software Restructuring)
 Arnold 把软件重新组织定义为“使软件更容易理解、更容易改动、或者以后修改时更少出错,而对软件的更改。
 不适当的设计方法学,缺乏开发和维护标准等诸如此类的很多因素都能导致拙劣的软件结构。很多软件重组方法集中于诸如用结构注入代码使程序中的控制流更为明显这样的代码变化。可是,只存在一些不对代码进行更改的方法。例如,人们能够在软件再工程期间从代码和现有的文档出发重新创建软件的结构。
 对这个课题的研究我们还出于另外两个动机:一是国内缺少对重构技术的研究,尤其是重构定位方法;二是我们认为Frank Simon的方法有两个需要改进的地方。(1)他们呈递的重构定位工具,虽然具有计算简单,直观,易操作的优点;但是由于采用了三维VRML Browse来显示度量结果,当显示过多成员时,系统开销大、各成员容易出现混乱,这样显然会影响重构效率;(2)“坏味道”不能直接被量化,在一定程度上,还需要借助“人的直觉”(human intuition)在VRML Browse中进行判断,经常会出现重构操作“做与不做”的尴尬局面。
3.课题内容
3.1 重构定位方法的理论基础
3.1.1度量理论(Theory of Metrics)
 软件度量若缺乏理论基础,没有合理的数学性质来支持。将不能揭示正常的预示行为。从度量的定义可知,任意一个度量都必须具备如下四大要素:
 1)被度量的客体或事件;
 2)所欲度量的属性;
 3)赋予客体或事件的数值或符号;
 4)使客体与数值相联系的映射。
 Zues和Fenton等人认为度量准则应建立在度量理论基础之上,并运用度量理论检验给定的度量准则是否适合特定的环境。Baker和Fenton等人认为度量涉及以下四项活动,度量理论的研究需要为这些活动提供理论基础:
 1)确认所关心的软件属性:软件属性可分为内部属性和外部属性。
 内部属性,是指能够纯粹用过程或产品或资源其自身来度量的属性,如软件大小、控制流、耦合度等,通常描述软件结构上的复杂性。内部属性一般有清晰的定义并能进行客观的度量。
 外部属性,是指由过程或产品或资源及其相关的环境一起共同才能度量的属性,如复杂性、可维护性、可读性等,涉及到人和环境等外部因素,外部属性的度量才能真正给出人们所需的可靠数据并预示软件开发行为。
 不幸的是,外部属性常缺乏清晰的定义,也无法进行直接的客观度量,只能通过内部属性进行推测性的度量。
 度量研究的任务之一就是建立外部属性和内部属性之间的合理联系。
 2)建立软件属性的经验关系系统:经验关系系统捕捉了软件属性直觉(经验)上的概念,譬如,设计者通常认为有15个方法的类比另一个只有10个方法的类复杂。
 经验关系系统可以表示为:
          
 其中:A是非空的软件属性集合;Rj是A元素之间的经验关系,如大于、更复杂等;Ok是A元素之间的二元操作。
 3)通过度量准则把经验关系系统映射到形式关系系统。
 形式关系系统可以定义为:
          
 其中:C是非空集,如实数集;Sj是C元素之间的形式关系,如>、<、二等;Bk是C元素之间的二元形式操作。如+、一、*等。
 4)评估度量准则:度量准则M是D到F的同构映射,满足:
 ;;
 。
3.1.2测距理论(Theory of Distance Measurement)
 经过近年来的研究,人们已经根据面向对象系统的特点提出了一系列面向对象度量,其中内聚性度量是软件度量学中一个重要的研究领域。在多次软件工程会议和一些软件工程杂志上不断有这方面的研究成果。
1)分组与相似性
 “把相似的对象组成一类”是软件工程中的主要原则之一。这种设计风格对结构化分析(如层次数据流图)和面向对象系统开发都是非常有效的。使用此原则我们可以把复杂的系统分成若干个子系统:一个包含若干子系统的复杂系统具有如下特征:以某种方式存在于子系统的“东西”存在共性(比如它们作用于相同的数据)。
 因为每个问题域中的对象都应该有一个在软件系统中易定位的对象,所以把依赖分组的问题映射成计算机编程语言(如类或者包)能提高系统的可理解性。可见,在系统中良好选择的分组是一个非常重要的质量因素。
 不同的标准有不同的分组,而且标准不存在“对”或者“错”。他们的正确性依赖于特定目标的可用性。比如说,基于功能的分组适用于修改系统中的工作流,而面向数据的分组适于于修改某些特殊的数据结构。
 分析既定系统应将分组用作一个重要的因素。因而,精巧的分组使系统更容易分析。
 分组操作与相似性/不相似性具有非常紧密的联系:分组的重要特征之一是组内所有的东西都相似,而组间所有的元素都不相似。为了能定量的分析事物的相似性,引入相似度是非常必要的。
2)相似度(Degree of Similarity)
 定义1 相似度(Degree of Similarity) 若给实体的所有属性赋予相同的权重,且B是属性集{Pi}的有限子集,则两个实体x,y间的相似度为:                               
  其中 ……………………①
 从定义中可知:
 1)相似性很大程度上依赖于视点(Point of View):通过计算两个不同属性集的相似度可得到既定实体对从“相同”到“相对”的结果;
 相似性不是自身的属性:如果不论及既定属性,相似性描述就无从谈起;
 相似性只存在于实体对,它不可归属于单个实体;
 4)与“不相容”属性集B相关的实体间相似性没有被定义。如果实体对在集合B中都不存在属性,则B是实体对的相似性不相容(Similarity Incompatible)。这个观点只是在理论上成立,因为并不存在相对的实体。然而它对后面的提炼非常重要。
 定义2集值距离函数(Set-valued Distance Function) 若{Pi}是所有属性集,则:
    ………………………………………②
 上述定义满足:
 1);
 2);
 3) 是对称的;
 4) 对称或者布尔差分;
 定义3 实值度量(Real-valued Metric) 若给所有的实体属性赋予相同的权重,则:                         
   …………………………………………③
 度量公式③满足:
 1);
 2);
 3);
 4)
 实际上,度量公式③是不可行的,其原因是度量时会有太多的属性。大多数情况下要设定一个特定视点下的属性子集B。
 定义4 相似性测量 若B是两实体的属性子集,则两实体x,y间的相似性测量公式为:      
  …………………④
3)测距(Distance Measurement)
 由公式④很容易得到测距的形式化定义:
 定义2.5 测距
 ………………………………………………………………⑤
 从测距定义可得如下结论:
 1)测距越小,相似性越大;测距越大,相似性越小;
 2)如果两实体间的既定属性集相等,那么测距为0;
 3)两实体的相似性不相容属性集在测距中没有被定义,原因是“不能用苹果和梨相比较”,至于不相容属性集在两实体间的测距中将无从谈起。
 4)。
 上面定义的测距同样支持内聚性度量,Bieman和Byung-Kyoo把内聚性定义为:内聚性是指模块组件聚合的程度。在早期的内聚性概念中,只是把内聚性赋予单个的实体,而此测距的引入,我们可深入观察单个实体,进而寻找引起内聚性的所有“吸力”(Attraction)。
 在这里可我们可以用前一节中定义的度量的数学理论把测距描述成:
 1)要计算实体间的距离必须简化既定属性,并抽象成实体模型(Entity Model)。实体模型的视点必须通过描述实体的所有属性的子集B被清晰地说明(比如一个函数只有唯一的属性“使用了同类中的值域x”,但是不函数不长也不复杂)。属性在这种场景下二进制的,即实体有或者没有属性;
 2)经验关系系统(Empirical Relation System, ERS)包含实体模型对,这些实体模型对之间的测距可用公式⑤计算出。如果有n个实体模型,那么经验关系系统就有n2个实体模型对;
 3)在经验关系系统中,为了达到顺序量表(Ordinal Scale),在两实体模型对之间至少存在一个关系“”——它是连接的(Connex)、反对称的(Antisymmetric)、传递的(Transitive)。
3.2 软件重构技术
 最早对重构进行理论研究的Ralon Jahnson这样描述重构:重构是使用各种手段重新整理一个对象设计的过程。目的是为了让设计更加灵活,更可重用。你可能有几个理由来做这件事情.其中效率和可维护性可能是最重要的原因。
 Martin Fowler在他的著作《Refactoring: Improving the Design of Existing Code》中这样定义重构:在不改变可观察行为的前提下,对软件内部结构的改变,目的是使它更易于理解并且能够更廉价地进行改变。
软件结构可以因为各种各样的原因而被改变.但只有出于可理解性、可修改、可维护目的的改变才是重构,如性能调优,它往往把代码改得更让人难以理解,虽然它并不改变可观察的行为,所谓保持可观察的行为,就是重构之前软件实现什么功能,之后照样实现什么功能。任何用户,不管是终端用户还是其他的程序员,都不需要知道某些东西发生了变化。
 为了论证度量在重构中对人的“直觉”的辅助作用,我们重点研究了两种重构方法。
3.2.1重构方法
 移动方法(Move Method):是指把方法m从类A中移到使用此方法最多的类B中,而类A中的方法m则变换成一个简单的委托(delegation),或者完全移去它。
 移动属性(Move Attribute):是指把属性a从类A中移到使用此属性最多的类B中,同时修改属性a的所有使用者。
 上述两种重构方法都是基于下列使用关系(use relation):相互间大量使用的特性应聚集在同一个类中。而驱使这两种重构方法的“坏味道”:一是某类中定义的方法或属性被其它类过多的使用着;二是某类中定义的方法过多的使用其他类中定义的方法。
3.2.2 坏味道(Bad Smell)
 在我们进行重构之前,必须明白“重构什么”和“怎样重构”。这些工作是通过探测代代码中“坏味道”来进行的,Martin Fowler在他的书中引用Kent Beck对“坏味道”隐喻,描述如何识别一种早期的警示信号,它们指示程序代码的某一部分必须重构。虽然Martin Fowler认为在实践中没有一套好的度量方法胜过人的直觉,但是在研究中我们发现部分“坏味道”是可以量化的。这样的“坏味道”有:
 弹散式的外科手术(Shotgun Surgery):对系统一个地方的改变涉及到其他许多地方的相关改变。这些变化率和变化内容相似的状态和行为通常应当放在同一个类中。
 特性的羡慕(Feature Envy):对象的目的就是封装状态以及与这些状态紧密相关的行为。如果一个类的方法频繁用 Get方法存取其他类的状态进行计算,那么就要考虑把行为移到涉及状态数目最多的那个类。
 不当的亲密关系(Inappropriate Intimacy):当类过度访问其他类的私有部分,代表这个类有不当的亲密关系。使用移动方法及移动属性来降低亲密关系。
 数据类(Data Class ):数据类中除了属性及存取这些属性的Set及Get方法外别无它物。这种类一般多是为其它对象操作。如果其它类中常常使用到Set及Get方法,就要将这些行为以移动方法移到数据类中。
3.2.3 工具支持
 虽然可以采用手工方式进行重构,但一般认为采用支持重构的工具进行重构工作是非常必要的。目前,在重构包含的各个方面都有相当数量的支持工具。从工具和它能够提供的支持种类来看,自动化的程度有相当大的差别。诸如Refactoring Browser , XRefactory , jFactor这类的工具提供半自动方法实现重构。一些研究人员提供了实现全自动重构工具的可能性。例如,Guru 能够实现SELF 程序的重建继承层次和重构方法的自动化。当前关于重构工具的一种趋势是将它们直接集成到商业软件开发环境中。例如SmallTalk的VisualWorks、Eclipse 、Together ControlCenter、Intellij IDEA 、Borland JBuilder等等。这些工具的应用的焦点是满足用户对重构的需要。但是这些工具对于在何时、何处需要应用重构几乎没有提供什么支持。Simon提出解决该问题的一些方式,Kataoka指出如何通过使用Daikon工具检测程序不变量的方法自动地应用重构方法。该方法基于对程序运行的行为的动态分析实现,可以将其视为其它方法的补充。
4.课题时间安排
2002.09 ---- 2003.02    调研并阅读相关文献
2003.03 ---- 2003.10    进行理论研究
2003.10 ---- 2003.12    写毕业论文
2004.3               答辩
 参考文献
Roberts, F. S., Measurement theory, in Encyclopedia of Mathematics and Its Applications, Vol. 7, Addison-Wesley, 1979.
Krantz, D.H., Luce, R. D., Suppes, P. and Tversky, A. , Foundations of Measurement, Vol.1 : Additive and Polynomial Representations, Academic Press, 1971.
Suppes, P. Krantz, D. H., Luce, R. D and Tversky, A. , Foundations of Measurement, Vol.2: Geometrical, Threshold and Probabilistic Representations, Academic Press, 1989.
Luce, R. D., Krantz, D. H. ,Suppes, P. and Tversky , A. , Foundations of Measurement, Vol.3: Respresentation, Axiomatization and Invariance, Academic Press, 1990.
Roger S. Pressman, Software Engineering: A Practitioner’s Approach (Fifth Edition), Mc Graw Hill, 2001.
Shyam R. Chidamber and Chris F. Kemerer, A Metrics Suite for Object-Oriented Design, IEEE Trans. on SE, Vol. 20, No. 6, June 1994.
Norman E Fenton, Software Metrics: A Rigorous Approach, Chapman&Hall, 1991.
E.J.  Weyuker, eva luating Software Complexity Measures, IEEE Trans. Software Eng., September, 1988:1357- 1365.
Pfleeger, Status Report on Software Measurement, IEEE Software, 1997,33-43.
Berard, Metrics for Object-Oriented Software Engineering, an Internet posting on comp. Software-eng, Jauary 28, 1995.
Whitmire, S., Object-Oriented Design Measurement, Wiley, 1997.
Frank Simon, Silvio Löffler, Claus Lewerentz. Distance based cohesion measuring, in proceeding of the 2nd European Software Measurement Conference (FESMA) 99, Technologist Institute Amsterdam, 1999.
James M. Bieman and Linda M. Ott. ,  Measuring functional cohesion, Technical Report CS-93-109, Michigan Technological University, 1993.
James M. Bieman and Byung-Kyoo, Measuring Design-Level Cohesion, IEEE Transactions on Software Engineering, Vol 24, Nr. 2, February 1998.
Martin Fowler. Refactoring: Improving the design of existing code. Addison Wesley Longman, Inc., Reading, Massachusetts, 1999;
Dave Astels.  Refactoring with UML;
Frank Simon, Frank Steinbruckner, Claus Lewerentz.  Metrics based refactoring,2001;
Mario Bunge. Treatise on basic philosophy, Volume 3: Ontology I, The furniture of the world”, D. Reidel Publishing Company, Dordrecht-Holland 1977;
Yoshio Kataoka, Michael D.Ernst, Willian G.Griswold and David Notkin. Antomated support for program refactoring using Invariants;
Agile Modeling website, www.agilemodeling.com;
朱鸿、金凌紫,软件质量保障和测试,科学出版社,1997.8
邢大红、曹佳冬、汪和才、刘宗田,软件度量学综述,计算机工程与应用,2001.1
弓惠生。模块内聚性的度量方法,计算机研究与发展,1997,349(8)
吴源俊,软件工程中的度量问题,信息技术与标准化,2002.11
蔡希尧,软件质量的度量问题,计算机工程与科学,1996.1


相关论文
上一篇:地理信息系统项目管理初探 下一篇:谷氨酰胺转胺酶生产与应用
Tags:基于 度量 重构 定位 方法 研究 应用 【收藏】 【返回顶部】
人力资源论文
金融论文
会计论文
财务论文
法律论文
物流论文
工商管理论文
其他论文
保险学免费论文
财政学免费论文
工程管理免费论文
经济学免费论文
市场营销免费论文
投资学免费论文
信息管理免费论文
行政管理免费论文
财务会计论文格式
数学教育论文格式
数学与应用数学论文
物流论文格式范文
财务管理论文格式
营销论文格式范文
人力资源论文格式
电子商务毕业论文
法律专业毕业论文
工商管理毕业论文
汉语言文学论文
计算机毕业论文
教育管理毕业论文
现代教育技术论文
小学教育毕业论文
心理学毕业论文
学前教育毕业论文
中文系文学论文
最新文章
热门文章
计算机论文
推荐文章

本站部分文章来自网络,如发现侵犯了您的权益,请联系指出,本站及时确认删除 E-mail:349991040@qq.com

论文格式网(www.lwgsw.com--论文格式网拼音首字母组合)提供其他论文毕业论文格式,论文格式范文,毕业论文范文

Copyright@ 2010-2018 LWGSW.com 论文格式网 版权所有