当前位置: 首页 > 专利查询>天津大学专利>正文

基于强化学习的编译器测试程序生成方法技术

技术编号:38400985 阅读:9 留言:0更新日期:2023-08-07 11:12
本发明专利技术公开了一种基于强化学习的编译器测试程序生成方法,采用强化学习模型,根据上一个的测试配置,基于已探索搜索空间内的测试配置构建下一个的测试配置;之后,利用构造完毕的测试配置生成一定量测试程序,以这些测试程序作为输入进行编译器测试评估,得到测试结果,收集数据计算强化学习的回报;最后,将强化学习回报输入模型进行更新。与现有技术相比,本发明专利技术使用待测版本的在线测试数据学习到当前版本的编译器缺陷特征,从而规避基于历史编译器缺陷数据学习的局限性,实现对已有方法的改进;以及,使用多智能体强化学习,从而更有效的对当前版本的编译器缺陷特征进行学习,更高效地探索测试配置空间。效地探索测试配置空间。效地探索测试配置空间。

【技术实现步骤摘要】
基于强化学习的编译器测试程序生成方法


[0001]本专利技术涉及软件工程和软件测试领域,特别涉及一种编译器测试程序生成方法。

技术介绍

[0002]编译器是连接高级语言和低级语言的桥梁,由高级语言编写的程序只有经编译器翻译为机器语言才能被计算机理解和执行。因此,编译器在如今的软件生态中占据重要地位。和其他程序相同,编译器也是由编程语言编写的程序,因此和其他的程序一样可能存在缺陷,编译器的缺陷会导致经过其编译的正确程序或者软件系统表现出错误的行为。从开发者的角度讲,编译器的缺陷会加大软件开发人员的调试难度,这是因为当开发人员遇到运行结果与预期不相符时,开发人员很难意识到错误的运行结果是编译器缺陷导致的,且开发人员很难基于具有缺陷的编译器编写程序;从软件安全的角度讲,编译器的缺陷会将正确的源代码编译为不正确的可执行文件,经缺陷编译器编译的应用程序遗传了其缺陷从而产生错误的行为,应用程序的错误行为可能会造成现实中的经济损失,甚至安全隐患。因此,保证编译器的质量是软件工程领域至关重要的工作。
[0003]编译器测试是编译器质量保障的重要手段。编译器测试主要分为三步:1)测试程序生成;2)测试预言构建;3)测试执行。测试程序生成,即生成编译器测试的输入,和其他软件的测试不同,编译器测试的输入是结构复杂、符合语法及规范、且具有一定语义的测试程序。测试预言构建,即设计判断测试程序是否触发编译器缺陷的机制。测试执行,即将测试程序输入编译器编译得到可执行文件,并执行可执行文件,按照设计的测试预言判断是否触发编译器缺陷。其中,由于测试程序生成需要考虑十分复杂的程序语法结构,严格的语言规范,以及建立在程序语法空间上的,丰富的语义空间,因此测试程序生成是编译器测试中最为核心也最具难度的任务。
[0004]随着编译器测试领域的发展,诞生了许多测试程序生成工具,如Csmith,CLsmith,以及YARPGen。这些测试程序生成工具生成的程序不仅在语法语义上是正确的,而且支持丰富的程序结构和语言特性。例如,Csmith是一个C程序自动生成工具,可以随机生成符合C99规范的C程序,即确保生成的C程序中不包括未定义行为,同时支持丰富的程序结构、程序类型和语言特性。在程序结构上,Csmith支持for、while、break、continue、goto、if

else等常见的控制流;在语言特性上,Csmith支持指针、数组、函数调用、结构体、共同体(Union)、位域,以及空位域等语言特性。Csmith等程序生成工具为研究者们解决了如何生成合法测试程序的问题。同时,测试程序生成工具往往通过配置来控制每种程序元素(例如,for、while等程序结构,以及int、char等变量类型)的生成概率。在本专利的介绍中,将这种控制测试程序生成的配置称为测试配置,简称配置。而将测试配置中控制某种程序元素的一项称为测试配置项,简称配置项。
[0005]在这些测试程序生成工具的基础上,一些研究者提出了通过调整测试配置来优化编译器测试的方法。这些方法往往通过调整测试配置来生成具有不同分布特征的测试程序。例如,Swarm Testing(后文中简称Swarm)通过随机设置测试配置,即为测试程序生成工
具指定随机的程序元素生成概率,以更充分地对测试程序空间进行探索,取得了比默认配置更优的编译器测试效果。HiCOND通过挖掘历史上触发缺陷的测试程序元素,为每一种程序元素推断出更易产生揭错测试程序的概率范围,进而利用粒子群优化算法在该范围内搜索到一组多样性强的测试配置,作为后续版本测试时的测试配置,从而提升编译器测试效果。这些技术虽然在一定程度上提升了编译器测试的效果,但仍然具有如下局限:
[0006]Swarm Teseting试图通过为测试程序生成工具指定随机的程序元素生成概率,以更加充分地探索编译器输入空间。而在编译器巨大的输入空间中,能够触发缺陷的部分往往很小,且并不是均匀分布。因此通过随机搜索的方式找到揭错程序的效率较为低下。
[0007]HiCOND则试图通过在历史测试数据的统计中进行总结推断出能够生成揭错程序的程序元素生成概率。而基于历史缺陷的测试配置应用于新版本的编译器测试时会导致在新版本上发现的缺陷和历史版本缺陷相似,从而无法有效检测到其他新缺陷。
[0008]强化学习技术已经在很多场合中取得了成功,研究者们也将强化学习应用于软件测试中。为了高效探索配置,本专利技术采用多智能体强化学习指导配置空间的探索过程。
[0009]强化学习的基本任务即学习与环境交互的策略,该策略可以实现在长期运行中回报的最大化。如图1所示,为强化学习流程图。在形式上,强化学习表示为由元组(S,A,P,R,γ)表示的马尔科夫决策过程。其中,S表示强化学习的环境,A是强化学习中智能体可以采取的动作。在强化学习的迭代过程中,智能体根据对环境s∈S的观察,采取一个动作a∈A,并以概率转移到下一个环境s
t+1
。而后,智能体获得一个由预定义回报函数设置的回报r
t
=R(s
t
,a
t
,s
t+1
)。上述迭代过程将持续进行,直到达到强化学习的终止条件。在此过程中,设每轮的持续时间由t至t+d,则智能体在该轮获得的累计回报其中γ为折扣函数,用来决定未来回报的影响。
[0010]虽然现有方法在一定程度上提升了编译器测试的效果,但是它们也局限于历史信息和低效的搜索方法。如何解决上述现有编译器测试程序生成方法的局限,同时进一步提升编译器的测试效果,是本专利技术亟待解决的技术问题。

