[论文阅读] 人工智能+软件工程 | MemFL:给大模型装上“项目记忆”,让软件故障定位又快又准
【论文解读】MemFL:给大模型装上“项目记忆”,让软件故障定位又快又准
论文信息
arXiv:2506.03585
Improving LLM-Based Fault Localization with External Memory and Project Context Inseok Yeo, Duksan Ryu, Jongmoon Baik
Subjects: Software Engineering (cs.SE)
一、研究背景:当通用工具遇到复杂项目
想象你是一名修理工,面对一辆自行车故障和一辆汽车故障,所需的知识和工具肯定不同。软件故障定位也是如此:
-
传统方法的困境:
早期的“频谱法”(SBFL)像通过统计零件使用频率找问题,“变异法”(MBFL)像逐个修改零件看影响,都需要大量测试数据,修复杂项目就像用扳手修手表,效率低下。
后来的“机器学习法”(LBFL)虽然聪明,但需要大量标注好的“故障数据集”,就像学修车必须先看遍所有车型故障手册,现实中很难做到。 -
大模型的新挑战:
近年大火的大语言模型(LLM),比如GPT,不用大量数据就能分析代码找故障,看似万能。但问题来了:- 它缺乏“项目专属知识”:比如某个项目特有的调试模式、类功能描述,就像修理工没看过某款车的说明书,修起来全靠通用经验。
- 复杂项目直接抓瞎:比如在Defects4J基准测试中,传统LLM方法在复杂项目Closure上准确率暴跌,而人类开发者却能通过项目背景快速定位。
核心问题:如何让LLM快速“理解”具体项目的独特逻辑,避免每次都从头分析?
二、主要贡献:给LLM一个“项目记忆小本本”
这篇论文的核心成果,是让LLM拥有了“定制化记忆”,专治“项目知识不足”的痛点:
- 准确率提升:在Defects4J基准测试中,MemFL用GPT-4o-mini模型比传统LLM方法多找到12.7%的故障方法,复杂项目Closure上更是多定位27.6%。
- 效率翻倍:执行时间仅为传统方法的21%-24%,成本低至3.9%-33%,相当于用更少的“算力电费”办更多的事。
- 通用适配:不依赖特定模型,用最新的GPT-4.1-mini模型时,准确率比所有基线方法高24.4%,证明这招对不同LLM都有效。
三、创新点:像学生复习一样分阶段记忆
MemFL的独特之处,在于给LLM设计了“双轨记忆系统”,灵感类似学生复习:
- 静态内存(课本知识):
提前整理好项目的“基础资料”,包括项目整体目标、每个类的功能简介。就像考试前背熟的公式定理,让LLM一开始就知道“这个项目是做什么的,各个模块负责什么”。 - 动态内存(错题本):
在调试过程中,LLM会把每次成功或失败的经验记录下来,比如“某个错误信息通常和哪些类相关”。就像错题本里总结的“这类题型要注意XX点”,越用越聪明。 - 三步极简流程:
把复杂的调试拆成“看报告→缩范围→定故障”三步骤,避免传统方法的多代理复杂协作,就像医生看病先看检查报告,再缩小科室范围,最后精准诊断。
四、核心方法:三步定位法+双内存系统
(一)外部内存怎么建?
-
静态内存:项目说明书
- 用LLM自动生成项目摘要(如“这个项目是做图表生成的,核心类包括ChartRenderer、DataParser”)和类功能表(如“ChartRenderer负责渲染图表,参数是数据和样式”)。
- 就像提前为每个项目准备一本“快速指南”,LLM不用从头读代码就能抓住重点。
-
动态内存:调试经验库
- 第一次调试时,先用静态内存分析,然后对比结果和实际故障,总结出“调试指南”(如“当错误信息包含‘AST比较失败’时,优先检查Parser类”)。
- 后续调试中不断迭代优化这些指南,就像游戏里的“攻略升级”,越打越顺手。
(二)MemFL三步流程详解
-
第一步:故障报告解读(Bug Review Generation)
- 给LLM输入错误信息、测试代码和静态内存,让它生成“故障诊断报告”,比如“测试失败是因为数据解析时格式错误,可能和DataParser类有关”。
- 类比:医生看CT报告,先判断“问题可能出在消化系统”。
-
第二步:代码范围缩小(Code Condensation)
- 分阶段过滤无关代码:
- 先根据类覆盖率排除无关类(比如“只有20%的测试用例用到的类暂时不看”)。
- 再用动态内存里的经验,比如“之前类似故障出现在Parser类,优先检查这个类的方法”。
- 类比:护士根据医生判断,先排除“骨科”,重点查“消化科”相关设备。
- 分阶段过滤无关代码:
-
第三步:精准定位故障(Fault Confirmation)
- 对剩下的可疑方法,结合动态内存中的调试策略(如“检查该方法的参数校验逻辑”),生成按可疑度排序的列表。
- 类比:医生用精密仪器对重点器官做详细检查,确定病灶位置。
五、总结:让LLM从“通用维修工”变“项目专家”
这篇论文的核心思路,是通过“外部内存”让LLM快速获取项目专属知识,把“通用型选手”变成“项目专家”。就像给外卖骑手一本“小区地图手册”+“客户偏好笔记”,既能少走弯路,又能精准送达。
实验数据显示,MemFL在保持低成本的同时,显著提升了复杂项目的故障定位能力,为AI辅助软件开发(尤其是调试环节)提供了新方向。未来或许可以扩展到代码修复、漏洞检测等领域,让大模型更懂“项目的语言”。
相关文章:
[论文阅读] 人工智能+软件工程 | MemFL:给大模型装上“项目记忆”,让软件故障定位又快又准
【论文解读】MemFL:给大模型装上“项目记忆”,让软件故障定位又快又准 论文信息 arXiv:2506.03585 Improving LLM-Based Fault Localization with External Memory and Project Context Inseok Yeo, Duksan Ryu, Jongmoon Baik Subjects: Software Engi…...

