← 最新の論文
💻 computer science

GapForge: Directed Compiler Fuzzing via Coverage-Gap Analysis

GapForgeは、カバー率の低いファイルを優先し、パス差分分析を通じて微細なトリガー要件を推論し、プロンプトを反復的に合成することで、GCCおよびLLVMにおけるカバレッジとバグ発見において既存の手法を大幅に上回る、ロングテールなカバレッジギャップを体系的に特定し埋めるための、ターゲットを絞ったLLMベースのコンパイラファジング技術である。

原著者: Mingxuan Zhu, Qingyuan Liang, Junjie Chen, Zhihong Xue, Dan Hao

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

原著者: Mingxuan Zhu, Qingyuan Liang, Junjie Chen, Zhihong Xue, Dan Hao

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

あなたのスマートフォンや車、あるいはインターネットを動かしているソフトウェアを、巨大で目に見えない「工場」だと想像してみてください。この工場の中には、何百万もの小さな作業員(コードの行)がいて、あなたの高度な指示を受け取り、コンピュータが理解できるマシン語へと変換しています。この工場のことは「コンパイラ」と呼びます。もし作業員が一人でも怠慢だったり、混乱したり、ルールを破ったりすれば、工場全体がゴミのような製品――つまり、クラッシュしたり、フリーズしたり、密かに誤った動作をしたりするプログラム――を生み出してしまう可能性があります。これらの工場は非常に巨大で複雑であるため、すべての作業員が適切に監視され、テストされていることを確認するのは極めて困難です。

ここで「ソフトウェアテスト」の世界が登場します。これは、工場が正しく機能しているかを確認するために、検査チームを派遣することを考えてみてください。長年、検査官は主に2つのトリックを使ってきました。一つは、工場に向かってランダムにダーツを投げること(ランダムテスト)、もう一つは、既存の指示をねじ曲げて壊そうとすること(ミューテーションテスト)です。しかし、ここには問題があります。検査官たちは工場の手が届きやすい角ばかりを叩いてしまい、埃っぽくて暗く、到達しにくい奥まった部屋を完全に無視してしまっているのです。これらの「死角」こそが、最も危険なバグが潜んでいる場所であり、トラブルを引き起こすために待ち構えている場所なのです。最近、科学者たちは、コードを書くことができる超スマートなAIである「大規模言語モデル(LLM)」を、検査の補助として使い始めました。しかし、これらのAIヘルパーでさえ、どこに最も光を当てるべきかを正確に知らず、目的もなくさまよってしまうことがよくあります。

ここで、「GapForge」と呼ばれる新しい手法が登場します。これは、魔法の地図を持つ探偵のように振る舞います。単にダーツを投げたり推測したりするのではなく、GapForgeは工場の地図をスキャンして、どの部屋が一度も訪問されていないかを正確に把握します。そして、そのロックされた扉を開けるために必要な特定の「合言葉」(特定の種類のコードと特別な設定)を導き出すために、そのAI脳を使用します。研究者たちは、世界最大級のコンパイラ工場である「GCC」と「LLLLVM」でこれをテストしました。その結果、GapForgeは隠れた部屋を見つける達人であることが分かりました。わずか72時間で、GCCのコアコードの68.13%、LLVMのコードの69.11%をカバーしました。これが100%に届かないように聞こえるかもしれませんが、以前の最高峰のAI手法がわずか64.62%65.02%程度しか到達できなかったことを覚えておいてください。GapForgeは単に数字を押し上げただけでなく、他の手法が完全に見逃していたGCCの24,736行、およびLLVMの19,798行ものコードを見つけ出したのです。

どのようにしてこれを行うのでしょうか?GapForgeを3ステップのプロセスとして考えてみましょう。まず、工場の地図をスキャンし、最も「汚れた」部屋――つまり、未テストのコードが最も多い部屋――を選び出します。次に、部屋全体を見るのではなく、特定の埃っぽい場所にズームインし、AIに「この場所を開けるにはどんな鍵が必要か?」と問いかけます。AIは周囲のクリーンな領域を分析することで、その場所に到達するために必要なコード構造と工場の設定(特定のスイッチをオンにするなど)の正確な組み合わせを推測します。第三に、もしAIが試した鍵がうまくいかなかった場合、GapForgeはその失敗を記憶します。そしてAIに「それはもう試さないで。別の方法を試して」と伝え、より優れた計画を持って再び送り出します。このサイクルを繰り返すことで、ゆっくりと、しかし確実に、あらゆる暗い隅々まで光を当てていくのです。

結果は素晴らしいものでした。GapForgeは他の8つのトップクラスの手法よりも広い範囲をカバーしただけでなく、影に隠れていた12個の実世界のバグを発見しました。これらには、8個のクラッシュ(コンパイラが諦めて停止してしまう現象)と、4個の誤コンパイル(コンパイラが完璧に見えるものの、壊れたプログラムを密かに構築してしまう現象)が含まれていました。研究者たちは、GapForgeのプロセスのあらゆる部分が重要であることを示しました。もし「地図の読み取り」、「鍵の推測」、あるいは「失敗からの学習」のいずれかを取り除けば、結果は著しく悪化します。他の手法が何千ものテストプログラムを生成している間に、GapForgeはより少ない、しかしよりスマートなプログラムを生成しており、ソフトウェアテストの世界では、量よりも質と方向性が重要であることを証明しました。

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

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

Digest を試す →