抽象構文木を利用したAPIの後方互換性が破壊される変更の検出

Description

ライブラリが更新されると,API も変更される.API の変更は様々で,後方互換性を壊す変更と後方互換性を維持する変更に分類できる.API の変更を検出し,その変更によって API の後方互換性が維持されているかを判別することはコードレビューやリリースノートの作成に役立つ.ライブラリから API の変更を手動で調べるには負担が大きいため,その負担の軽減を目的とした API の変更の自動検出に関する研究が行われている.API の変更を自動で検出し,後方互換性を壊す変更と後方互換性を維持する変更に分類するツールとして APIDiff がある.APIDiff は Java ライブラリの 2 つのバージョンを入力として受け取り,コードの類似度に基づいて API の変更を検出し,各変更を後方互換性を壊す変更と後方互換性を維持する変更に分類する.しかし,コードの類似度の閾値を適切に設定することは難しく,APIDiff はリファクタリングとして分類すべき API の変更を誤って分類する場合がある.また検出した変更を変更の種類ごとに後方互換性を壊す変更なのかを判別しているため,ある API に対して複数の変更が行われるとそれらの変更によって API の後方互換性が維持されているかを正しく判別できない場合がある.そこで提案手法では,コードの類似度の閾値に依存せず抽象構文木を用いてリファクタリングを検出する RefactoringMiner を利用し,API の変更を検出する.そして API ごとに変更をグループ化して後方互換性を壊す変更が含まれているかを調べることで,それらの変更によって API の後方互換性が維持されているかを判別する.8 個のオープンソースソフトウェアに対して実験を行った結果,既存手法と比べて API の変更をより高い精度で検出できることを確認した.また 1 つの API に対して後方互換性を維持する変更と後方互換性を壊す変更が行われた場合でも,それらの変更によって API の後方互換性が維持されているかを判別できることを確認した.

Journal

Details 詳細情報について

Report a problem

Back to top