一种快速获取到达程序指定点测试用例的方法技术

技术编号:24352908 阅读:29 留言:0更新日期:2020-06-03 01:57
本发明专利技术公开了一种快速获取到达程序指定点测试用例的方法,包括:首先在给定的程序中设置一个目标代码点,该目标点代表程序实际运行时出现程序运行错误的位置;利用静态分析技术提取该目标点的dominator语句,dominator语句为到达目标点的过程中所必须经过的中间语句;增强学习技术利用Q‑learning,将其写入一个独立的python文件中;符号执行工具选择KLEE,当KLEE遇到分支决策时,将与包含Q‑learning算法的python文件进行socket通信,当前分支的决策将由Q‑learning决定;若KLEE遵循了Q‑learning算法并且在走完分支后遇到dominator语句,则返回给Q‑learning一个值为正的奖励,否则为负的奖励;Q‑learning将根据得到的奖励值更新决策;若KLEE覆盖到目标点则生成达到相应目标点的测试用例或达到给定时间则终止符号执行工具KLEE。

A method of quickly obtaining test cases at designated points of programs

【技术实现步骤摘要】
一种快速获取到达程序指定点测试用例的方法
本专利技术涉及新型符号执行框架的设计
,将强化学习与传统符号执行过程相结合,解决了符号执行当中的路径爆炸问题,从而能够帮助软件测试人员快速获取到达程序指定点测试用例。
技术介绍
符号执行方法是将程序中的输入变量当作符号处理,在模拟程序执行的同时收集符号化变量上的相关约束信息用于分析程序。和最原始的随机测试用例方法相比较有着更好的分析效率,因为符号执行可以通过对程序特定路径约束的求解,自动生成相应的测试输入。约束的收集是在模拟程序执行时,通过维护符号变量上的状态变化,将不同路径上分支条件组合运算作为路径求解的输入;最后使用约束求解器求解,得到具体路径上的测试输入。然而传统的符号执行技术会带来一些问题,路径爆炸就是其中之一,即符号执行工具在探索路径的过程中由于过多分支所带来呈指数级增长的路径数量,导致大量时间损耗。一种快速获取到达程序指定点测试用例的方法针对实际项目实践中到达定点的问题,如测试工程师获取了包含错误点的输出报告却缺少能够到达该点的对应测试用例。该方法实现了增强学习引导下的符号执行框架。能够更快生成到达定点问题的对应测试用例。符号执行工具选择使用KLEE,KLEE是斯坦福团队设计的基于LLVM编译底层基础的实现了符号执行的自动软件测试工具。
技术实现思路
本专利技术的目标是提供一种快速获取到达程序指定点测试用例的方法,即利用强化学习引导下的符号执行用于缓解符号执行当中的路径爆炸问题并快速获取到达程序指定点测试用例,主要针对程序中的点覆盖问题,更利于软件测试人员快速获得到达程序定点的测试用例。一种快速获取到达程序指定点测试用例的方法,包括以下步骤:步骤一:在给定程序人工设置目标代码点,所述目标代码点代表程序实际运行时会出程序运行错误的位置;步骤二:在已知给定的目标代码后获取该目标点的dominator语句,利用程序静态分析理论分析得到程序在到达目标代码过程中所必须经过的一系列代码点;步骤三:将Q-learning算法写入一个独立的python文件中;步骤四:开始符号执行过程,当符号执行工具KLEE遇到分支决策时将和独立的python文件进行通信,分支的决策为走true分支还是false分支将由Q-learning决定;当符号执行工具在遵循了Q-learning的分支决策后走到dominator语句后,返回给Q-learning一个正的反馈,否则为负,此时Q-learning会根据拿到的反馈更新算法决策;步骤五:当符号执行工具到达指定目标点或者运行超时,KLEE结束运行,并生成到达指定点的测试用例。本专利技术步骤一中,所述目标代码点在实际项目中,为输出报告中程序出错的位置。本专利技术步骤二中,所述dominator语句为程序在到达指定目标点前,必须经过一系列点的集合。本专利技术步骤三中,所述Q-learning算法为让智能体在与环境的互动过程学习解决问题的最佳路径的过程,将其写入一个独立的python文件当中在之后符号执行的交互过程使用。本专利技术步骤四中,所述符号执行过程为强化学习引导下的符号执行,以遍历更少的路径数、经过更少的llvm指令数到达目标点,从而解决符号执行当中的路径爆炸问题,引导符号执行更快覆盖到目标点。本专利技术步骤四中,所述符号执行工具KLEE为实验中所使用的基于符号执行的程序分析工具。本专利技术步骤四中,所述符号执行过程若符号执行工具KLEE在执行完一次流程没有到达目标点之后,将会重启符号执行过程;此时Q-learning将会选择一个新的起始状态发送给KLEE;Q-learning的状态选择遵循以下步骤:列举出所有候选状态集合;计算每个候选状态的概率大小;选出概率最大的候选状态。本专利技术步骤五中,终止条件插入符号执行工具KLEE中,当其覆盖到目标点或运行超时则强制终止。本专利技术公开了一种快速获取到达程序指定点测试用例的方法,本专利技术的方法包括:首先在给定的程序中设置一个目标代码点,该目标点代表程序实际运行时出现程序运行错误的位置;利用静态分析技术提取该目标点的dominator语句,dominator语句为到达目标点的过程中所必须经过的中间语句;增强学习技术利用Q-learning,将其写入一个独立的python文件中;符号执行工具选择KLEE,当KLEE遇到分支决策时,将与包含Q-learning算法的python文件进行socket通信,当前分支的决策将由Q-learning算法决定;若KLEE遵循了Q-learning算法并且在走完分支后遇到dominator语句,则返回给Q-learning一个值为正的奖励,否则为负的奖励;Q-learning将根据得到的奖励值更新决策;若KLEE执行到目标点生成达到相应目标点的测试用例或达到给定时间则终止算法。本专利技术将强化学习与符号执行相结合,在实际项目中解决了难以获取到达指定程序运行出错点的测试用例的情况,以提高软件测试人员的效率。附图说明图1为本专利技术流程示意图。图2为符号执行工具与Q-learning的交互过程。具体实施方式结合以下具体实施例和附图,对本专利技术作进一步的详细说明。实施本专利技术的过程、条件、实验方法等,除以下专门提及的内容之外,均为本领域的普遍知识和公知常识,本专利技术没有特别限制内容。本专利技术提出了一种快速获取到达程序指定点测试用例的方法,具体包括以下步骤:步骤一:在给定程序人工设置目标代码点,该目标代码点代表程序实际运行时可能会出现bug的位置步骤二:在已知给定的目标代码后获取该目标点的dominator语句,即利用程序静态分析理论,分析得到程序在到达目标代码过程中所必须经过的一系列代码点;步骤三:将强化学习基本算法之一Q-learning算法写入一个独立的python文件当中;步骤四:开始符号执行过程,当符号执行工具KLEE遇到branch分支时将和独立的python文件进行通信,分支的决策为走true分支还是false分支将由Q-learning算法决定。当符号执行工具在遵循了Q-learning的分支决策后走到dominator语句后,会返回给Q-learning一个正的反馈,否则为负。此时Q-learning会根据拿到的反馈更新算法决策;步骤五:当符号执行工具到达指定目标点或者运行超时时,KLEE结束运行,并生成到达指定点的测试用例。本专利技术提出的一种快速获取到达程序指定点测试用例的方法中,步骤一所述的目标代码点,其实际意义为可能会导致程序运行错误的点。即在实际项目中,为输出报告中程序出错的位置。本专利技术选择软件验证比赛SV-COMP的benchmark(https://github.com/sosy-lab/sv-benchmarks),其中有一类问题为reach-safety问题,即能否到达定点的问题。在之后的项目实验中将选择这类问题中的程序。本专利技术提出的一种快速获取到达程序指定点测试用例的方法本文档来自技高网...

【技术保护点】
1.一种快速获取到达程序指定点测试用例的方法,其特征在于,包括以下步骤:/n步骤一:在给定程序人工设置目标代码点,所述目标代码点代表程序实际运行时会出现程序运行错误的位置;/n步骤二:在已知给定的目标代码后获取该目标点的dominator语句,利用程序静态分析理论分析得到程序在到达目标代码过程中所必须经过的一系列代码点;/n步骤三:将Q-learning算法写入一个独立的python文件中;/n步骤四:开始符号执行过程,当符号执行工具KLEE遇到分支决策时将和独立的python文件进行通信,分支的决策为走true分支还是false分支由Q-learning决定;当符号执行工具在遵循了Q-learning的分支决策后走到dominator语句后,返回给Q-learning一个正的反馈,否则为负,此时Q-learning会根据拿到的反馈更新算法决策;/n步骤五:当符号执行工具到达指定目标点或者运行超时,KLEE结束运行,并生成到达指定点的测试用例。/n

【技术特征摘要】
1.一种快速获取到达程序指定点测试用例的方法,其特征在于,包括以下步骤:
步骤一:在给定程序人工设置目标代码点,所述目标代码点代表程序实际运行时会出现程序运行错误的位置;
步骤二:在已知给定的目标代码后获取该目标点的dominator语句,利用程序静态分析理论分析得到程序在到达目标代码过程中所必须经过的一系列代码点;
步骤三:将Q-learning算法写入一个独立的python文件中;
步骤四:开始符号执行过程,当符号执行工具KLEE遇到分支决策时将和独立的python文件进行通信,分支的决策为走true分支还是false分支由Q-learning决定;当符号执行工具在遵循了Q-learning的分支决策后走到dominator语句后,返回给Q-learning一个正的反馈,否则为负,此时Q-learning会根据拿到的反馈更新算法决策;
步骤五:当符号执行工具到达指定目标点或者运行超时,KLEE结束运行,并生成到达指定点的测试用例。


2.根据权利要求1所述的快速获取到达程序指定点测试用例的方法,其特征在于,步骤一中,所述目标代码点在实际项目中,为输出报告中程序出错的位置。


3.根据权利要求1所述的快速获取到达程序指定点测试用例的方法,其特征在于,步骤二中,所述dominator语句为程序在到达指定目标点前,必须经过一系列点的集合。

...

【专利技术属性】
技术研发人员:吴劼张枨宇蒲戈光
申请(专利权)人:华东师范大学
类型:发明
国别省市:上海;31

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

1