一种基于约束分割的混合执行测试优化方法及装置制造方法及图纸

技术编号:34034978 阅读:16 留言:0更新日期:2022-07-06 12:04
本发明专利技术公开一种基于约束分割的混合执行测试优化方法及装置,步骤包括:根据约束求解器提供的解构造一个初始输入或随机生成一个初始输入,以对被测试程序做具体执行;沿着程序输入执行的具体路径做符号执行,收集路径约束使用搜索策略生成待求解的新约束并构造变量关系图,分割变量关系图得到子图集合;基于子图集合生成子约束集合,对每个子约束做超时预测,生成预测为不超时的子约束集合和预测为超时的子约束集合;使用SMT求解方法求解不超时的子约束集合,使用随机生成方法求解超时的子约束集合,得到原始约束的解,根据求解结果生成新的程序输入。本发明专利技术以更细粒度的方式结合了随机测试和符号执行方法,能够实现混合执行测试效率的提升。行测试效率的提升。行测试效率的提升。

A hybrid execution test optimization method and device based on constraint segmentation

【技术实现步骤摘要】
一种基于约束分割的混合执行测试优化方法及装置


[0001]本专利技术涉及程序测试中混合执行测试
,尤其涉及一种基于约束分割的混合执行测试优化方法及其装置。

技术介绍

[0002]程序测试是一种通过构造测试用例、执行测试用例来挖掘程序中漏洞的行为,其目的在于提高程序的质量与可靠性。作为传统程序开发流程中的关键环节,程序开发成本中的相当一部分都花在了程序测试上,工业界每年都需要向测试环节投入大量的资金和人力。程序测试中最大的挑战在于如何高效生成高质量的测试用例,即能够实现高覆盖率的测试用例。目前,测试用例一般都是由人工生成的,存在人工成本高、生成效率低和测试用例质量不高的问题。为了解决这个问题,一个有效的办法是程序自动测试,通过程序手段实现测试用例的自动化生成。目前,已经存在一些有效的程序自动测试技术,例如随机测试、符号执行和混合执行测试。
[0003]随机测试通过随机的方式来生成程序的输入,是一种最直接的自动化测试手段。随机测试生成测试用例的代价很低,可以在短时间内生成大量的测试用例。然而,这些测试用例往往具有相似度高的缺点,很难覆盖到程序中不同的区域。符号执行是与随机测试相对的一种自动化测试手段,通过符号化程序输入后模拟程序的执行,在执行的过程中收集路径约束,求解约束后就可以得到程序的具体输入。符号执行可以有效地覆盖程序中的不同区域,但是受限于约束求解的高昂成本。一般来说,符号执行过程中需要利用SMT求解器求解路径约束以生成下一个输入,即符号执行中的约束求解问题都是SMT求解问题,而目前的SMT求解器在求解数组、浮点等理论的SMT公式时都存在严重的性能问题,严重制约了符号执行的性能。随机测试和符号执行属于两种互补的测试技术,如果能够充分结合随机测试和符号执行两种方式,则可以结合两者的优点同时弥补各自的缺点,形成一种新的混合测试方式。
[0004]有从业者提出结合使用随机测试和符号执行两种方式,以期望形成一种结合两者优势的混合测试方式,但是该类结合使用机测试和符号执行的混合测试通常仅是粗粒度的结合,其中的随机测试与符号执行是分别独立执行的,无法充分利用各自执行过程中产生的信息来提高各自的执行效率。如现有技术中结合随机测试和符号执行的一般测试流程为:随机生成被测程序的初始输入,基于这个输入被测程序可以做具体执行,与此同时沿着具体执行的路径做符号执行,并收集路径约束;在当前的路径约束收集完毕之后,根据某种搜索策略对路径约束进行反转生成新的约束,求解后就可以得到新的程序输入;如果新的约束是不可满足的,或者当路径分歧发生时,下一个输入仍然是通过随机测试生成的,即每一个程序输入中的具体值要么完全由随机测试方法随机生成,要么完全由符号执行中的约束求解生成,随机测试与符号执行分别独立执行。而随机测试和符号执行测试独立执行的粗粒度结合方式,仍然无法完全解决SMT求解器在求解数组、浮点等理论的SMT公式时都存在严重的性能问题,因而仍然会存在约束求解效率不高问题。
[0005]综上,现有技术中测试方式,即便是结合随机测试与符号执行的混合执行方式,仍然深度依赖于约束求解的效率,存在求解效率低的问题。而对于真实程序而言,程序中往往广泛使用了复杂的数据结构和操作,使用传统测试方法对该类具有复杂结构、操作的程序进行分析会生成复杂的路径约束,仍然会导致约束求解十分缓慢,带来严重的效率问题。

技术实现思路

