2月6日、Engineering at Metaで「ソフトウェアテストの革命: LLM 搭載のバグキャッチャーのご紹介(Revolutionizing software testing: Introducing LLM-powered bug catchers)」と題した記事が公開された。この記事では、ACH(Automated Compliance Hardening)を活用した、LLMベースのテスト生成とバグ検知の新手法について詳しく紹介されている。
以下に、その内容を簡潔にまとめて紹介する。
何であるか
Meta’s Automated Compliance Hardening (ACH) toolは、ミューテーション(故意に仕込んだバグ)とLLMに基づくテスト生成を組み合わせたシステムである。特定の懸念領域に関わるバグ(ミュータント)を自動生成し、それらを検知するテストを同時に作成できる点が特徴である。たとえばプライバシーを例に取ると、プライバシー関連のバグを自動的に探し出して将来的にシステムに入り込まないようにするためのテストを生成し、結果としてコードベースを強化する。
従来の自動テスト生成はコードカバレッジの向上を主眼に置いていたが、カバレッジを高めてもバグそのものを確実に発見できるとは限らないという課題があった。ACHではカバレッジではなく特定の懸念領域のバグをターゲットとするため、この課題に対処しつつ、結果的にカバレッジも向上する可能性がある。さらにAssured LLM-based Software Engineeringの原則を利用しており、生成されたテストが意図したバグを確実に検知することを証明可能な点も大きな特長である。
どのように動作するか
ミューテーションテスト自体は以前から研究されていたが、実際のデプロイは依然として難しいとされてきた。過去の手法ではルールベースでバグを自動生成していたため、現実的にどの程度深刻な懸念を引き起こすかが不明瞭であり、さらに生成されたバグを検知するためのテストは人間が手作業で書かねばならなかった。
LLMを活用することで、実際に起こりうる懸念に即したバグ(ミュータント)を生成し、それらを検知するテストも自動的に書けるようになった。ACHはこの自動テスト生成技術とLLMの組み合わせによって、テストが確実に検知すべきバグをカバーできるようにする仕組みである。大まかな流れは以下のとおりだ。
- エンジニアがどのようなバグを懸念しているかを記述する。
- ACHがその記述を基に、該当するバグを大量に自動生成する。
- ACHが生成したバグを捕捉するテストを自動的に多数生成する。
実際にMetaではFacebook FeedやInstagram、Messenger、WhatsAppなど複数のプラットフォームに適用しており、特定の懸念領域に対するコードの堅牢化に寄与したほか、直接ターゲットとしたバグ以外のメリットも得られているという。
ACHシステムのアーキテクチャ概要図。LLMを用いてバグを生成し、同等とみなされるものを検証したうえで、それらを検出するテストを自動生成する仕組みになっている。
なぜ重要か
Metaは多様なプログラミング言語やフレームワーク、サービスを利用し、世界中にいる多数のエンジニアがコードを開発している。そうした大規模な開発環境において、バグがパフォーマンス面での問題やプライバシーリスクを引き起こさないようにするためには、LLMの能力が有効である。
LLMを用いたテスト生成やミュータント生成そのものは新しい概念ではないが、大規模な産業システムで両者を組み合わせて活用した例はこれが初めてである。LLMは厳密なルールに縛られず確率的に判断を下せるため、バグの生成と検出テストの作成の両面を効率的に処理できる。これにより、フリーフォームのテキストで書かれた懸念をテストに落とし込み、そのテストが必ずターゲットとしたバグを検知するという保証を得られるのが最大の利点だ。
ACHはあらゆる種類のバグに適用可能であり、今後のリグレッション防止とテスト自体の最適化に大きく貢献すると考えられている。
今後の展望
LLMベースのテスト生成とミュータント生成を組み合わせたMetaの新手法は、複雑な開発組織のワークフローを自動化する可能性を秘めている。リスク評価を簡素化し、開発者の認知負荷を軽減し、より安全なオンライン環境を実現できると期待されている。今後は適用範囲を拡大するとともに、ミュータントの妥当性評価や既存のバグ検出といった分野にも積極的に取り組み、業界全体での導入促進をめざすとしている。
論文について読む
より詳しい技術的背景やプライバシーへの応用例などは、Mutation-Guided LLM-based Test Generation at Metaで詳述されている。
詳細は[Revolutionizing software testing: Introducing LLM-powered bug catchers]を参照していただきたい。