[論文閱讀] 人工智能+軟件工程 | 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擁有了“定制化記憶”,專治“項目知識不足”的痛點:

  1. 準確率提升:在Defects4J基準測試中,MemFL用GPT-4o-mini模型比傳統LLM方法多找到12.7%的故障方法,復雜項目Closure上更是多定位27.6%。
  2. 效率翻倍:執行時間僅為傳統方法的21%-24%,成本低至3.9%-33%,相當于用更少的“算力電費”辦更多的事。
  3. 通用適配:不依賴特定模型,用最新的GPT-4.1-mini模型時,準確率比所有基線方法高24.4%,證明這招對不同LLM都有效。

三、創新點:像學生復習一樣分階段記憶

MemFL的獨特之處,在于給LLM設計了“雙軌記憶系統”,靈感類似學生復習:

  • 靜態內存(課本知識)
    提前整理好項目的“基礎資料”,包括項目整體目標、每個類的功能簡介。就像考試前背熟的公式定理,讓LLM一開始就知道“這個項目是做什么的,各個模塊負責什么”。
  • 動態內存(錯題本)
    在調試過程中,LLM會把每次成功或失敗的經驗記錄下來,比如“某個錯誤信息通常和哪些類相關”。就像錯題本里總結的“這類題型要注意XX點”,越用越聰明。
  • 三步極簡流程
    把復雜的調試拆成“看報告→縮范圍→定故障”三步驟,避免傳統方法的多代理復雜協作,就像醫生看病先看檢查報告,再縮小科室范圍,最后精準診斷。

四、核心方法:三步定位法+雙內存系統

(一)外部內存怎么建?

  1. 靜態內存:項目說明書

    • 用LLM自動生成項目摘要(如“這個項目是做圖表生成的,核心類包括ChartRenderer、DataParser”)和類功能表(如“ChartRenderer負責渲染圖表,參數是數據和樣式”)。
    • 就像提前為每個項目準備一本“快速指南”,LLM不用從頭讀代碼就能抓住重點。
  2. 動態內存:調試經驗庫

    • 第一次調試時,先用靜態內存分析,然后對比結果和實際故障,總結出“調試指南”(如“當錯誤信息包含‘AST比較失敗’時,優先檢查Parser類”)。
    • 后續調試中不斷迭代優化這些指南,就像游戲里的“攻略升級”,越打越順手。

(二)MemFL三步流程詳解

  1. 第一步:故障報告解讀(Bug Review Generation)

    • 給LLM輸入錯誤信息、測試代碼和靜態內存,讓它生成“故障診斷報告”,比如“測試失敗是因為數據解析時格式錯誤,可能和DataParser類有關”。
    • 類比:醫生看CT報告,先判斷“問題可能出在消化系統”。
  2. 第二步:代碼范圍縮小(Code Condensation)

    • 分階段過濾無關代碼:
      • 先根據類覆蓋率排除無關類(比如“只有20%的測試用例用到的類暫時不看”)。
      • 再用動態內存里的經驗,比如“之前類似故障出現在Parser類,優先檢查這個類的方法”。
    • 類比:護士根據醫生判斷,先排除“骨科”,重點查“消化科”相關設備。
  3. 第三步:精準定位故障(Fault Confirmation)

    • 對剩下的可疑方法,結合動態內存中的調試策略(如“檢查該方法的參數校驗邏輯”),生成按可疑度排序的列表。
    • 類比:醫生用精密儀器對重點器官做詳細檢查,確定病灶位置。

五、總結:讓LLM從“通用維修工”變“項目專家”

這篇論文的核心思路,是通過“外部內存”讓LLM快速獲取項目專屬知識,把“通用型選手”變成“項目專家”。就像給外賣騎手一本“小區地圖手冊”+“客戶偏好筆記”,既能少走彎路,又能精準送達。
實驗數據顯示,MemFL在保持低成本的同時,顯著提升了復雜項目的故障定位能力,為AI輔助軟件開發(尤其是調試環節)提供了新方向。未來或許可以擴展到代碼修復、漏洞檢測等領域,讓大模型更懂“項目的語言”。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/83798.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/83798.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/83798.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java開發中復用公共SQL的方法

