【网安大模型专题10.19】※论文5:ChatGPT+漏洞定位+补丁生成+补丁验证+APR方法+ChatRepair+不同修复场景+修复效果(韦恩图展示)
Keep the Conversation Going: Fixing 162 out of 337 bugs for $0.42 each using ChatGPT
- 写在最前面
- 背景介绍
- 自动程序修复流程Process of APR (automated program repair)
- 1、漏洞程序
- 2、漏洞定位模块
- 3、补丁生成
- 4、补丁验证
- (可以学习的PPT设计)经典的APR方法traditional APR tools
- learning-based APR tools
- 方法Methodology
- Methodology - gap差距
- 当前的方法current method
- 局限性
- 方法概述overview
- ① 建立初始 prompt,得到第一个 patch
- ②通过 test suite 判断 patch 是否成立
- ③ 输入已经获取的 plausible patch 及相关信息,获取更多 plausible patch
- 最后两个步骤
- 评估Evaluation
- 基线Baseline
- 基准Benchmark:
- 研究问题Research questions
- RQ1:ChatRepair与最先进的APR技术相比,其性能如何
- 韦恩图(展示不同方法修复的集合)
- RQ2: ChatRepair在不同的修复场景下是如何执行的?
- RQ3: ChatRepair的不同组成部分对改进修复效果的贡献是什么
写在最前面
本文为邹德清教授的《网络安全专题》课堂笔记系列的文章,本次专题主题为大模型。
Keep the Conversation Going: Fixing 162 out of 337 bugs for $0.42 each using ChatGPT
arXiv 2023.4.1
https://arxiv.org/pdf/2304.00385.pdf
Chunqiu Steven Xia, University of Illinois Urbana-Champaign
Lingming Zhang, University of Illinois Urbana-Champaign
记录一位同学的分享
PPT简约大方、重点突出,学到了一些很巧妙的小设计
同时梳理了自动程序修复APR的流程、常见方法,我之前没接触过但也有了一定的了解
分享论文循序渐进,这种阅读论文的步骤之后或许可以尝试
※ 之后自己可以常回顾、多学习学习
背景介绍
自动程序修复流程Process of APR (automated program repair)

1、漏洞程序
Vulnerability Detection
(NDSS 18)Vuldeepecker: A deep learning-based system for vulnerability detection
(security 22)Mining Node.js Vulnerabilities via Object Dependence Graph and Query
2、漏洞定位模块
Fault Localization
(TSE 23) Effective Isolation of Fault-Correlated Variables via Statistical and Mutation Analysis
3、补丁生成
Patch Generation
4、补丁验证
Patch Correctness Checking
(FSE 23) A Large-scale Empirical Review of Patch Correctness Checking Approaches
(可以学习的PPT设计)经典的APR方法traditional APR tools

- 启发式搜索(GenProg)
insight:重用项目中的代码产生正确的修复补丁
method:通过交叉和变异操作实现已有代码的重新组合 - 基于历史修复
insight:不同软件中 bug 会重复出现,可以作为后续修复的指导
method:通过历史信息指导启发式搜索 - 利用相似代码
insight:与缺陷代码相似的代码可能存在同样的错误
method:通过相似信息指导启发式搜索 - 基于修复模版
insight:特定漏洞修复是可以总结的一些模式
method:专家总结定义修复模版,直接进行应用 - 基于语义约束
insight:修复 bug 就是改变程序使得满足 test case 的约束
method:搜索约束并转换为约束求解问题
learning-based APR tools
- 补丁排序模型
method:通过提取补丁特征给补丁排序 - 补丁模版获取
method:聚类收集最常见的修复方式(模板) - 端到端补丁生成模型(模型选择与训练数据的差别)
- NMT-based
- LLM-based
方法Methodology
Methodology - gap差距
当前的方法current method
有bug的代码被移除,LLM直接预测正确的代码
buggy code is removed and a LLM directly predicts correct code
给定前缀和后缀上下文
given the prefix and suffix context
局限性
现有基于llm的APR工具的局限性:
limitation of existing LLM-based APR tools:
1.丢失测试失败信息
missing test failure information
2.重复抽样
repeated sampling
3.对合理补丁的无知
ignorance of plausible patches

可信的补丁:通过测试套件的补丁
plausible patches: patches that pass the test suite
方法概述overview
这页PPT:将总览图黑色虚线框出

建立初始 prompt,得到第一个 patch
通过 test suite 判断 patch 是否成立
- 如果成立进入下一阶段
- 如果不成立持续询问 Chatgpt 直到获取一个 plausible patch
输入已经获取的 plausible patch 及相关信息,获取更多 plausible patch

可信的补丁:通过测试套件的补丁
plausible patches: patches that pass the test suite
① 建立初始 prompt,得到第一个 patch
初始输入initial input(通过红色虚线方框突出重点)

1、初始提示符:您是一个自动程序修复工具
初始 prompt:You are an Automated Program Repair Tool

2、在同一个bug项目中包含一些历史bug修复的例子
include a few examples of historical bug fixes within the same buggy project

