Page 41 - 《软件学报》2021年第11期
P. 41
陶传奇 等:编程现场上下文深度感知的代码行推荐 3367
下,所推荐的 10 个代码行结果中没有明显符合开发人员需求的推荐项,这表明方法的推荐精准性并不能令实际
的开发人员十分满意,仍有较大的提升空间.
我们会在接下来的工作中进一步完善本文的方法.一方面,尝试获取更多的编程现场信息,以提高方法推荐
结果准确性;另一方面,我们也会尝试对推荐模型方面进行改进,进一步提高编程现场上下文深度感知的代码行
推荐方法的性能.
5 有效性威胁
本节讨论可能对本文方法的有效性产生威胁的情况.
(1) 上下文环境
上下文环境是本文方法的重要影响因素.在代码编写过程中,可以将一个具体功能的实现大致分为两个阶
段:准备阶段和实现阶段.
• 准备阶段的工作主要是变量声明和初始化等.
• 实现阶段则通过语句编写实现具体功能.
对本文方法而言,需要通过对上下文的学习来得到一种上下文关系,进而实现推荐.但是准备阶段的变量声
明之间是没有顺序关系的,也就是说:如果已有的上下文是准备阶段的代码行,那么很可能会由于缺乏上下文顺
序关系,对本文提出方法的精度产生影响.而且在真实的代码编写过程中,准备和实现两个阶段是没有具体界限
的,即开发人员可能在实现过程中,发现需要变量时才进行声明和初始化.
在之前的实验中,我们假设只有一些具有重要结构(比如 if)的代码行才对开发人员具有实际使用价值,所以
数据集大部分都是具有重要结构的.该假设问题还需在未来工作中进一步实证研究.
(2) 语言环境
我们实验中所有的代码行都来源于 Java.虽然本文的方法理论上独立于具体的编程语言,但某些具有更加
简洁结构(比如 Python)的程序语言可能带来更好的应用效果.但是由于本文只在 Java 中进行实验,没有进行其
他语言的实验,所以编程语言可能也是一个对我们方法有效性产生威胁的外部因素.未来工作会扩展本文的方
法到其他语言环境进行测试.
6 相关工作
(1) 代码搜索
代码搜索按照输入类型划分,可以将代码搜索分为多个方向:自由文本 [23] 、代码上下文 [24] 、结构化信息 [25]
和其他输入类型 [1,26] .在上述各个类别的检索技术中,智能检索技术又不断地被引入进来,并与其他一些相关的
信息相结合,如代码之间的调用关系、用户对代码段的反馈信息.这些智能检索技术的使用,进一步提高了代码
检索结果的质量.早期的代码搜索尝试使用文本相似度或语义相似度对用户的输入查询和代码段进行直接匹
配,为了提高性能,一些研究者针对匹配算法提出了新的改进方案.具体来说:
• 2011 年,Hill 等人 [27] 提出了基于词组概念的搜索技术.不同于以往的信息检索方法,该技术还考虑了词
在查询中不同的语义角色.
• Nguyen 等人 [28] 提出,通过线性组合的方法把改进的向量空间模型与词向量进行结合,以对代码进行向
量表示.该方法比使用单一的向量表示效果更好.
为了解决基于直接匹配方法中因为词项失配而影响推荐结果的问题,研究人员进行了很多的相关探索,早
期的方法多采用人机交互的方式完成用户查询的获取 [29] ;现在则尝试使用自动化的方法对用户原始查询的质
量进行评价,而后借助共现关系 [30] 、近义词词典 [31] 以及 API 文档 [2,8] 等获取扩展词以对原始查询进行扩展.
Haiduc 等人 [32] 提出预测查询的质量并推荐更加合适的查询方法,该方法首先利用一个训练好的分类器来预测
一个查询的质量.针对质量较低的查询,利用多种策略对查询进行重写.Hill 等人 [30] 提出一种基于查询扩展的代
码搜索方法,该方法利用了词的共现关系.Lu 等人 [31] 提出一种基于 WordNet 查询扩展的代码推荐方法,效果更