この論文は、プログラム修復やプログラム改善には開発者の意図を何らかの形で示すものが必要だが、その意図は 通常、システム全体のレベルでしか得られないという問題から出発する。イシューの記述はプログラムがどう 振る舞うべきかを述べるが、変更対象となる個々の関数がどう振る舞うべきかは述べない。これまでのセマンティック 修復の研究はテストから記号的に仕様を抽出してきたが、著者らは、バグのあるプログラムにテストが付属しない 場合があること、そして記号解析は導入の敷居が高いことを指摘する。そこで著者らは、LLM に導かれる自律的な ソフトウェアエンジニアリングにおける仕様の役割を探究する。その土台となるのが AutoCodeRover であり、著者らはそのプログラム構造上のコード検索が、意図の粗い 符号化をすでに捉えていると解釈している。
その成果である SpecRover は、複数の種類の仕様を順に推論する。再現エージェントが イシューを再現するテストを書き、コンテキスト取得エージェントがコードベースを探索して、出会った関数ごとに、 イシューの文脈におけるその関数の意図された振る舞いを自然言語で要約する。パッチ作成エージェントは、バグの ある箇所とこれらの関数要約の組を受け取る。そしてレビューアエージェントが、元のプログラムとパッチ適用後の プログラムで再現テストを実行し、テストとパッチのそれぞれが正しいかを判断して、その判断を説明する。 レビューアが受け入れたパッチは回帰テストスイートにかけられ、回帰テストがすべての候補を却下した場合には、 選択エージェントが自然言語のイシューに最もよく対処するパッチを選び、その理由を述べる。論文はレビューアの フィードバックを、正確だが不完全なテストと、曖昧だがより豊かなイシュー記述とを調停するメタ仕様として 説明している。
主要モデルとして Claude 3.5 Sonnet を用い、SWE-bench とその 300 件のイシューからなる Lite サブセットで 評価したところ、SpecRover は両方において、比較対象のオープンソースツールの中で最も高い有効性を報告して いる。有効性に加えて、著者らはエージェントがユーザーに提示するパッチの精度を重視し、仕様とレビューアの フィードバックを、開発者がパッチを理解し受け入れる助けとなる証拠として強調している。
要点
- SpecRover は AutoCodeRover を、著者らが他の LLM エージェントでは未開拓だと説明する 2 種類の推論された仕様で拡張している。コード検索の過程で収集される、意図された振る舞いについての関数要約と、パッチおよび再現テストに対するレビューアのフィードバックである。
- バグのある各箇所を関数レベルの仕様と組み合わせることで、リポジトリレベルのイシュー解決が関数レベルの修正タスクに分解される。これは LLM について広く研究されてきた種類のタスクである。
- レビューアエージェントは生成されたテストもパッチも正しいとは仮定しないため、誤った再現テストを却下しつつ、正しいパッチを承認することができる。
- SpecRover は、SWE-bench の 2,294 件のイシューのうち 19.31%(443 件)、SWE-bench Lite の 300 件のうち 31.00%(93 件)を解決したと報告しており、Lite のイシューあたりの平均は 0.65 ドル、309 秒である。また、上位 5 つの他ツールのいずれも解決できなかった Lite のイシュー 12 件を解決している。
- 手作業での検査では、テストに合格した Lite のパッチ 93 件のうち 56 件(60.2%)が開発者のパッチと意味的に等価であり、残る 37 件のうち 29 件は正解と同じメソッドを変更している。
- 再現テストが生成された Lite のタスク 119 件にわたり、レビューアの受け入れ判断は正確度 64.7%、適合率 50.0%、再現率 61.9% に達する。著者らは、この適合率が次点の Agentless の 1.8 倍を超えると述べている。
- 検査した 101 件のイシューのうち 72 件(71%)で、生成された関数仕様は開発者のプルリクエストのタイトルと類似した意図をカバーしている。
- 未解決の Lite のイシュー 207 件のうち、107 件はイシュー記述が曖昧、61 件は修正箇所が誤り、39 件はコード修正が誤りである。
注記
ベースラインの数値は他のツールが報告したものであり、著者らによる再実行ではなく、比較はオープンソースの エージェントに限られている。著者らは、正解と構文的に同一のパッチを数えることでデータの記憶を確認しており、 解決した Lite のイシュー 93 件のうち 9 件がそれに該当した。事例研究では、DARPA の AI Cyber Challenge (AIxCC)で扱われた Linux カーネルのバッファオーバーフローに SpecRover を適用しており、イシューの代わりに 脆弱性レポートを出発点としている。著者らはこの研究を 自動プログラム修復 の中に 位置づけ、AutoCodeRover:自律的なプログラム改善 に最も近いものとしている。 そして、エージェントは有効性だけでなく、出力の精度と信号対雑音比によって評価されるべきだと論じている。 また、彼らが AutoCodeRover-v2 と呼ぶこのツールは、2024 年 11 月の採択時点で SWE-bench Lite で 37.3%、 SWE-bench Verified で 46.2% に達していたと報告している。