一种基于函数级选择符号化混合执行的软件自动测试方法技术

技术编号:32553156 阅读:17 留言:0更新日期:2022-03-05 11:53
本发明专利技术公开了一种基于函数级选择符号化混合执行的软件自动测试方法,包括以下步骤:步骤S1.确定软件程序中包含的复杂函数,生成复杂函数集合;步骤S2.使用符号执行方法收集待测软件的路径约束,当遇到属于所述复杂函数集合中的复杂函数F时,跳过复杂函数F的符号执行,并创建符号方法调用表达式F

【技术实现步骤摘要】
一种基于函数级选择符号化混合执行的软件自动测试方法


[0001]本专利技术涉及软件测试
,尤其涉及一种基于函数级选择符号化混合执行的软件自动测试方法。

技术介绍

[0002]随着信息技术的日益发展,软件已渗透入社会发展的各个领域,然而软件开发过程复杂,一旦开发不当就会产生软件漏洞,在软件的使用过程中造成不必要的损失。软件测试是检测软件漏洞的一种主要方法,当前工业界的主流方法还是通过手工设计测试用例来测试软件产品的质量,然而,手工生成测试用例通常效率较低、成本高昂并且容易出错。软件漏洞可以被看作是隐藏在某个条件下的错误语句,为了提升软件测试发现软件漏洞的概率,软件测试致力于为待测程序生成高代码覆盖率的测试用例。基于覆盖率引导的模糊测试Fuzzing与符号执行是目前两种被广泛研究和使用的测试技术。
[0003]模糊测试Fuzzing的方法是在设定初始测试用例后,动态地执行目标软件,并基于覆盖率选择已有测试用例进行随机变异,从而生成新的测试用例,该过程将不断被重复,直到不能覆盖到更多的分支或语句为止,在动态执行测试用例时,如果检测到软件出现异常崩溃,则认为发现了软件漏洞。由于模糊测试采取随机变异,因此难以生成可以直接覆盖到复杂条件的测试用例,往往测试效率比较低。
[0004]符号执行是一种探索程序路径的精确的软件测试方法,符号执行从程序中提取符号路径,并根据每个符号路径的路径条件生成测试用例。符号执行利用约束求解来有效地探索路径,特别是对于概率较低的路径。然而,符号执行常遇到以下问题:一、复杂约束求解的挑战:约束求解是符号执行的基础,符号执行过程中所有的路径约束都会调用约束求解器求解判断路径可达性,当遇到复杂约束求解如程序中存在复杂的非线性条件时,由于有些路径约束体积过大或者求解难度高难以求解,导致对求解器的频繁调用,使得约束求解占用了符号执行的大部分资源消耗甚至导致符号执行失败;二、环境建模问题的挑战:当被分析的程序调用第三方库中的函数,而该库的源代码不可用时,符号执行可能无法探索程序的整个路径空间,手工建模在没有源代码的情况下处理函数调用,但它通常不是自动的,需要大量的人工工作。
[0005]现有的复杂约束求解和环境建模方法可分为两类:上近似方法和下近似方法。上近似方法将复杂的约束简化为简单的约束,例如用线性约束过近似非线性约束,并且为没有源码的函数调用引入新的符号变量;下近似方法通过使用具体值来代替符号值,并使用具体执行来执行函数,而无需源代码,从而简化了复杂的约束。但是无论是上近似方法还是下近似方法都存在着明显的缺陷,上近似方法会使符号执行不精确,并产生错误结果;下近似方法由于采用具体的值或实际执行的方式,会导致路径丢失,即探索程序路径空间不完全。

技术实现思路

[0006]本专利技术要解决的技术问题是克服现有技术的不足,提供一种能更精确、效率更高发现软件漏洞的基于函数级选择符号化混合执行的软件自动测试方法。
[0007]为解决上述技术问题,本专利技术提出的技术方案为:
[0008]一种基于函数级选择符号化混合执行的软件自动测试方法,包括以下步骤:
[0009]步骤S1.确定软件程序中包含的复杂函数,生成复杂函数集合;
[0010]步骤S2.使用符号执行方法收集待测软件的路径约束,当遇到属于所述复杂函数集合中的复杂函数F时,跳过复杂函数F的符号执行,并创建符号方法调用表达式F

用于表示复杂函数F的符号执行,生成含有符号方法调用表达式F

的路径约束;
[0011]步骤S3.将步骤S2中搜集到的全部路径约束划分为包含符号方法调用表达式F

的相关部分约束P1和不包含符号方法调用表达式F

无关部分约束P2,使用求解器求解所述无关部分约束P2中所包含的符号变量的实际值,然后通过模糊测试Fuzzing方法求解P1,产生新的测试用例。
[0012]进一步的,所述步骤S1中所述复杂函数为满足预设复杂函数规则的函数,和/或预设为复杂函数的函数。
[0013]进一步的,所述预设复杂函数规则为:函数结构中包含多重循环或存在非线性运算。
[0014]进一步的,所述步骤S2中所述创建符号方法调用表达式F

