掌桥专利:专业的专利平台
掌桥专利
首页

一种历史版本信息制导的模糊测试方法

文献发布时间:2023-06-19 16:06:26



技术领域

本发明涉及软件测试验证技术领域,尤其涉及一种历史版本信息制导的模糊测试方法。

背景技术

近年来,随着软件种类的增多,软件的功能越来越强,其复杂度和规模也越来越大,软件的安全性问题也越来越引起人们的关注。模糊测试是一种通过向目标系统提供非预期输入并监视异常结果来发现软件漏洞和严重故障的方法,它是一种介于完全的手工渗透测试与完全的自动化测试之间的安全性测试类型。它充分利用了机器的能力:随机生成和发送数据,同时也尝试将安全专家在安全性方面的经验引入进来。

一次典型的模糊测试包含以下过程:确定测试目标、确定目标程序的预期输入、生成测试用例、执行测试用例、异常监视、异常分析与漏洞确认。在模糊测试的过程中,测试用例的执行、异常监视这两个过程完全可以自动化实现。通过模糊测试技术发现的漏洞一般是真正存在的,即模糊测试技术误报率低,另外,模糊测试不需要对目标程序的源代码或二进制程序进行深入的分析,从而节省了开销。

模糊测试实际上是一个搜索高质量变异测试用例集合的过程,它是对预先准备好的“种子”(初始测试用例)进行变异,从而生成新的输入,使对软件的全面测试成为可能。然而,由于“种子”的复杂性,可能要经过很多次的变异才能获得高质量的测试用例。种子必须通过或多或少的随机搜索变异过程生成新的测试用例,例如随机增长和随机位翻转,由于搜索变异空间大,所以在构造测试用例的过程中无法估算代码覆盖率是模糊测试技术的重大缺陷之一。代码覆盖率常常被拿来作为衡量测试用例好坏的指标,但是变异的随机性,使代码覆盖变得盲目,导致大大降低了代码覆盖率。除此之外,模糊测试技术可以生成数量巨大的测试用例,但巨大的测试用例的数量也带来了执行效率低的缺点。

发明内容

为解决现有的技术问题,本发明提供了一种历史版本信息制导的模糊测试方法。

本发明的具体内容如下:一种历史版本信息制导的模糊测试方法,输入为不同版本程序,包括历史版本程序V

步骤1,对所提供历史版本程序和待测版本程序进行可疑路径分析,输出可疑路径集;

步骤2,执行待测版本程序,对初始测试用例进行适应度计算;

步骤3,以测试用例集里面的每条测试用例对应的适应度为基础,通过交叉变异生成新的测试用例集实施模糊测试。

进一步的,步骤1中,对所提供历史版本程序和待测版本程序进行可疑路径分析包括如下步骤:

步骤1-1:对历史版本程序V

步骤1-2:构建V

