论文部分内容阅读
复用是帮助提高软件开发效率的一种有效手段。研究表明,在大多数软件系统中,有5%至20%的代码在系统内部有复用现象。同时开源项目的兴盛使得复用其他项目的代码简单易行。然而,在成千上万的开源项目中如何找到高质量的代码进行复用是软件实践者面临的一个重要问题。并且复用本身也会带来问题,特别地,如果一段代码中发现了缺陷,如何找到复用了这段代码的其他文件,以帮助排除缺陷也是软件工程非常关注的问题。最后,被复用的广泛程度也逐渐成为项目成功的一个重要指标,开发者们迫切希望了解怎样才能让项目的代码更容易被复用。为了帮助解决上述问题,检测并度量软件项目中的代码复用是软件工程领域经常采用的技术方法。 目前已有许多代码复用的检测工具和研究成果,但代码复用度量相关的研究相对较少。复用检测工具大致上可以分成两类。一类以CCFinder、CloneDR等代码克隆检测工具为主。它们具有较高的准确率和召回率,但可扩展性有限,难以检测大规模数据中的代码复用情况。另外一类,例如Ichi Tracher、GoogleCode Search等基于关键词匹配的代码检索工具,它们能够处理较大规模的数据,但会遗漏一些经过了少许修改的代码复用情况。在代码复用方面,一些研究尝试寻找了被复用最广泛的功能模块,但并未对复用广泛程度予以度量,也并未对版本控制系统,复用方式等因素给代码复用带来的影响做出分析。综上所述,对于大规模代码复用的检测和度量,主要有以下两个挑战:1、如何才能设计出一个检测大规模代码复用的算法?使之能够应对成千上万个工程的情况,并达到较高的准确率。2、在大规模数据的基础上,如何度量文件和功能模块的复用程度?如何找到影响复用广泛程度的因素? 针对上述问题和挑战,本文设计并实现了一个大规模代码复用检测与度量工具,用其检测并度量了一个包含15万工程,总计约10TB的数据源的代码复用情况,并对结果进行了分析和总结。本文的贡献主要在于:1、设计并实现了一个检测代码复用的算法。与同类工具相比,算法能够在保持较高的检测准确率和召回率的同时,高效地处理更大规模的数据。2、设计并实现了一套大规模代码复用的度量和分析方法,对复用的广泛程度予以度量,并帮助分析版本控制系统等因素给代码复用带来的影响。3、对于一个包含15万工程的开源数据源进行了代码复用的检测和度量,并通过对结果的讨论和分析,对开源社区中代码复用的规律进行了一些总结。