当前位置: 首页 > 专利查询>南京大学专利>正文

一种基于文档的库函数的代码模型的自动合成方法技术

技术编号:15638787 阅读:90 留言:0更新日期:2017-06-15 19:26
本发明专利技术的基于文档的库函数的代码模型的自动合成方法,包括步骤:1.从文档中抽取有用信息;2.使用自然语言处理工具生成句子的语法树;3.对步骤2中生成的语法树进行结构上的变换生成多个语法树的变体;4.对步骤3中生成的语法树进行分析,识别其中的参数、程序结构以及操作语义,生成候选的代码模型;5.对步骤4中的候选模型进行检验,删除与原始的类库具有行为不一致的候选模型。本发明专利技术综合使用了自然语言处理技术与自动化测试技术,成功地为Java容器类生成了代码模型,生成的代码模型可以有效地提高其它程序分析技术的正确性和效率,解决了程序分析过程中由于类库源代码缺失或者类库源代码过于复杂导致难以分析等问题。

【技术实现步骤摘要】
一种基于文档的库函数的代码模型的自动合成方法
本专利技术涉及一种基于文档的库函数的代码模型的自动合成方法,主要利用自然语言处理技术和自动化测试技术来解决库函数的代码模型的自动生成问题,进而提高其它程序分析技术的正确性和效率。属于软件工程、程序合成领域。
技术介绍
在现代的程序中,类库被广泛使用,类库的行为是软件行为中不可分割的一部分,对软件程序进行分析的时候,这些类库也应该被分析。然而分析类库是一件非常困难的事情,首先,在很多情况下,类库的源代码是无法获取的。即使可以获取源代码,代码通常也非常复杂,比如包含高度优化的代码、复杂的工程技巧,或者是由多种语言实现,这一系列的原因都导致分析类库源代码非常困难。目前有很多研究工作人工为类库建立模型,通过对模型的分析来替代对类库的分析。然而,人工建模不仅耗时,而且容易出错。另外还有一些研究工作通过动态执行程序来跟踪输入输出之间的关系,这种方法依赖于测试用例的充分度,而且输入输出之间的依赖关系无法反应类库的精确行为。
技术实现思路
技术问题:类库的文档中通常包含了丰富的信息,描述了类库的行为,因此,本专利技术的目标是从文档中抽取有用信息,根据这些信息,综合使用自然语言处理技术与自动化测试技术为类库自动生成代码模型。代码模型模拟了类库的行为,解决了程序分析过程中由于源代码缺失或者源代码过于复杂导致难以分析等问题,有效地提高其它程序分析技术的有效性和效率。技术方案:给定一个JavaAPI函数,本专利技术使用自然语言处理工具生成每个句子的语法树,然后在语法树中识别参数和程序结构生成树结构形式的中间表示,接着将中间表示与预定义的一组原语的树模板进行匹配,每个原语是由一个树模板以及该树模板所对应的代码模板组成。在匹配过程中,本专利技术尝试用若干个原语的树模板对中间表示进行覆盖,当找到合适的树模板将中间表示覆盖完全后,使用中间表示中对应的节点信息来实例化树模板中的节点,实例化的结果是与树模板匹配的子树所对应的代码片段,将这些代码片段组合起来生成一个代码模型。由于自然语言的二义性以及参数识别过程中的不确定性等,每个句子可能对应多个中间表示,此外,每个中间表示可能有多个覆盖方法,因此可能生成多个候选的代码模型,本专利技术使用测试技术过滤掉与原始的类库具有行为不一致的候选模型。本方法包括以下步骤:步骤1:从文档中抽取类和函数的描述信息,例如函数的声明、函数的行为描述等。步骤2:对步骤1抽取的信息进行等价分析、冗余信息删除以及语句增强。步骤3:使用自然语言处理工具为经过步骤2处理的每一个自然语言句子生成一棵语法树,这棵树给出了每个单词的词性,同时标记了不同的短语。步骤4:将步骤3生成的语法树进行节点变换生成多个变体,不同变体表示不同的语义。步骤5:识别步骤4中生成的语法树中表示参数的节点以及从语法树中识别出程序的结构,即循环结构和分支结构,为语法树生成相应的中间表示。步骤6:结合给定的原语,为步骤5生成的中间表示合成对应的代码片段,然后将一个函数的所有中间表示对应的代码片段组合起来生成每一个函数的模型,然后将不同函数的模型组合起来生成类的模型。步骤7:使用测试工具对步骤6生成的候选的代码模型进行测试,过滤那些与类库具有行为不一致的候选模型。有益效果:本专利技术所述的基于文档的库函数的代码模型的自动构造方法所生成的代码模型模拟了类库的行为,模型的代码实现更加简单,复杂性低,不会调用本地方法等,代码模型的平均代码行数是原始类库中函数的1/3,而且调用函数简洁清晰。代码模型可以有效地辅助其它程序分析技术,比如库函数的规约生成技术、静态污点分析技术以及动态切片技术等。具体而言:(1)将生成的代码模型应用于静态污点分析技术中,结果显示使用代码模型可以有效地提高静态污点分析的正确性,发现一些使用源代码无法发现的信息泄露路径,同时还可以提高分析的效率。(2)将生成的代码模型应用于动态切片技术中,结果显示使用代码模型生成的切片大小远远小于使用朴素模型所生成的切片大小,而且还可以提高分析的效率,这主要得益于代码模型提供了函数功能的简单而准确的实现,对代码模型进行分析时可以得到输出与输入之间的精确的依赖关系,而朴素模型的依赖关系过多而且很多是不准确的。附图说明图1是基于文档的库函数的代码模型的自动构造方法的流程图。图2是本专利技术实施例的ArrayList类中indexof方法的文档示例图。图3是本专利技术实施例的语法树图一。图4是本专利技术实施例的语法树图二。图5是本专利技术实施例的语法树图三。图6是本专利技术实施例的中间表示示意图。图7是本专利技术实施例的覆盖示意图。图8是本专利技术实施例的代码片段。具体实施方式下面结合实施例和说明书附图对本专利技术做进一步说明。图1是基于文档的库函数的代码模型的自动构造方法的流程图。本实施例给出了一种基于文档的库函数的代码模型的自动合成方法。包括如下步骤:1.从文档中抽取有用信息;2.对抽取的描述语句进行预处理。3.使用自然语言处理工具生成句子的语法树;4.对步骤3中生成的语法树进行结构上的变换生成多个语法树的变体;5.对步骤4中生成的语法树进行分析,识别其中的参数、程序结构以及操作语义的中间表示;6.生成候选的代码模型;7.对步骤6中的候选模型进行检验,删除与原始的类库具有行为不一致的候选模型。本专利技术综合使用了自然语言处理技术与自动化测试技术,成功地为Java容器类生成了代码模型,生成的代码模型可以有效地提高其它程序分析技术的正确性和效率,解决了程序分析过程中由于类库源代码缺失或者类库源代码过于复杂导致难以分析等问题。本实施例通过图2中展示的ArrayList类中indexof方法的文档为例进行详细说明。一.从文档中抽取信息在具体实施中,本专利技术以HTML格式的Javadoc文档作为输入,从中抽取类的信息和函数的信息。针对类,主要提取包名和类的声明。针对函数,主要抽取(1)函数的声明;(2)参数名以及相应的解释部分;(3)描述函数行为的语句;(4)描述函数返回值的语句;(5)描述函数抛出的异常以及抛出异常的条件。二.预处理本专利技术对抽取的描述语句进行预处理,主要包括下面三个方面:(1)等价分析:将词语按照领域字典进行等价类的划分,以减少重复处理。例如,在函数的行为描述中,insert和add是语义等价的。(2)删除冗余信息:尝试删除用于解释其它语句的句子。例如,图2中以“moreformally”开头的句子是进一步解释其前面的句子。(3)增强语句:在Javadoc中的返回值描述和异常描述中的语句往往是不完整的,本专利技术尝试将这类语句补充完整。三.为自然语言句子生成语法树本专利技术使用自然语言处理工具StanfordParser为每一个经过预处理的句子生成语法树,识别出句子中单词的词性、短语结构等。有些单词在计算机领域中具有固定的词性,但是StanfordParser并不具备领域知识,因此,本专利技术开发了一个词性限制模块,引导StanfordParser将和计算机程序领域相关的词汇标记为期望的词性。针对图2中的句子“Returnstheindexofthefirstoccurrenceofthespecifiedelementinthislist,or-1ifthislistdoesnotcontaintheelemen本文档来自技高网...
一种基于文档的库函数的代码模型的自动合成方法