步骤1-3:结合可疑位置和程序流程图,根据步骤1-1的变更影响分析,将其映射到程序流程图中,从而获取可疑路径,形成输出可疑路径集S={s

进一步的,步骤2中,对初始测试用例进行适应度计算包括如下步骤:

步骤2-1:将上一步得到的可疑路径集S和初始测试用例集T作为输入;

步骤2-2:执行待测版本程序V

步骤2-3:计算p

步骤2-4:根据相似度,计算p

步骤2-5:得到每个测试用例的适应度。

进一步的,初始测试用例集为T={t

其中,∣p

在分别计算出p

Fitness(p

进一步的,步骤3包括:

步骤3-1:起始状态,输入上一部分的测试用例集合T并计算T集合里每条测试用例t

步骤3-2:对测试用例集T中的适应度进行排序,选取前k个较高适应度对应的测试用例准备进行交叉变异;

步骤3-3:对每条测试用进行交叉操作,在测试用例中随机选取一个或多个交叉点,将测试用例分成两个或多个部分进行互换;

步骤3-4:对交叉之后的测试用例进行变异,变异分为两个阶段,第一阶段进行位翻转、算术运算和内容替换,第二阶段进行将随机字节设置为随机值、删除或克隆输入的子序列变异;

步骤3-5:输出交叉变异之后生成的新的测试用例,存入集合T’中;

步骤3-6:判断k个测试用例是否已经交叉变异完成,若未完成,则继续对测试用例进行交叉变异,若已经完成,则重复执行步骤2,将T’作为测试用例集输入。

本发明的有益效果:本发明提出通过版本差异制导去生成缺陷检测效率更高的测试用例,减少产生无用的测试用例;本发明不对变化版本的程序直接进行模糊测试,也不需要结合符号执行生成新的测试用例,而是提供变更影响分析工具生成程序流程图去获取可疑路径集,是一种可以生成有效测用例的方法;本发明通过版本间的差异去制导计算适应度,挑选适应度较高的测试用例,并基于适应度高的测试用例通过交叉变异生成测试用例,可以更有效地覆盖可疑路径集。

附图说明

下面结合附图对本发明的具体实施方式做进一步阐明。

图1为本发明的历史版本信息制导的模糊测试方法的示意图;

图2为本发明的可疑路径分析示意图;

图3为本发明的测试用例的执行和适应度的计算示意图;

图4为本发明的单点交叉的示意图;

图5为本发明的新的测试用例的生成的示意图。

具体实施方式

结合图1-图5,本发明的历史版本信息制导的模糊测试方法需要具备被测程序历史版本程序V

依次按照图1的流程,对所提供历史版本程序和待测版本程序进行差异比较,得到变更影响路径集,即可疑路径集;其次,执行待测版本程序,对初始测试用例进行适应度计算;然后,对于较高适应度的测试用例给予其更多的机会进行交叉变异生成新的测试用例,再对此测试用例集进行上一步骤的适应度计算操作,如此循环直到达到停止条件,具体步骤如下:

1、可疑路径分析

通过分析历史版本程序和当前待测程序,比较程序变更前后的差异,将差异映射到程序流程图上,再通过变更影响分析,即可得到变更影响路径集,即可疑路径集。

对比历史版本程序和新版本程序,分析两者间的差异和联系,结合程序流程图,通过变更影响分析便可以得到新版本中的变更影响路径集,以指导新版本程序生成更有效的测试用例进行模糊测试。

定义一个二元组(N,E)来表示程序流程图,其中N={n

如图2所示,对历史版本程序和待测程序进行变更影响分析的步骤如下:

步骤1-1:起始状态,输入历史版本程序V

步骤1-2:对历史版本程序V

步骤1-3:对待测版本程序V

步骤1-4:通过可疑位置和程序流程图,通过变更影响分析获取可疑路径;

步骤1-5:通过对路径的分析,输出可疑路径集S={s

2、测试用例执行及适应度计算

设初始测试用例集为T={t

Fitness(p

公式(1)中,∣p

如图3所示,测试用例的执行和适应度的计算的步骤如下:

步骤2-1:起始状态,输入上一步得到的可疑路径集S和初始测试用例集T;

步骤2-2:判断T中的测试用例是否执行完,若未执行完,使用待测版本程序V

步骤2-3:判断是否计算完p

步骤2-4:利用公式(2)计算p

步骤2-5:重复执行2-2。

步骤2-6:在没有达到停止条件的情况下执行下一部分的操作,若达到停止条件,则结束。

3、测试用例生成

通过上一步操作得到的测试用例集T里面的每条测试用例对应的适应度之后,便可以选择相应的测试用例进行交叉变异生成新的测试用例集T’。

交叉原意是指在减数分裂时期同源染色体交叉在一起的现象。在本发明中,将从测试用例个体中随机选取一个或多个交叉点,然后将测试用例分为两个或多个部分,再进行互换操作。

图4展示了两个列表进行单点交叉的过程。首先,在种群内生成一个交叉点cpoint,并新建两个暂存器temporary1和temporary2;然后,把第i个染色体中0到cpoint个基因存放到第一个暂存器temporary1中,再把第i+1个染色体中cpoint以后的基因补充到temporary1中;同理,把第i+1个染色体的前0到cpoint个基因存放到第二个暂存器temporary2中,再把第i个染色体的cpoint以后的基因补充到temporary2里;最后,把交叉完成的染色体内容赋值给第i个染色体和第i+1个染色体,从而完成交叉的过程。

变异在生物学中一般指广泛存在于正常人群中的各种染色体发生微小变异。在本发明中,测试用例有一定概率会发生基因变异,这个操作是基于概率的,这个概率一般称为变异概率。可对于测试用例中的每一位数,若满足变异概率,则将该位取反,否则该位不变。

具体步骤如下:

步骤3-1:起始状态,输入上一部分的测试用例集合T并计算T集合里每条测试用例t

步骤3-2:对测试用例集T中的适应度进行排序,选取前k个较高适应度对应的测试用例准备进行交叉变异;

步骤3-3:对每条测试用进行交叉操作,在测试用例中随机选取一个或多个交叉点,将测试用例分成两个或多个部分进行互换。

步骤3-4:对交叉之后的测试用例进行变异,变异分为两个阶段,第一阶段进行位翻转,算术运算和内容替换等较为简单变异,第二阶段进行将随机字节设置为随机值,删除或克隆输入的子序列等较为复杂的变异。

步骤3-5:输出交叉变异之后生成的新的测试用例,存入集合T’中;

步骤3-6:判断k个测试用例是否已经交叉变异完成,若未完成,则继续对测试用例进行交叉变异,若已经完成,则重复执行步骤2,将T’作为测试用例集输入。

本申请利用历史版本信息制导,为模糊测试技术提供了一种可行且高效的方法,通过差异制导进而提高了模糊测试的效率,更快速的找到程序的漏洞。通过分析历史版本程序和当前待测程序,比较程序变更前后的差异,将差异映射到程序流程图上,再通过变更影响分析,得到可疑路径集;计算每条测试用例的执行路径与可疑路径的相似度,将测试用例对应的最高相似度作为其适应度,选取较高适应度的测试用例进行交叉变异;利用交叉变异,生成适应度更高的测试用例。

本发明的历史版本信息制导的模糊测试方法能够应对一般的模糊测试技术对种子进行变异生成新的测试用例具有一定的随机性和盲目性的问题。对于复杂的测试目标可能要经过很多次的变异才能生成覆盖预期路径的测试用例,高效率生成有效的测试用例。历史版本信息制导的模糊测试技术有效地运用“差异”去制导模糊测试技术生成代码覆盖率高的测试用例,大大增加了模糊测试的效率。

在以上的描述中阐述了很多具体细节以便于充分理解本发明。但是以上描述仅是本发明的较佳实施例而已,本发明能够以很多不同于在此描述的其它方式来实施,因此本发明不受上面公开的具体实施的限制。同时任何熟悉本领域技术人员在不脱离本发明技术方案范围情况下,都可利用上述揭示的方法和技术内容对本发明技术方案做出许多可能的变动和修饰,或修改为等同变化的等效实施例。凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均仍属于本发明技术方案保护的范围内。

技术分类

06120114703660