CN114490339B - 一种基于搜索测试的智能种子策略方法 - Google Patents

一种基于搜索测试的智能种子策略方法 Download PDF

Info

Publication number
CN114490339B
CN114490339B CN202111658708.2A CN202111658708A CN114490339B CN 114490339 B CN114490339 B CN 114490339B CN 202111658708 A CN202111658708 A CN 202111658708A CN 114490339 B CN114490339 B CN 114490339B
Authority
CN
China
Prior art keywords
branch
seed
target
instruction
ins
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.)
Active
Application number
CN202111658708.2A
Other languages
English (en)
Other versions
CN114490339A (zh
Inventor
冯志勇
程燕
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tianjin University
Original Assignee
Tianjin University
Filing date
Publication date
Application filed by Tianjin University filed Critical Tianjin University
Priority to CN202111658708.2A priority Critical patent/CN114490339B/zh
Publication of CN114490339A publication Critical patent/CN114490339A/zh
Application granted granted Critical
Publication of CN114490339B publication Critical patent/CN114490339B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Abstract

本发明涉及一种基于搜索测试的智能种子策略方法,包括如下流程:1)对目标分支进行静态分析;2)将目标方法放入工具中进行测试运行,动态构建基于分支的常量池;3)根据自适应采样为种子分支提供最佳种子。本发明的智能种子策略方法在平均分支覆盖率和平均使用时间上的表现均优于目前最好的种子策略,可以有效提高测试效率。

Description