用于表示复杂函数F的执行,生成含有符号方法调用表达式F

的路径约束具体为:对复杂函数进行插桩,当条件语句中含有插桩搜集的复杂函数,再实际将符号方法调用表达式F

引入条件语句产生的路径约束。
[0015]进一步的,所述产生的路径约束中还包含引入上下文信息中与复杂函数相关的约束。
[0016]进一步的,所述步骤S3中所述步骤S3中模糊测试Fuzzing方法步骤包括:构造各符号变量之间的依赖关系树,按照所述依赖关系树中各符号变量之间的依赖顺序依次对符号表达式进行模糊测试Fuzzing。
[0017]进一步的,步骤S3中所述求解器为SMT求解器。
[0018]本专利技术还提出一种基于函数级选择符号化混合执行的软件自动测试装置,包括:
[0019]复杂函数确定模块,用于确定软件程序中包含的复杂函数,生成复杂函数集合;
[0020]路径约束搜集模块,用于使用符号执行方法收集待测软件的路径约束,当遇到属于所述复杂函数集合中的复杂函数F时,跳过复杂函数F的符号执行,并创建符号方法调用表达式F

用于表示复杂函数F的符号执行,生成含有符号方法调用表达式F

的路径约束;
[0021]求解路径模块,用于将所述路径约束搜集模块搜集到的全部路径约束划分为包含符号方法调用表达式F

的相关部分约束P1和不包含符号方法调用表达式F

无关部分约束P2,使用求解器求解所述无关部分约束P2中所包含的符号变量的实际值,然后通过模糊测试Fuzzing方法求解P1,产生新的测试用例。
[0022]本专利技术还提出一种计算机装置,包括处理器以及存储器,所述存储器用于存储计算机程序,所述处理器用于执行所述计算机程序以执行上述所述方法。
[0023]本专利技术还提出一种存储有计算机程序的计算机可读存储介质,所述计算机程序执
行时实现上述所述的方法。
[0024]与现有技术相比,本专利技术的优点在于:
[0025](1)在软件测试中采用了模糊测试Fuzzing和混合符号执行相结合的方式,并且在符号执行过程中,通过引入符号方法调用表达式有效避免复杂函数的执行,一方面减少路径约束建模的难度,另一方面通过对复杂函数在路径约束中进行描述,提高了约束求解的效率,避免了符号执行失败,保障了符号执行精确,并有效提升了符号执行的效率,从而达到更精确、效率更高发现软件漏洞的软件测试效果。
[0026](2)在路径约束求解过程中,对路径约束中与符号方法调用表达式相关的部分进行分割,通过低代价的Fuzzing替代高代价的求解器求解,降低了约束求解的本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于函数级选择符号化混合执行的软件自动测试方法,其特征在于,包括以下步骤:步骤S1.确定软件程序中包含的复杂函数,生成复杂函数集合;步骤S2.使用符号执行方法收集待测软件的路径约束,当遇到属于所述复杂函数集合中的复杂函数F时,跳过复杂函数F的符号执行,并创建符号方法调用表达式F

用于表示复杂函数F的符号执行,生成含有符号方法调用表达式F

的路径约束;步骤S3.将步骤S2中搜集到的全部路径约束划分为包含符号方法调用表达式F

的相关部分约束P1和不包含符号方法调用表达式F

无关部分约束P2,使用求解器求解所述无关部分约束P2中所包含的符号变量的实际值,然后通过模糊测试Fuzzing方法求解所述相关部分约束P1,产生新的测试用例。2.根据权利要求1所述的基于函数级选择符号化混合执行的软件自动测试方法,其特征在于,所述步骤S1中复杂函数为满足预设复杂函数规则的函数,和/或预设为复杂函数的函数。3.根据权利要求2所述的基于函数级选择符号化混合执行的软件自动测试方法,其特征在于,所述预设复杂函数规则为:函数结构中包含多重循环或存在非线性运算。4.根据权利要求1所述的基于函数级选择符号化混合执行的软件自动测试方法,其特征在于,所述步骤S2中所述创建符号方法调用表达式F

用于表示复杂函数F的符号执行,生成含有符号方法调用表达式F

的路径约束具体为:对复杂函数进行插桩,当条件语句中含有插桩搜集的复杂函数,再将所述符号方法调用表达式F

引入条件语句以产生路径约束。5.根据权利要求4所述的基于函数级选择符号化混合执行的软件自动测试方法,其特征在于,所述产生的路径约束中还包含上下文信息中与复杂函数相...

【专利技术属性】
技术研发人员:陈振邦王戟张国锋帅子琦毛晓光董威李姗姗文艳军陈立前刘万伟尹良泽
申请(专利权)人:中国人民解放军国防科技大学
类型:发明
国别省市:

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

1