研究概要 |
広く用いられているUNIXのdiffは,行単位での差分を出力する汎用的なツールであるが,改行や空白の挿入,削除や,コメントの変更などソースプログラムの意味に影響を与えない場合でも差分として出力する.そのため,diffの出力からソースプログラムの意味的な変化を理解するには,多大な労力が必要である.このことが,保守工程において,過去の保守作業の内容を理解する工程を労働集約的にしている要因でもある. 本研究では,プログラムの意味を考慮した差分抽出法,すなわちプログラムの意味に影響を与えない差分を排除し,構文単位で差分を抽出するための手法を提案した. 我々は既に,意味を考慮した差分抽出ツールを提案し, 吉田敦,山本晋一郎,阿草清滋:意味を考慮した差分抽出ツール,情報処理学会論文誌,Vol.38,No.6,pp.1163-1171(1997/6) として発表している.過去の研究では,一つの関数についてステートメントのみを比較の対象としていたが,本研究では,ファイル全体について各種宣言と関数内のステートメントを対象とすることにより,よりコンパクトな差分を抽出することが可能となった. また,過去の研究では,コメント,空白,変数に定数値を代入するステートメントの移動をプログラムの操作的意味に影響を与えないとして取り扱っていたが,本研究では,制御文が持つブロックの開始と終了を表す“{"と“}"の有無,宣言の順序,宣言の仕方(複数の識別子を一つの宣言で宣言している場合と各識別子ごとに宣言している場合を区別しない),関数のプロトタイプの有無,依存関係のないステートメントの順序なども扱うことが可能となった. さらに,構文要素の「移動」について判定し,その結果を提示する手法に関しても研究を行った.提案した抽出法に基づいてツールを実装し,実際のソースプログラムに適用することで,差分の理解が容易になることを確認した.
|