概要
この論文は、GitHub issues を自動的に解決し、プログラムの修正や機能追加を自律的に行うアプローチ「AutoCodeRover」を提案しています。AutoCodeRoverは、大規模言語モデル(Large Language Models: LLMs)と洗練されたコード検索機能を組み合わせ、最終的にプログラムの修正やパッチを生成します。
こちらの記事もおすすめ
自動プログラミングを超えて
ソフトウェア開発プロセスの自動化は長年の課題でしたが、近年の大規模言語モデル(LLMs)の進歩により、自動コーディングが可能になってきました。しかし、ソフトウェアエンジニアリングにはコーディング以外にも、プログラムの改善(バグ修正や機能追加)が重要です。
背景
プログラム修正 (Program Repair)
- テストスイートベースの自動プログラム修正(APR)は、バグのあるプログラムを与えられたテストスイートを通過するように修正することを目的としています。
- APRには、探索ベース、意味論ベース、パターン/学習ベースなどのアプローチがあります。
- 最近の研究では、LLMsを用いたAPRも提案されています。
データセット
- SWE-benchは、大規模言語モデルの実世界のソフトウェアエンジニアリングタスクにおける性能を評価するためのベンチマークです。
- SWE-bench liteは、SWE-benchから300のタスクインスタンスをサンプリングした軽量版です。
モチベーション例
図1は、Djangoプロジェクトに提出された問題(django-13933)に対するAutoCodeRoverのワークフローを示しています。
- コンテキスト検索段階では、LLMエージェントが問題の説明から関連するクラスやメソッドを推測し、APIを呼び出してコードコンテキストを取得します。
- パッチ生成段階では、もう1つのLLMエージェントが収集されたコンテキストを使用してパッチを作成します。
- 生成されたパッチは開発者が提供したテストスイートに合格し、問題を解決します。
AIプログラム改善フレームワーク
概要
AutoCodeRoverは、問題文Pとコードベース C を入力として受け取り、2つの主要段階(コンテキスト検索とパッチ生成)で動作します(図2)。
コンテキスト検索API
- コンテキスト検索段階で、LLMエージェントはコードベースから関連するコードスニペットを抽出するためにコンテキスト検索APIを使用します(表1)。
- APIは、クラス、メソッド、コードスニペットをコードベース内で検索し、結果をエージェントに返します。
階層的コンテキスト検索 (Stratified Context Search)
- 階層的検索は、コンテキスト検索APIを反復的に呼び出してプロジェクトのコードコンテキストを収集し、最終的にバグの可能性のある場所のリストを出力します(図5)。
- 各階層で、LLMエージェントは現在のコンテキストに基づいて必要なAPIの呼び出しを選択します。
解析によるコンテキスト検索の補強
- プログラム解析とデバッグ技術は、AutoCodeRoverのワークフローを補強するために統合できます。
- スペクトルベースの障害局所化(SBFL)は、テストの実行の違いを考慮して、プログラムの場所にsuspiciousness スコアを割り当てます。
パッチ生成 (Patch Generation)
- パッチ生成段階で、AutoCodeRoverは別のパッチ生成エージェントを採用し、収集されたコードコンテキストを使用して問題文に対するパッチを作成します。
- パッチ生成エージェントは、バグのある場所から正確なコードスニペットを取得し、パッチを生成するリトライループに入ります。
実験設定
評価にはSWE-bench liteを使用し、以下のリサーチクエスチョンを設定しました。
- RQ1: AutoCodeRoverはどの程度人間の開発者のようにソフトウェアの問題を自動化できるか?
- RQ2: 既存のデバッグ/解析技術はAutoCodeRoverを支援できるか?
- RQ3: AutoCodeRoverと完全自動プログラム改善の課題は何か?
評価
RQ1: SWE-bench liteでの全体的な有効性
- AutoCodeRoverは、SWE-bench liteのタスクインスタンスの15.67%から16.67%を解決できました。
- 3回の実行で解決されたすべてのタスクを考慮すると、解決率は22.33%に向上しました。
RQ2: SBFLの効果
- SBFLコンポーネントを追加することで、解決されたタスクの数が51から61に増加しました(解決率が17.00%から20.33%に向上)。
- SBFLは、問題の説明に含まれていない情報を明らかにし、パフォーマンスを向上させることができました。
RQ3: 実世界のタスクにおける課題
- AutoCodeRoverが解決できなかったSWE-bench liteのタスクインスタンスを分析し、障害局在化段階とパッチ生成段階の課題の分類を提供しました(図8)。
- 今後の改善には、メソッドレベルの修復ガイダンスの提供やテストスイートの生成などが考えられます。
改善に関する議論
将来のAutoCodeRoverの改善に向けて、以下のような方向性が考えられます。
- Issue Reproducer: GitHub issueの説明に基づいてバグ再現テストを生成するLLMエージェントを設計する。
- Semantic Artifacts: コンテキスト検索にプログラムのセマンティクスからのアーティファクトを考慮する。
- Human Involvement: 人間の開発者とLLMエージェントの間のインターフェースと関与基準を設計する。
妥当性への脅威
- LLMのランダム性への対処として、実験を3回繰り返し、再現パッケージを公開しました。
- オペレーティングシステム環境の影響への対処として、評価環境を共有し、dockerイメージを提供しました。
- プロジェクトの修正というよりテストスイートへのオーバーフィッティングの可能性については、手動で検証することで対処できます。
展望
- AutoCodeRoverは、LLMエージェントのソフトウェアエンジニアリング指向のアプローチを示しています。
- 将来のソフトウェア産業では、開発者がLLMベースのツールとの対話を通じて、さまざまなソフトウェアエンジニアリング活動を可能にする役割を果たすことになるでしょう。
- 自律的なソフトウェアエンジニアリングが一般的になれば、将来のソフトウェアエンジニアは、より大きな規模よりも信頼性の向上に注力するようになるかもしれません。
以上が、論文「AutoCodeRover: Autonomous Program Improvement」の初心者向けの日本語での解説です。AutoCodeRoverは、GitHub issuesを自動的に解決し、プログラムの修正や機能追加を自律的に行うアプローチであり、大規模言語モデル(LLMs)とコード検索機能を組み合わせることで実現しています。この研究は、将来の自律的なソフトウェアエンジニアリングの可能性を示唆するものであり、ソフトウェア開発の在り方に大きな影響を与える可能性があります。
コメント