自動プログラム修復(APR)とは、ソフトウェアのバグに対する修正を自動的に生成することであり、手作業での修正に要する多大な時間と労力をかけずに、効果的かつ効率的にバグを解決したいという必要に応えるものである。RepairAgent:プログラム修復のための自律的な LLM ベースのエージェント で述べられているように、研究者や実務者は、人手で設計された修正パターンや(半)自動的に抽出された修正パターン、記号的制約、さまざまな機械学習アプローチに基づく技術でこれに取り組んできており、APR は産業の現場にも導入されている。
用法
RepairAgent の論文は、現在の最先端が LLM を中心に展開しており、それが二つの世代に分かれると説明している。第一世代はモデルと一度だけやり取りするもので、バグのあるコードを含むプロンプトを与えて修正版を受け取る。第二世代は反復的なもので、モデルに繰り返し問い合わせ、コンパイルエラーやテストの失敗、それまでの修正の試みから得られたその他の出力を次のプロンプトに加える。論文は、こうしたハードコードされたフィードバックループでは、モデルがバグについて情報を集めたり、修正の材料(修正の一部になりうるコード断片)を求めてコードベースを探索したりすることができないと主張し、代わりに LLM を、どのツールを呼び出すかを自ら決める自律エージェントとして扱うことを提案している。同じ論文は、機能的なバグ以外にも、構文エラー、パフォーマンスバグ、セキュリティ脆弱性、型エラー、ディープラーニングのコードによくある問題、ビルドエラーを対象とする技術があることにも触れている。
この分野の評価では、一般に二つの件数が報告される。すべてのテストケースに合格するが必ずしも正しいとは限らない妥当なパッチ(plausible patch)と、開発者の修正と一致するか意味的に等価であることで判定される正しいパッチ(correct patch)である。RepairAgent の論文は、この分野で一般的であるように、デフォルトでは完全な障害箇所特定、つまり編集すべき行が既知であることを前提としていること、また異なるアプローチは互いに補完し合う傾向があり、それぞれが他のアプローチでは修正できないバグの一部を修正することを指摘している。