代码克隆扩展分析及管理技术研究

代码克隆扩展分析及管理技术研究

论文摘要

重复或类似的代码片段是软件开发中的常见现象,这种现象称为代码克隆。代码克隆造成的代码重复对软件系统的可理解性、可维护性有着深远影响。虽然近年来研究者已经在克隆检测技术、代码克隆演化分析、代码克隆管理和移除等方面做了许多研究工作,但是在将这些研究应用于软件开发实践时,仍然存在着许多障碍。从现实情况来看,代码克隆的研究成果和大规模的工业领域应用仍然有较大的距离。造成这一现象的关键原因在于:既有的代码克隆研究往往仅局限于软件代码层面,缺乏对软件开发的技术、组织和技术上下文的关注。为此,本文以改善克隆研究对开发人员及其他涉众的价值为研究导向,从代码克隆数据分析的技术手段、代码克隆形成和存续的原因、代码克隆的监控管理三个方面进行了扩展研究。本文首先从准确性、抽象层次和可视化角度扩展了代码克隆分析的技术手段。基于结构克隆概念,本文提出了基于区域密度的结构克隆检测方法。相对于基本的克隆检测,结构克隆检测提高了代码克隆信息的抽象层级,降低了开发人员理解克隆检测数据的难度。然后,本文使用力导引算法对结构克隆数据进行了可视化表示。这种方法能够在平面空间中较清晰地呈现代码元素之间的克隆关系,是既有的代码克隆可视化方式的有效补充。本文还对基于token的克隆检测算法进行了改进,在检测过程中加入了语法结构信息,提高了克隆检测的精度。本文随后使用工业案例,通过经验研究的方法,对代码克隆形成和存续的深层原因进行了研究。本文提出了克隆代码的生命周期模型,奠定了代码克隆形成和存续原因研究的基础。然后,本文对代码克隆原因的三个维度:技术、人员和组织问题进行了阐述,把代码克隆的原因扩展到包含这三个维度的上下文空间中进行调研。我们首先选择了一个大规模工业案例,然后通过代码研究、问卷调查以及开发人员面谈的方式,获得了关于代码克隆形成和存续原因的第一手资料,总结了一系列在克隆避免、克隆移除和克隆管理方面有价值的启示性因素。最后,本文提出了按需定制的代码克隆监控方法CCEvents,将克隆管理的概念从关联编辑、克隆移除等扩展到完整的开发上下文中。本文接着对CCEvents中的两个关键要素,代码克隆监控管理的信息模型和设计监控描述语言CCEML进行了研究。通过采集代码克隆的上下文信息、侦听代码克隆事件、并根据用户的不同需求对代码克隆事件进行通知和告警,构建了和代码提交同步的克隆监控与反馈机制。

论文目录

  • 摘要
  • Abstract
  • 第1章 绪论
  • 1.1 研究背景
  • 1.2 研究现状
  • 1.3 问题分析
  • 1.4 本文主要工作
  • 1.5 篇章结构
  • 第2章 相关研究工作
  • 2.1 代码克隆术语约定
  • 2.2 代码克隆检测和识别技术研究
  • 2.2.1 基本克隆检测
  • 2.2.2 结构克隆识别
  • 2.2.3 克隆数据可视化及查询
  • 2.2.4 代码克隆演化分析
  • 2.2.5 克隆差异识别及汇总
  • 2.3 代码克隆经验研究
  • 2.3.1 克隆代码对外部质量的影响
  • 2.3.2 克隆代码的变化一致性
  • 2.3.3 克隆代码的稳定性
  • 2.3.4 克隆代码的设计意图
  • 2.3.5 克隆演化规律
  • 2.3.6 开发者对待克隆代码的态度
  • 2.4 代码克隆管理技术和方法研究
  • 2.4.1 克隆代码的移除
  • 2.4.2 克隆代码的关联编辑和自动同步
  • 2.5 小结
  • 第3章 问题分析和研究框架
  • 3.1 问题分析
  • 3.2 研究框架
  • 第4章 结构克隆的分析与可视化
  • 4.1 方法介绍
  • 4.2 基本克隆检测
  • 4.2.1 技术指标
  • 4.2.2 研究示例
  • 4.2.3 代码预处理
  • 4.2.4 克隆检测
  • 4.3 基于区域密度的结构克隆识别
  • 4.4 基于FDA的结构克隆数据可视化
  • 4.5 实验研究
  • 4.5.1 实验设置
  • 4.5.2 实验结果
  • 4.5.3 实验讨论
  • 4.6 小结
  • 第5章 代码克隆的深层原因分析
  • 5.1 克隆代码的生命周期模型
  • 5.1.1 暂态克隆和基线克隆
  • 5.1.2 已移除的克隆
  • 5.1.3 偶然克隆
  • 5.1.4 克隆引入的场景
  • 5.1.5 克隆存续的场景
  • 5.2 调研整体设计
  • 5.2.1 调研目标
  • 5.2.2 案例研究对象
  • 5.2.3 调研步骤
  • 5.3 调研过程
  • 5.3.1 代码分析
  • 5.3.2 问卷设计
  • 5.3.3 调查过程
  • 5.4 调研结果分析
  • 5.4.1 开发者对待克隆的态度
  • 5.4.2 克隆引入的原因
  • 5.4.3 从暂态克隆到基线克隆
  • 5.4.4 基线克隆的移除和持续
  • 5.4.5 偶然克隆
  • 5.5 对克隆管理的启示
  • 5.5.1 上下文相关的克隆管理
  • 5.5.2 克隆移除的关键时间节点
  • 5.5.3 寻找改善克隆实践的杠杆解
  • 5.6 小结
  • 第6章 按需定制的代码克隆监控
  • 6.1 问题分析
  • 6.1.1 案例场景
  • 6.1.2 以开发者和相关涉众为中心
  • 6.1.3 克隆事件的在线监控
  • 6.1.4 克隆管理的上下文感知
  • 6.2 代码克隆事件监控系统
  • 6.3 代码克隆监控信息模型
  • 6.4 代码克隆事件监控语言
  • 6.4.1 CCEML语法
  • 6.4.2 CCEML范例
  • 6.5 案例研究
  • 6.5.1 研究目标
  • 6.5.2 实现方案
  • 6.5.3 实验过程和结果
  • 6.5.4 实验讨论
  • 6.6 小结
  • 第7章 总结与展望
  • 7.1 主要内容回顾
  • 7.2 本文的主要贡献
  • 7.3 下一步的工作
  • 参考文献
  • 附录A 代码克隆原因调研问卷
  • 附录B CCEML语法文件
  • 致谢
  • 攻读博士学位期间发表论文情况
  • 相关论文文献

    标签:;  ;  ;  ;  

    代码克隆扩展分析及管理技术研究
    下载Doc文档

    猜你喜欢