在一次Java后端開發的面試中,面試官問了我一個問題:“你在寫代碼時會復用公共SQL嗎?如果會的話,能詳細介紹一下你是如何實現的嗎?”這個問題讓我眼前一亮,因為在實際項目中,SQL復用確實是一個非…

C#學習26天:內存優化的幾種方法

1.減少對象創建 使用場景: 在循環或密集計算中頻繁創建對象時。涉及大量短生命周期對象的場景,比如日志記錄或字符串拼接。游戲開發中,需要頻繁更新對象狀態時。 說明: 重用對象可以降低內存分配和垃圾回收的開銷。使用對象池…

【opencv】基礎知識到進階(更新中)

安裝:pip install opencv-python 入門案例 讀取圖片 本節我們將來學習,如何使用opencv顯示一張圖片出來,我們首先需要掌握一條圖片讀取的api cv.imread("圖片路徑","讀取的方式") # 圖片路徑: 需要在工程目錄中,或者一個文件的絕對路徑 # 讀取…

【Part 3 Unity VR眼鏡端播放器開發與優化】第二節|VR眼鏡端的開發適配與交互設計

文章目錄 《VR 360全景視頻開發》專欄Part 3|Unity VR眼鏡端播放器開發與優化第一節|基于Unity的360全景視頻播放實現方案第二節|VR眼鏡端的開發適配與交互設計一、Unity XR開發環境與設備適配1.1 啟用XR Plugin Management1.2 配置OpenXR與平…

SQL進階之旅 Day 16:特定數據庫引擎高級特性

【SQL進階之旅 Day 16】特定數據庫引擎高級特性 開篇 在“SQL進階之旅”系列的第16天,我們將探討特定數據庫引擎的高級特性。這些特性通常為某些特定場景設計,能夠顯著提升查詢性能或簡化復雜任務。本篇文章將覆蓋MySQL、PostgreSQL和Oracle的核心高級…

c++算法學習4——廣度搜索bfs

一、引言:探索迷宮的智能方法 在解決迷宮最短路徑問題時,廣度優先搜索(BFS)是一種高效而優雅的算法。與深度優先搜索(DFS)不同,BFS采用"由近及遠"的搜索策略,逐層探索所有…

4.RV1126-OPENCV 圖像輪廓識別

一.圖像識別API 1.圖像識別作用 它常用于視覺任務、目標檢測、圖像分割等等。在 OPENCV 中通常使用 Canny 函數、findContours 函數、drawContours 函數結合在一起去做輪廓的形檢測。 2.常用的API findContours 函數:用于尋找圖片的輪廓,并把所有的數…

Qt多線程訪問同一個數據庫源碼分享(基于Sqlite實現)

Qt多線程訪問同一個數據庫源碼分享(基于Sqlite實現) 一、實現難點線程安全問題死鎖風險連接管理問題數據一致性性能瓶頸跨線程信號槽最佳實踐建議 二、源碼分享三、測試1、新建一個多線程類2、開啟多線程插入數據 一、實現難點 多線程環境下多個線程同時…

雙空間知識蒸餾用于大語言模型

Dual-Space Knowledge Distillation for Large Language Models 發表:EMNLP 2024 機構:Beijing Key Lab of Traffic Data Analysis and Mining 連接:https://aclanthology.org/2024.emnlp-main.1010.pdf 代碼:GitHub - songmz…

貪心算法應用:多重背包啟發式問題詳解

貪心算法應用:多重背包啟發式問題詳解 多重背包問題是經典的組合優化問題,也是貪心算法的重要應用場景。本文將全面深入地探討Java中如何利用貪心算法解決多重背包問題。 多重背包問題定義 **多重背包問題(Multiple Knapsack Problem)**是背包問題的變…

