Specification-first convergence with an AI coding agent: a case study of dismantling a core architectural invariant across 189 files in a 717k-line codebase with no test oracle and no human code review
本論文は、仕様優先プロトコルの下で、人間のコードレビューや既存のテストオラクルなしで動作するAIコーディングエージェントが、形式的な仕様を反復的に洗練し、3日間で201件の欠陥を修正することにより、717k行のTypeScriptコードベースにおける189個のファイルにわたるコアなアーキカル・インバリアント(不変条件)を2,430ドルで解体することに成功した事例研究を提示するものである。
原論文は CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/) でライセンスされています。 これは以下の論文のAI生成解説です。著者が執筆または承認したものではありません。技術的な正確性については原論文を参照してください。 免責事項の全文を読む
ソフトウェアの世界において、プログラムは広大で複雑な都市のように構築されている。それらはコンピュータに対してどのように振る舞い、どのように記憶し、ユーザーがボタンをクリックしたときにどのように反応するかを伝える数百万行の命令から成っている。数十年にわたり、これらの都市を変更するための標準的な方法は、人工知能が積み上げる可能性のある新しいレンガの一つひとつを検査するために、人間の設計者を派遣することであった。この人間によるレビューは不可欠であると考えられてきた。なぜなら、プログラムの異なる部分間の接続は非常に深く絡み合っており、ある片隅での小さなミスが別の場所での崩壊を引き起こす可能性があるからだ。変更が一度に数百のファイルに及ぶほど大規模になると、作業のチェックはボトルネックとなる。単一の人間が同時に変化の全容を一目で把握することはできない。この限界により、最も複雑な建築的転換においては、古い構造を取り壊してゼロから再構築することが唯一の安全な道であると多くの人々が信じるようになってきた。これは遅く、高価で、リスクの高いプロセスである。
最近のあるケーススタディは、このような大規模な変更において安全性を持続させるための方法として、人間のレビューこそが唯一の方法であるという考え方に異議を唱えている。それは、完成品をチェックすることから、最初のレンガが置かれる前に「設計図」を完璧にすることへと焦点を移す手法を探求しているものである。AIにコードを書かせ、その後に人間がエラーを見つけられることを期待するのではなく、このアプローチでは、まず機械に対し、「自分が何をしようとしているのか」についての詳細かつ形式的な記述を作成するように求める。この記述は既存のコードと厳密に対照される。それはコードが機能するかどうかを見るためではなく、計画自体が理に適っているかどうかを確認するためである。計画は修正され、訂正され、そして不備が出なくなるまで凍結される。その後になって初めて、機械は建設を開始する。そしてその際も、作成されたプランに対して絶えず監査が行われるのである。結果として、意図を定義・検証するプロセスが十分に堅牢であれば、人間が生成されたコードを一度も読むことなく、大規模で複雑なアーキテクチャの変更を完了できることが実証された。
実験は、人工知能によるコーディング支援に使用される、ある大規模な独自の商用アプリケーション内で行われた。TypeScriptと呼ばれる言語で書かれたそのシステムには、約3,650個のファイルに分散した71万7,000行を超えるコードが含まれていた。それは理論上のモデルではなく、日常的に使用されている、生きているソフトウェアの一部であった。AIエージェントに割り当てられた任務は、システムの誕生以来、根幹を支配してきた一つのコアルールを解体することであった。「不変条件(インバリアント)」として知られるこのルールは、ユーザーがAIとの会話を開始すると、リクエストの間中、その会話を表示するウィンドウが開いた状態であることを保証していた。もしユーザーがウィンドウを閉じれば、会話は終了してしまう。目標はこのルールを打破することであった。すなわち、ユーザーがウィンドウを閉じても会話はバックグラウンドで実行され続け、データを失ったり言葉を重複させたりすることなく、元の位置から正確に再開できるようにすることである。
この特定の変更は、標準的なリファクタリングを通じて達成するのはほぼ不可能だとされていた。著者の評価によれば、コードの相互依存関係があまりにも強固であったため、影響を受けるコンポーネント全体を書き直さずに会話の生存期間(ライフタイム)を変更することは、通常、完全な書き換えを必要とするものだった。このタスクには、例えばウィンドウが閉じた際にデータがまだストリーミング中の場合に何が起きるか、あるいは参加者がいない状態で進行しているライブストリームにどのように再び接続するかといった、複雑なタイミングの問題の管理が含まれていた。これを解決するために、著者はAIを厳格な軌道に乗せるよう設計された5段階のプロトコルを採用した。プロセスは、エージェントが要求を分析し、正式な仕様書(それがどのように動作すべきかを詳しく説明した文書)を作成することから始まった。
プロセスの最も重要な部分は精査フェードであった。エージェントは自身の仕様書を受け取り、それを実際のソースコードと対照させて、矛盾や欠落がないかをチェックすることを求められた。これは一度限りのチェックではない。エージェントはこの監査を14サイクル繰り返した。各サイクルにおいて、エージェントは自身の計画における誤り——おそらく更新し忘れたファイルや、誤解していた依存関係など——を発見し、それらを修正するために仕様書を書き換えた。これら14回のラウンドを経て、隠れた接続性が発見されるにつれ、変更の範囲は110ファイルから160ファイルへと拡大しながら、計画は約85回修正された。第14サイクルの終わりまでに、仕様書は凍結された。それは、最終サイクルで新たな指摘事項が出なくなるまで、現実のコードベースに対する監査を経て確定された固定済みの設計図であり、以降すべてのフェーズのリファレンスとなった。
計画がロックされると、エージェントは実装フェードに移った。エージェントには、凍結された仕様書に一致するように必要なコード変更を生成するよう指示された。エージェントは、中途半端な移行はシステムを破壊するということを正しく認識し、部分的な変更を行うことを拒否した。代わりに、彼は3つの明確に確認されたステップを実行した。コードが書かれた後、検証フェードが始まった。計画がコードに対してチェックされたのと同様に、今度は新しいコードが凍結された計画に対してチェックされた。エージェントは17サイクルの監査を行い、画面上の実際のコードと仕様書の記述を比較した。各サイクルにおいて、エージェントは逸脱箇所を見つけては修正し、人間が見逃すかもしれない微妙なアーキテクチャ上の欠陥を修復していった。これら17回のラウンドを通じ、エージェントはコード自体の欠陥を116件修正した。プロセスは、二度の連続した監査でエラーが検出されなかった時点で停止し、収束基準に基づいてコードが計画と一致していることが確認された。
オペレーション全体では189個のファイルに手が加わり、旧コードの抽出を含めると合計288個のファイルが変更された。変更内容は3万4,000行以上の新規コードと、1万6,000行以上の削除に及んだ。驚くべきことに、この大規模な再構築は3日間で完了した。このタスクに必要なAI処理コストは2,430米ドルであった。この3日間の全期間を通して、人間によってプログラムが実行されることは一度もなかった。ソフトウェアが実際に実行されたのは、第17検証サイクルが終わった後の、著者がついに新しい挙動をテストした時であった。
結果は成功であった。プログラムを起動すると、新しい挙動は仕様書通りに完全に動作した。ユーザーは会話を開始してからウィンドウを閉じることができ、会話はバックグラウンドで継続された。ユーザーがウィンドウを再度開くと、データの損失やテキストの重複もなく、即座に会話が再開された。サイドバーには新しい停止ボタンが表示され、必要に応じてユーザーがバックグラウンドプロセスを強制終了できるようになっていた。長年ソフトウェア上で稼働してきた既存の自動テストも失敗を示すことはなく、新しいシステムが従来の機能を損なっていないことが示された。ソフトウェアはバージョン2.3.0として公開され、リリース後の約30回の利用セッションにおいて、バグは見られなかった。
本研究は、人工知能がいかなるシナリオにおいても人間のエンジニアに取って代われると主張しているわけではなく、また、この手法があらゆる種類の問題に有効であるとも示唆していない。著者は、これが単一の具体的な事例であり、単一のコードベース上での出来事であることを慎重に記しており、その結果を他のシステムや他のタスクにそのまま適用できるとは考えていない。また、事前にあるテストセットがあればこの問題を解決できたはずだという考えについても、本研究は明示的に否定している。なぜなら、以前のコードには望ましい挙動が存在していなかったからである。変更前には、チェック対象となる「正しい答え」は存在しなかった。正当性はゼロから定義される必要があったのだ。さらに、本研究はプロセスが強力な特定モデルのAIに依存しており、より弱いモデルでは結果が変わる可能性があることも認めている。
この研究の意義は、複雑性を管理するための新しい方法を示した点にある。品質管理の負担を「最終製品の検査」から「計画の徹底的な定義と検証」へとシフトすることで、研究者たちは、マシンが人間の介入なしに相互依存するコードの地雷原を進めることができることを示した。鍵となったのは、マシンの無謬性ではなく、間違いが発生して永続化する前に何度も自己修正を行えるようにするプロセスにあった。仕様書は14回挑戦され、コードは17回チェックされた。これにより、経験的な停止規則に基づき、意図と現実の一致に向けてシステムを駆動させる自己修正のループが形成された。1,500ページ以上にわたるプロセス全体のログは誰でも閲覧できるように公開されており、マシンがいかにして人間の監視を一切受けることなく、一つひとつのレンガを積むように、核心的なアーキテクチャのルールを解体し再構築していくのかについて、透明性の高い洞察を提供している。
自分の分野の論文に埋もれていませんか?
研究キーワードに一致する最新の論文のダイジェストを毎日受け取りましょう——技術要約付き、あなたの言語で。