CN102262580A - 一种改进的基于符号执行的软件静态测试方法及工具 - Google Patents
一种改进的基于符号执行的软件静态测试方法及工具 Download PDFInfo
- Publication number
- CN102262580A CN102262580A CN2010101801297A CN201010180129A CN102262580A CN 102262580 A CN102262580 A CN 102262580A CN 2010101801297 A CN2010101801297 A CN 2010101801297A CN 201010180129 A CN201010180129 A CN 201010180129A CN 102262580 A CN102262580 A CN 102262580A
- Authority
- CN
- China
- Prior art keywords
- variable
- analysis
- static
- symbol
- tree
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明公布了一种改进的基于符号执行的软件静态测试方法及工具,有如下步骤:1、第一阶段分析。其中包括:1.1)将被测代码输入测试工具中;1.2)根据C语言文法自定义一个关键词列表进行词法分析;1.3)根据C语言文法自定义函数结构模块及算法对代码进行语法分析得到程序静态分析树;2、第二阶段分析。其中包括:2.1)根据步骤(1.2)中词法分析结果,以结构体的形式(包含变量名称及变量的符号值)建立变量列表、以链表的形式存储当前路径条件;2.2)根据步骤(1.3)中语法分析结果,对程序静态分析树进行中序遍历,将步骤(2.1)中存储的路径条件进行约束求解得到可执行路径,得到变量最终的符号执行结果。本发明能够克服在其他静态测试中不能确定程序中变量的值的问题。
Description
技术领域
本发明涉及一种改进的基于符号执行的软件静态测试方法及工具,属于软件的静态测试技术领域。
背景技术
软件测试技术通常分为静态测试和动态测试。动态测试就是执行程序,再观察其行为是否满足要求。既可由用户直接观察,也可以使用一定的辅助工具。静态测试是不执行程序代码而寻找程序代码中可能存在的缺陷或评估程序代码的过程,程序静态测试的目标不是证明程序完全正确,而是作为动态测试的补充,在程序运行前尽可能多的发现其中隐含的错误,提高程序的可靠性和健壮性,静态测试在更高的抽象层次上对程序的某些属性进行考察,而不是对程序的某一个特定输入的考察。
现在国内对于静态测试中的符号执行方法方面的研究并不是很充分,国内比较著名的是:北京航空航天大学软件研究所开发的SafePro 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语言的文法,对于程序中潜在的错误进行报错,例如while()语句中若循环条件为空,则会自动报错,因此通用性比较强的。
附图说明
图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模块IFStatement、while模块WhileStatement、Switch...case模块SwitchStatement等等;(1.3.2)根据词法分析的返回值,判断属于已定义的函数模块中的那一项,并进入相应的静态语法树构造函数(以下步骤都是以if模块IFStatement为例);(1.3.3)读取if语句的条件,并且判断是否有合取范式(CNF)、析取范式(DNF),按照设计沿着函数嵌套调用,此过程依次为Boolean()->T2()->F2(),在函数F2中我们可以得到具体的条件约束符(大于、小于、等于等等),并且创建相应的抽象语法树Ftree然后将F2()的抽象语法树Ftree作为返回值返回给T2()函数,并且判断条件中是否存在合取范式(CNF)。若存在合取关系,则首先创建“and”类型的抽象语法树Ttree(这里将之前返回的Ftree作为其左节点),将同时再次调用F2()返回下一棵抽象语法树;若不存在合取关系,则直接将抽象语法树Ftree作为T2()函数的返回值,返回给Boolean()函数,并且判断若条件中是否存在析取范式(DNF),若不存在析取关系,则直接返回Ftree作为最终的描述if模块中条件部分的语法树;若存在析取关系,则首先创建“or”类型的抽象语法树Booltree,将T2()函数返回的语法树作为其左节点,并且再次调用T2()->F2(),返回下一棵抽象语法树作为其右节点,依次类推,最终可以规约出一颗总的抽象语法树Booltree来完成将if模块中条件部分进行正确描述;采用相类似的函数嵌套调用的语句块,我们可以顺利地读取满足if条件后的代码段(即所谓的then子抽象语法树),并且建立相应的抽象语法子树,对其进行正确描述;同理可以得到不满足if条件的代码块(即else子抽象语法树),也可以为空;(1.3.4)建立IfStatement模块抽象语法树,并且将通过(1.3.2)建立的抽象语法子树作为其左节点,将通过(1.3.3)建立的抽象语法子树作为其右节点;(1.3.5)将被测代码中所有的抽象语法子树(可能包含顺序模块、循环模块、分支模块等)通过C语言语法进行整合,最终利用“自下而上”的语法分析方法(即从从语法树的末端开始,步步向上“归约”)生成一颗总的抽象语法树(PAT);
2、第二阶段分析。具体步骤如图3所示,其中包括:
2.1)根据第一阶段分析步骤(1.2)中的词法分析结果,建立变量列表(包含变量名称及变量的符号值)、以链表的形式存储当前路径条件(便于回溯);
2.2)根据第一阶段分析步骤(1.3)中的语法分析结果,对程序静态分析树进行遍历,同时对变量列表中变量的符号值进行替换;依照程序的可执行路径得到每个变量最终的符号执行结果,最终可以与预期的结果进行比较。
其中步骤(2.1)进一步包括:(2.1.1)通过第一阶段分析步骤(1.2)中的词法分析的返回值建立变量列表SymStack(用栈的方式进行存储),我们知道C语言中变量的类型一般包括:char(字符型),double(双精度),float(单精度),int(整形),long(长整形)等,这里我们通过词法分析返回的单词符号(根据C语言中定义变量时,先定义变量的类型这一语法来查找到所有的变量)建立变量列表SymStack,变量列表包括变量名和变量的符号值(初始化变量的符号值时,默认为与变量名相同);(2.1.2)通过第一阶段分析步骤(1.2)中的词法分析的结果存储当前的路径条件(使用了一个用链表表示的栈cur_pc来存储,链表的节点是一个转换条件,条件之间是合取关系);
其中步骤(2.2)进一步包括:(2.2.1)通过第一阶段分析步骤(1.3)得到建立的抽象语法子树,利用中根遍历的方法对其进行遍历(每当遍历到一个变量结点时,在SymStack表中查找相应的变量名,并将找到的变量相应的符号值赋给语句中各个变量,对其所得到的符号表达式进行运算,得到了执行赋值语句后的变量的符号值);(2.2.2)通过第二阶段步骤(2.1)得到当前的路径条件,并且求解工具lp_solve对于路径约束条件进行求解,来判断是否为可执行路径),之后将变量列表SymStack中属于可执行路径的变量赋值记录进行处理(即将该节点进行入栈处理),以此类推,依照程序的可执行路径得到每个变量最终的符号执行结果,可以通过与预期结果的比较来验证本符号执行工具的可靠性。
3、优势与创新
本发明对现有技术有以下的改进和创新:
(1)根据本发明的技术,我们已经开发了基于符号执行的软件静态测试工具;
(2)通用性强,对于以C语言编写的代码有具有一定的适用性;
(3)根据C语言的文法,对于程序中潜在的错误进行报错,可以说具备了小型编译器的一些特点;
(4)利用约束求解工具完成了对于可执行路径的自动判别,从而可以最终得到程序按可执行路径运行后的符号执行结果。
Claims (2)
1.一种改进的基于符号执行的软件静态测试方法及工具,已经开发包含该方法的面向宿主的软件自动化测试工具,其特征在于包括如下步骤:
1、第一阶段分析。其中包括:
1.1)将被测代码输入测试工具中;
1.2)根据C语言文法自定义一个关键词列表,并对照关键词列表对被测试代码进行词法分析;
1.3)根据C语言文法自定义函数结构模块、构造抽象语法树的生成算法,并对照词法分析的结果,利用“自下而上”的方法(即从从语法树的末端开始,步步向上“归约”),对被测代码进行语法分析,最终得到程序静态分析树(PAT)作为一个中间表示形式,并且利用文档进行存储,且利用树型控件进行显示;
2、第二阶段分析。其中包括:
2.1)根据第一阶段分析步骤(1.2)中的词法分析结果,以特定结构体的形式(包含变量名称及变量的符号值)建立变量列表、以链表的形式存储当前路径条件(便于回溯);
2.2)根据第一阶段分析步骤(1.3)中的语法分析结果,对程序静态分析树进行中序遍历,同时对变量列表中变量的符号值进行替换;将步骤(2.1)中存储的路径条件进行约束求解得到可执行路径,并且依照算法得到每个变量最终的符号执行结果,最终以文本的格式保存。
2. 根据权力要求1所述的改进的基于符号执行的软件静态测新技术,其特征在于增加了判断可执行路径的模块(利用了约束求解工具lp_solve对于路径约束条件进行求解,来判断是否为可执行路径)。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010101801297A CN102262580A (zh) | 2010-05-24 | 2010-05-24 | 一种改进的基于符号执行的软件静态测试方法及工具 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010101801297A CN102262580A (zh) | 2010-05-24 | 2010-05-24 | 一种改进的基于符号执行的软件静态测试方法及工具 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102262580A true CN102262580A (zh) | 2011-11-30 |
Family
ID=45009217
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2010101801297A Pending CN102262580A (zh) | 2010-05-24 | 2010-05-24 | 一种改进的基于符号执行的软件静态测试方法及工具 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102262580A (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102681932A (zh) * | 2012-01-19 | 2012-09-19 | 于秀山 | 一种检测软件异常输入处理正确性的方法 |
CN104331359A (zh) * | 2014-11-03 | 2015-02-04 | 大唐移动通信设备有限公司 | 异常信息的记录方法和装置 |
CN104965788A (zh) * | 2015-07-03 | 2015-10-07 | 电子科技大学 | 一种代码静态检测方法 |
CN108874663A (zh) * | 2018-05-24 | 2018-11-23 | 南京大学 | 黑盒故障注入方法和系统及介质设备 |
CN110337642A (zh) * | 2017-02-28 | 2019-10-15 | 搜牌逻有限公司 | 通过使用测试用例来执行测试的方法和装置 |
CN110442527A (zh) * | 2019-08-16 | 2019-11-12 | 扬州大学 | 面向bug报告的自动化修复方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030196191A1 (en) * | 2002-04-16 | 2003-10-16 | Alan Hartman | Recursive use of model based test generation for middlevare validation |
CN101017457A (zh) * | 2007-02-09 | 2007-08-15 | 山东浪潮齐鲁软件产业股份有限公司 | 一种计算机软件的自动化测试方法 |
CN101576850A (zh) * | 2009-06-10 | 2009-11-11 | 南京航空航天大学 | 一种改进的面向宿主的嵌入式软件白盒测试方法 |
-
2010
- 2010-05-24 CN CN2010101801297A patent/CN102262580A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030196191A1 (en) * | 2002-04-16 | 2003-10-16 | Alan Hartman | Recursive use of model based test generation for middlevare validation |
CN101017457A (zh) * | 2007-02-09 | 2007-08-15 | 山东浪潮齐鲁软件产业股份有限公司 | 一种计算机软件的自动化测试方法 |
CN101576850A (zh) * | 2009-06-10 | 2009-11-11 | 南京航空航天大学 | 一种改进的面向宿主的嵌入式软件白盒测试方法 |
Non-Patent Citations (2)
Title |
---|
范逸雪等: "系统级硬件描述语言SpecC词法分析器设计与实现", 《计算机工程与科学》, vol. 30, no. 8, 31 August 2008 (2008-08-31) * |
黄晋: "基于PAT树的符号执行工具的设计与实现", 《中国优秀硕士学位论文全文数据库 信息科技辑》, no. 05, 31 May 2009 (2009-05-31) * |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102681932A (zh) * | 2012-01-19 | 2012-09-19 | 于秀山 | 一种检测软件异常输入处理正确性的方法 |
CN102681932B (zh) * | 2012-01-19 | 2015-04-01 | 于秀山 | 一种检测软件异常输入处理正确性的方法 |
CN104331359A (zh) * | 2014-11-03 | 2015-02-04 | 大唐移动通信设备有限公司 | 异常信息的记录方法和装置 |
CN104331359B (zh) * | 2014-11-03 | 2018-07-31 | 大唐移动通信设备有限公司 | 异常信息的记录方法和装置 |
CN104965788A (zh) * | 2015-07-03 | 2015-10-07 | 电子科技大学 | 一种代码静态检测方法 |
CN104965788B (zh) * | 2015-07-03 | 2017-07-28 | 电子科技大学 | 一种代码静态检测方法 |
CN110337642A (zh) * | 2017-02-28 | 2019-10-15 | 搜牌逻有限公司 | 通过使用测试用例来执行测试的方法和装置 |
CN108874663A (zh) * | 2018-05-24 | 2018-11-23 | 南京大学 | 黑盒故障注入方法和系统及介质设备 |
CN110442527A (zh) * | 2019-08-16 | 2019-11-12 | 扬州大学 | 面向bug报告的自动化修复方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Fantechi et al. | Applications of linguistic techniques for use case analysis | |
CN106227668B (zh) | 数据处理方法和装置 | |
González et al. | Atltest: A white-box test generation approach for ATL transformations | |
CN102262580A (zh) | 一种改进的基于符号执行的软件静态测试方法及工具 | |
CN109086215B (zh) | 一种嵌入式软件单元测试用例生成方法及系统 | |
CN103473171A (zh) | 一种基于函数调用路径的覆盖率动态跟踪方法及装置 | |
CN1908895B (zh) | 验证应用程序全球化问题的系统和方法 | |
CN104298594B (zh) | 一种源代码中值计算错误的自动检测和定位方法 | |
CN105138601A (zh) | 一种支持模糊约束关系的图模式匹配方法 | |
Henry et al. | Succinct representations for abstract interpretation: Combined analysis algorithms and experimental evaluation | |
Tichy et al. | Text to software: developing tools to close the gaps in software engineering | |
Cámara et al. | Synthesis and quantitative verification of tradeoff spaces for families of software systems | |
Ciniselli et al. | Source code recommender systems: The practitioners' perspective | |
Cristiá et al. | Implementing and applying the Stocks-Carrington framework for model-based testing | |
Pan et al. | Class structure refactoring of object-oriented softwares using community detection in dependency networks | |
CN111143228B (zh) | 基于决策表法的测试代码生成方法及装置 | |
CN110309214A (zh) | 一种指令执行方法及其设备、存储介质、服务器 | |
Xiang et al. | Improving the reuse of ScientificWorkflows and their by-products | |
CN116107524A (zh) | 低代码应用日志处理方法、介质、装置和计算设备 | |
Kő et al. | A development method for ontology based business processes | |
Shao et al. | Combining lexical and structural information for static bug localisation | |
Otto et al. | A flow graph based approach for controlled generation of aas digital twin instances for the verification of compliance check tools | |
Morara et al. | Solving XCSP problems by using Gecode | |
Bo et al. | Towards an efficient searching approach of ros message by knowledge graph | |
CN102129406A (zh) | 一种基于条件值的软件静态预测方法及工具 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20111130 |