论文部分内容阅读
软件重构是软件工程的一个重要研究领域,是当前软件工程界的一个重要研究课题。通过软件重构,人们可以去除软件中的不良设计,改进软件质量。代码克隆是软件源程序中普遍存在的一个问题,一个软件中往往存在着很多相同或基本相似的代码片段。代码克隆不利于软件的维护及更新,因为假如有一处需要修改,其他克隆之处都要作相应修改。
由于代码克隆存在这种负面影响,我们有必要针对代码克隆进行软件重构。针对代码克隆的软件重构研究主要包括克隆的度量、检测及消除。其目的就是尽可能全面地找出源程序中的代码克隆,并根据不同的克隆情况采取最合理的消除措施,以得到最优的重构效果。
本文从代码克隆出发,以Java语言为例,讨论面向对象程序中针对代码克隆的重构方法。本文首先用基于编辑距离的相似度来度量代码克隆,即通过计算两个代码片段对应的标符序列的编辑距离,并求出其相似度来判断是否克隆。本文接着讨论源程序中的克隆检测,详细阐述克隆检测的各个步骤,包括确定代码片段、生成标符序列、计算编辑距离及相似度。本文同时考虑了满足语义逻辑等价性的代码克隆,即将形式上不相似但逻辑上等价的代码片段也视为克隆,本文使用程序逻辑图来判断逻辑等价性。本文最后针对不同的克隆情况实行不同的消除克隆方法以实现最有效的重构。