一种基于搜索测试的智能种子策略方法
技术领域
本发明属于计算机软件测试技术领域,涉及基于搜索的软件测试技术的效率改进,特别涉及一种基于搜索测试的智能种子策略方法。
背景技术
随着互联网技术的迅速发展,互联网媒体成为一种新兴传播形式,传统媒介工具如报纸、电视、广播等的使用逐年下降,取而代之的是基于移动设备产生的媒介软件,例如微信、微博等等。同时,随着大数据、云计算以及5G等信息技术的发展,实时流媒体软件的需求越来越多,短时间内涌现出大量的软件。在软件的快速迭代过程中,软件测试是保证软件质量和可靠性的重要手段。合适的测试用例可以帮助测试人员发现并定位被测程序中的漏洞,以分支覆盖作为覆盖标准,覆盖率更高的测试用例更有可能发现错误。
目前,自动生成测试用例的技术包括随机测试、符号执行、基于模型的测试和基于搜索的软件测试(Search-based Software Testing,SBST)。与其他测试技术相比较,SBST在循环结构、库调用甚至网络通信方面都有很好的表现并且广泛应用于许多测试生成器Fuzzing中,同时,SBST将测试生成问题转化为测试优化问题,在解空间中使用启发式算法,并以适应度函数为指导搜索最优解。
由于SBST测试技术在效率和适用性方面存在的局限性,SBST在自动生成测试用例的问题上没有被广泛使用。影响SBST效率的因素包括:启发式算法、适应度函数和种子策略等,目前国内外的研究主要集中于启发式算法的改进和适应度函数的调整,而种子策略的研究还处于起步阶段。种子是指从源代码或相关的外部信息中获取的领域知识,包括常量值、字符串等信息,并且种子策略的使用可以加快搜索过程进而达到优化目的,同时种子策略可以适用于多种研究背景中。
研究表明,混合种子策略优于单独种子策略。混合策略主要通过指定不同种子策略的采样概率而实现,本质上是将不同的种子策略简单的组合在一起,并没有进一步分析不同种子策略的适用场景以及在指令层的工作原理。然而,上述问题在种子策略研究中还没有被调查过。
发明内容
本发明的目的在于克服现有技术的不足,提供一种基于搜索测试的智能种子策略方法,便于提高SBST的测试效率。
本发明解决其技术问题是通过以下技术方案实现的:
一种基于搜索测试的智能种子策略方法,其特征在于:所述方法的流程为:
1)对目标分支进行静态分析:
在为目标方法自动生成测试用例时,构建该方法的控制依赖图,在控制依赖图基础上对目标方法内的所有分支进行静态分析,分析目标为判断被测方法中是否存在拥有快速通道结构的种子分支;
若给定一个目标分支b和对应的操作数op,当分支b上的方法输入mi和操作数op之间至少存在一个快速通道时种子策略可发挥作用,所述快速通道的检测过程中,目标分支的指令操作数通过使用确定语义操作算法来定位,确定语义操作算法通过控制流图和当前目标方法中的分支执行路径动态判断目标分支实际的语义指令集,具体步骤为:
步骤1:判断目标分支处b的操作数的个数,当操作数的个数为2时,直接返回两个操作数指令;当操作数个数为1时继续以下步骤;
步骤2:将语义操作数指令集OP设为空指令集;
步骤3:获取以分支b的操作数指令为结尾的所有数据流路径,pathList;
步骤4:获取分支b的操作数指令,ins;
步骤5:递归寻找ins指令的上级指令集,并计算上级指令集的个数,如果个数为1则用当前上级指令集替换目前的ins,重复步骤5,直至找到上级指令集个数大于1的ins指令;
步骤6:将指令ins的上级指令集赋值给语义操作数指令集OP。
使用信息评估的方式判断目标分支的数据流路径是否满足值保持属性和敏感度属性,给定一条数据流路径ch(mi,op)=mi→ins1→ins2...→op,
其中:mi为方法输入;
op为目标分支处的指令;
并估计路径的信息损失,具体步骤为:
步骤1:值保持属性中需要确保mi和op之间是类型兼容的;
步骤2:通过计算路径的信息保留分数来估计敏感度;
其中:mi为方法输入;
op为目标分支处的指令;
insi为从方法输入到目标分支中间的指令;
将每条指令视为一个微函数,scorep(ins)是指令ins对应的信息保留分数,将路径中所有指令的信息保留分数相乘可以得到整条路径的信息保留分数scoresp(ch(mi,op))
步骤3:当mi和op是类型兼容的并且信息保留分数大于属性阈值t时,该数据流路径为快速通道;
如果目标方法中拥有包含快速通道的分支,则认为该分支为种子分支,根据目标分支的非快速通道路径将种子分支分为静态种子分支和动态种子分支,静态种子分支是指非快速通道是常量读取路径,反之,为动态种子分支;
2)将目标方法放入工具中进行测试运行,动态构建基于分支的常量池:
在动态分析中,将目标方法放入工具中进行测试运行,并且为动态种子分支构建对应的动态常量池,测试运行中将产生大量运行时信息,通过在目标分支处进行插桩操作,可以在运行过程中收集目标分支处的程序运行值;
3)根据静态分析和动态分析所得信息,针对种子分支进行自适应采样,为种子分支提供最佳种子,自适应采样的算法具体为:
步骤1:按照当前种子分支集Bs与未覆盖分支集Bu的比值决定是否生成随机种子;
步骤2:按照一定的概率pbranchwise从局部的常量池种进行采样,针对当前随机选择的种子分支b,当随机数大于pbranchwise时将使用原有的种子策略进行采样,并且返回采样种子;当随机数小于pbranchwise时,继续下一步骤进行采样;
步骤3:按照种子分支b的类型确定从静态/动态常量池中进行随机采样。
本发明的优点和有益效果为:
1、本发明的基于搜索测试的智能种子策略方法,在指令层对目标分支进行分析,目前的种子策略直接基于方法层面进行测试生成,而本发明是基于指令层面更加深入地进行分析,在此过程中我们提出了快速通道结构,在目标分支的数据流路径中满足值保持属性和敏感度保持属性的路径称为快速通道。
2、本发明的基于搜索测试的智能种子策略方法可基于快速通道判定目标分支类型,并为种子分支动态构建静态/动态常量池,目前的种子策略不判定方法中的分支类型,并且所有分支共享全局的静态/动态常量池;本发明中根据分支类型可为种子分支建立基于分支的局部的静态/动态常量池。
3、本发明的基于搜索测试的智能种子策略方法,设计了自适应采样算法ASS算法,针对不同常量池,目前的种子策略使用的采样概率是固定的,而本发明使用了自适应采样算法进行动态采样;在这个过程中,本发明通过整合目前目标方法中的分支覆盖、分支类别等信息动态调整从不同常量池中采样的概率。
4、本发明的基于搜索测试的智能种子策略方法,在以分支覆盖率和使用时间为评估指标中展现出优秀的测试生成提升效果。
附图说明
图1为本发明的整体流程图;
图2为本发明的确定语义操作算法图;
图3为本发明的自适应采样的算法图;
图4为本发明在实际测试中目标方法文档的示例图;
图5为本发明在实际测试中将被测Java项目、Evosuite工具、目标方法文档和两个运行脚本放入同一文件目录下的示例图;
图6为本发明在实际测试中得到的实验结果示例图。
具体实施方式
下面通过具体实施例对本发明作进一步详述,以下实施例只是描述性的,不是限定性的,不能以此限定本发明的保护范围。
如图1,一种基于搜索测试的智能种子策略方法,其创新之处在于:所述方法的流程为:
1)对目标分支进行静态分析:
在为目标方法自动生成测试用例时,构建该方法的控制依赖图,在控制依赖图基础上对目标方法内的所有分支进行静态分析,分析目标为判断被测方法中是否存在拥有快速通道结构的种子分支;
定义1:若给定一个目标分支b和对应的操作数op,当分支b上的方法输入mi和操作数op之间至少存在一个快速通道时种子策略可以发挥作用,快速通道应符合以下条件:
1)目标分支存在两个需要比较的具体操作数,所以本发明中不考虑检查是否是空值的分支;
2)在mi和操作数op之间至少存在一条数据流路径;
3)mi和操作数op之间是类型兼容的;
4)操作数op对mi的变化具有敏感性,即操作数op可以根据mi的变化而变化。
定义1给出了快速通道的定义,通过定义1可以定义快速通道具有的性质:从mi到op之间的路径可以定义为ch(mi,op),则快速通道fch(mi,op)需要满足以下两个属性:
1)值保持属性,使用val(mi)表示mi的值,val(op)表示op的值,值保持属性是指val(mi)与val(op)之间具有一定的相似性。
2)敏感度保持属性,当val(op)随着val(mi)的变化而发生变化时,mi和op之间具有一定的敏感度。
在快速通道的检测过程中需要面临以下问题:需要根据分支情况确定适当的语义操作数。当目标分支对应的是一个操作数时,需要根据操作数的含义确定适当的语义操作数。并且需要根据操作数确定数据流路径,评估该路径是否满足值保持属性和敏感度保持属性。针对以上两个问题,解决方法如下:
快速通道的检测过程中目标分支的指令操作数通过使用确定语义操作算法来定位,如图2所示为确定语义操作算法图,确定语义操作算法通过控制流图和当前目标方法中的分支执行路径动态判断目标分支实际的语义指令集,具体步骤为:
步骤1:判断目标分支处b的操作数的个数,当操作数的个数为2时,直接返回两个操作数指令;当操作数个数为1时继续以下步骤;
步骤2:将语义操作数指令集OP设为空指令集;
步骤3:获取以分支b的操作数指令为结尾的所有数据流路径,pathList;
步骤4:获取分支b的操作数指令,ins;
步骤5:递归寻找ins指令的上级指令集,并计算上级指令集的个数,如果个数为1则用当前上级指令集替换目前的ins,重复步骤5,直至找到上级指令集个数大于1的ins指令;
步骤6:将指令ins的上级指令集赋值给语义操作数指令集OP。
使用信息评估的方式判断目标分支的数据流路径是否满足值保持属性和敏感度属性,给定一条数据流路径p=mi→ins1→ins2...→op,
其中:mi为方法输入;
op为目标分支处的指令;
并估计路径的信息损失,具体步骤为:
步骤1:值保持属性中需要确保mi和op之间是类型兼容的;
步骤2:通过计算路径的信息保留分数来估计敏感度;
其中:mi为方法输入;
op为目标分支处的指令;
insi为从方法输入到目标分支中间的指令;
将每条指令视为一个微函数,scorep(ins)是指令ins对应的信息保留分数,将路径中所有指令的信息保留分数相乘可以得到整条路径的信息保留分数scoresp(ch(mi,op))
步骤3:当mi和op是类型兼容的并且信息保留分数大于属性阈值t时,该数据流路径为快速通道;
如果目标方法中拥有包含快速通道的分支,则认为该分支为种子分支,根据目标分支的非快速通道路径将种子分支分为静态种子分支和动态种子分支,静态种子分支是指非快速通道是常量读取路径,反之,为动态种子分支;
2)将目标方法放入工具中进行测试运行,动态构建基于分支的常量池:
在动态分析中,将目标方法放入工具中进行测试运行,并且为动态种子分支构建对应的动态常量池,测试运行中将产生大量运行时信息,通过在目标分支处进行插桩操作,可以在运行过程中收集目标分支处的程序运行值;
3)根据静态分析和动态分析所得信息,针对种子分支进行自适应采样,为种子分支提供最佳种子,静态分析和动态分析中可以提供以下的信息:
1)在测试运行过程中的未覆盖分支集;
2)在目标方法中的静态种子分支和动态种子分支;
3)每个种子分支对应的静态和动态常量池;
4)在上述信息的基础上,本发明提出一种自适应采样的算法,如图3为自适应采样的算法图,具体步骤为:
步骤1:按照当前种子分支集Bs与未覆盖分支集Bu的比值决定是否生成随机种子;
步骤2:按照一定的概率pbranchwise从局部的常量池种进行采样,针对当前随机选择的种子分支b,当随机数大于pbranchwise时将使用原有的种子策略进行采样,并且返回采样种子;当随机数小于pbranchwise时,继续下一步骤进行采样;
步骤3:按照种子分支b的类型确定从静态/动态常量池中进行随机采样。
本发明设计了一种基于搜索测试的智能种子策略方法,该种子策略方法可以判断目标方法中是否存在包含快速通道的种子分支,并且为种子分支构建对应的常量池,然后根据目标方法的整体信息自适应地选择种子。以分支覆盖率为标准,本发明提出的种子策略方法可以有效提高SBST的测试效率。
实际测试时,该策略方法的实施方式:
步骤1:确定被测Java项目,建立目标方法文档,将Java项目中的被测方法放入目标方法文档中,如图4,
步骤2:将被测Java项目、Evosuite工具、目标方法文档和种子策略的运行脚本放到同一个文件目录下,如图5,其中两个脚本文件是两个策略的运行文件。
步骤3:使用脚本运行命令运行程序,在被测项目上进行测试生成。
步骤4:脚本运行完成后生成测试结果文件,在测试结果中可以记录以下信息:类名、方法名、执行时间、分支覆盖率、迭代次数等信息,如图6。
步骤5:将结果信息进行整合分析,计算种子策略的平均分支覆盖率和平均使用时间。
整理并分析实验结果,然后得到两个策略的平均分支覆盖率和平均使用时间:EvoSeed在平均分支覆盖率和平均使用时间上的表现均优于目前最好的种子策略,说明本发明提出的种子策略可以有效提高测试效率。
尽管为说明目的公开了本发明的实施例和附图,但是本领域的技术人员可以理解:在不脱离本发明及所附权利要求的精神和范围内,各种替换、变化和修改都是可能的,因此,本发明的范围不局限于实施例和附图所公开的内容。

