首页> 中文学位 >可重构克隆代码的过程提取方法研究
【6h】

可重构克隆代码的过程提取方法研究

代理获取

目录

封面

中文摘要

英文摘要

目录

第1章 绪论

1.1 课题来源

1.2 课题的研究目的和意义

1.3 克隆代码重构的国内外研究现状及分析

1.4 模块间依赖关系的研究现状及分析

1.5 主要研究内容

第2章 可重构克隆代码的预处理方法研究

2.1 引言

2.2 克隆代码预处理存在的问题

2.3 可重构克隆代码的预处理算法

2.4 实验结果与分析

2.5 本章小结

第3章 不连续克隆代码无定型过程提取方法研究

3.1 引言

3.2 不连续克隆代码的过程提取及存在问题分析

3.3 程序的图形表示

3.4 语义保持的不连续克隆代码无定型过程提取算法

3.5 实验结果与分析

3.6 本章小结

第4章 近似克隆代码无定型过程提取方法研究

4.1 引言

4.2 近似克隆代码过程提取及存在问题分析

4.3 近似克隆代码无定型过程提取算法

4.4 实验结果与分析

4.5 本章小结

第5章 重构对模块间依赖影响的研究

5.1 引言

5.2 模块间依赖关系分析存在的问题

5.3 度量方法

5.4 实验结果与分析

5.5 应用研究

5.6 本章小结

结论

参考文献

附录A 被测产品所有版本CBO和DIT的聚集索引

附录B 被测产品的重构信息

攻读博士学位期间发表的论文及其他成果

声明

致谢

个人简历

展开▼

摘要

程序重构是一种在保持软件可见行为的前提下,对软件既有代码的改善。目的是使其更易理解与维护,修改成本更低。程序重构可延缓软件老化带来的退化影响,改善程序质量。过程提取是将已有方法中的一部分提取出来作为一个新的方法,被提取的部分用新方法调用替代。过程提取经常用于减少软件系统中的克隆代码(Clone Code)。本文主要研究克隆代码的过程提取方法以及重构对进化软件中模块间依赖关系的影响。
  针对由克隆代码检测工具检测出来的克隆代码不能直接用于重构的问题,提出了一种可重构克隆代码的预处理方法,该方法由两部分组成:首先,将自适应K-最近邻聚类(Adaptive K-Nearest Neighbors,A-KNN)与图相结合,用于消除拷贝-粘贴相关缺陷检测的误检。然后,对不含缺陷的克隆代码,使用基于代价-收益的评估方法识别可重构的克隆代码,为后续克隆代码重构做好准备。实验结果表明,本文提出的预处理方法可以有效消除因检测错误修改某标识符缺陷时产生的误检。不仅提高了克隆代码相关缺陷检测的准确性,而且可以消除更多的克隆代码。
  针对传统的保持语法结构不变的过程提取方法提取不连续克隆代码时存在的问题,提出一种新的语义保持的不连续克隆代码无定型过程提取方法。该方法结合程序依赖图(Procedure Dependence Graph,PDG)和抽象语法树(Abstract Syntax Tree,AST)对程序进行结构语义分析,取消了传统的保持语法结构不变的过程提取算法对语句结构一致性的约束,保留了语义一致性约束,从而解决了传统方法不易处理的连续但不能直接提取的克隆代码提取问题,降低了对未标记语句提升的需求,并且不需要对跳转语句进行特殊处理。
  实验结果表明,本文提出的克隆代码无定型过程提取算法的准确性和适用性均高于已有的保持语法结构不变的过程提取算法,可以有效地减少克隆代码数量,提高代码质量。针对传统的保持语法结构不变的过程提取方法通过语句提升不能提取某些近似克隆代码的问题,提出一种新的语义保持的近似克隆代码无定型过程提取方法(Semantic-Preserving Amorphous Procedure Extraction,SPAPE)。该方法结合程序依赖图和抽象语法树对程序进行结构语义分析,取消了传统的保持语法结构不变的过程提取算法对语句结构一致性的约束,保留了语义一致性约束。该方法由四部分组成:首先,SPAPE使用程序依赖图对源程序进行结构语义分析。然后,结合程序依赖图和抽象语法树执行语义保持的无定型过程变换,识别出差异点。接着,通过插入控制变量和条件语句进行差异点融合。最后,进行过程提取。实验结果表明,本文提出的近似克隆代码的无定型过程提取方法(SPAPE)解决了传统方法不能处理某些近似克隆代码的问题,同时在算法的有效性、代价-收益分析等方面优于传统方法。针对过程提取改变了软件内部模块间的依赖关系这一现象,本文从软件的进化角度对软件内部模块间依赖的分布以及重构对这种分布的影响进行实验研究。结果表明,软件内部模块间的依赖分布是不平衡的:相对于较大的模块,依赖集中于较小的模块间,这种依赖聚集的不平衡性不仅存在于单版本的软件内部,也存在于软件产品的整个生命周期中。同时,持续性重构加剧了这种依赖聚集的不平衡性。因此,根据上述分析结果,在软件维护或质量评估方面软件管理者和开发者,更多关注规模较小的模块,并且在软件的进化过程中,进一步增加关注度。
  综上所述,本文提出的克隆代码预处理方法、无定型过程提取方法,解决了可重构的克隆代码的预处理问题、不连续克隆代码的过程提取和近似克隆代码的过程提取等关键技术问题,并且通过模块间相对依赖关系的进化分析,揭示了程序内部模块间依赖关系变化的规律以及重构对这种变化的影响。

著录项

相似文献

  • 中文文献
  • 外文文献
  • 专利
代理获取

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号