Core Concepts
Java コンパイラバージョンの変更によるビルド失敗を、テストケースに必要な最小限のクラスとメソッドを特定することで自動的に修復する。
Abstract
本論文は、Java プロジェクトのビルド失敗を自動的に修復する手法を提案している。ビルド失敗の主な原因は、Java コンパイラバージョンの変更によるものであり、特に以下の4つのカテゴリに分類できる:
Java 言語仕様の変更
Java 標準ライブラリの変更
文字エンコーディングの非対応
ビルドツールの非対応
提案手法は、テストケースの実行に必要な最小限のクラスとメソッドを特定し、それ以外の不要な部分を削除することで、ビルド失敗を修復する。具体的には以下の2つのフェーズから成る:
マークフェーズ: テストケースから到達可能なプログラム宣言をマークする
スウィープフェーズ: マークされた宣言の必要性を判断し、不要な宣言を削除または置換する
この手法により、ほとんどのテストケースについて、コンパイル可能な状態に修復でき、かつ元の振る舞いを維持できることが確認された。また、この手法は自動バグバイセクションの効率化にも活用できる。
Stats
新しいJavaバージョンでのコンパイル失敗の主な原因は、Java言語仕様の変更(11%)、Java標準ライブラリの変更(30%)、文字エンコーディングの非対応(4%)、ビルドツールの非対応(2%)である。
提案手法は、Java 8 (1.7)では91%のテストケースの期待通りの動作を再現し、Java 17 (17)では84%のテストケースの期待通りの動作を再現できた。
Quotes
"ビルド失敗の主な原因は、Java コンパイラバージョンの変更によるものである。"
"提案手法は、ビルド失敗を自動的に修復し、かつ元の振る舞いを維持できる。"