[发明专利]基于强化学习的编译器缺陷定位方法有效
| 申请号: | 202010880640.1 | 申请日: | 2020-08-27 |
| 公开(公告)号: | CN112181420B | 公开(公告)日: | 2022-06-28 |
| 发明(设计)人: | 陈俊洁;马昊阳 | 申请(专利权)人: | 天津大学 |
| 主分类号: | G06F8/41 | 分类号: | G06F8/41;G06F11/36;G06N3/04;G06N3/08 |
| 代理公司: | 天津市北洋有限责任专利代理事务所 12201 | 代理人: | 李素兰 |
| 地址: | 300072*** | 国省代码: | 天津;12 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 基于 强化 学习 编译器 缺陷 定位 方法 | ||
本发明公开了一种基于强化学习的编译器缺陷定位方法,步骤1,执行结构变异过程,包括创建材料池、分析程序以选择有效的插入行和选择待插入的语句;步骤2,利用A2C算法进行基于强化学习的变异程序生成;步骤3,实现基于编译覆盖情况的缺陷定位。与现有技术相比,本发明在突破已有技术DiWi的局限性,首次利用结构变异与强化学习生成编译成功的变异程序,以更有效地定位编译器缺陷。
技术领域
本发明涉及强化学习和编译器调试领域,特别是涉及一种有效地自动化定位编译器缺陷的方法。
背景技术
编译器是众多软件系统的基础,它影响着上层应用程序的安全性和鲁棒性。由于编译器的复杂性,定位编译器缺陷十分困难。含有编译器缺陷的代码片段会参与编译失败的测试程序的编译过程,而该代码片段大概率不会参与编译成功的测试程序的编译过程。DiWi技术通过对比原始测试程序(即触发编译器缺陷的编译失败的测试程序)和变异程序(即变异得到的能够编译成功的测试程序)在编译过程中对于编译器文件的覆盖情况(简称为编译覆盖情况)分析缺陷位置。为了完成变异分析过程,Chen等人设计了3种类型的元素变异规则,分别针对三种不同的程序元素(即变量、常量和操作符)进行变异。元素变异对测试程序的修改程度较小,因此其容易生成与原始测试程序编译覆盖情况相似的变异程序,从而更准确地定位缺陷。然而,受制于较小的变异空间,元素变异也有其局限性,比如生成的变异程序缺乏多样性。
发明内容
为解决上述技术问题,本发明提出了一种基于强化学习的编译器缺陷定位方法,通过设计四种结构变异规则并结合强化学习方法,实现了新型编译器缺陷定位技术RecBi。
本发明的一种基于强化学习的编译器缺陷定位方法,该方法包括以下步骤:
步骤1、执行结构变异过程,具体包括以下步骤:
步骤1.1、创建材料池,即首先从GCC开发者提供的测试程序中抽取if、while语句和函数体,组成材料池;
步骤1.2、分析程序以选择有效的插入行,具体为:将函数体外的代码行视为无效插入行;除了禁止的printf语句、return语句、__builtin_abort语句的代码行之外,其余代码行均为有效插入行;调用本步骤的代码用于在构建代码的抽象语法树后表示各个结点,并记录节点信息;
步骤1.3,选择待插入的语句,进行语句中的变量重命名,具体为:从材料池中选择if语句、while语句和函数体、构建goto语句,随后将这些语句中的变量重命名为原始测试程序中的类型能兼容的变量;
如果程序中的变量数量不足以供重命名,则报错并重新进行选择;
步骤2、基于强化学习生成变异程序,具体步骤如下:
学习者的多个学习状态在上一轮学习过程中环境给予的奖赏后步入新的学习状态,状态由一个数组表示,该数组存储着每一个变异规则生成编译成功的变异程序的数量,作为ANN神经网络的输入,进行本轮学习中动作的概率分布的预测,并根据这一分布选择一动作;根据步骤1所选择出的最优的变异规则,从而生成能够有效定位编译器缺陷的变异程序,计算得到环境给予的奖赏;同时,将动作输入CNN神经网络,预测选择这一动作能够获得的奖赏,进而获得优势损失函数;
奖赏由生成的变异程序的多样性以及变异程序与原始测试程序的相似性决定;
多样性与相似性分别由公式(1)和公式(2)定义如下:
其中,pi和pj表示生成的变异程序,f表示原始测试程序,dist()表示两个程序之间的距离,dist()由公式(3)定义:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于天津大学,未经天津大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202010880640.1/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种半导体铜背靶加工方法
- 下一篇:数据处理方法及装置





