论文部分内容阅读
在软件开发过程中,开发人员通过复制粘贴既有代码向系统中引入大量的克隆代码。克隆代码会随着时间和软件系统更新而进行演化,使软件系统变得越来越臃肿、难以维护,从而影响了软件的质量、可理解性和可维护性。这引发了对克隆代码的大量研究,例如克隆检测、克隆分析和克隆维护等。克隆检测帮助开发人员收集系统中的克隆代码,克隆分析帮助开发人员理解系统中存在的克隆代码,克隆维护帮助开发人员解决克隆代码已经引发或者可能引发的问题。克隆代码研究对帮助提高软件系统的质量、增强软件系统的可理解性和可维护性,具有重要理论意义和实际应用价值。 在克隆代码随着软件系统的演化过程中,克隆代码可能会被开发人员修改而发生变化,进一步地加剧了克隆代码的问题。演化中克隆代码的变化使得克隆代码难以理解,降低了软件的可理解性。由于克隆代码彼此之间的相似性,一个克隆代码的变化可能会导致其它克隆代码的变化,称为克隆代码的一致性变化。该一致性变化会导致系统额外的维护代价,而遗忘这种变化则会导致克隆代码一致性违背缺陷,降低了软件质量和可维护性。鉴于此,本文基于软件演化研究克隆代码分析与一致性维护方法,通过分析提取克隆代码的演化特征,帮助软件开发人员理解克隆代码及其演化过程,验证了克隆代码一致性维护需求预测的必要性,并通过预测克隆代码的一致性维护需求帮助解决克隆代码的一致性维护问题,最后结合软件开发过程实现对克隆代码的同步开发与维护,可以提高软件质量、降低软件维护代价。 针对演化中的克隆代码难于理解和分析的问题,研究并提出了基于聚类的克隆代码演化特征分析方法,验证了克隆代码一致性需求预测的必要性。首先,使用克隆检测工具检测系统中的克隆代码,并构建克隆家系描述克隆代码的演化过程。然后,从克隆片段、克隆组和克隆家系三个不同维度提取相应的属性特征描述克隆代码及其演化过程。最后,聚类系统中的克隆代码并挖掘克隆代码演化特征。实验结果发现大部分的克隆代码在演化过程中是稳定的,但也存在相当数量发生变化的克隆代码,在发生变化的克隆代码中有超过一半的发生了一致性变化,为克隆代码一致性维护需求预测研究奠定了基础。 针对新创建的克隆代码在其演化中的一致性变化会导致额外的维护代价问题,研究并提出了克隆代码创建一致性维护需求预测方法,帮助开发人员从规避克隆代码产生的角度降低克隆代码的维护代价。将软件系统中最早出现的克隆代码称为克隆创建实例,并将其在未来演化过程中是否发生一致性变化称为克隆代码创建时一致性维护需求。首先,通过检测软件系统的克隆代码并构建其克隆家系,收集系统中新创建的克隆代码。然后,提取代码属性和上下文表示新创建的克隆代码。最后,使用机器学习方法训练预测模型,并预测克隆代码创建时的一致性维护需求。实验结果表明本文所提出的方法可以高效地预测克隆代码的一致性维护需求,可以帮助软件开发人员降低克隆代码的额外维护代价。 针对演化中克隆代码的一致性变化可能会导致克隆一致性违背缺陷的问题,研究并提出了克隆代码变化一致性维护需求预测方法,帮助开发人员实现克隆代码的同步开发与维护。将软件系统中发生变化的克隆代码称为克隆变化实例,并将该变化是否会引发克隆代码的一致性维护称为克隆代码变化时的一致性维护需求。首先,通过检测系统的克隆代码并构建系统克隆家系收集系统中的克隆变化实例。然后,从克隆组的角度提取三组不同的属性特征用于表示克隆变化实例,即代码属性、上下文属性和演化属性。最后,使用机器学习模型训练预测模型,并预测克隆代码变化时的一致性维护需求。实验结果表明本文所提出的方法可以有效地预测克隆代码的一致性维护需求,可以帮助软件开发人员避免克隆代码一致性违背缺陷。 针对在软件开发初期软件系统中因数据不足而无法预测克隆代码一致性维护需求的问题,研究并提出了跨项目克隆代码一致性维护需求预测方法。将克隆代码创建、变化实例统称为克隆实例,并将相应的一致性维护需求统一为克隆代码一致性维护需求。首先,对软件系统通过构建其克隆家系收集克隆实例,并使用不同的属性表示克隆实例。然后,将不同的软件系统划分为训练系统和测试系统,使用训练系统的数据训练机器学习模型,在测试系统上验证跨项目克隆一致性维护需求的预测效果。实验结果表明跨项目一致性维护需求预测模型可以在软件开发初期预测其它项目的克隆代码的一致性维护需求。最后,结合软件开发过程设计并实现了一个eclipse插件预测克隆代码一致性维护需求,可以边开发、边预测克隆代码的一致性维护需求,有助于降低软件的维护代价。 综上所述,本文提出的基于软件演化的克隆代码分析与一致性维护方法,为在软件开发过程中解决分析和理解克隆代码、维护克隆代码的一致性、避免克隆代码相关缺陷、降低克隆代码维护代价、提高软件质量和可维护性等问题提供了一种新思路和新方法。