论文部分内容阅读
克隆代码是执行相同或类似功能的若干完全相同或十分相似的代码片段,它们差别细微,分散在软件的不同部分,手工方法难以进行统一维护,是程序中常见的“坏味道”代码。软件重构技术在不改变程序外部行为的前提下对软件进行有序、规范的结构调整和优化,消除“坏味道”。克隆代码的自动化识别与重构对于改善软件结构和降低软件维护成本,有着重要意义。
本文首先根据克隆代码的分散度和覆盖度成负相关的特性,提出了一种基于抽象语法树的克隆识别方法,其主要特点是通过构建克隆类关系树,识别出了任意覆盖度上的克隆类,然后结合克隆代码的基本特征和现有的重构方法,给出了可重构克隆代码的基本模式,制定了相应的重构方案;最后实现了一个克隆代码识别系统,并对多个开源软件代码进行了实验研究和分析。
论文的工作包括几个方面:
(1)针对抽象语法树无法反映语法成分间次序的特点,在构建抽象语法二叉树表示(BAST)的基础上,逐条判断各语句BAST子树的同构性,识别出相似的语句序列作为克隆序列:根据子树同构识别一元克隆类,然后通过克隆类的连接操作,逐步识别多元克隆类;
(2)总结出了可重构克隆代码的基本模式以及相关模式的判定算法,以JDK 1.5为实例,详细分析了克隆代码的常见形式,制定了相应的重构方案;
(3)研究了克隆代码自动化识别和重构的实现技术,以Eclipse为平台,设计与实现了克隆识别器Dolly;
(4)以Jhotdraw6.0、Websphinx0.5和JDK1.5等开源项目为实验对象,识别出了其中的克隆代码,分析了这些克隆代码的分散特征,统计分析了多元克隆类在软件中的分布情况。