Claims (1)

1.一种基于搜索测试的智能种子策略方法,其特征在于:所述方法的流程为:
1)对目标分支进行静态分析:
在为目标方法自动生成测试用例时,构建该方法的控制依赖图,在控制依赖图基础上对目标方法内的所有分支进行静态分析,分析目标为判断被测方法中是否存在拥有快速通道结构的种子分支;
若给定一个目标分支b和对应的操作数op,当分支b上的方法输入mi和操作数op之间至少存在一个快速通道时种子策略可发挥作用,所述快速通道的检测过程中,目标分支的指令操作数通过使用确定语义操作算法来定位,确定语义操作算法通过控制流图和当前目标方法中的分支执行路径动态判断目标分支实际的语义指令集,具体步骤为:
步骤1:判断目标分支处b的操作数的个数,当操作数的个数为2时,直接返回两个操作数指令;当操作数个数为1时继续以下步骤;
步骤2:将语义操作数指令集OP设为空指令集;
步骤3:获取以分支b的操作数指令为结尾的所有数据流路径,pathList;
步骤4:获取分支b的操作数指令,ins;
步骤5:递归寻找ins指令的上级指令集,并计算上级指令集的个数,如果个数为1则用当前上级指令集替换目前的ins,重复步骤5,直至找到上级指令集个数大于1的ins指令;
步骤6:将指令ins的上级指令集赋值给语义操作数指令集OP;
使用信息评估的方式判断目标分支的数据流路径是否满足值保持属性和敏感度属性,给定一条数据流路径ch(mi,op)=mi→ins1→ins2...→op,
其中:mi为方法输入;
op为目标分支处的指令;
并估计路径的信息损失,具体步骤为:
步骤1:值保持属性中需要确保mi和op之间是类型兼容的;
步骤2:通过计算路径的信息保留分数来估计敏感度;
其中:mi为方法输入;
op为目标分支处的指令;
insi为从方法输入到目标分支中间的指令;
将每条指令视为一个微函数,scorep(ins)是指令ins对应的信息保留分数,将路径中所有指令的信息保留分数相乘可以得到整条路径的信息保留分数scoresp(ch(mi,op))
步骤3:当mi和op是类型兼容的并且信息保留分数大于属性阈值t时,该数据流路径为快速通道;
如果目标方法中拥有包含快速通道的分支,则认为该分支为种子分支,根据目标分支的非快速通道路径将种子分支分为静态种子分支和动态种子分支,静态种子分支是指非快速通道是常量读取路径,反之,为动态种子分支;
2)将目标方法放入工具中进行测试运行,动态构建基于分支的常量池:
在动态分析中,将目标方法放入工具中进行测试运行,并且为动态种子分支构建对应的动态常量池,测试运行中将产生大量运行时信息,通过在目标分支处进行插桩操作,可以在运行过程中收集目标分支处的程序运行值;
3)根据静态分析和动态分析所得信息,针对种子分支进行自适应采样,为种子分支提供最佳种子,自适应采样的算法具体为:
步骤1:按照当前种子分支集Bs与未覆盖分支集Bu的比值决定是否生成随机种子;
步骤2:按照一定的概率pbranchwise从局部的常量池种进行采样,针对当前随机选择的种子分支b,当随机数大于pbranchwise时将使用原有的种子策略进行采样,并且返回采样种子;当随机数小于pbranchwise时,继续下一步骤进行采样;
步骤3:按照种子分支b的类型确定从静态/动态常量池中进行随机采样。
CN202111658708.2A 2021-12-30 一种基于搜索测试的智能种子策略方法 Active CN114490339B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111658708.2A CN114490339B (zh) 2021-12-30 一种基于搜索测试的智能种子策略方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111658708.2A CN114490339B (zh) 2021-12-30 一种基于搜索测试的智能种子策略方法