少样本通过这样做,我们将模型调整到修复任务并允许它
few-shot examples By doing so, we gear the model towards the repair task and allow it
学习任务的所需输出格式(即补丁)。
to learn the desired output format (i.e. a patch) of the task.
3、用填充的位置指示器替换函数中有错误的代码完全≪≫
replace the buggy code within the function with an infill location indicator (≫ [ INFILL ] ≪)

4、提供原始的bug行
provide the original buggy line

5、失败的测试1)它的名称,2)触发测试失败的相关代码行,以及3)产生的错误信息
failing test(s) 1) its name, 2) the relevant code line(s) triggering the test failure, and 3) the error message produced


②通过 test suite 判断 patch 是否成立
- 如果成立进入下一阶段
- 如果不成立持续询问 Chatgpt 直到获取一个 plausible patch
可信的补丁:通过测试套件的补丁
plausible patches: patches that pass the test suite

③ 输入已经获取的 plausible patch 及相关信息,获取更多 plausible patch
可信的补丁:通过测试套件的补丁
plausible patches: patches that pass the test suite

最后两个步骤

评估Evaluation
基线Baseline
1、8个最近的基于学习和llm的APR基线
8 recent learning-based and LLM-based APR baselines
2、12个精选的传统方法
12 selected traditional techniques
3、BaseChatGPT
BaseChatGPT
基准Benchmark:
4j和QuixBugs的缺陷
Defects4j and QuixBugs
研究问题Research questions
1、RQ1:ChatRepair与最先进的APR技术相比,其性能如何?
• RQ1: How does the performance of ChatRepair compare against the state-of-the-art techniques for APR?
2、RQ2: ChatRepair在不同的修复场景下是如何执行的?
• RQ2: How does ChatRepair perform when used in different repair scenarios?
3、RQ3: ChatRepair的不同组成部分对改进修复效果的贡献是什么
• RQ3: What are the contributions of different components of ChatRepair in improving repair effectiveness?
RQ1:ChatRepair与最先进的APR技术相比,其性能如何

1.ChatRepair可以比仅使用ChatGPT模型的基线,分别在Defects4j 1.2和2.0上,提高修复了34和23个bug
ChatRepair can improve over the baseline of just using the ChatGPT model with 34 and 23 more bug fixes on Defects4j 1.2 and 2.0 respectively.
2.比目前最先进的APR工具多15和17个。
with 15 and 17 more than the current state-of-the-art APR tool.

ChatRepair能够正确地修复quixbugs中的所有bug——java和python数据集,击败所有性能最好的技术
ChatRepair is able to correctly fix all bugs within the QuixBugs-Java and-Python datasets, beating out all top-performing techniques.
韦恩图(展示不同方法修复的集合)
存在有些方法识别的漏洞,这篇文章不能识别


RQ2: ChatRepair在不同的修复场景下是如何执行的?
基线:BaseChatGPT / CodexRepair
baseline: BaseChatGPT / CodexRepair

BaseChatGPT没有产生令人印象深刻的改进
BaseChatGPT not yield impressive improvements
RQ3: ChatRepair的不同组成部分对改进修复效果的贡献是什么


