论文部分内容阅读
近年来,开源生态系统发展迅猛,优质的开源项目层出不穷。开源生态的迅速发展随之带来了海量的开源资源。面对如此海量的开源资源,能否有效地为开源代码提供丰富的代码描述信息,快速高效地定位代码片段,是高质开源资源复用,提高软件开发者效率,促进开源社区持续正向发展的关键性因素。然而,由于开源项目基数庞大且增加迅速、迭代频繁,开源代码结构复杂、组织无序并且缺乏规范文档,如何丰富代码片段和自然语言的关联,从而促进开源资源的复用和传播是当前面临的重大挑战。针对上述挑战,本文围绕开源代码的缺乏标注文档的问题,研究了海量开源代码数据的高效采集技术,并在获取大规模开源数据的基础上,研究了基于深度学习代码摘要和标签自动生成方法,为开源资源的复用和传播提供有力支撑。具体创新点如下1、面向GitHub社区的开源数据采集技术。开源社区蕴含着海量的开源资源,数据庞大并且迭代频繁。丰富的开源数据库是开源资源复用和软件工程科研工作者进行高效研究的关键资源。基于这样的考虑,本文利用GitHub社区提供的API接口,结合软件代码仓库协议,提出并实现了可以持续增量采集并实时更新GitHub社区数据的方法,在此基础上,为了挖掘蕴含在软件代码仓库中软件开发历史行为数据,我们通过自然语言处理方法解析软件代码仓库历史数据。通过对40000个开源代码仓库和数千开源项目数据的持续稳定采集,验证了我们方法的有效性。2、基于深度学习的代码摘要自动生成技术。开源项目由于贡献人员多,水平参差,加之缺乏代码注释,这对软件开发者快速理解和复用代码片段带来了困难,导致高质开源代码难以被有效复用。我们将软件工程经验知识与深度神经网络相结合,提出了适用于开源项目方法级别自动化代码摘要生成方法。我们利用GitHub中流行度排名前1500的Java项目,抽取了超过39万组代码片段与自然语言的对应关系。实验结果表明我们的摘要生成的准确率比当前最新工作高32.5%,验证了模型的有效性。3、面向开源资源检索的代码标签生成技术。开源生态的迅速发展给软件开发者提供海量的软件代码片段,但同时也对软件开发者通过自然语言描述查询定位代码片段带来阻碍。为了促进通过自然语言描述定位代码片段的效率,提高代码片段复用的效率,我们结合传统的TF-IDF方法和循环神经网络方法,提出针对自然语言查询语句生成代码标签的方法。我们利用GitHub中流行度排名前5000的Java开源项目,抽取70多万组自然语言—代码片段数据。实验结果表明方法在代码标签生成方面准确率高,让代码检索准确率提升17.04%,从而验证了方法的有效性。