ホームへ戻る

AI 程式開發/軟體測試

gpt-oss-20b、リファクタリングのdiff検査でRopeの欠陥13種類を発見、12件をメンテナーが受理

研究者らは、ローカルモデルにPythonのリファクタリング前後のdiffのみを読み取らせ、Ropeによる217件の変換から、挙動を変化させる欠陥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件の成功した変換を再利用した。対象には、名前変更、抽出、インライン化、フィールドまたはメソッドの移動など7種類の操作が含まれる。ローカル環境のgpt-oss-20bをゼロショットで3回実行し、多数決で最終判定を決めた。

Pythonの実務経験が10年あるエンジニア1名によるアノテーションと比較した結果、モデルの再現率は0.91、適合率は0.67、正解率は0.84、F1スコアは0.77だった。人手による基準では、217件の変換のうち64件が挙動を変化させると判定された。研究者らがリファクタリングの種類、主な症状、最小再現例に基づいて統合したところ、異なる欠陥13種類に集約された。具体例には、メソッド抽出後のインデント位置の誤りによってメソッドがクラス外に定義される問題、メソッドのインライン化で属性の書き換えが漏れたりimportが誤って削除されたりする問題、フォーマット文字列の書き換え時に誤った引数を使用する問題、`__new__`や比較メソッドの処理を許可してしまう問題、フィールド移動後に循環依存が生じる問題などがある。

研究者らは13件の事例をRopeのissue trackerに提出した。メンテナーのコメント、ラベル、ステータスに基づくと、そのうち12件は現在もbugとして受理されている。唯一の例外は`__new__`のインライン化で、メンテナーはこれを未サポート機能に関する機能強化要望と分類した。ただし、「受理」は修正済みを意味しない。たとえば、メソッド抽出によって`NameError`が発生する#825は現在もopenのままで、関連するbranchやpull requestも存在しない。

エンジニアリング上の価値は、モデルが、構文のみを検査するリファクタリング検証やテストカバレッジが不十分な検証を補完できる点にある。特に、CIにおける高再現率のスクリーニング手段として適している。一方、適合率0.67は、警告3件につき約1件が偽陽性となる可能性を示す。この研究には、単一プロジェクトと旧版のRopeしか検証していないこと、正解データを専門家1名だけが判定したこと、diff形式ではPythonのインデントを誤読したり、表示されていない外部呼び出しをモデルが推測したりしやすいことなどの制約もある。今後は、複数のプロジェクトと複数のレビュー担当者を対象とし、実行可能なテストによるクロスチェックを行うとともに、これらの欠陥がRopeの新しいバージョンにも残っているか確認する必要がある。

出典

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