スライスを用いた分割に基づくプログラム理解支援手法

平山 力地 (1151088)


近年のソフトウェア開発では,ソフトウェアの保守や拡張に多くの時間が費やされている. この保守に費やされる時間は,ソフトウェア開発全体にかかるコストの3分の2となっており,中でもソースコードを読み理解する作業は多くの時間を要する. そのため,ソースコードを読み理解する作業を支援し,時間を削減するための手法が求められている.

大規模ソフトウェアのソースコードを開発者が読む時,各ソースコードの先頭から1行ずつ読んでいき, 行ごとの役割を理解した上で各メソッドの役割を理解し,そこからシステム全体をボトムアップに理解していくことは困難である. そのため開発者はソースコードを読む際,ソースコードの先頭から1 行ずつ読んでいくのではなく, 初めにドキュメントなどを読み全体的なシステムの理解から始め,その次に各メソッドの役割をトップダウンに理解していく. メソッド内のソースコードを理解する際も同様であり,まずコメントなどを読み,そのメソッドの役割を理解した上で, メソッド内のソースコードを単一の機能を実現するコード片に区切りながら,各コード片が実現している機能を理解し,メソッド全体を理解していく. しかし,多くのソフトウェア開発企業では,コメントやドキュメントの無いレガシーソフトウェアの存在が問題になっており, そのようなソフトウェアのソースコードはボトムアップに読まざるを得ず,より時間を要することになる.

本発表では,単一の機能を実現するコード片単位で開発者に提示することで,開発者のソースコードの理解を支援する手法を提案する. ソースコード内の単一の機能を実現するコード片を開発者に提示することで,コメントやドキュメントが無くても, 開発者はソースコードを読み始めるべき場所がわかる. ソースコードを機能ごとに分割・提示するために,凝集度という,モジュール内の各要素がどの程度協調して動作しているのかを表す度合いを利用する. 本研究では,凝集度の高いコード片の集合を1 つの機能と仮定し,ソースコードを機能ごとに分割・提示する. 凝集度の高いコード片の集合は,プログラムスライスに基づく凝集度を用いて求める. またコード片を対象とした凝集度を求めるために,新たにコード片を対象とした凝集度メトリクスを定義した.

提案手法をツールとして実装し,開発者が手作業で求めた機能と対応付けたコード片と,ツールが出力したコード片を照合した. その結果,これらコード片は多くの場合に重複していることがわかった.