ES6 Promise 狀態機

狀態機:抽象的計算模型,根據特定的條件或者信號切換不同的狀態 一、Promise 是什么? 簡單來說,Promise 就是一個“承諾對象”。在ES6 里,有些代碼執行起來需要點時間,比如加載文件、等待網絡請求或者設置…

【Docker管理工具】部署Docker可視化管理面板Dpanel

【Docker管理工具】部署Docker可視化管理面板Dpanel 一、Dpanel介紹1.1 DPanel 簡介1.2 主要特點 二、本次實踐規劃2.1 本地環境規劃2.2 本次實踐介紹 三、本地環境檢查3.1 檢查Docker服務狀態3.2 檢查Docker版本3.3 檢查docker compose 版本 四、下載Dpanel鏡像五、部署Dpanel…

最新研究揭示云端大語言模型防護機制的成效與缺陷

一項全面新研究揭露了主流云端大語言模型(LLM)平臺安全機制存在重大漏洞與不一致性,對當前人工智能安全基礎設施現狀敲響警鐘。該研究評估了三大領先生成式AI平臺的內容過濾和提示注入防御效果,揭示了安全措施在阻止有害內容生成與…

docker中,容器時間和宿機主機時間不一致問題

win11下的docker中有個mysql。今天發現插入數據的時間不正確。后來發現原來是docker容器中的時間不正確。于是嘗試了各種修改,什么run -e TZ"${tzutil /g}",TZ"Asia/Shanghai",還有初始化時帶--mysqld一類的,…

uniapp實現的簡約美觀的星級評分組件

采用 uniapp 實現的一款簡約美觀的星級評分模板,提供絲滑動畫效果,用戶可根據自身需求進行自定義修改、擴展,純CSS、HTML實現,支持web、H5、微信小程序(其他小程序請自行測試) 可到插件市場下載嘗試&#x…

go語言的鎖

本篇文章主要講鎖,主要會涉及go的sync.Mutex和sync.RWMutex。 一.鎖的概念和發展 1.1 鎖的概念 所謂的加鎖和解鎖其實就是指一個數據是否被占用了,通過Mutex內的一個狀態來表示。 例如,取 0 表示未加鎖,1 表示已加鎖&#xff…

Ubuntu 服務器軟件更新,以及常用軟件安裝 —— 一步一步配置 Ubuntu Server 的 NodeJS 服務器詳細實錄 3

前言 前面,我們已經 安裝好了 Ubuntu 服務器系統,并且 配置好了 ssh 免密登錄服務器 ,現在,我們要來進一步的設置服務器。 那么,本文,就是進行服務器的系統更新,以及常用軟件的安裝 調整 Ubu…

如何從零開始建設一個網站?

當你沒有建站的基礎和建站的知識,那么應該如何開展網站建設和網站管理。而今天的教程是不管你是為自己建站還是為他人建站都適合的。本教程會指導你如何進入建站,將建站的步驟給大家分解: 首先我們了解一下,建站需要那些步驟和流程…

網絡可靠性的定義與核心要素

網絡可靠性(Network Reliability)是指網絡系統在特定時間范圍內持續提供穩定、無中斷、符合預期性能的服務能力。其核心目標是確保數據能夠準確、完整、及時地傳輸,即使在部分故障或異常情況下仍能維持基本功能。 1. 網絡可靠性的核心指標 衡…

GpuGeek如何成為AI基礎設施市場的中堅力量

AI時代,算力基礎設施已成為支撐技術創新和產業升級的關鍵要素。作為國內專注服務算法工程師群體的智算平臺,GpuGeek通過持續創新的服務模式、精準的市場定位和系統化的生態建設,正快速成長為AI基礎設施領域的中堅力量。本文將深入分析GpuGeek…