一种基于给定缺陷描述信息进行软件测试的方法及系统的制作方法

文档序号:6373646阅读:181来源:国知局
专利名称:一种基于给定缺陷描述信息进行软件测试的方法及系统的制作方法
技术领域
本发明涉及软件静态测试技术,尤其涉及一种基于给定缺陷描述信息进行软件测试的方法及系统。
背景技术
静态代码缺陷分析技术通过对代码进行静态分析来推测程序运行时的表现行为,从而发现代码中可能存在的缺陷。
目前,通常采用基于缺陷模式的代码检查方法对代码进行缺陷检测,基于缺陷模式的代码检查方法主要包括如下步骤将受检代码与缺陷查找工具中设置的多个缺陷模式依次进行匹配,如果受检代码与某一缺陷模式匹配,则确定受检代码包含与该缺陷模式对应的缺陷;根据确定的缺陷生成缺陷检测报告,将所述缺陷报告呈现给用户。所述缺陷模式是缺陷查找工具设计人员对代码中经常出现的缺陷进行总结、提炼而设计出来的,每个缺陷模式对应不同的缺陷。现有的缺陷查找工具,如FindBugs、PMD和Hammurapi等,通常具有固定数目的缺陷模式,是不能根据用户的需要增加缺陷模式的,也就是说只能对已设置的缺陷模式对应的缺陷进行检测。但是,实践中用户往往希望能够对自己所关注的缺陷进行检测。

发明内容
有鉴于此,本发明的主要目的在于提供一种基于给定缺陷描述信息进行软件测试的方法及系统,能够对用户所关注的缺陷进行检测。为达到上述目的,本发明的技术方案是这样实现的本发明提供了一种基于给定缺陷描述信息进行软件测试的方法,所述方法包括接收用户发来的待测代码和缺陷描述信息;对收到的待测代码进行静态分析,得到符号表、控制流图、函数调用关系、定义-使用链;根据缺陷描述信息在符号表、控制流图、函数调用关系、定义-使用链中进行缺陷查找,找到待测代码中缺陷描述信息所描述的缺陷。优选的,所述缺陷描述信息为静态缺陷描述语言(SDDL)表达式,所述SDDL表达式用于描述用户关注的语法缺陷,相应的,根据缺陷描述信息在符号表、控制流图、函数调用关系、定义-使用链中进行缺陷查找,找到待测代码中缺陷描述信息所描述的缺陷,为,在符号表、控制流图、函数调用关系、定义-使用链中,查找SDDL表达式描述的用户关注的语法缺陷,找到待测代码中的所述语法缺陷。优选的,所述对收到的待测代码进行静态分析之前,所述方法还包括对收到的SDDL表达式进行合法性判断。
优选的,所述对收到的SDDL表达式进行合法性判断,为,判断所述SDDL表达式中是否包含尚未定义的谓词表达式,当不包含尚未定义的谓词表达式时,判断所述SDDL表达式中各个项的类型是否都正确,当各个项的类型均正确时,判定为合法,执行对收到的待测代码进行静态分析的操作。优选的,所述对收到的待测代码进行静态分析,得到符号表、控制流图、函数调用关系、定义-使用链,为,对收到的待测代码进行词法分析和语法分析,构造出待测代码的抽象语法树;根据抽象语法树,生成符号表和控制流图;根据生成的符号表,对待测代码进行函数调用关系分析,生成函数调用关系; 根据控制流图和符号表,生成定义-使用链。本发明提供了一种基于给定缺陷描述信息进行软件测试的系统,所述系统包括信息接收单元、静态分析单元和缺陷查找单元,其中,所述信息接收单元,用于接收用户发来的待测代码和缺陷描述信息;所述静态分析单元,用于对信息接收单元收到的待测代码进行静态分析,得到符号表、控制流图、函数调用关系、定义-使用链;所述缺陷查找单元,用于根据信息接收单元收到的缺陷描述信息在静态分析单元得到的符号表、控制流图、函数调用关系、定义-使用链中进行缺陷查找,找到待测代码中缺陷描述信息所描述的缺陷。优选的,所述缺陷描述信息为SDDL表达式,所述SDDL表达式用于描述用户关注的语法缺陷,相应的,缺陷查找单元,具体用于在静态分析单元得到的符号表、控制流图、函数调用关系、定义-使用链中,查找信息接收单元收到的SDDL表达式描述的用户关注的语法缺陷,找到待测代码中的所述语法缺陷。优选的,所述系统还包括合法性判断单元,用于对信息接收单元收到的SDDL表达式进行合法性判断。优选的,所述合法性判断单元,具体用于判断所述SDDL表达式中是否包含尚未定义的谓词表达式,当不包含尚未定义的谓词表达式时,判断所述SDDL表达式中各个项的类型是否都正确,当各个项的类型均正确时,判定为合法,通知静态分析单元执行对信息接收单元收到的待测代码进行静态分析的操作。优选的,静态分析单元,具体用于对信息接收单元收到的待测代码进行词法分析和语法分析,构造出待测代码的抽象语法树;根据抽象语法树,生成符号表和控制流图;根据生成的符号表,对待测代码进行函数调用关系分析,生成函数调用关系;根据控制流图和符号表,生成定义-使用链。由上可知,采用本发明的技术方案接收用户发来的待测代码和缺陷描述信息;对收到的待测代码进行静态分析,得到符号表、控制流图、函数调用关系、定义-使用链;根据缺陷描述信息在符号表、控制流图、函数调用关系、定义-使用链中进行缺陷查找,找到待测代码中用户所关注的缺陷,可以实现对用户所关注的缺陷进行检测。