Publications (2)

Publication Number Publication Date
CN114490339A CN114490339A (zh) 2022-05-13
CN114490339B true CN114490339B (zh) 2024-05-31

Family

ID=

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2017194895A (ja) * 2016-04-22 2017-10-26 日本電信電話株式会社 テストデータ生成プログラム及びテストデータ生成方法
CN108595341A (zh) * 2018-05-11 2018-09-28 清华大学 测试用例自动生成方法及系统
CN111797405A (zh) * 2020-07-01 2020-10-20 北京华昱卓程软件有限公司 一种序列导向的混合模糊测试方法及装置
CN112286824A (zh) * 2020-11-18 2021-01-29 长江大学 基于二分搜索迭代的测试用例生成方法、系统及电子设备
CN113468044A (zh) * 2021-05-27 2021-10-01 长江大学 一种基于改进的灰色预测演化算法的测试用例生成方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2017194895A (ja) * 2016-04-22 2017-10-26 日本電信電話株式会社 テストデータ生成プログラム及びテストデータ生成方法
CN108595341A (zh) * 2018-05-11 2018-09-28 清华大学 测试用例自动生成方法及系统
CN111797405A (zh) * 2020-07-01 2020-10-20 北京华昱卓程软件有限公司 一种序列导向的混合模糊测试方法及装置
CN112286824A (zh) * 2020-11-18 2021-01-29 长江大学 基于二分搜索迭代的测试用例生成方法、系统及电子设备
CN113468044A (zh) * 2021-05-27 2021-10-01 长江大学 一种基于改进的灰色预测演化算法的测试用例生成方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
TBMC:一种基于多探测器协同的DTNs目标追踪策略;邓伊琴;赵明;唐枫枭;陈志刚;计算机工程与科学;20161231;38(7);全文 *
多目标优化的测试用例优先级在线调整策略;张娜;姚澜;包晓安;董萌;桂宁;软件学报;20151231;26(10);全文 *

