论文部分内容阅读
随着人工智能、深度学习等技术的发展,互联网上出现了越来越多的开源社区和开源软件,其中包含着上亿行的代码。这些代码资源的出现给传统的软件工程带来了新的机遇和挑战,合理的使用这些代码资源能够大大提高软件开发的质量和效率。目前已有大量相关的研究工作,例如代码自动生成和代码搜索技术。程序员可以利用这些技术来实现某个高级编程任务,但是这些技术仍然存在一定的局限性,代码自动生成技术通常无法生成大规模、功能复杂的程序,而代码搜索技术受限于搜索空间,可能无法搜索到合适的代码段。本课题提出了一种基于深度学习的任务分解工具Lego,能够将给定的高级编程任务分解为相应的子任务序列,这些序列代表了完成编程任务所需要的每一个步骤,每个子任务所表示的功能也更加简单。课题的主要工作包括:(1)调研了Stack Overflow和GitHub开源社区,对其中的Java代码进行了分析,并从中总结出两种注释:一种是具有高级意图的总注释,和高级编程任务相似;另外一种是具有低级意图的分段注释,和低级的子任务相似。基于此,本课题从上述开源社区中提取了用于训练任务分解模型的数据集,其中包含多条<任务,[子任务1,…,子任务N]>,并且采用了深度学习算法从数据集中学习并建立任务分解模型。(2)注释质量判断;Java源代码中存在部分低质量注释,其无法正确的解释后续代码段。这种注释的存在会影响整个工作的效果,因此本课题提出了一种有监督的注释质量判断方法,用于识别低质量注释。(3)分段注释生成;在从Java源代码中提取分段注释的过程中,发现大部分Java代码都不包含或者缺少分段注释,这导致了分段注释的数量过低,数据集数量太少。针对那些缺少分段注释的代码段,本课题提出了一种分段注释生成方法,通过代码摘要生成模型生成分段注释。在实验评估中,注释质量判断的F-score达到92.78%;代码摘要生成模型的BLEU分数达到30.78;Lego在任务分解上的BLEU分数达到20.19。并且通过控制变量法评估了注释质量判断和分段注释生成的有效性,在加入了注释质量判断后,Lego的BLEU分数提高了1.32;在加入了分段注释生成的数据后,Lego的BLEU分数提高了7.6。