相关文章:
【网安大模型专题10.19】※论文5:ChatGPT+漏洞定位+补丁生成+补丁验证+APR方法+ChatRepair+不同修复场景+修复效果(韦恩图展示)
Keep the Conversation Going: Fixing 162 out of 337 bugs for $0.42 each using ChatGPT 写在最前面背景介绍自动程序修复流程Process of APR (automated program repair)1、漏洞程序2、漏洞定位模块3、补丁生成4、补丁验证 (可以学习的PPT设计)经典的…...
C盘满了怎么清理文件?
电脑的C盘是我们电脑存储系统文件和应用程序的一个重要盘符,很多人经常会遇到C盘空间不足的问题;虽然我们可以通过卸载程序或者删除文件来释放空间,但是在这个过程中往往会误删掉一些重要的文件,造成部分程序可能无法正常使用。 因…...
pytest方法间变量值传递--request夹具
相当于self对象,因为调试的时候测试用例是类似沙箱的单步运行,所以self对象的属性被阻挡在沙箱外边。 request.cls 是pytest中的一个属性,它允许您在测试类中共享数据或属性。当您使用pytest编写测试类时,request 夹具允许您在测…...
Linux 内核定时器(高级字符设备五)
一、Linux 内核定时器介绍 在 Linux 内核中很多函数是基于定时器进行驱动的,但是内核定时器的精度并不高,所以不能作为高精度定时器使用。并且内核定时器的运行没有周期性,到达计时终点后会自动关闭。如果要实现周期性定时,就要在…...
「快学Docker」Docker镜像和容器的创建与管理
「快学Docker」Docker镜像和容器的创建与管理 引言什么是Docker镜像?镜像获取和使用镜像获取镜像使用 什么是Docker容器?Docker容器与主机之间的交互基于Dockerfile创建镜像基于镜像创建容器总结 引言 Docker镜像和容器是当今云计算领域中最受欢迎的技术…...
Zabbix出现 404Not FoundThe requested URL /zabbix was not found on this server.
目录 一、问题: 二、原因: 三、解决方法: 一、问题: Not Found The requested URL /zabbix was not found on this server. 二、原因: 未找到 在此服务器上找不到请求的 URL /zabbix。 /etc/httpd/conf.d 目录…...
【STM32】标准库的引入
一、为什么要会有标志外设库 1、传统单片机软件开发方式 (1)芯片厂商提供数据手册、示例代码、开发环境 (2)单片机软件工程师面向产品功能,查阅数据手册,参考官方示例代码进行开发 (3)硬件操作的方式是用C语言对寄存器进行读写以操作硬件 (4)主要工作量…...
Redis的淘汰策略
Redis是一种基于内存的高性能键值存储数据库,由于内存资源有限,当Redis中的数据量增大时,会导致内存占用过多,可能会影响系统的性能和稳定性。为了解决这个问题,Redis提供了一些淘汰策略来自动清理不再使用的key&#…...
Linux友人帐之日志与备份
一、日志 1.1概述 日志文件是重要的系统信息文件,其中记录了许多重要的系统事件,包括用户的登录信息、系统的启动信息、系统的安全信息、邮件相关信息、各种服务相关信息等。日志对于安全来说也很重要,它记录了系统每天发生的各种事情&#…...
git中如何在父仓库提交子仓库的修改
子仓库在父仓库中进行了修改,你需要按照以下步骤提交子仓库的修改: 切换到子仓库目录:使用cd命令进入子仓库所在的目录。拉取子仓库的最新更改:使用git pull命令拉取子仓库的最新更改,确保你的本地是最新的版本。提交…...
【【萌新的SOC学习之SD卡DMA回路读写大数据的实验】】
萌新的SOC学习之SD卡读写大数据的实验 记得先设定 FIFO 的位宽和深度 还有DMA 的大小 其他基本结构设计参照上一个SD卡读写小数据的实验 #include "xparameters.h" //包含vivado所导出的信息包含vivado的基地址 #include "xil_printf.h" //调用打印函…...
在k8s中 ,数据包是怎么从外部流转进入到pod的?
在 Kubernetes 中,当您创建 NodePort 类型的服务时,流量不会直接从主机的 IP 和端口转发到特定 Pod 的 IP 和端口。相反,流量被转发到集群中的一个节点,然后从那里转发到相应的 Pod。 1、当您创建 NodePort 类型的服务时…...
微信小程序设置 wx.showModal 提示框中 确定和取消按钮的颜色
wx官方提供的 showModal 无疑是个非常优秀的选择提示工具 但是 我们还可以让他的颜色更贴近整体的小程序风格 cancelColor 可以改变取消按钮的颜色 confirmColor 则可以控制确定按钮的颜色 参考代码如下 wx.showModal({cancelColor: #0000FF,confirmColor: #45B250,content:…...
【Chrome】使用k8s、docker部署无头浏览器Headless,Java调用示例
什么是无头浏览器? 无头浏览器是一种没有图形用户界面的浏览器。无头浏览器不通过其图形用户界面(GUI)控制浏览器的操作,而是使用命令行。 为什么要用Chrome无头? Chrome Headless用于抓取(谷歌)、测试(开发者)和黑客(黑客)。搜索引擎&…...
springmvc http请求,支持get,post,附件传输和参数传输
主要解决http请求支持get,post,put,delete等常规方法,支持RequestParam,RequestBody,PathVariable等参数格式传输,支持传输附件同时传递参数等,主体代码如下: package mes.client.action;import cn.hutool.crypto.digest.DigestUt…...
linux性能分析(七)CPU性能篇(二)怎么理解平均负载
一 怎么理解平均负载 ① 如何查看平均复杂 查看系统负载的命令: top、uptime、w、cat /proc/loadavg、tload /proc/loadavg 思考: uptime每列输出的含义?重点: 当前时间、系统运行时间、正在登录用户数、平均负载 ② 思考࿱…...
PostgreSQL12中浮点数输出算法优化带来的小问题
最近碰到同事发来这样两个SQL,开发反馈输出的结果异常。 bill# select 0.1284*100::float;?column? --------------------12.839999999999998 (1 row)bill# select (0.1284*100)::float;float8 --------12.84 (1 row) 乍一看其实能看出明显的区别,由于…...
Hive安装配置笔记
版本说明 hadoop-3.3.6(已安装) mysql-8(已安装) hive-3.1.3 将hive解压到对应目录后做如下配置: 基本配置与操作 1、hive-site <configuration><!-- jdbc连接的URL --><property><name>ja…...
前端数据可视化之【Echarts下载使用】
目录 🌟下载🌟浏览器引入🌟模块化引入 🌟使用🌟基本使用步骤 🌟绘制一个简单的图表🌟写在最后 🌟下载 🌟浏览器引入 官网下载界面:官方网站 或 Echarts中文…...
本机计算机上的mysql启动后停止
本机计算机上的mysql启动后停止 原因:mysql5.0和mysql8.0配置不同 把my.ini改成以下设置然后再重新 mysqld --initialize-insecure --usermysql然后再启动 net start mysqlmysql8.0 下面的路劲可自定义 [client] default-character-setutf8 [mysql] default-cha…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...
MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
