一种改进的基于符号执行的软件静态测试方法及工具技术

技术编号:6956586 阅读:434 留言:0更新日期:2012-04-11 18:40
本发明专利技术公布了一种改进的基于符号执行的软件静态测试方法及工具,有如下步骤:1、第一阶段分析。其中包括:1.1)将被测代码输入测试工具中;1.2)根据C语言文法自定义一个关键词列表进行词法分析;1.3)根据C语言文法自定义函数结构模块及算法对代码进行语法分析得到程序静态分析树;2、第二阶段分析。其中包括:2.1)根据步骤(1.2)中词法分析结果,以结构体的形式(包含变量名称及变量的符号值)建立变量列表、以链表的形式存储当前路径条件;2.2)根据步骤(1.3)中语法分析结果,对程序静态分析树进行中序遍历,将步骤(2.1)中存储的路径条件进行约束求解得到可执行路径,得到变量最终的符号执行结果。本发明专利技术能够克服在其他静态测试中不能确定程序中变量的值的问题。

【技术实现步骤摘要】

本专利技术涉及一种改进的基于符号执行的软件静态测试方法及工具,属于软件的静态测试

技术介绍
软件测试技术通常分为静态测试和动态测试。动态测试就是执行程序,再观察其行为是否满足要求。既可由用户直接观察,也可以使用一定的辅助工具。静态测试是不执行程序代码而寻找程序代码中可能存在的缺陷或评估程序代码的过程,程序静态测试的目标不是证明程序完全正确,而是作为动态测试的补充,在程序运行前尽可能多的发现其中隐含的错误,提高程序的可靠性和健壮性,静态测试在更高的抽象层次上对程序的某些属性进行考察,而不是对程序的某一个特定输入的考察。现在国内对于静态测试中的符号执行方法方面的研究并不是很充分,国内比较著名的是北京航空航天大学软件研究所开发的Mfeftx) C/C++, SafePro C/C++提供多选窗口单驱动的用户工作环境,支持若干种测试信息的快速关联分析,提供了图文并茂的软件测试结果报告,同时支持静态和动态测试。在这些已有的软件静态测试理论和测试工具中,一般仍然或多或少存在以下不足(1)对符号执行功能模块没有得到充分重视和实现;(2)对隐含的代码错误测试效果不好,如果再次测试将花费大量的人力物力。
技术实现思路
本专利技术目的是针对现有技术存在的缺陷提供一种改进的基于符号执行的软件静态测试方法及工具。本专利技术公布了一种改进的基于符号执行的软件静态测试方法,已经开发包含该方法的面向宿主的软件自动化测试工具。其特征在于包括如下步骤1、第一阶段分析。其中包括1. 1)将被测代码输入测试工具中;1. 2)根据C语言文法自定义一个关键词列表,并对照关键词列表对被测试代码进行词法分析;1. 3)根据C语言文法自定义函数结构模块、构造抽象语法树的生成算法,并对照词法分析的结果,利用“自下而上”的方法(即从从语法树的末端开始,步步向上“归约”), 对被测代码进行语法分析,最终得到程序静态分析树(PAT)作为一个中间表示形式,并且利用文档进行存储;2、第二阶段分析。其中包括2. 1)根据第一阶段分析步骤(1. 2)中的词法分析结果,以特定结构体的形式(包含变量名称及变量的符号值)建立变量列表、以链表的形式存储当前路径条件(便于回溯);2. 2)根据第一阶段分析步骤(1. 3)中的语法分析结果,对程序静态分析树进行中序遍历,同时对变量列表中变量的符号值进行替换;将步骤(2. 1)中存储的路径条件进行约束求解得到可执行路径,并且依照算法得到每个变量最终的符号执行结果,最终以文本的格式保存。本专利技术出了可以进行传统符号执行得到相应的结果之外,还可以根据C语言的文法,对于程序中潜在的错误进行报错,例如whileO语句中若循环条件为空,则会自动报错,因此通用性比较强的。附图说明图1:本专利技术工作流程图;图2 本专利技术语法分析过程流程图;图3 本专利技术符号执行过程流程具体实施例方式下面结合附图1、图2、图3对本专利技术的工作流程进行详细说明。基于符号执行的软件静态测试方法,有如下软件测试步骤1、第一阶段分析,具体步骤如图2所示,其中包括1. 1)将被测代码输入测试工具中;1. 2)根据C语言文法自定义一个关键词列表,并对照关键词列表对被测试代码进行词法分析;1. 3)根据C语言文法自定义函数结构模块、构造抽象语法树的生成算法,并对照词法分析的结果,利用“自下而上”的方法(即从从语法树的末端开始,步步向上“归约”), 对被测代码进行语法分析,最终得到程序静态分析树(PAT)作为一个中间表示形式,并且最终用树形控件进行显示;其中,步骤(1.2)进一步包括(1.2.1)建立一个关键词列表,该关键词列表包含有C语言文法中的大部分关键词;(1.2. 2)将被测代码保存于临时文件中,以读文件的方式,将被测代码读入词法分析模块;(1. 2. 3)根据所读出字符的不同类型,进入相应的扫描状态(例如若读取字符为a-z或A-Z中的一个,则进入INID扫描状态,继续读取下一个字符,以此类推直至遇到终结符为止);(1.2. 4)若词法分析的返回值是关键词列表中的成员,则调用替换函数返回相应的替换值;词法分析直至文件中内容被全部读完方才结束;其中,步骤(1.3)进一步包括(1. 3.1)根据C语言的文法,定义相应的函数模块(顺序模块、循环模块、分支模块等),比如在程序中预先定义if模块iretatement、 while 模块 WhileStatement、Switch. . . case 模块 SwitchStatement 等等;(L 3. 2)根据词法分析的返回值,判断属于已定义的函数模块中的那一项,并进入相应的静态语法树构造函数(以下步骤都是以if模块iretatement为例);(1. 3. 3)读取if语句的条件,并且判断是否有合取范式(CNF)、析取范式(DNF),按照设计沿着函数嵌套调用,此过程依次为 Boolean () - > T2 () - > F2 (),在函数F2中我们可以得到具体的条件约束符(大于、小于、等于等等),并且创建相应的抽象语法树Ftree然后将F2 ()的抽象语法树Ftree作为返回值返回给T2()函数,并且判断条件中是否存在合取范式(CNF)。若存在合取关系,则首先创建 “and”类型的抽象语法树Ttree (这里将之前返回的Ftree作为其左节点),将同时再次调用 F2 0返回下一棵抽象语法树;若不存在合取关系,则直接将抽象语法树Ftree作为T2 0函数的返回值,返回给BooleanO函数,并且判断若条件中是否存在析取范式(DNF),若不存在析取关系,则直接返回Ftree作为最终的描述if模块中条件部分的语法树;若存在析取关系,则首先创建“or”类型的抽象语法树Booltree,将T2 0函数返回的语法树作为其左节点,并且再次调用T20- > F2 0,返回下一棵抽象语法树作为其右节点,依次类推,最终可以规约出一颗总的抽象语法树B00Itree来完成将if模块中条件部分进行正确描述;采用相类似的函数嵌套调用的语句块,我们可以顺利地读取满足if条件后的代码段(即所谓的 then子抽象语法树),并且建立相应的抽象语法子树,对其进行正确描述;同理可以得到不满足if条件的代码块(即else子抽象语法树),也可以为空;(1.3. 4)建立If^tatement模块抽象语法树,并且将通过(1. 3. 2)建立的抽象语法子树作为其左节点,将通过(1. 3. 3)建立的抽象语法子树作为其右节点;(1. 3. 5)将被测代码中所有的抽象语法子树(可能包含顺序模块、循环模块、分支模块等)通过C语言语法进行整合,最终利用“自下而上”的语法分析方法(即从从语法树的末端开始,步步向上“归约”)生成一颗总的抽象语法树(PAT);2、第二阶段分析。具体步骤如图3所示,其中包括2. 1)根据第一阶段分析步骤(1. 2)中的词法分析结果,建立变量列表(包含变量名称及变量的符号值)、以链表的形式存储当前路径条件(便于回溯);2. 2)根据第一阶段分析步骤(1. 3)中的语法分析结果,对程序静态分析树进行遍历,同时对变量列表中变量的符号值进行替换;依照程序的可执行路径得到每个变量最终的符号执行结果,最终可以与预期的结果进行比较。其中步骤(2.本文档来自技高网...

【技术保护点】
1.一种改进的基于符号执行的软件静态测试方法及工具,已经开发包含该方法的面向宿主的软件自动化测试工具,其特征在于包括如下步骤:1、第一阶段分析。其中包括:1.1)将被测代码输入测试工具中;1.2)根据C语言文法自定义一个关键词列表,并对照关键词列表对被测试代码进行词法分析;1.3)根据C语言文法自定义函数结构模块、构造抽象语法树的生成算法,并对照词法分析的结果,利用“自下而上”的方法(即从从语法树的末端开始,步步向上“归约”),对被测代码进行语法分析,最终得到程序静态分析树(PAT)作为一个中间表示形式,并且利用文档进行存储,且利用树型控件进行显示;2、第二阶段分析。其中包括:2.1)根据第一阶段分析步骤(1.2)中的词法分析结果,以特定结构体的形式(包含变量名称及变量的符号值)建立变量列表、以链表的形式存储当前路径条件(便于回溯);2.2)根据第一阶段分析步骤(1.3)中的语法分析结果,对程序静态分析树进行中序遍历,同时对变量列表中变量的符号值进行替换;将步骤(2.1)中存储的路径条件进行约束求解得到可执行路径,并且依照算法得到每个变量最终的符号执行结果,最终以文本的格式保存。

【技术特征摘要】
1. 一种改进的基于符号执行的软件静态测试方法及工具,已经开发包含该方法的面向宿主的软件自动化测试工具,其特征在于包括如下步骤1、第一阶段分析。其中包括1.1)将被测代码输入测试工具中;1. 2)根据C语言文法自定义一个关键词列表,并对照关键词列表对被测试代码进行词法分析;1.3)根据C语言文法自定义函数结构模块、构造抽象语法树的生成算法,并对照词法分析的结果,利用“自下而上”的方法(即从从语法树的末端开始,步步向上“归约”),对被测代码进行语法分析,最终得到程序静态分析树(PAT)作为一个中间表示形式,并且利用文档进行存储,且利用树型控件进行显示;2、第二阶段分析。其中包括2. 1)...

【专利技术属性】
技术研发人员:刘久富娄坚波李金奎王伟苏青琴陈魁
申请(专利权)人:南京航空航天大学
类型:发明
国别省市:84

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

1