论文部分内容阅读
如何提高软件的开发效率是软件工程领域的一个核心问题。随着互联网的发展以及开源软件的流行,软件及代码的重用在提高软件开发效率方面变得越来越重要。根据调查研究,当今的软件开发者们以重用为目的花费了大量的时间在互联网上搜索软件或者代码。因此,代码搜索技术得到了越来越多的研究与重视。目前有许多关于代码搜索的研究成果。在这些研究成果中,有一部分使用了信息检索技术,使得对大规模的软件或代码的搜索成为可能。虽然这些已有的研究工作采用了各种方法来提高代码搜索的准确性,但是效果都十分有限。本文经过调查研究这些已有的工作,针对他们研究中的不足,提出了一种高效的代码搜索算法,并基于此算法实现了一个代码推荐工具。同时,通过与已有的研究工作进行实验比较,验证了本文提出的算法的有效性。首先,针对代码搜索准确性不足的问题,本文提出了一种基于查询分析与扩展布尔模型的代码搜索方法,并从三个主要方面对该方法进行了介绍。在代码的表示方面,通过识别可以用来帮助搜索的代码特征,对源代码进行解析,提取必要的信息,并基于这些信息建立了代码的索引。对于查询语句,本文提出了一种查询分析方法,通过分析查询语句与API之间的相关性,获得与查询语句相关的若干个API,并结合这些相关的API以及查询语句,构造出布尔逻辑查询表达式,帮助提升代码搜索的准确性。在搜索结果的排序方面,本文通过运用扩展布尔模型计算查询表达式与代码的相似度,并根据相似度评分对搜索结果进行了排序。然后本文针对C#编程语言,实现了基于上述搜索算法的代码推荐工具CodeHow。对于代码搜索结果中遇到的代码克隆问题,本文提出了基于SimHash算法的代码克隆检测方法。同时,本文采用程序切片技术对搜索到的代码进行简化,去除了代码中与查询无关的部分。最后,通过客观实验与用户调研,本文从多个角度对基于本文搜索算法的代码推荐工具CodeHow的有效性进行了验证。实验结果表明,CodeHow达到了一个较高的准确性,证明了本文提出的搜索算法的有效性。同时,在用户调研中,本文通过设计三个真实的编程任务,让参与者使用CodeHow帮助他们完成编程任务,并根据使用感受填写调查问卷,进一步表明CodeHow在真实的应用场景下可以给用户的编程带来帮助。