基于统计语言模型和程序静态分析的代码帮助技术研究

来源 :武汉大学 | 被引量 : 1次 | 上传用户:sky011
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
由于软件系统规模越来越大,因此开发者往往采用成熟的框架、软件库来进行开发,以提高软件开发的效率和质量。然而,即使是有经验的程序员要想学习并记住不断增长的、大量的API也是很困难的。研究者提出了许多新技术应用于代码帮助系统来帮助开发者熟悉和使用这些API。但是,目前许多主流代码帮助系统都存在一定缺陷。比如,一部分研究者认为大多数的软件是“自然”的,并用自然语言处理中的方法进行API元素的推荐。自然语言处理模型具有高效的特点,但是该方法无法利用代码中的结构化信息。为了利用结构化信息,另一部分研究者提出了一种基于图模型的方法。基于图模型的方法准确度高,但是图的存储占据较大空间,且由于需要进行图匹配,该方法的时间效率低。为了结合自然语言处理模型和基于图模型方法的优势,本文考虑将程序的结构信息转化为序列。由于程序的控制流图中记录了程序的部分结构信息,通过提取控制流图中局部结构里全部的API方法调用序列,可以将程序控制流图中的局部结构信息(如分支、循环等)以序列的形式表示出来。然后,就可以将方法调用序列类比于自然语言处理中的语句,利用统计语言模型进行训练、预测。基于以上分析,本文提出了基于程序控制流图的N元模型,即Pro-N-gram模型,并实现了 Eclipse插件,将模型应用于代码帮助中。首先,提出了一种利用程序控制流图生成基于程序的N元API方法序列(即Pro-N-gram)的技术。通过分情况分析控制语句结构构建了语句级控制流图,并利用解析复杂调用来根据语句级控制流图生成方法级控制流图,然后利用PPA(Partial Program Analysis)工具解析方法的全限定名并替换控制流图中的节点内容。接着,通过在控制流图中进行广度优先遍历查找所有基于方法的N元序列Pro-N-gram,并进行计数统计。最后,针对控制流图和自然语言的差异,我们采取重计算保证Pro-N-gram模型与自然语言模型的一致性,并提出多上下文的情况下预测空缺方法的Pro-N-gram代码帮助模型。本文的主要创新性及贡献点在于:(一)使用PPA解析方法全限定名,从而消除了不同类中存在同名方法带来的方法名歧义,同时防止了方法名词典过大。(二)提出一种静态分析方法,用于生成方法级控制流图。并利用广度优先遍历提取基于API方法的N元序列,这些序列记录了所有可能的方法执行顺序,并能编码控制流图中的局部结构信息。(三)将语言模型与程序控制流图结合。利用上述构造的基于方法的N元序列,并结合N-gram语言模型,提出可以根据多上下文预测空缺方法的Pro-N-gram代码帮助模型。
其他文献
从标准级别、标准类型、标准性质等方面分析了工业和通信业安全生产标准现状及行业分布情况,剖析了安全生产标准行业分布不均、标龄过长等问题:结合工业和通信业安全生产标准化
随着综艺节目越来越多样化,它对电视转播手段的要求也越来越高。可以说,电视导播在切换技巧、录制规律、机位调度、游机调度等方面的素质决定了一台成功的现场综艺节目是否能够
<正> 当历史的脚步迈进新世纪的时候,我国的科普事业成现出三个发展趋势: 1.各地政府把兴建科普的基地设施作为实施科教兴国战略的投入热点,目前全国有十几座大型科技馆、科
时代的信息化导致教育的信息化成为必然。教师从自古以来传统的一系列角色,在以信息化为主要特征的社会中必然面临着很大的挑战,中职学校教师需要与时俱进,以适应信息时代对
为了获得紫色大白菜细胞质不育系的特异序列,鉴定该不育系所属的不育类型,应用设计的orf138上、下游引物PCR扩增6份材料:紫色大白菜CMS不育系,保持系07-721,杂交F1,3个回交BC1