Beyond Strict Rules: Assessing the Effectiveness of Large Language Models for Code Smell Detection
本論文は、30のJavaプロジェクトにおける9種類のコードスメルを検出する際の4つの大規模言語モデルの有効性を評価しており、それらのモデルは構造的に単純なスメルの特定には優れているものの、LLMと静的解析ツールを組み合わせたハイブリッド戦略がほとんどのスメルにおいて優れた性能を発揮すること、そして最終的な最適なアプローチは、適合率と再現率のどちらを優先するかによって決まることを明らかにしている。
原論文は CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) でライセンスされています。 これは以下の論文のAI生成解説です。著者が執筆または承認したものではありません。技術的な正確性については原論文を参照してください。 免責事項の全文を読む
大きな絵:コードの「悪い癖」を見つける
膨大な本のライブラリ(ソフトウェア・コード)を想像してみてください。時間が経つにつれて、いくつかの本は乱れてくることがあります。章が長すぎたり、同じ物語が何度も繰り返されたり、キャラクターが他の誰かに頼りすぎていたりするかもしれません。ソフトウェア工学において、こうした乱れたパターンは**コードの臭い(Code Smells)**と呼ばれます。これらはプログラムをクラッシュさせる「バグ」ではありませんが、後でコードを修正したり、更新したり、理解したりすることを難しくする「悪い癖」のようなものです。
長年、私たちはこれらを見つけるために静的解析ツール(これを「ルールブック」と呼びましょう)を使用してきました。ルールブックは厳格で、チェックリストに従います。もしメソッドが50行を超えていたら、ルールブックは「これは長いメソッドだ!」と判定します。これは高速ですが、少し融通が利きません。単に長いというだけで、全く問題のない長いメソッドを指摘してしまうこともあれば、一見無害に見えるけれど実は乱れている短いメソッドを見逃してしまうこともあります。
最近では、大規模言語モデル(LLM)(これを「賢いインターン」と呼びましょう)が有名になりました。これらは、人間と同じようにコードを読み、理解できるAIシステムです。この論文が投げかける大きな問いは、**「この賢いインターンたちは、厳格なルールブックよりも優れた方法で『悪い癖』を見つけられるのか?」**ということです。
実験:30のライブラリによる味比べ
これを知るために、研究者たちは大規模な味比べテストを用意しました。
- メニュー: 彼らは30の人気のあるJavaソフトウェア・プロジェクトを選びました(30種類の異なるレストランを選ぶようなものです)。
- メニュー項目: 彼らは9つの特定の種類の悪い癖(コードの臭い)を探しました。例えば:
- Long Method(長いメソッド): 一つの関数が多くのことをやりすぎている状態。
- Large Class(大きなクラス): ファイルが膨れ上がり、責任が多すぎる状態。
- Feature Envy(機能への嫉妬): ある関数が自分自身のデータよりも、他人のデータに対して働きすぎている状態。
- 審査員: 彼らはAIに推測させるだけではありませんでした。彼らは76人の人間の開発者(適切な訓練を受けた学生)に、268個のコード断片を詳細に検査してもらい、「これは本当に悪い癖なのか、それとも大丈夫なのか?」を判断してもらいました。これにより、「グラウンド・トゥルース(正解ラベル)」(公式の解答集)が作成されました。
- コンテスタント(対戦相手): 彼らは4つの異なる賢いインターン(DeepSeek-R1、GPT-5 mini、Llama-3.3、Qwen2.5-Code)を、ルールブック(JDeodorantやPMDといった従来のツール)と戦わせました。
結果:誰が勝ったのか?
結果は、「インターンたちは素晴らしい」という面と、「ルールブックにはまだ役割がある」という面が混ざり合ったものでした。
1. 簡単な問題:インターンの輝き
数えたり測定したりするのが簡単な「臭い」については、賢いインターンは素晴らしかったです。
- 例え: もし悪い癖が「この本は500ページある」というものなら、インターンはルールブックと同じくらい正確にページ数を数えられますが、その「文脈(コンテキスト)」をより良く理解できます。
- 勝者: Long MethodやLarge Classのような臭いに対して、AIモデルは非常に高い性能を発揮し、従来のツールと同等か、それ以上の成績を収めました。
2. トリッキーな問題:インターンによる違い
コードがなぜそのように書かれているのかという「理由」を理解する必要がある臭いについては、結果はまちまちでした。
- 例え: 物語の中のキャラクターが隣人と話しすぎている場面を想像してください。それは「機能への嫉妬(悪いこと)」でしょうか、それとも単なる「良いチームワーク」でしょうか?ルールブックはこれを見逃すかもしれません。ある賢いインターンは「はい、これは悪いです!」と言い、別のインターンは「いいえ、これは大丈夫です」と言うかもしれません。
- 発見: AIモデルによって得意不得意がありました。例えば、あるモデルは「機能への嫉妬」を見つけるのが得意で、別のモデルは「密結合(Intensive Coupling)」に優れていました。すべてにおいて完璧な「スーパーAI」は存在しませんでした。
3. 最も難しい問題:両者が苦戦
**Refused Bequest(拒絶された遺産:親クラスのルールを無視する子クラス)**や、**Shotgun Surgery(ショットガン手術:一つの小さな変更が至る所に影響を与えること)**のような、最も主観的な臭いについては、ルールブックも賢いインターンも共に苦戦しました。
- 例え: これらは、グループチャットにおける微妙な空気を読むようなものです。いつそれが問題になるのかを定義するのは非常に困難です。最も賢いAIであっても、最も厳格なルールブックであっても、これらについては一致した意見を持つのが難しかったのです。
秘密兵器:「投票委員会」
研究者たちは巧妙なトリックを試しました。ただ一つのAIや一つのルールブックに聞くのではなく、全員(4つのAI + 2つのルールブック)に、すべてのコードについて投票してもらったのです。もし6つのうち少なくとも3つが「これは臭いである」と言えば、それを「臭い」としてカウントしました。
- 結果: この「委員会」方式は、あらゆる問題を見つけ出すこと(高い再現率/Recall)において最高の結果を出しました。たとえトリッキーなものであっても、ほとんどすべての悪い癖を捉えることができました。
- 注意点: 悪い癖を捕まえようとするあまり、クリーンなコードを「臭い」と判定してしまうこともありました(偽陽性)。
- 教訓: もし、どんな問題も見逃したくないのであれば、「委員会」を使いなさい。もし、誤報でチームを困らせたくないのであれば、その特定の仕事に対して最も優れた専門家を選びなさい。
まとめ
- 単純な構造上の問題(コードが長すぎる、あるいは大きすぎるなど)については、AIは強力なツールであり、従来のツールと同等か、それ以上の働きをします。
- 複雑で文脈に依存する問題については、汎用的な「万能型」のアプローチよりも、特化したツールや特定のAIモデルの方が適しています。
- 最善の戦略: それは、あなたが何を重視するかによります。
- 安全性(可能な限りすべての問題を見つけたい)を求めるなら、AIとツールを組み合わせなさい(委員会方式)。
- 精度(誤報を避けたい)を求めるなら、その特定の種類の「臭い」に対して最も適した特定のツールやAIモデルを選びなさい。
要するに、賢いインターンたちは準備ができていますが、彼らは「どの仕事にどのインターンを頼むべきか」を知っているとき、あるいは「古い時代のルールブック」と一緒に働かせるときに、最も力を発揮するのです。
自分の分野の論文に埋もれていませんか?
研究キーワードに一致する最新の論文のダイジェストを毎日受け取りましょう——技術要約付き、あなたの言語で。