本发明专利技术为一种基于静态程序分析与自然语言处理方法的JavaScript函数参数不匹配检测方法。首先为JavaScript项目中每个文件构造抽象语法树AST,遍历AST树并提取整个项目的定义函数和构造函数的程序相关信息;扫描分析整个项目的JavaScript文件,分别得到定义函数和调用函数的具体位置并构造项目的函数调用图;根据提取的注释信息,通过自然语言处理方法并结合概率推断参数的类型;根据提取的信息,分别对参数个数、参数命名、参数类型的不一致性进行检测,并给出项目中JavaScript函数参数不匹配的检测报告。
【技术实现步骤摘要】
一种基于静态程序分析的JavaScript函数参数不匹配检测方法
本专利技术属于计算机
,尤其是软件
本专利技术提出了一种基于静态程序分析的JavaScript函数参数不匹配检测方法,结合自然语言处理技术,该方法能够检测多种类型的JavaScript函数参数不匹配,包括参数个数不一致性、参数命名不一致性和参数类型不一致性。
技术介绍
随着Web应用的快速发展,JavaScript被广泛应用于客户端和服务端的项目中,这对JavaScript应用的稳定性和可靠性提出了很高要求。然而,JavaScript的弱类型(loosetype)和动态特性(dynamicnature)使得基于JavaScript的应用更易于出现错误。为了增强JavaScript应用的健壮性,研究人员提出了多种针对Web应用的测试技术,以帮助开发人员在短时间内检测出存在的错误。这些工作主要关注程序逻辑上的错误,对参数不一致性以及类型有关的错误研究不多。JavaScript的弱类型特性使得JavaScript容易出现类型相关错误,目前只有少数对JavaScript类型推断的研究,且这类研究针对文件中所有变量。少数研究者关注MVC(ModelViewController)模式存在的不一致性,通过代码的AST(AbstractSyntaxTree)树推断可能存在的MVC项目不一致性。同时关注项目中参数不一致性以及类型不一致性的研究较少。一旦出现JavaScript函数参数不匹配的情况,可能会导致页面显示出错、页面操作无响应甚至程序崩溃等后果,严重影响用户体验、带来不同程度的损失。静态程序分析是指在不运行程序的时候,通过构建程序的抽象语法树AST、控制流图和数据流图等,对程序进行分析并报告是否存在安全问题以及其可靠性和可维护性等情况。针对JavaScript的静态分析工具目前主要有JS-WALA、SAFE等。本专利技术通过静态分析,构建AST、函数调用图等,以此获取函数参数的相关信息。自然语言处理方法是人工智能的一个方向,旨在研究人与计算机通过自然语言顺利通讯的各种方法。对于自然语言的处理,除了涉及语言领域还要关注如何实现与计算机系统的通信。常用的自然语言处理模型有N-gram模型、概率图模型、生成模型与判别模型、贝叶斯网络、马尔科夫链与隐马尔科夫模型等。本专利技术需要推断参数的类型信息,将参数命名、提取的注释作为概率化表示的一部分,由于注释部分是由自然语言组成的,为了推断参数与注释之间的类型关系,本专利技术使用N-gram模型来推断参数的类型信息。目前缺少对JavaScript函数实参与形参不匹配性的检测工具。本专利技术的主要目标是提出一种方法来检测JavaScript项目中函数调用以及函数定义之间存在的不一致性,该方法会在运行前对程序源码进行扫描分析,通过静态分析以及类型推断等操作获得参数的类型以及其他相关信息,从而报告出形参和实参可能存在的不一致性,可以减少实际运行时出现的函数参数不匹配错误。
技术实现思路
本专利技术的主要内容是提出一种基于静态程序分析的JavaScript函数参数不匹配检测方法,结合自然语言处理方法,该方法可以检测JavaScript程序中函数形参与实参的不一致性。本专利技术将函数参数不一致性划分成三个类别:参数个数、参数命名和参数类型。首先,对程序进行静态分析,以提取定义函数信息和调用函数信息。其次,构造项目中函数的调用图,得到定义-调用对(def-usepair)。然后,对定义函数和调用函数分别推断出其参数对应的类型,通过静态程序分析和自然语言处理方法对收集到的信息进行函数参数类型推断。最后对参数个数、参数命名和参数类型这三种不一致性情况分别进行判断、识别,从而报告JavaScript项目中存在的函数参数不匹配情况。本专利技术的内容详细表述如下:1.提取函数信息。分析的第一步是提取项目中函数定义和函数调用时的信息。对调用函数,需要提取如下信息:文件名、调用函数名、所在行数、函数参数变量名和所在函数前的注释。对定义函数,需要提取如下信息:文件名、定义函数名、所在行区间、函数参数名和定义函数前的注释信息。首先,构建每个文件的AST树并遍历,根据树节点的类型判断是定义函数节点、调用函数节点还是其他类型节点。对于定义函数节点,则根据节点的属性提取上述信息,本专利技术根据JavaScript语言特征对定义函数节点进行分类,得到五类定义函数节点类型,然后根据不同类型的节点属性分别设计并提取调用函数信息。对于调用函数节点,只有一种节点类型,根据节点属性提取定义函数信息。2.构造定义-调用对。提取出函数的基本信息后,需要构造整个项目调用图CG(Call-Graph),本专利技术根据构造的函数调用图和步骤1获得的函数信息得到定义-调用对以及每一对所包含的信息。函数调用图是指由项目中所有调用函数和定义函数组成的图,图中每一条边代表一对定义-调用对,本专利技术通过Understand分析工具对整个项目进行分析,该工具在分析过程中给每一个调用函数和定义函数单独的编号id,因此分析后通过脚本提取出项目中调用函数和定义函数列表后,直接通过id进行匹配定义调用对,从而得到整个项目调用图。对于得到的项目调用图,结合步骤1得到的函数信息,通过文件以及代码行等内容进行匹配,从而得到带信息的函数调用图。3.推断函数参数的类型。根据提取的注释以及函数代码片段的AST树推断出定义函数和调用函数的参数类型。对于定义函数,首先对注释进行预处理,然后通过自然语言处理方法N-gram对每个参数进行类型推断,同时将参数命名作为推断类型的一部分,根据概率综合得到参数的类型;对于调用函数,首先构造所在函数的AST树,并构建数据流以及控制流等信息,通过静态分析提取出函数参数的切片信息,然后根据切片信息路径上的操作进行类型推断,并对切片顶端的变量结合所在函数的注释信息进行类型推断,同时也将命名作为类型推断的一部分,综合得到参数的类型。4.不一致性判断。通过对参数个数、参数命名和参数类型三种类型的不一致性进行检测,报告出项目中可能存在的不一致性。参数个数不一致性的检测是关注定义时必须传入的参数是否传入,若缺少必选项,则认为个数存在不一致性;参数命名不一致性关注的是形参与实参命名之间的相似性,采用相似性算法来判断实参与形参的相似性,并提出在相似性大于50%时,认为具有一致性,反之存在不一致性;参数类型包括基础类型和对象类型两类,基础类型是指JavaScript语言中规定的基本类型,包括number、string、boolean、object、array、function和optional等,对象类型是指由基础类型object所实例化的对象类型,特指开发者自定义的对象类型,本专利技术对基本类型和对象类型分别进行不一致性检测。附图说明图1为通过静态分析与自然语言处理方法相结合进行函数参数类型不一致性检测的框架。图示具体过程如下:1)将项目代码作为输入,通过对AST树进行分析提取定义函数和调用函数的程序相关信息,构造项目的函数调用图,得到函数定义本文档来自技高网...
【技术保护点】
1.本专利技术提出了一种基于静态程序分析和自然语言处理方法的JavaScript函数参数不匹配检测方法,该方法检测JavaScript函数参数的三种不一致性,即参数命名不一致性、参数个数不一致性和参数类型不一致性,从而报告项目中存在的函数参数不匹配情况,即先为JavaScript项目中每个文件构造抽象语法树AST,遍历AST树并提取整个项目的定义函数和构造函数的程序相关信息;扫描分析整个项目的JavaScript文件,分别得到定义函数和调用函数的具体位置并构造项目的函数调用图;根据提取的注释信息,通过自然语言处理方法并结合概率推断参数的类型;根据提取的信息,分别对参数个数、参数命名、参数类型的不一致性进行检测,并给出项目中JavaScript函数参数不匹配的检测报告。/n
【技术特征摘要】
1.本发明提出了一种基于静态程序分析和自然语言处理方法的JavaScript函数参数不匹配检测方法,该方法检测JavaScript函数参数的三种不一致性,即参数命名不一致性、参数个数不一致性和参数类型不一致性,从而报告项目中存在的函数参数不匹配情况,即先为JavaScript项目中每个文件构造抽象语法树AST,遍历AST树并提取整个项目的定义函数和构造函数的程序相关信息;扫描分析整个项目的JavaScript文件,分别得到定义函数和调用函数的具体位置并构造项目的函数调用图;根据提取的注释信息,通过自然语言处理方法并结合概率推断参数的类型;根据提取的信息,分别对参数个数、参数命名、参数类型的不一致性进行检测,并给出项目中JavaScript函数参数不匹配的检测报告。
2.根据权利要求1所述的基于静态程序分析和自然语言处理方法的JavaScript函数参数不匹配检测方法,其特征包括以下步骤:
1)解析JavaScript文件的抽象语法树AST并遍历,提取定义函数和调用函数的信息;
2)构造函数调用图,并结合步骤1)得到带信息的函数定义-调用对;
3)对函数调用图中的函数进行函数类型推断,通过概率推断实现;
4)对定义函数和调用函数中参数个数、参数命名、参数类型的不一致性进行检测。
3.根据权利2所描述的基于静态程序分析和自然语言处理方法的JavaScript函数参数不匹配检测方法,其特征是步骤1)中的分析是基于抽象语法树进行的,即基于语法层面,通过esprima解析AST树并遍历,对于定义函数,本发明关注普通函数定义、函数表达式定义、类里的函数定义、赋值表达式和对象定义时的函数定义,提取这五类定义函数的信息;对于调用函数,本发明对于所有调用函数提取程序相关信息。
4.根据权利2所描述的基于静态程序分析和自然语言处理方法的JavaScript函数参数不匹配检测方法,其特征是在步骤2)中构造项目的函数调用图,本发明只关注自定义函数的调用图,分析项目并导出定义函数和调用函数的对应信息,对所有自定义函数编号,并给每个函数一个...
【专利技术属性】
技术研发人员:许蕾,查春柳,陈林,徐宝文,
申请(专利权)人:南京大学,
类型:发明
国别省市:江苏;32
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。