摘要

函数是大多数传统编程语言中聚合行为的最小命名单元,函数名的可读性对于程序员理解程序功能及不同模块之间的交互有着至关重要的作用,低质量的函数名会使开发人员感到困惑,增加代码中的坏味道,进而引发由API误用而导致的软件缺陷.为此,提出一种基于深度学习的函数名一致性检查及推荐方法,该方法被命名为DMName.首先,对于给定的目标函数源码,分别构建其内部上下文、交互上下文、兄弟上下文和封闭上下文,合并后得到上下文信息标记序列,然后利用FastText词嵌入技术将标记序列转换为上下文表示向量序列,输入到seq2seq模型编码器中,引入Copy机制和Coverage机制分别解决OOV问题和重复解码问题,输出目标函数名预测结果的向量序列,借助双通道CNN分类器进行函数名的一致性判断,若不一致则根据向量空间相似度匹配直接映射获得推荐的函数名.实验结果表明, DMName方法在函数名一致性检查任务和函数名推荐任务中的F1值分别达到82.65%和73.31%,比目前最优的DeepName方法分别提高2.01%和2.96%.最后,在GitHub大规模开源项目lancia中对DMName方法进行验证,挖掘得到16个函数名不一致问题并进行合理的名称推荐,进一步证实DMName方法的有效性.

全文