[修士論文] オブジェクトの生存期間を考慮した実行トレース抽象化による理解支援

小林先生が指導した名古屋大学M2の戸田さんが修士論文の発表を行いました.

論文題目:オブジェクトの生存期間を考慮した実行トレース抽象化による理解支援
論文概要:

ソフトウェアの保守作業では,ソフトウェアを理解することが重要である.ソフトウェアを理解する上で,開発時に作成されるクラス図やシーケンス図をはじめとする仕様書はソフトウェアの理解を支援する重要な成果物である.しかしながら,保守作業時に適切な仕様書を利用できないことがしばしば起こる.適切な仕様書が利用できない場合,ソフトウェアの理解にはソフトウェアのモジュール構成やそれらの関係といったソースコードやクラス構成の構造的特徴と,ソフトウェアが実行時の挙動といった振舞いの理解が必要である.

特にオブジェクト指向ソフトウェアでは,ソフトウェア実行時に生成されるオブジェクトの相互作用を理解することが非常に重要である.オブジェクトの相互作用とは,ソフトウェア実行時に発生するオブジェクトのメソッド呼び出しやオブジェクトのフィールドへのアクセスを指す.オブジェクト指向ソフトウェアでは,オブジェクトの相互作用を通して目的とする機能が実現される.

オブジェクト指向ソフトウェアでは,規模の小さいソフトウェアであっても膨大なオブジェクトの相互作用が発生する.一般的に,オブジェクト指向ソフトウェアの振舞いを理解することは非常に時間的コストのかかる作業である.オブジェクトの相互作用を理解するためには,ソフトウェア実行時に実行トレースを取得し,UML シーケンス図として表現する手法が利用できる.シーケンス図は,オブジェクト間のメソッド呼び出しの様子を時系列順に表現する.本来,シーケンス図はソフトウェア設計時に振舞いの概要を定義するために作成されるが,実行時の振舞いを理解するためにも有用な手法である.実行トレースから生成されるシーケンス図を利用することで,実際に発生したオブジェクトの相互作用を視覚的に捉えることができるため,オブジェクトの相互作用が効果的に理解できる.

しかしながら,実行トレースは実行時に発生したオブジェクトの相互作用を全て含んでいるため膨大であり,生成されるシーケンス図も非常に巨大となり,振舞いの概要の理解は難しい.振舞いの概要の理解に効果的なシーケンス図を生成するために,実行トレースを抽象化する必要がある.

本研究の目的は,実行トレースから生成されるシーケンス図を用いた振舞いの概要の理解を支援するため,実行トレースを抽象化することである.実行トレースに含まれる重要でないオブジェクトを除去することにより実行トレースを抽象化する手法を提案する.除去するオブジェクトを特定するため,ソフトウェアの動的特徴に着目しオブジェクトの参照関係と生存期間の情報を利用する.参照関係と生存期間に着目することで,ソフトウェア実行の詳細を表す一時オブジェクトを特定する.一時オブジェクトはソフトウェア実行で詳細な機能を実現するために生成され,僅かな期間のみ利用されるオブジェクトである.一時オブジェクトを実行トレースから除去することで,振舞いの概要を理解することに適した実行トレースの抽象化が行える.

本研究では,提案手法を実装したツールを作成した.一時オブジェクト特定のために必要となる情報を取得するようにトレーサーを拡張し,一時オブジェクト特定および除去機能を実装した.提案手法の有用性を確認するため,作成したツールを用いて評価実験を実施した.評価実験では,3 種類のオープンソースソフトウェアの実行トレースを対象とした.実験の結果から提案手法により多くの一時オブジェクトを特定し,実行トレースから除去できることを確認した.また,抽象化した実行トレースから圧縮したシーケンス図を生成し,ソフトウェアの振舞いの概要を理解できることを確認した.