← 最新の論文
💻 computer science

SmellBench: Towards Fine-Grained Evaluation of Code Agents on Refactoring Tasks

本論文は、実世界のコードスメルを注入することでリファクタリング・タスクにおけるコードエージェントを評価するために設計された新しいベンチマークであるSmellBenchを紹介し、現在のトップクラスのモデルがファイル横断的な理解に苦戦しており、これらの保守性の問題を排除することにおいて中程度の成功しか収められていないことを明らかにしている。

原著者: Fake Lin, Binbin Hu, Xi Zhu, Ziwei Zhao, Zhi Zheng, Ziqi Liu, Zhiqiang Zhang, Jun Zhou, Tong Xu

公開日 2026-06-05
📖 1 分で読めます☕ さくっと読める

原著者: Fake Lin, Binbin Hu, Xi Zhu, Ziwei Zhao, Zhi Zheng, Ziqi Liu, Zhiqiang Zhang, Jun Zhou, Tong Xu

原論文は CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) でライセンスされています。 これは以下の論文のAI生成解説です。著者が執筆または承認したものではありません。技術的な正確性については原論文を参照してください。 免責事項の全文を読む

大きな構図:「散らかった部屋」問題

想像してみてください。あなたの前には、非常に賢いロボット助手(コードエージェント)がいます。このロボットはコードを書き、バグを修正し、ファイルを整理することができます。あなたは、散らかった部屋を片付ける(コードをリファクタリングする)よう指示を出しました。

これまでのほとんどのテストは、ロボットに対して「ドアを通れるように椅子を動かしましたか?」としか問いません。もしロボットが椅子を動かし、あなたが通り抜けられたなら、テストは「合格!」と判定します。

しかし、この論文はそれでは不十分だと主張しています。ロボットは椅子を動かしたかもしれませんが、その過程でランプを倒したり、床に服の山を放置したり、窓を塞いでしまったりしているかもしれません。部屋としての機能は果たしていますが(歩ける)、長期的に住むには最悪の状態です。これが開発者が**「コードの臭い(Code Smells)」**と呼ぶものです。つまり、今日動くことはできても、明日には頭痛の種となるような、不格好で、乱雑で、あるいは整理の悪いコードのことです。

SmellBenchは、これらのAIロボットが、単に「ドアが開いているか」を確認するだけでなく、本当に「散らかった状態を悪化させることなく、きれいに掃除できるか」を見極めるために設計された新しいテストです。


テストの構築方法(「制御された散らかり」工場)

研究者たちは、現実世界の散らかったコードを見つけることは、ビーチの中から特定の砂粒を探すようなものだと気づきました。それは非常に困難であり、また、その散らかり具合は他の要素(新機能の追加やバグ修正など)と混ざり合っています。

そこで、彼らは**「完璧に制御された散らかり」**を作り出す工場を建設しました。

  1. きれいな部屋: 彼らは、7つの有名な、整理整頓されたPythonプロジェクト(pandasnumpyなど)からスタートしました。これらは、純粋で完璧に整理されたライブラリを象徴しています。
  2. 「臭い」の注入: 自然に散らかりが発生するのを待つ代わりに、AIを使用して意図的にコードをめちゃくちゃにしました。彼らは7種類の特定の「臭い」(例えば、多くのことをやりすぎる「God Class」や、一度も使われない「Dead Code」など)を注入しました。
  3. 正解(グラウンド・トゥルース): 自分で散らかしたため、彼らはコードを壊す前の「クリーンなバージョン」がどのような姿であったかを正確に把握しています。これが彼らの「解答用紙」となります。

結果: 難易度も、7種類の異なる「コードの醜さ」の種類も網羅した、294個の具体的な「散らかった」シナリオのデータセットが完成しました。


7種類の「コードの臭い」(散らかった部屋のシナリオ)

