本記事では、LLMのコード推論能力を実世界のプログラムで検証した事例を紹介します。
LLMはコード生成やバグ検出などのプログラミングタスクで目覚ましい成果を上げています。しかし、その評価に使われているベンチマークの多くは、単純で短いプログラムが中心です。そのため、LLMが実際の開発現場で扱うような複雑なコードをどこまで理解できるのか、正確には分かっていません。

背景
LLMは、コードの生成やバグの検出など、さまざまなプログラミング作業で高い成果を示しています。こうした力の基盤となっているのが、コード推論と呼ばれる能力です。コードが何をしているのかを正しく理解する力を指します。
たとえば、ある入力を与えたときにプログラムがどのような出力を返すかを予測したり、特定の出力を得るためにはどんな入力が必要かを逆に考えたりする力です。
LLMのコード推論能力評価に現在よく使われている指標として、CRUXEvalやHumanEvalといったベンチマークがあります。CRUXEvalやHumanEvalは最新のLLMは非常に高いスコアを出していますが、比較的短く単純なプログラムを対象としています。
一方で、実際のソフトウェア開発で扱われるコードは、これほど単純ではありません。複数のメソッドやクラスが相互に呼び出されていたり、外部ライブラリのAPIを利用していたり、条件分岐やループが何重にも入れ子になっていることも珍しくありません。
既存のベンチマークにはこうした複雑さがほとんど含まれていないため、そこで得られる高いスコアが、実務での能力を正確に表しているのかどうかには疑問が残ります。
そこで本記事では、実際に使われているオープンソースプロジェクトから複雑なコードを抽出し、より現実に近い条件で評価した事例を取り上げます。LLMのコード推論能力をより実践的な状況で検証しています。