一句话:提出 DeepName,利用方法上下文与 RNN 编码器-解码器检测方法名不一致,并推荐更合适的方法名。
软件中误导性方法名会困惑开发者并影响可理解性。DeepName 基于“观其友知其人”思想,除方法体外还利用当前方法与调用者、被调用者及同类兄弟方法的交互,将名称子词序列输入 RNN 编码器-解码器,并配合复制与非复制机制生成方法表示,用于一致性检查与名称建议。在 1400 万+方法数据集上,一致性检查的 recall、precision、F-score 相对提升 2.1%、19.6%、11.9%;名称建议的 precision 提升 1.8%–30.5%。在活跃项目的 50 个 PR 中 12 个被合并,30/50 例团队认为建议名更有意义。
Misleading method names in software projects can confuse developers, which may lead to software defects and affect code understandability. In this paper, we present DeepName, a context-based, deep learning approach to detect method name inconsistencies and suggest a proper name for a method. The key departure point is the philosophy of "Show Me Your Friends, I'll Tell You Who You Are". Unlike the state-of-the-art approaches, in addition to the method's body, we also consider the interactions of the current method under study with the other ones including the caller and callee methods, and the sibling methods in the same enclosing class. The sequences of sub-tokens in the program entities' names in the contexts are extracted and used as the input for an RNN-based encoder-decoder to produce the representations for the current method. We modify that RNN model to integrate the copy mechanism and our newly developed component, called the non-copy mechanism, to emphasize on the possibility of a certain sub-token not to be copied to follow the current sub-token in the currently generated method name. We conducted several experiments to evaluate DeepName on large datasets with +14M methods. For consistency checking, DeepName improves the state-of-the-art approach by 2.1%, 19.6%, and 11.9% relatively in recall, precision, and F-score, respectively. For name suggestion, DeepName improves relatively over the state-of-the-art approaches in precision (1.8%–30.5%), recall (8.8%–46.1%), and F-score (5.2%–38.2%). To assess DeepName's usefulness, we detected inconsistent methods and suggested new method names in active projects. Among 50 pull requests, 12 were merged into the main branch. In total, in 30/50 cases, the team members agree that our suggested method names are more meaningful than the current names.