この論文は、コードがどのように散らかるのか、7つの特定の方法に焦点を当てています。これらを日常生活に置き換えると以下のようになります。

  1. Feature Envy(機能への羨望): 自分の道具箱を持っているにもかかわらず、自分のものを使う代わりに、常に隣人の家から物を借り続けている人(関数)。比喩:自分の道具箱があるのに、隣人のハンマーを借り続けている状態。
  2. God Classes(神クラス): 会社のあらゆる仕事(料理、会計、警備、人事)を一人でこなそうとする単一の人物。比喩:配管修理、数学の指導、パン作りをすべて一人でやろうとする清掃員。
  3. Data Clumps(データの塊): キー、財布、スマートフォンといった同じグループのアイテムを、それらが必要な時だけでなく、常に一緒に持ち歩いてしまうこと。比喩:電球を交換するためだけに、工具箱ごと持ち歩くこと。
  4. Shotgun Surgery(ショットガン手術): 壁の色を変えたいだけなのに、10個の異なる部屋へ行かなければならない状況。比喩:商品の価格を変更するために、レシート、ウェブサイト、請求書、配送ラベルをそれぞれ別々に更新しなければならないこと。
  5. Dead Code(デッドコード): 誰も座ることのない、部屋の中の家具。比喩:10年前に読んだ、もう二度と触れることのない本が詰まった本棚。
  6. Interface Segregation(インターフェース分離): 50個のボタンがあるリモコンだが、実際には3つしか使わない。比例:コップ一杯の水が欲しいだけなのに、ステーキ、サラダ、デザートをセットで注文しなければならないレストランのメニュー。
  7. Deep Inlining(深いインライン化): 「ステップ1をやりなさい。それはステップ2を意味し、それはステップ3を意味する……」と、すべてが巨大な一つの段落に書き込まれたレシピ。比喩:地図の中に、次の指示がさらに指示の中に書かれており、辿ることが不可能な状態。

実験:ロボットは掃除できるのか?

研究者たちは、これらの散らかったコードの断片を、2つの人気のあるAIエージェント(OpenHandsとQwen Code)に与えました。これらは6つの異なる「脳」(Claude、GPT、DeepSeekなどの大規模言語モデル)によって動いています。

ルール:

  • AIは「散らかり(臭い)」を見つけなければならない。
  • AIは「散らかり」を修正しなければならない。
  • AIは、コードが依然として動作すること(テストに合格すること)を確認しなければならない。

結果(衝撃的な事実):
最高の組み合わせのAI(Qwen Code + Claude Sonnet 4.5)であっても、「臭い」を排除するスコアはわずか 50.34% でした。

  • 「ドア」テスト(機能的正当性): ロボットはこの点では優秀でした。ほとんどのロボットが「ドアを開けたまま(コードが動作する状態)」にできました。彼らは80〜90%の確率で基本的なテストに合格しました。
  • 「きれいな部屋」テスト(リファクタリングの質): ここでロボットは失敗しました。彼らは目の前の問題は解決しましたが、部屋を散らしたままにしてしまいました。彼らは全体像を見るのが苦手であり、特に複数のファイルが絡む「ショットガン手術」のような臭いにおいて苦戦しました。

重要な発見: AIはコードを「動かす」ことは得意ですが、「美しく、メンテナンスしやすくする」ことは現在、不得意です。


なぜこれが重要なのか

この論文は、「コードは実行されたか?」とAIに問うだけでは不十分であると結論付けています。「コードはきれいか?」と問う必要があるのです。

彼らは、以下の項目を用いてAIを採点する新しい方法を導入しました。

  1. テストに合格したか?(ドアは開くか?)
  2. 修正すべき正しい場所を見つけたか?(正しい部屋を見たか?)
  3. コードは実際に良くなったか?(部屋は片付いたか?)

結論: 現在のAIエージェントは、家具を動かすことはできるものの、しばしば埃の跡を残してしまう「熱心なインターン」のようなものです。彼らは向上していますが、複雑なソフトウェアシステムをプロフェッショナルに「リファクタリング(掃除)」できると信頼されるまでには、まだ長い道のりがあります。

自分の分野の論文に埋もれていませんか?

研究キーワードに一致する最新の論文のダイジェストを毎日受け取りましょう——技術要約付き、あなたの言語で。

Digest を試す →