返回首頁

AI 程式開發/軟體測試

gpt-oss-20b 檢查重構 diff 找出 Rope 13 類缺陷,12 項獲維護者接受

研究者讓本機模型只讀取 Python 重構前後的 diff,從 217 組 Rope 轉換中歸納出 13 類行為改變。維護者接受其中 12 項為缺陷,但模型精確率僅 0.67,尚不足以取代測試或靜態分析。

Nevit Dilmen · CC BY-SA 3.0 · Image source
zh-Hant

一項新研究把基礎模型當成重構後的「行為保持 oracle」:輸入不是完整儲存庫或測試結果,而是 git unified diff,再要求模型判斷轉換是否改變程式行為。團隊重用 Rope 1.3.0 對 TextBlob 0.17.1 產生的 217 組成功轉換,涵蓋重新命名、抽取、內嵌與搬移欄位或方法等七類操作,並以本機 gpt-oss-20b 零樣本執行三次、取多數決。

對照一名具有十年經驗的 Python 工程師標註,模型的召回率為 0.91、精確率 0.67、準確率 0.84,F1 為 0.77。人工基準在 217 組轉換中判定 64 組改變行為;研究者依重構類型、主要症狀與最小重現案例合併後,得到 13 類不同缺陷。它們包括抽取方法後因縮排錯置而在類別外定義、內嵌方法漏改屬性或錯刪 import、改寫格式化字串時使用錯誤參數、允許處理 `__new__` 或比較方法,以及搬移欄位後形成循環相依。

研究者把 13 個案例提交至 Rope issue tracker。依維護者留言、標籤與狀態判定,12 個仍被接受為 bug;唯一例外是內嵌 `__new__`,維護者將其歸為尚未支援的增強需求。不過,「接受」不等於已修補:例如抽取方法造成 `NameError` 的 #825 仍然開放,沒有關聯分支或 pull request。

工程上的價值在於,模型能補足只檢查語法或測試覆蓋不足的重構驗證,尤其適合作為 CI 中的高召回篩選器;但 0.67 精確率意味著每三個警報約有一個可能是假陽性。研究也只測試單一專案、舊版 Rope,真值由一名專家判定,而且 diff 模式容易誤讀 Python 縮排或臆測未顯示的外部呼叫。後續需要多專案、多評審及可執行測試交叉驗證,並確認缺陷是否仍存在於 Rope 新版本。

來源

  1. Detecting Behavioral Changes in Python Refactoring Implementations with Foundation Models
  2. Rope issue #825:Extract Method 將方法置於類別作用域外