论文摘要
重复或类似的代码片段是软件开发中的常见现象,这种现象称为代码克隆。代码克隆造成的代码重复对软件系统的可理解性、可维护性有着深远影响。虽然近年来研究者已经在克隆检测技术、代码克隆演化分析、代码克隆管理和移除等方面做了许多研究工作,但是在将这些研究应用于软件开发实践时,仍然存在着许多障碍。从现实情况来看,代码克隆的研究成果和大规模的工业领域应用仍然有较大的距离。造成这一现象的关键原因在于:既有的代码克隆研究往往仅局限于软件代码层面,缺乏对软件开发的技术、组织和技术上下文的关注。为此,本文以改善克隆研究对开发人员及其他涉众的价值为研究导向,从代码克隆数据分析的技术手段、代码克隆形成和存续的原因、代码克隆的监控管理三个方面进行了扩展研究。本文首先从准确性、抽象层次和可视化角度扩展了代码克隆分析的技术手段。基于结构克隆概念,本文提出了基于区域密度的结构克隆检测方法。相对于基本的克隆检测,结构克隆检测提高了代码克隆信息的抽象层级,降低了开发人员理解克隆检测数据的难度。然后,本文使用力导引算法对结构克隆数据进行了可视化表示。这种方法能够在平面空间中较清晰地呈现代码元素之间的克隆关系,是既有的代码克隆可视化方式的有效补充。本文还对基于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语法文件致谢攻读博士学位期间发表论文情况
相关论文文献
标签:代码克隆论文; 软件维护论文; 以人为中心的软件工程论文; 结构克隆论文;