頂會ICSE-2023釋出LIBRO技術,利用大模型技術進行缺陷重現,自動重現率達33%

華為雲開發者聯盟發表於2023-05-19
摘要:本文圍繞LIBRO技術的主要步驟進行介紹。

本文分享自華為雲社群《【LLM for SE】頂會ICSE-2023釋出LIBRO技術,利用大模型技術進行缺陷重現,自動重現率(33%)實現業界突破》,作者: 華為雲軟體分析Lab 。

隨著大模型(Large Language Model, LLM)技術的發展,LLM在許多軟體工程任務上表現出良好的效果,比如程式碼生成、搜尋、對話等任務。近期,許多研究工作結合LLM技術和軟體分析技術來解決軟體工程領域的問題。軟體工程頂級會議ICSE2023文章《Large Language Models are Few-shot Testers: Exploring LLM-based General Bug Reproduction》(來自韓國科學技術院大學的Shin Yoo團隊)釋出了LIBRO技術,是首個面向通用缺陷的自動重現工作。該技術有效利用大模型技術提升了缺陷重現技術的有效性,實現業界突破。實驗結果表明,在主流資料集Defects4J中,LIBRO技術可根據缺陷報告自動生成測試用例並重現出251個缺陷(共750個缺陷),自動重現率達33%。LIBRO藉助LLM技術在NLP領域的突出進展,在SE領域中的缺陷重現問題中實現重大突破。利用LLM的技術優勢來提升SE領域的技術能力有望成為行業趨勢,吸引越來越多的研究者和業界從業人員。

論文連結詳見:https://arxiv.org/abs/2209.11515

以下圍繞LIBRO技術的主要步驟進行介紹。如圖1所示,LIBRO框架主要包括四個步驟,分別是:(A) 提示工程、(B) LLM查詢、(C) 後處理、(D) 選擇&排序。

頂會ICSE-2023釋出LIBRO技術,利用大模型技術進行缺陷重現,自動重現率達33%

步驟A(提示工程):在LLM技術中,如何構造有效的提示進行查詢是一個關鍵問題。LIBRO基於缺陷報告構建提示資訊,利用的資訊包括缺陷報告的標題和描述資訊。此外,LIBRO還在提示資訊中加入測試用例例項引導大模型生成測試用例。下圖給出了一個缺陷報告的例項和對應的提示資訊。

頂會ICSE-2023釋出LIBRO技術,利用大模型技術進行缺陷重現,自動重現率達33%頂會ICSE-2023釋出LIBRO技術,利用大模型技術進行缺陷重現,自動重現率達33%

步驟B (LLM查詢):將之前構造的提示資訊輸入大模型,大模型將輸出一個測試用例生成的結果。具體來說,LIBRO使用的大模型是基於GPT-3的CodeX模型。LIBRO構造的提示資訊末尾是“public void test”,這會引導大模型生成一段測試用例程式碼。此外,LIBRO透過加權隨機取樣(weighted random sampling)來提升大模型查詢效果,並生成多個測試用例作為備選測試用例。下圖是基於之前例子裡的提示資訊生成的一段測試用例程式碼。

頂會ICSE-2023釋出LIBRO技術,利用大模型技術進行缺陷重現,自動重現率達33%

步驟C (後處理):LIBRO對大模型生成的測試用例的後處理指將測試用例函式放入對應測試類中,並解決執行該測試用例所需的依賴。具體來說,LIBRO首先根據測試類與測試用例函式的文字相似度來計算測試類和測試函式的對映關係。該策略在業界主流資料集中能夠成功匹配89%的測試類與測試函式的關係,是一種有效的匹配策略。為了解決測試用例函式的依賴問題,LIBRO首先解析生成的測試用例函式,並識別變數型別以及引用的類名/建構函式/異常。然後,LIBRO透過在測試類中與現有import語句進行詞法匹配,並過濾掉已經匯入的類名。

步驟D (選擇&排序):一個能夠重現缺陷的測試用例指當且僅當測試用例因為缺陷報告中說明的缺陷而執行失敗。換而言之,LIBRO生成能夠重現缺陷的必要條件是:該測試用例在被測程式的錯誤版本中編譯成功但是執行失敗。該研究工作將這類測試用例稱為FIB(Fail In the Buggy program)。LIBRO對大模型生成的若干測試用例進行選擇和排序,從而優先推薦質量更高的生成結果。

LIBRO的選擇和排序演算法主要包括三種啟發式策略:(1)如果測試用例執行失敗資訊和/或顯示了在缺陷報告中提到的行為(比如異常或輸出值),那麼該測試用例可能是重現缺陷的測試用例。(2)LIBRO根據選擇測試用例的集合大小來觀察大模型生成的測試用例之間的一致性。直覺上,如果大模型生成大量相似的測試用例,那麼說明大模型認為這類測試用例具有更高的可信度。即,這類測試用例是大模型達成的共識。(3)LIBRO根據測試用例的長度來決定它們的優先順序,原因是短的測試用例更便於使用者理解。

缺陷重現例項介紹:

以下是一個LIBRO重現AssertJ-Core專案中編號為2666的缺陷報告的真實案例介紹。如下截圖Table VIII是實際缺陷報告,如下截圖Listing 4是利用LIBRO生成的測試用例。缺陷報告中提到在特定條件下比較i和I會失敗。LIBRO根據缺陷報告的描述自動生成了能夠重現該缺陷的測試用例。

頂會ICSE-2023釋出LIBRO技術,利用大模型技術進行缺陷重現,自動重現率達33%頂會ICSE-2023釋出LIBRO技術,利用大模型技術進行缺陷重現,自動重現率達33%

文章來自:PaaS技術創新Lab;PaaS技術創新Lab隸屬於華為雲,致力於綜合利用軟體分析、資料探勘、機器學習等技術,為軟體研發人員提供下一代智慧研發工具服務的核心引擎和智慧大腦。我們將聚焦軟體工程領域硬核能力,不斷構築研發利器,持續交付高價值商業特性!加入我們,一起開創研發新“境界”!

PaaS技術創新Lab主頁連結:https://www.huaweicloud.com/lab/paas/home.html

 

點選關注,第一時間瞭解華為雲新鮮技術~

相關文章