银行卡二三四要素实名接口如何用PHP实现调用?
一、什么是银行卡二三四要素实名接口 输入银行卡卡号、姓名、身份证号码、手机号,验证此二三四要素是否一致。 二、核心价值 1. 提升风控效率 通过实时拦截冒用身份开户,银行卡二三四要素实名接口显著降低了人工审核成本,效率提升50%以上…...

itvbox绿豆影视tvbox手机版影视APP源码分享搭建教程
我们先来看看今天的主题,tvbox手机版,然后再看看如何搭建: 很多爱好者都希望搭建自己的影视平台,那该如何搭建呢? 后端开发环境: 1.易如意后台管理优化版源码; 2.宝塔面板; 3.ph…...
Docker load 后镜像名称为空问题的解决方案
在使用 docker load命令从存档文件中加载Docker镜像时,有时会遇到镜像名称为空的情况。这种情况通常是由于在保存镜像时未正确标记镜像名称和标签,或者在加载镜像时出现了意外情况。本文将介绍如何诊断和解决这一问题。 一、问题描述 当使用 docker lo…...
Redis 集群批量删除key报错 CROSSSLOT Keys in request don‘t hash to the same slot
Redis 集群报错 CROSSSLOT Keys in request dont hash to the same slot 的原因及解决方案 1. 错误原因 在 Redis 集群模式下,数据根据 哈希槽(Slot) 分散存储在不同的节点上(默认 16384 个槽)。当执行涉及多个 key …...

网页抓取混淆与嵌套数据处理流程
当我们在网页抓取中,遇到混淆和多层嵌套的情况是比较常见的挑战。混淆大部分都是为了防止爬虫而设计的,例如使用JavaScript动态加载、数据加密、字符替换、CSS偏移等。多层嵌套则可能是指HTML结构复杂,数据隐藏在多层标签或者多个iframe中。 …...

高性能MYSQL:复制同步的问题和解决方案
一、复制的问题和解决方案 中断MySQL的复制并不是件难事。因为实现简单,配置相当容易,但也意味着有很多方式会导致复制停止,陷入混乱并中断。 (一)数据损坏或丢失的错误 由于各种各样的原因,MySQL 的复制…...
如何通过外网访问内网服务器?怎么让互联网上连接本地局域网的网址
服务器作为一个数据终端,是很多企事业单位不可获缺的重要设备,多数公司本地都会有部署服务器供测试或部署一些网络项目使用。有人说服务器就是计算机,其实这种说法不是很准确。准确的说服务器算是计算机的一种,它的作用是管理计算…...

大话软工笔记—架构模型
1. 架构模型1—拓扑图 (1)拓扑图概念 拓扑图,将多个软件系统用网络图连接起来的表达方式。 (2)拓扑图分类 总线型结构 比较普遍采用的方式,将所有的系统接到一条总线上。 星状结构 各个系统通过点到…...

javaweb -html -CSS
HTML是一种超文本标记语言 超文本:超过了文本的限制,比普通文本更强大,除了文字信息,还可以定义图片、音频、视频等内容。 标记语言:由标签"<标签名>"构成的语言。 CSS:层叠样式表,用于…...

spring task定时任务快速入门
spring task它基于注解和配置,可以轻松实现任务的周期性调度、延迟执行或固定频率触发。按照我们约定的时间自动执行某段代码。例如闹钟 使用场景 每月还款提醒,未支付的订单自动过期,收到快递后自动收货,系统自动祝你生日快乐等…...