Similar Documents

Publication Publication Date Title
US8527965B2 (en) Layered static program analysis framework for software testing
CN103577324B (zh) 移动应用中隐私信息泄露的静态检测方法
CN108268777A (zh) 一种利用补丁信息进行未知漏洞发现的相似性检测方法
CN109117364B (zh) 一种面向目标的测试用例生成方法及系统
CN109871326A (zh) 一种脚本录制的方法和装置
CN109656544B (zh) 一种基于执行路径相似度的云服务api适配方法
CN110162457A (zh) 用户界面的测试方法、装置、设备及存储介质
CN111737150A (zh) 面向Java EE程序SQLIA漏洞的污点分析和验证方法及装置
CN104850411A (zh) 存储系统基准评测程序生成方法及装置
CN112579437B (zh) 一种程序运行过程符合性验证方法
CN109388557A (zh) 一种控件遍历方法、计算机可读存储介质及终端设备
Yan et al. Widget-sensitive and back-stack-aware GUI exploration for testing android apps
CN107515739A (zh) 提高代码执行性能的方法及装置
JP2021002326A (ja) ソフトウェアプログラムにおける静的分析違反の修復パターンの精緻化
CN114780962A (zh) 基于动态能量调控的Windows程序模糊测试方法及系统
CN114490339B (zh) 一种基于搜索测试的智能种子策略方法
US20060064570A1 (en) Method and apparatus for automatically generating test data for code testing purposes
CN109032946B (zh) 一种测试方法和装置、计算机可读存储介质
CN116975881A (zh) 一种基于llvm的漏洞细粒度定位方法
CN108664384B (zh) 数据处理装置和数据处理方法
CN114490339A (zh) 一种基于搜索测试的智能种子策略方法
CN112990461A (zh) 构建神经网络模型的方法、装置、计算机设备和存储介质
CN110209593B (zh) 一种面向偏好设置的安卓应用测试方法
WO2021104027A1 (zh) 代码性能检测方法、装置、设备及存储介质
CN115577363A (zh) 恶意代码反序列化利用链的检测方法及装置

Legal Events

Date Code Title Description
PB01 Publication
SE01 Entry into force of request for substantive examination
GR01 Patent grant