论文部分内容阅读
克隆代码的检测和重构是提高软件的可靠性和质量的重要方法。相对于语法相似的克隆代码而言,功能等价的克隆代码和结构语义相似的克隆代码是较为复杂的克隆代码类型,目前对这两种类型的克隆代码的检测和重构的研究还比较少。现有的功能等价的克隆代码的检测方法存在时间复杂度比较高的问题。而对功能等价的克隆代码的重构和结构语义相似的克隆代码的重构研究尚未见到文献报道。针对上述问题,本文进行了以下研究:首先,针对目前功能等价克隆代码的检测中存在的问题,设计了基于静态分析的功能等价的克隆候选代码的提取算法。首先根据从K-最近邻聚类算法所提取的内聚度高、功能独立的代码片段中提取出参数信息,然后根据输入/输出参数的数目和类型信息逐步过滤和划分得到克隆候选代码集合,并将该集合作为功能等价克隆检测部分的动态测试的输入。其次,针对功能等价的克隆代码的重构问题,提出了两种优选标准,根据优选标准选出优选函数,将静态分析和动态测试相结合以确定优选函数与非优选函数之间的参数的对应关系,进行过程替换后得到重构程序。最后,针对结构语义相似的克隆代码的重构问题,提出了表达式和控制结构的语句的标准化规则。根据标准化规则实现标准化转换后,对程序代码进行克隆检测,并根据检测的输出结果确定差异代码。根据差异代码进行差异性分析,在此过程中需要根据度量阈值确定程序是否适合重构,然后对适合重构的程序进行可变性提取,对不适合重构的程序给出建议。本文使用学生所提交的C语言小程序和开源程序对以上三个部分的研究内容进行了实验。基于静态分析的功能等价的克隆候选代码的提取的实验证明了经过静态分析之后获取到的候选代码集合能够以较低的时间复杂度进行检测得到功能等价的克隆代码。功能等价的克隆候选代码和结构语义相似的重构实验和人工验证说明了该算法能够正确实现重构。