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