[0006]本专利技术要解决的技术问题就在于:针对现有技术存在的技术问题,本专利技术提供一种能够以更细的粒度充分结合随机测试和符号执行方法,提高高质量测试用例的生成效率,从而提高混合执行测试效率的基于约束分割的混合执行测试优化方法及其装置。
[0007]为解决上述技术问题,本专利技术提出的技术方案为:
[0008]一种基于约束分割的混合执行测试优化方法,包括:
[0009]步骤S1.程序输入:根据约束求解器提供的解构造一个初始的程序输入,或随机生成一个初始的程序输入,输入至被测试程序以对被测试程序做具体执行;
[0010]步骤S2.约束收集:沿着程序输入执行的具体路径做符号执行,收集路径约束并使用预设搜索策略生成待求解的新约束;
[0011]步骤S3.约束分割:为所述待求解的新约束构造变量关系图,并对所述变量关系图进行分割,得到变量关系图的子图集合;基于所述子图集合生成对应的子约束集合,对每个子约束做超时预测,生成预测为不超时的子约束集合和预测为超时的子约束集合;
[0012]步骤S4.约束求解:使用SMT求解方法求解所述不超时的子约束集合,以及使用随机生成方法求解所述超时的子约束集合,得到原始约束的解,根据求解结果生成新的程序输入。
[0013]进一步的,所述预设搜索策略为深度优先搜索策略(DFS)。
[0014]进一步的,所述为所述待求解的新约束构造变量关系图的步骤为:扫描所述新约束中所有原子约束,根据所有原子约束中出现过的变量来设置所述变量关系图的结点,根据变量之间的关联关系设置所述变量关系图的边,根据两个变量同时出现在原子约束里的次数来设置所述变量关系图中边上的权重,其中若两个变量没有同时出现在任何一个原子约束中则配置权重为0。
[0015]进一步的,所述步骤S3中基于聚类的图分割算法对所述变量关系图进行分割。
[0016]进一步的,所述步骤S3中对每个子约束做超时预测的步骤包括:
[0017]步骤S31.离线训练:预先收集SMT公式的基准集,对所述基准集进行训练,训练时每次提取特征向量后判断是否超时并打上标记,训练得到一个词袋模型;
[0018]步骤S32.在线预测:对每个所述子约束,提取所述子约束的特征向量并传给所述词袋模型,由所述词袋模型给出超时与否的预测。
[0019]进一步的,所述步骤S31中提取特征向量的具体步骤为:
[0020]步骤S311.确定词汇集:以所述SMT公式的AST树中所有可能的节点类型作为词汇集;
[0021]步骤S312.词袋初始化:构造一个维度为词汇集大小的向量作为词袋,向量中的每一个元素代表每个节点类型出现的次数,初始状态下,所有节点类型出现的次数都是0;
[0022]步骤S313.词汇统计:遍历所述SMT公式的AST(Abstract Syntax Tree,抽象语法
树)树,计算每个节点类型在树中出现的次数并更新所述向量,最终得到所述特征向量。
[0023]进一步的,所述步骤S4的具体步骤为:
[0024]步骤S41.使用SMT求解所述不超时的子约束集合的第一合取PC
c
,当求解结果是不可满足的或者是未知时,则得到的所述原始约束的求解结果也是不可满足的或者是未知的;否则,当求解结果是可满足的,则得到第一解S
c

[0025]使用随机生成方法求解所述超时的子约束集合的第二合取PC
r
,求解时先判断所述第二合取PC
r
与所述第一合取PC
c
之间是否存在共同变量,本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于约束分割的混合执行测试优化方法,其特征在于,包括:步骤S1.程序输入:根据约束求解器提供的解构造一个初始的程序输入,或随机生成一个初始的程序输入,输入至被测试程序以对被测试程序做具体执行;步骤S2.约束收集:沿着程序输入执行的具体路径做符号执行,收集路径约束并使用预设搜索策略生成待求解的新约束;步骤S3.约束分割:为所述待求解的新约束构造变量关系图,并对所述变量关系图进行分割,得到变量关系图的子图集合;基于所述子图集合生成对应的子约束集合,对每个子约束做超时预测,生成预测为不超时的子约束集合和预测为超时的子约束集合;步骤S4.约束求解:使用SMT求解方法求解所述不超时的子约束集合,以及使用随机生成方法求解所述超时的子约束集合,得到原始约束的解,以根据求解结果生成新的程序输入。2.根据权利要求1所述的基于约束分割的混合执行测试优化方法,其特征在于,所述预设搜索策略为深度优先搜索策略DFS。3.根据权利要求1所述的基于约束分割的混合执行测试优化方法,其特征在于,所述步骤S3中为所述待求解的新约束构造变量关系图的步骤为:扫描所述新约束中所有原子约束,根据所有原子约束中出现过的变量设置所述变量关系图的结点,根据变量之间的关联关系设置所述变量关系图的边,根据两个变量同时出现在原子约束里的次数设置所述变量关系图中边上的权重,其中若两个变量没有同时出现在任何一个原子约束中则配置权重为0。4.根据权利要求1所述的基于约束分割的混合执行测试优化方法,其特征在于,所述步骤S3中基于聚类的图分割算法对所述变量关系图进行分割。5.根据权利要求1

4中任一项所述的基于约束分割的混合执行测试优化方法,其特征在于,所述步骤S3中对每个子约束做超时预测的步骤包括:步骤S31.离线训练:预先收集SMT公式的基准集,对所述基准集进行训练,训练时每次提取特征向量后判断是否超时并打上标记,训练得到一个词袋模型;步骤S32.在线预测:对每个所述子约束,提取所述子约束的特征向量并传给所述词袋模型,由所述词袋模型给出超时与否的预测。6.根据权利要求5所述的基于约束分割的混合执行测试优化方法,其特征在于,所述步骤S31中提取特征向量的具体步骤为:步骤S311.确定词汇集:以所述SMT公式的AST树中所有可能的节点类型作为词汇集;步骤S312.词袋初始化:构造一个维度为词汇集大小的向量作为词袋,向量中的每一个元素代表每个节点类型出现的次数,初始状态下,所有节点类型出现的次数都是0;步骤S313.词汇统计:遍历所述SMT公式的AST树,计算每个节点类型在树中出现的次数并...

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

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

1