论文部分内容阅读
源代码阅读是一项十分困难的工作,特别是对于那些有成百上千个文件的源代码工程而言,比如Linux和Gcc这样的开源代码库,我们很难能够在短时间内清楚一个源文件是在做什么。所以对源代码文件进行分析的自动化工具变得十分重要,例如一些可以自动分析软件结构、功能、调用关系、开发过程甚至是开发人员与代码之间的一些联系等等。一些传统的主题模型比如LDA模型可以利用概率关系从文本中挖掘其中包含的多种主题。但是源代码数据与普通文本有着显著的区别,它们的各部分结构不是“平等”的。一个代码文件中包含的数据有接近普通文本的注释,也有受到程序语言约束的代码。另外,非监督型主题模型只能够给出主题的词分布,而无法得到确切的分类名。而且目前并没有一个针对代码分类的标准分类系统。在这篇文章中,我们提出了一个新的针对源代码库设计的概率图模型,用来对源代码库进行主题挖掘。这个模型不是将代码文件当成普通文本处理,而是将不同的部分,包括代码、注释、以及提交记录信息,进行不同的处理并通过主题将他们结合起来。因此,这个模型在模拟源代码库的生成过程中,相比于其它的传统主题挖掘方法更加贴近源代码库的真实生成过程。这使得我们得到的主题分布将更加可靠。但是,如果只有这个概率图模型,我们仍然不能得到一个源代码文件的确切分类。所以我们选择建立一个针对与源代码库的分类系统。在本文中,我们选择了对来自于著名的程序问答网站Stack over?ow的数据进行处理,建立了一个多分枝的层次化分类系统。同时,我们采用了不同的映射方法将源代码文件最终映射到相应的分类系统中。