论文部分内容阅读
随着近几年开源项目的发展,个人通过互联网能获取到越来越多的工程代码。在缺少需求和设计文档的情况下,想在短时间内仅凭阅读代码来理解工程功能模块组成或某一功能对应的代码十分困难。而当前的源码搜索引擎只能按查询词搜索与之匹配的代码片段,却无法在将查询词视为功能描述的基础上,从宏观角度给出涉及的结构信息。因此本文研究如何根据功能描述在源码工程中定位相应的类结构等信息。为解决该问题,本文提出了一种结合软件聚类的功能搜索技术,使用主题分析和软件聚类,该技术能得到较为精确的类结构信息。该方法包含三方面工作。首先,提出了针对Java的软件特征提取方法和特征向量构造方式。构造的特征矩阵作为层次聚类算法的输入,输出相应的簇描述。然后,提出了针对类结构的主题分析方法。该方法不以文件为单位,只针对类结构信息分析。由此搜索得到的将不再是代码片段,而是和功能相关的一系列类结构信息。最终,综合利用软件聚类和主题分析实现了功能搜索技术。此过程使用软件聚类的结果指导主题分析,主题分析的输出经过软件聚类过滤,最终展现给用户更加精确的信息。照此方法,本文设计并实现了一个原型系统。实验表明,该原型系统能有效提升软件聚类的结果。和GitHub字符串匹配结果相比,在搜索功能上得到数据更加精确,能自动化地排除不相关结果,得到良好的功能模块结果。在应用前景上,该方法在实际的阅读源码、维护系统方面都有很好的指导作用。开发者可以借此方法来指导先期探索,加快理解工程,提升开发效率。进一步的发展,可以借此方法完成功能模块的复用。