技术实现思路

[0011]本专利技术旨在解决现有测试程序生成方法面临的问题并且突破现有方法的技术局限性即Swarm Testing面临的随机搜索效率低下以及HiCOND容易受到历史版本缺陷影响的局限,而提出了一种基于强化学习的编译器测试程序生成方法,引导探索测试配置空间以指导下一个测试配置的构造,通过强化学习方法基于已有测试程序生成工具的更易揭错的测试程序,利用测试程序进行编译器测试,
[0012]为了实现上述目的,本专利技术利用以下技术方案实现:
[0013]一种基于强化学习的编译器测试程序生成方法,该方法整体包括配置构建、测试评估以及模型更新共三个阶段,具体包括以下步骤:
[0014]步骤1、基于已探索空间的测试配置和当前测试配置空间构建下一个测试配置,进行下一个测试配置的动作选取以及动作应用,本步骤的输入为当前测试配置C
t
‑1,输出为下一个测试配置C
t

[0015]步骤1.1、进行下一个测试配置的动作选取:,利用强化学习模型学习到的探索经
验为上一时刻即t

1时刻的测试配置C
t
‑1={o
(t

1)1
,o
(t

1)2
,

,o
(t

1)本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于强化学习的编译器测试程序生成方法,其特征在于,该方法整体包括配置构建、测试评估以及模型更新三个阶段,具体包括以下步骤:步骤1、基于已探索空间的测试配置和当前测试配置空间构建下一个测试配置,进行下一个测试配置的动作选取以及动作应用,本步骤的输入为上一时刻测试配置C
t
‑1,输出为下一个测试配置C
t
;步骤1.1、进行下一个测试配置的动作选取:利用强化学习模型学习到的探索经验为上一时刻即t

1时刻的测试配置C
t
‑1={o
(t

1)1
,o
(t

1)2
,...,o
(t

1)n
}推荐动作A
t
={a
t1
,a
t2
,...,a
tn
},其中n为测试配置的个数,o
(t

1)k
,k∈[1,n]表示第k个测试配置项,a
tk
,k∈[1,n]表示对应于测试配置项o
(t

1)k
的推荐动作;强化学习中的每个智能体Agent={agent1,agent2,...,agent
k
,...,agent
n
}对应测试配置项的代理即agent
k
,k∈[1,n],根据第t

1时刻的测试配置C
t
‑1推荐配置项o
(t

1)k
对应的动作a
tk
;步骤1.2、设定下一个测试配置的动作应用:根据上一时刻t

1的测试配置项C
t
‑1={o
(t

1)1
,o
(t

1)2
,...,o
(t

1)n
}和强化学习模型基于当前t时刻的测试配置的推荐动作A
t
={a
t1
,a
t2
,...,a
tn
}进行状态转移,构造下一时刻t测试配置C
t
={o
t1
,o
t2
,...,o
tn
};步骤2、利用生成的当前时刻t测试配置C
t
引导测试程序生成工具生成测试程序,用测试程序作为输入测试编译器,执行编译器测试,收集并计算强化学习回报;本步骤的输入为测试配置C
t
,输出为强化学习的回报以及编译器缺陷报告或者无缺陷测试结果:步骤2.1、进行编译器测试,根据测试配置C
t
生成一定量测试程序,将生成的测试程序输入编译器进行测试,输出计算强化学习回报的测试数据和测试结果报告;在编译器测试阶段具体描述:利用测试配置C
t
指导测试程序生成工具生成cp个测试程序P
...

【专利技术属性】
技术研发人员:陈俊洁索宸耀姜佳君李行健
申请(专利权)人:天津大学
类型:发明
国别省市:

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

1