This invention provides an error detection method for Java program based on dynamic symbol execution, which involves the field of software testing. Firstly, the invention adds integer array and string type, creates array value setting function, and downloads Jconstraints Z3 tool, initializes the code module of the program, and explores the path in the program to use Z3 The solution of the corresponding constraint conditions is solved and the Junit test case is formed according to the string output mode. The invention is a relatively complex program on the GitHub. Jdart supports the symbol of the array variable and string, and can find out the corresponding constraint conditions for the program containing array variables and strings. The solution can generate Junit test cases at the same time. The scope of the solver can be expanded, and the support of SMT solvers such as coral and SMTInterpol will be increased.
【技术实现步骤摘要】
基于动态符号执行的Java程序错误检测方法
本专利技术涉及软件测试领域,尤其是一种程序错误检测方法。
技术介绍
文献“基于动态符号执行的C代码缓冲区溢出检测,北京邮电大学学报,2016,Vol39(z1),p50-54”提出了一个基于底层虚拟机的中间代码的缓冲区溢出检测工具PathChecker。在动态分析阶段,首先结合模糊测试,产生随机输入数据,并实际运行待分析程序,在每次执行过程中PathChecker沿着当前的执行路径进行符号化执行,并不断更新符号状态。在此过程中,若遇到一条缓冲区访问操作指令,则使用SMT求解器检验在当前符号状态下该操作是否一定满足安全性质。符号执行引擎在执行的过程中不断收集路径约束,每次执行结束后,使用深度优先搜索算法对路径约束集合末尾的约束进行取反,以得到一组新的约束。若可以求解,则这组新约束对应于一条未探索的程序路径,否则表示探索不到新的路径,系统将重新产生随机数据。迭代整个过程,直到所有路径分析完毕或者提前设置好的运行时间用尽。此方法能够较好地检测出C代码中的缓冲区溢出漏洞。但是PathChecker的框架不具有可扩展的特性,它所支持的求解器只限定为Z3这一种,导致出现部分约束无法被求解的情况。其次,此方法的检测结果包括了覆盖率和时间,但并未生成具体的测试用例。
技术实现思路
为了克服现有技术的不足,本专利技术提供一种程序错误检测方法。本专利技术解决其技术问题所采用的技术方案包含如下步骤:步骤1:首先,在Jconstraints中添加整数数组和字符串类型,在Jconstraints的ArrayType类文件中提供构造函数、符合字 ...
【技术保护点】
1.一种基于动态符号执行的Java程序错误检测方法,其特征在于包括下述步骤:步骤1:首先,在Jconstraints中添加整数数组和字符串类型,在Jconstraints的ArrayType类文件中提供构造函数、符合字符串输出标准的结果展示函数以及符号数组,创建标准的数组值设置函数;步骤2:从github上下载Jconstraints‑z3工具,之后将Jconstraints‑z3按照工程导入方式导入到开发集成环境eclipse中,Jconstraints‑z3工具为Jdart提供了调用z3求解器的接口;步骤3:通过调用存在于Jdart中的ClassInfo中的符合初始化标准的初始化函数和方法初始化函数,对被测程序代码模块初始化:创建一个新任务,对被测试代码中需要被测试的方法的参数创建符号类型变量,对于Java语言的基本类型变量,直接生成对应的符号变量;对于数组变量和字符串,首先从堆中取出引用值,根据引用值调用堆中get方法得到整型数组或字符数组对象本身,之后调用PrimitiveArrayHandler和StringHandler类中annotateObject方法并根据参数传入方式 ...
【技术特征摘要】
1.一种基于动态符号执行的Java程序错误检测方法,其特征在于包括下述步骤:步骤1:首先,在Jconstraints中添加整数数组和字符串类型,在Jconstraints的ArrayType类文件中提供构造函数、符合字符串输出标准的结果展示函数以及符号数组,创建标准的数组值设置函数;步骤2:从github上下载Jconstraints-z3工具,之后将Jconstraints-z3按照工程导入方式导入到开发集成环境eclipse中,Jconstraints-z3工具为Jdart提供了调用z3求解器的接口;步骤3:通过调用存在于Jdart中的ClassInfo中的符合初始化标准的初始化函数和方法初始化函数,对被测程序代码模块初始化:创建一个新任务,对被测试代码中需要被测试的方法的参数创建符号类型变量,对...
【专利技术属性】
技术研发人员:郑炜,蔺军,曹石超,
申请(专利权)人:西北工业大学,
类型:发明
国别省市:陕西,61
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。