搭建nginx的负载均衡
1、编写一个configMap的配置文件 events {worker_connections 1024; # 定义每个worker进程的最大连接数 }http {# 定义通用代理参数(替代proxy_params文件)proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-F…...

Appium+python自动化(八)- 认识Appium- 下章
1、界面认识 在之前安装appium的时候说过我们有两种方法安装,也就有两种结果,一种是有界面的(客户端安装),一种是没有界面的(终端安装),首先我们先讲一下有界面的,以及界…...

LabVIEW的MathScript Node 绘图功能
该VI 借助 LabVIEW 的 MathScript Node,结合事件监听机制,实现基于 MathScript 的绘图功能,并支持通过交互控件自定义绘图属性。利用 MathScript 编写脚本完成图形初始化,再通过LabVIEW 事件结构响应用户操作,动态修改…...
互斥锁与消息队列的架构哲学
更多精彩内容请访问:通义灵码2.5——基于编程智能体开发Wiki多功能搜索引擎更多精彩内容请访问:更多精彩内容请访问:通义灵码2.5——基于编程智能体开发Wiki多功能搜索引擎 一、资源争用的现实镜像 当多个ATM机共用一个现金库时,…...

每日Prompt:治愈动漫插画
提示词 现代都市治愈动漫插画风格,现代女子,漂亮,长直发,20岁,豆沙唇,白皙,气质,清纯现代都市背景下,夕阳西下,一位穿着白色露脐短袖,粉色工装裤…...
stress-ng 服务器压力测试的工具学习
一、stress-ng (下一代压力测试) 介绍 项目地址:https://github.com/ColinIanKing/stress-ng stress-ng 将以多种可选方式对计算机系统进行压力测试。它旨在锻炼计算机的各种物理子系统以及各种操作系统内核接口。stress-ng 的特点: 360 压力测试100 …...

6.8 note
paxos算法_初步感知 Paxos算法保证一致性主要通过以下几个关键步骤和机制: 准备阶段 - 提议者向所有接受者发送准备请求,请求中包含一个唯一的编号。 - 接受者收到请求后,会检查编号,如果编号比它之前见过的都大,就会承…...

面试心得 --- 车载诊断测试常见的一些面试问题
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…...
Vue项目PDF目录功能集成【一】——方案深度思考
文章目录 项目背景一、方案一:数据透传 外部开发模式二、方案二:内置组件 黑盒模式三、方案三:激活官方实现 可控定制总结 项目背景 本项目是Vue 3 项目,需要使用文件预览组件(pdfjs 当前是作为sdk二次封装引入&am…...
服务器中僵尸网络攻击是指什么?
随着网络业务的不断发展,网络攻击的手段也变得越来越多,各个企业都会受到网络攻击的威胁,其中常见的网络攻击主要有DDOS攻击和CC攻击等类型,今天小编则为大家来介绍僵尸网络攻击是指什么! 僵尸网络主要是指采用一种或者…...
Java编程中常见的条件链与继承陷阱
格式错误的if-else条件链 典型结构与常见错误模式 在Java编程中,if-else条件链是一种常见的多条件处理模式,其标准结构如下: if (condition1) {// 处理逻辑1 } else if (condition2) {// 处理逻辑2 } else...

跟进一下目前最新的大数据技术
搭建最新平台 40C64G服务器,搭建3节点kvm,8C12G。 apache-hive-4.0.1-bin apache-tez-0.10.4-bin flink-1.20.1 hadoop-3.4.1 hbase-2.6.2 jdk-11.0.276 jdk8u452-b09 jdk8终于可以不用了 spark-3.5.5-bin-hadoop3 zookeeper-3.9.3 trino…...
ubuntu 系统分区注意事项
ubuntu 系统分区大小,注意事项: 安装ubuntu系统时,需要进行分区,手动分区时,有一点需要注意。一开始我也没有注意,长时间使用后才发现的问题。 需要注意一点,如果不对 /usr 进行单独分区&…...
当前市场环境下,软件行业的突围之道:技术演进与商业模式重构
一、行业背景:软件行业进入结构性调整期 2024年至今,软件行业面临三重挑战: 宏观经济承压:全球经济放缓,企业IT预算趋于谨慎; 资本市场收缩:融资环境收紧,盈利能力成为生死线&…...
Redis——主从哨兵配置
目录 基础概念 一、核心原理 二、核心特性 三、技术意义与应用价值 四、典型应用场景 案例部署 一、主从复制配置命令 二、哨兵模式部署命令 关键注意事项 基础概念 一、核心原理 内存存储与高性能 Redis 所有数据存储于内存中&…...

系统模块与功能设计框架
系统模块与功能设计框架,严格遵循专业架构设计原则,基于行业标准(如微服务架构、DDD领域驱动设计)构建。设计采用分层解耦模式,确保可扩展性和可维护性,适用于电商、企业服务、数字平台等中大型系统。 系统…...

我爱学算法之—— 前缀和(中)
一、724. 寻找数组的中心下标 题目解析 这道题,给定数组nums,要求我们找出这个数组的中心下标。 **中心下标:**指左侧所有元素的和等于右侧所有元素的和。 如果存在多个中心数组下标,就返回最左侧的中心数组下标。 算法思路 暴…...
leetcode sql50题
在中文站没找到对应的集合,想来自己动手拷贝过来,方便大家面试复习用,对应英文站点: https://leetcode.com/studyplan/top-sql-50/ Select #1757. 可回收且低脂的产品 链接: https://leetcode.cn/problems/recyclable-and-low-fa…...
word操作(持续更新)
1、图片前面(无间隔格式),有像标题标记一样的黑点 word段落左边的黑色小方块小黑点是什么(段落的换行和分页属性)_哔哩哔哩_bilibili...