本文へジャンプ English

Gemini コンポーネントとは

Gemini コンポーネントは,CCFinder が検出したコードクローンの情報をグラフィカルにユーザに提供します. 旧Gemini の機能強化バージョンということもできます. Gemini の解析はファイルベースの解析クローンベースの解析に分かれています. ファイルベースの解析では,各ファイルにどの程度クローンが含まれているのかというような, ファイルを単位とした解析を行います. 一方,クローンベースの解析では,特徴的なクローンがソフトウェアのどの部分に含まれているのかというような, クローンセットを単位とした解析を行います.

ファイルベースの解析

ファイルベースの解析では,ユーザは各ファイルにどの程度クローンが含まれているのか, また,どのファイルとどのファイルが多くのクローンを共有しているのかといったことを調べます. ファイルベースでは主に次のビューを用います.

スキャタープロットはソフトウェアのどの部分とどの部分がクローンになっているのを俯瞰的に表示します. 左の図はスキャタープロットのスナップショットです. スキャタープロットでは,解析対象のソフトウェアのソースコード中のトークンが, その出現順に水平方向と,垂直方向に並べられています. そして,水平成分と垂直成分のトークンが等しいとき,点をプロットします. このように点をプロットしていくと,CCFinder が検出したコードクローンはスキャタープロット上では, ある一定以上の長さを持った対角線分として表示されます. 水平方向と垂直方向の格子はファイルの区切りを表しています. また,スキャタープロットはディレクトリツリーと連動しています. ディレクトリツリーで,ディレクトリを選択した場合, スキャタープロットはその選択されたディレクトリ内を拡大表示します. ディレクトリツリーでファイルが選択された場合, スキャタープロットは選択されたファイルの部分をハイライト表示します.

また,ファイルベースの解析では各ファイルの定量的な情報もユーザに提供します. 各ファイルの定量的な情報はファイルリストで提供しています. 左の図はファイルリストのスナップショットです. ファイルリストでは,各ファイルの規模情報(行数,トークン数)と共に, そのファイルが含んでいるコードクローンの数, コードクローンがそのファイルに閉める割合などの情報が表示されます. ユーザはファイルリストを用いることによって,どのファイルが多くクローンを含んでいるのか, どのファイルに重複部分が多く存在するのかといったことを知ることが出来ます. また,ファイルリストには,フラグメントリストと関連ファイルリストというサブリストが存在します. ファイルリストでファイルを選択すると, そのファイル内に存在するコードクローンの情報がフラグメントリストに, 選択されたファイルとコードクローンを共有しているファイル一覧が関連ファイルリストに表示されます. グループリストでも定量的にな情報は提供されます. グループリストでは,グループ単位の定量的な情報が表示されます. グループとは,一連のファイル群です. CCFinder でコードクローンを検出する際にオプションを設定することで, 解析対象ファイルをグループに分割することが出来ます. 例えば,1つのモジュールを1つのグループにしてコードクローン検出を行うと, グループリストを用いることによってモジュール間の類似度を得ることができます.

クローンベースの解析

クローンベースの解析では,ユーザはコードクローンをその特徴に基に調べます. クローンベースの解析では主にメトリクスグラフを用いてコードクローンの絞込みを行います. 左の図はメトリクスグラフのスナップショットです. Gemini のメトリクスグラフでは,5つのメトリクスを用いています. メトリクスグラフはパラレルコーディネーショングラフとして実装されています. メトリクスグラフでは,各メトリクスにつき,1つの座標軸が用意されています. そして,各クローンセットのメトリクス値を元に各座標軸に点をプロットし, 隣り合う点を直線で結びます. このようにすると,1つのクローンセットは1本の折れ線として特徴を現すことが出来ます. メトリクスグラフでは各メトリクスににき,上限と下限を変更することで絞込みが行えるようになっています.

もちろん,クローンベースの解析でもクローンセットの定量的な情報を得ることが出来ます. クローンベースの解析では,クローンセットの定量的な情報はクローンセットリストに表示されます. クローンセットリストは,メトリクスグラフで選択状態にあるクローンセットのみを表示します. ユーザは,まずメトリクスグラフで荒く,クローンセットを絞り込み, さらにクローンセットリストを用いて, より細かく各クローンセットの情報をえることができるようになっています.

Copyright © 2005-2007 大阪大学大学院情報科学研究科 コンピュータサイエンス専攻 井上研究室 All Rights Reserved.