【技术保护点】
一种基于文档的库函数的代码模型的自动合成方法,其特征在于,包含步骤如下:步骤一、获取文档中的有用信息;步骤二、为自然语言句子生成语法树;步骤三、变换语法树生成多个语法树的变体,每个变体表示不同的语义;步骤四、在语法树中识别出参数、程序结构以及操作语义,生成候选的代码模型;步骤五、检验候选模型,删除与原始的类库具有不一致行为的候选模型。

【技术特征摘要】
1.一种基于文档的库函数的代码模型的自动合成方法,其特征在于,包含步骤如下:步骤一、获取文档中的有用信息;步骤二、为自然语言句子生成语法树;步骤三、变换语法树生成多个语法树的变体,每个变体表示不同的语义;步骤四、在语法树中识别出参数、程序结构以及操作语义,生成候选的代码模型;步骤五、检验候选模型,删除与原始的类库具有不一致行为的候选模型。2.根据权利要求1所述的自动合成方法,其特征在于:所依据的文档信息包括包名、类名、函数声明、函数的行为描述、函数的返回值描述、函数抛出的异常信息。3.根据权利要求1所述的自动合成方法,其特征在于:去除文档中包含的冗余信息,并尝试将不完整的信息补充完整。4.根据权利要求1所述的自动合成方法,其特征在于:将语法树中的部分树节点进行上移或者下推来生成语法树的不同变体,每一个变体表示了一种可能的语义信息;通过这种方式来解决自然语言固有的模糊性。5.根据...

【专利技术属性】
技术研发人员:翟娟赵建华黄建军马仕青张翔宇谭琳秦锋
申请(专利权)人:南京大学
类型:发明
国别省市:江苏,32

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1