论文部分内容阅读
随着软件系统的日益庞大与复杂,软件开发中存在着大量的重复行为,这些行为存在于软件开发过程中的分析、设计、编码、测试等各个阶段,因此为了把软件开发的成本降低,提高软件的开发效率,我们需要进行不同层度的软件复用。而随着软件复用的不断发展,按照抽象程度可以分为代码复用、设计复用、分析复用以及测试复用这几个复用级别,而在这四类中,代码复用是软件开发过程中最常见的一种复用行为。与此同时,随着开源社区的不断发展,开源社区为我们进行软件复用提供了海量的资源,因此我们可以充分利用这些资源进行软件开发,提高开发效率,降低开发成本。而要能够在软件开发过程进行复用行为,我们就需要进行检索,通过检索,找到我们想要的复用资源;但由于自然语言与代码语言存在着巨大的语义鸿沟,导致目前已有的代码检索引擎效果普遍不佳,因此亟需一个快速、精准的代码检索引擎,帮助开发者快速的定位代码资源。本文立足于Github开源社区中的大量可复用代码资源,研究了两种检索算法并设计实现了一个基于群智的代码标注与检索原型系统:第一,在用户意图理解方面,我们提出了基于用户自然语言查询扩展的代码检索算法。我们首先通过机器学习训练出一个词向量模型,然后通过关键词提取,词性分析找出用户搜索的重点,之后通过对用户的查询关键词进行扩展,利用扩展后的用户查询语句去进行代码检索,提升代码检索的召回率和准确率。第二,在解决自然语言与代码语言语义鸿沟方面,我们提出了基于代码标注的代码检索算法。我们首先利用Codepedia平台收集与软件项目相关的高质量代码标注,然后将代码标注与代码片段关联起来,通过提取注释中的关键词与用户查询中的关键词进行匹配,理解用户意图,解决自然语言与代码语言的语义鸿沟,提高代码检索的召回率和准确率,然后利用Elastic Search搜索引擎提高代码检索的效率。第三,在平台方面,我们搭建了一个基于群智的代码检索复用系统。我的基于群智的代码检索复用是以众包的形式发放任务,让开发者及学生群体参加到平台的众包任务中来,在阅读优秀开源代码的同时为开源代码添加高质量的代码标注,为此我们设立了一系列完善的机制包括:用户引导机制,代码标注机制,用户反馈机制,用户激励机制等