图I为本发明的基于给定缺陷描述信息进行软件测试的方法的第一实施例的流程图;图2为本发明的基于给定缺陷描述信息进行软件测试的系统的实施例的结构示意图;图3为本发明的基于给定缺陷描述信息进行软件测试的方法的第二实施例的流程图。
具体实施例方式本发明的基本思想是接收用户发来的待测代码和缺陷描述信息;对收到的待测代码进行静态分析,得到符号表、控制流图、函数调用关系、定义-使用链;根据缺陷描述信息在符号表、控制流图、函数调用关系、定义-使用链中进行缺陷查找,找到待测代码中缺 陷描述信息所描述的缺陷。本发明提供的基于给定缺陷描述信息进行软件测试的方法的第一实施例,如图I所示,本实施例中的方法包括步骤101、接收用户发来的待测代码和缺陷描述信息;较佳的,所述缺陷描述信息为静态缺陷描述语言(Static Defect DescriptionLanguage, SDDL)表达式,所述SDDL表达式用于描述用户关注的语法缺陷。所述SDDL是一种基于逻辑的查询语言,所述SDDL表达式由定义的谓词表达式构成,所述谓词表达式是构成SDDL表达式的最基本形式,所述谓词表达式形如Ρ(Χ1;Χ2,...,Xn),其中P是谓词,表示一种逻辑关系;Xi(i = l,2,...,n)是项,其中η为正整数,所述项可以为常量或变量,SDDL表达式中的项是有类型的,不同类型的项代表不同的语法实体。步骤102、对收到的待测代码进行静态分析,得到符号表、控制流图、函数调用关系、定义-使用链;较佳的,所述对收到的待测代码进行静态分析之前,所述方法还可以包括对收到的SDDL表达式进行合法性判断。这里,所述对收到的SDDL表达式进行合法性判断,可以为,判断所述SDDL表达式中是否包含尚未定义的谓词表达式,当不包含尚未定义的谓词表达式时,判断所述SDDL表达式中各个项的类型是否都正确,当各个项的类型均正确时,判定为合法,执行对收到的待测代码进行静态分析的操作。较佳的,所述对收到的待测代码进行静态分析,得到符号表、控制流图、函数调用关系、定义-使用链,可以为,对收到的待测代码进行词法分析和语法分析,构造出待测代码的抽象语法树;根据抽象语法树,生成符号表和控制流图;根据生成的符号表,对待测代码进行函数调用关系分析,生成函数调用关系;根据控制流图和符号表,生成定义-使用链。步骤103、根据缺陷描述信息在符号表、控制流图、函数调用关系、定义-使用链中进行缺陷查找,找到待测代码中缺陷描述信息所描述的缺陷。较佳的,当缺陷描述信息为SDDL表达式时,根据缺陷描述信息在符号表、控制流图、函数调用关系、定义-使用链中进行缺陷查找,找到待测代码中缺陷描述信息所描述的缺陷,可以为,在符号表、控制流图、函数调用关系、定义-使用链中,查找SDDL表达式描述的用户关注的语法缺陷,找到待测代码中的所述语法缺陷。本发明提供的基于给定缺陷描述信息进行软件测试的系统的实施例,如图2所示,本实施例中的系统包括信息接收单元、静态分析单元和缺陷查找单元,其中,所述信息接收单元,用于接收用户发来的待测代码和缺陷描述信息;较佳的,所述缺陷描述信息为SDDL表达式,所述SDDL表达式用于描述用户关注的语法缺陷。 所述静态分析单元,用于对信息接收单元收到的待测代码进行静态分析,得到符号表、控制流图、函数调用关系、定义-使用链;较佳的,所述静态分析单元,具体用于对信息接收单元收到的待测代码进行词法分析和语法分析,构造出待测代码的抽象语法树;根据抽象语法树,生成符号表和控制流图;根据生成的符号表,对待测代码进行函数调用关系分析,生成函数调用关系;根据控制流图和符号表,生成定义-使用链。所述缺陷查找单元,用于根据信息接收单元收到的缺陷描述信息在静态分析单元得到的符号表、控制流图、函数调用关系、定义-使用链中进行缺陷查找,找到待测代码中缺陷描述信息所描述的缺陷。当缺陷描述信息为SDDL表达式时,缺陷查找单元,具体用于在静态分析单元得到的符号表、控制流图、函数调用关系、定义-使用链中,查找信息接收单元收到的SDDL表达式描述的用户关注的语法缺陷,找到待测代码中的所述语法缺陷。较佳的,所述系统还包括合法性判断单元,用于对信息接收单元收到的SDDL表达式进行合法性判断。较佳的,所述合法性判断单元,具体用于判断所述SDDL表达式中是否包含尚未定义的谓词表达式,当不包含尚未定义的谓词表达式时,判断所述SDDL表达式中各个项的类型是否都正确,当各个项的类型均正确时,判定为合法,通知静态分析单元执行对信息接收单元收到的待测代码进行静态分析的操作。本发明提供的基于给定缺陷描述信息进行软件测试的方法的第二实施例,如图3所示,本实施例中的方法包括步骤301、接收用户发来的待测代码和缺陷描述信息,所述缺陷描述信息为SDDL表达式,所述SDDL表达式用于描述用户关注的语法缺陷。步骤302、判断所述SDDL表达式中是否包含尚未定义的谓词表达式,如果不包含尚未定义的谓词表达式,则进入步骤303 ;如果包含尚未定义的谓词表达式,则结束本次流程。步骤303、判断所述SDDL表达式中各个项的类型是否都正确,如果各个项的类型均正确,进入步骤304 ;如果各个项的类型有错误,则结束本次流程。步骤304、对收到的待测代码进行词法分析和语法分析,构造出待测代码的抽象语法树。步骤305、根据抽象语法树,生成符号表和控制流图。步骤306a、根据生成的符号表,对待测代码进行函数调用关系分析,生成函数调用关系。步骤306b、根据控制流图和符号表,生成定义-使用链。步骤307、在符号表、控制流图、函数调用关系、定义-使用链中,查找SDDL表达式描述的用户关注的语法缺陷,找到待测代码中的所述语法缺陷。例如,SDDL表达式描述的用户关注的语法缺陷为待测代码中的变量的名称以”开头,如果待测代码中的变量的名称以”开头,就确定待测代码中存在所述语法缺陷,
此时 SDDL 表达式具体可以为var ( v), name ( v, n), re_match ( “_(·) *, ,, n),其中,“? v”和“? n”是变量项,符号“,”表示合取(并)。那么本步骤具体为,在符号表、控制流图、函数调用关系、定义-使用链中,使用var ( v), name ( v, n),re_match( “_(· )*”, n)进行查询,寻找所有满足条件的变量,所述条件为变量的名称能够匹配正则表达式“具体的,所述寻找所有满足条件的变量为首先找到待测代码中的一个变量,并将其与? V绑定(binging/B);然后取? v也即变量的名称,并将其与? η绑定;最后判断?η是否匹配正则表达式“_(. )*”。重复上述步骤,直到找到所有满足条件的变量或把待测代码中的所有变量都检查完为止。由上可知,采用本发明的技术方案可以实现对用户所关注的缺陷进行检测。以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
权利要求
1.一种基于给定缺陷描述信息进行软件测试的方法,其特征在于,所述方法包括 接收用户发来的待测代码和缺陷描述信息; 对收到的待测代码进行静态分析,得到符号表、控制流图、函数调用关系、定义-使用链; 根据缺陷描述信息在符号表、控制流图、函数调用关系、定义-使用链中进行缺陷查找,找到待测代码中缺陷描述信息所描述的缺陷。
2.根据权利要求I所述的方法,其特征在于,所述缺陷描述信息为静态缺陷描述语言(SDDL)表达式,所述SDDL表达式用于描述用户关注的语法缺陷, 相应的,根据缺陷描述信息在符号表、控制流图、函数调用关系、定义-使用链中进行缺陷查找,找到待测代码中缺陷描述信息所描述的缺陷,为, 在符号表、控制流图、函数调用关系、定义-使用链中,查找SDDL表达式描述的用户关注的语法缺陷,找到待测代码中的所述语法缺陷。
3.根据权利要求2所述的方法,其特征在于,所述对收到的待测代码进行静态分析之前,所述方法还包括 对收到的SDDL表达式进行合法性判断。
4.根据权利要求3所述的方法,其特征在于,所述对收到的SDDL表达式进行合法性判断,为, 判断所述SDDL表达式中是否包含尚未定义的谓词表达式,当不包含尚未定义的谓词表达式时, 判断所述SDDL表达式中各个项的类型是否都正确,当各个项的类型均正确时,判定为合法,执行对收到的待测代码进行静态分析的操作。
5.根据权利要求I所述的方法,其特征在于,所述对收到的待测代码进行静态分析,得到符号表、控制流图、函数调用关系、定义-使用链,为, 对收到的待测代码进行词法分析和语法分析,构造出待测代码的抽象语法树; 根据抽象语法树,生成符号表和控制流图; 根据生成的符号表,对待测代码进行函数调用关系分析,生成函数调用关系; 根据控制流图和符号表,生成定义-使用链。
6.一种基于给定缺陷描述信息进行软件测试的系统,其特征在于,所述系统包括信息接收单元、静态分析单元和缺陷查找单元,其中, 所述信息接收单元,用于接收用户发来的待测代码和缺陷描述信息; 所述静态分析单元,用于对信息接收单元收到的待测代码进行静态分析,得到符号表、控制流图、函数调用关系、定义-使用链; 所述缺陷查找单元,用于根据信息接收单元收到的缺陷描述信息在静态分析单元得到的符号表、控制流图、函数调用关系、定义-使用链中进行缺陷查找,找到待测代码中缺陷描述信息所描述的缺陷。
7.根据权利要求6所述的系统,其特征在于,所述缺陷描述信息为SDDL表达式,所述SDDL表达式用于描述用户关注的语法缺陷, 相应的,缺陷查找单元,具体用于在静态分析单元得到的符号表、控制流图、函数调用关系、定义-使用链中,查找信息接收单元收到的SDDL表达式描述的用户关注的语法缺陷,找到待测代码中的所述语法缺陷。
8.根据权利要求7所述的系统,其特征在于,所述系统还包括合法性判断单元,用于对信息接收单元收到的SDDL表达式进行合法性判断。
9.根据权利要求8所述的系统,其特征在于,所述合法性判断单元,具体用于判断所述SDDL表达式中是否包含尚未定义的谓词表达式,当不包含尚未定义的谓词表达式时, 判断所述SDDL表达式中各个项的类型是否都正确,当各个项的类型均正确时,判定为合法,通知静态分析单元执行对信息接收单元收到的待测代码进行静态分析的操作。
10.根据权利要求6所述的系统,其特征在于,静态分析单元,具体用于对信息接收单元收到的待测代码进行词法分析和语法分析,构造出待测代码的抽象语法树; 根据抽象语法树,生成符号表和控制流图; 根据生成的符号表,对待测代码进行函数调用关系分析,生成函数调用关系; 根据控制流图和符号表,生成定义-使用链。
全文摘要
本发明提供了一种基于给定缺陷描述信息进行软件测试的方法和系统,所述方法包括接收用户发来的待测代码和缺陷描述信息;对收到的待测代码进行静态分析,得到符号表、控制流图、函数调用关系、定义-使用链;根据缺陷描述信息在符号表、控制流图、函数调用关系、定义-使用链中进行缺陷查找,找到待测代码中缺陷描述信息所描述的缺陷,可以实现对用户所关注的缺陷进行检测。
文档编号G06F11/36GK102819490SQ20121025439
公开日2012年12月12日 申请日期2012年7月20日 优先权日2012年7月20日
发明者黄俊飞, 宫云战, 王前, 金大海, 王雅文, 赵云山, 周虹伯 申请人:北京邮电大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1