Geminiの目次

1. CCFinder解析結果ファイルの取得
2. Geminiの起動
3. Geminiを用いた解析
3.1 Clone Set Base Analysis
3.2 File Base Analysis
4. 各マニュアルへのリンク

Geminiの使い方

1. CCFinder解析結果ファイルの取得

最初の作業は、対象ファイルの解析を行い、CCFinder解析結果ファイルを取得することです。
その手順をこれから説明します。

まず、以下の画面において、Gemini (for token-based code clone) フレームの中の
get token-based code cloneを見つけ、nextボタンをクリックします。

すると、以下のような画面が表示されます。解析対象ファイルのリストファイルがある場合はLoad Listを選択します。
ない場合は、これから解析対象ファイルを選択する必要があるため、Select File or Directoryを選択します。
これらのボタンを押すと、ファイル選択ダイアログボックスが表示されるため、
ファイルやディレクトリを選択し、「開く」を選択します。

以下のように、解析対象となるファイルリストが表示されたら、Nextボタンをクリックします。

次に、解析オプションを設定します。

ここでは、以下のオプションを設定できます。

Minimum Clone Length
最小クローン長(必須)
Memory Resource Limit
使用可能メモリサイズ(必須)
Language Select
解析対象ファイルの記述言語(必須)
Detection Option
どのようなコードクローンを検出するかを決定する(必須)
Analysis Result File...
CCFinder解析結果ファイル名(出力ファイル名)(必須)
Other Options ...
CCFinderに用意されているさまざまなオプションを設定する.解析対象言語毎に使えるオプションが異なる.
特に必要のない場合は、Language Select と Analysis Result File ... のみを指定し、
残りの項目はデフォルトのままで構いません.

オプションを指定し終えたら,Run CCFinder ボタンをクリックして下さい.
すると,しばらくの間解析ログが出力されたあと,Successfully Finishedと表示されます.
これで,CCFinder解析結果ファイルを得ることができたため,
次にこのファイルを用いて,コードクローンの検出作業を行います.
Successfully Finished ダイアログボックスの了解ボタンをクリックして,最初の画面に戻ってください.

2. Geminiの起動

最初の画面に戻ったら、Gemini(for refactoring-oriented code clone)フレームの
analyze token-based code clone を見つけ、nextボタンをクリックしてください.
すると、以下のような設定画面が表示されます。

ここで設定できる項目は、次のとおりです。
Memory Resource Limit
使用可能メモリサイズ(必須)
Analysis Result File...
CCFinder解析結果ファイル名(入力ファイル名)(必須)
Other Options
その他のオプション(任意)
ここで先ほど取得したCCFinder解析結果ファイルのパスを入力します。
必要な項目を入力したら、Start Geminiボタンをクリックします。

3. Gemini を用いた解析


上記の図はGeminiのスナップショットの一例です.
Gemini は二種類の解析,Clone Set Base Analysis と File Base Analysis を行うことができ,
それぞれの解析にインターナルフレームが用意されています.

2.1. Clone Set Base Analysis


上図は Clone Set Base Analysis 用のGUIです.
Clone Set Base Analysis ではユーザは Metric Graph を用いて目的のクローンセットを絞り込みます.
Metric Graphでは,各メトリクスの範囲をドラッグアンドドロップによって,指定することができます(上画面参照).
この図では,POPの値が10以上のクローンセットを絞り込んでいます. Metric Graph の絞り込み結果は上図の左側の Clone Set List に反映されます.
この Clone Set List に表示されたクローンセットを選択すると,
下の Fragment List にそのクローンセットに含まれるコード片一覧が表示されます.
さらにこのコード片を選択することで,ソースコードを閲覧することも可能です.
現在のところ,Metric Graph で使用できるメトリクスは、以下のとおりです。
RAD
クローンセットに含まれるコード片のファイルシステム中での広がりの程度を表します.
例えば,あるクローンセットに含まれるコード片がすべて単一のファイルに含まれる場合は0,
単一のファイルではないが,単一のディレクトリ内に含まれる場合は1,
というように,広がりの程度が大きいほど,RADの値も大きくなります.
LEN
クローンセットに含まれるコード片の平均トークン数です.
RNR
クローンセットに含まれるコード片の非繰返しの割合を示します.
繰返し文のクローンは,例えば,連続した printf 文のクローンなど,
あまり意味のないものが多いことがこれまでにわかってきています.
このメトリクスを使うことによって,そのようなクローンをフィルタリングすることができます.
POP
クローンセットに含まれるコード片の数を表します.
この値が高いほど,同形のコード片の数がソースコード中に多く存在することになります.
DFL
含まれるコードクローンをリファクタリングしたときに、削減されるトークン数の予測値です。
また,指定したクローンセットを cvs 形式またはCCFinder解析結果形式で出力することもできます.
cvs 形式でクローンセット情報を出力することによって excel などを用いた解析を行うこともできます.
CCFinder解析結果形式で出力することによって,
選択したクローンセットのみを次回のGeminiを用いた解析で扱うことができます.
クローンセットの出力を行うには,Clone Set List でマウスの右ボタンをクリックします.
そうすると,export メニューが現れますので,メニューに従って出力を行って下さい.

2.2. File Base Analysis


上図は File Base Analysis 用のGUIです.
File Base Analysis ではユーザは Scatter Plot を用いて目的のファイルを絞り込みます.
Scatter Plot ではソースコード中のトークンが,その出現順で垂直・水平方向に並べられます.
そして,垂直成分と水平成分が同一のトークンの場合は点がプロットされます.
つまり Scatter Plot ではクローンはある一定以上の長さを持った線分として表示されます.
また,Scatter Plot は任意の部分を拡大して表示することが可能です.
File Bas Analysis においてもクローンメトリクスRNRに基づく選択ができるようになっています.
Scatter Plot の下に "Threshold of RNR"というフレームがありますが,ここでRNRの値を調節することができます.
図では,RNRの値は50となっています.
この場合,RNRの値が50以上のコードクローンは黒色の線分で描画され,50未満のクローンは青色で描画されます.

Scatter Plot は図左の File Tree と連動して動作させることも可能です.
File Tree において,ファイルまたはディレクトリを選択すると,
Scatter Plot が拡大表示します.
Scatter Plot でマウスの右ボタンをクリックすると,図中のメニューが表示されます.
これにより,ユーザは,目的のファイルのソースコードを閲覧することができます.

また,File Base Analysis では各ファイルの定量的な情報に基づいてもファイルを選択することができます.
上図は File List を表しています.File List では各ファイルは5つの属性より特徴づけられており,
それらに基づいて,昇順・降順にソートすることができます.
File List での4つの属性は以下のとおりです.
NOL
ファイルの行数を表します.
NOT
ファイルに含まれるトークンの数を表しています.
コメントのトークン数はカウントしていません
NOC
ファイルに含まれるコードクローンの数を表します.
ROC
ファイルがどの程度クローンとなっているかを表します.
クローンになっているトークン数をファイルの総トークン数で割った値です.
NOF
ファイルとクローンを共有しているファイルの数です.

メトリクスROCとNOFの値は括弧内が全てのクローンに対して求めた値,
括弧の外の値が"Threshold of RNR"の閾値以上のクローンに対して求めた値となっています.
また,File List で選択されたファイルは下の Fragments タブに,
そのファイルに含まれるコードクローンの一覧が表示されます.
Fragment タブでは,各クローンは4つの属性があります.
Location
そのコードクローンのファイル内での位置情報です.
開始行.開始列 - 終了行.終了列というフォーマットです.
Length
そのコードクローンのトークン数です.
Dispersivity
そのコードクローンを含むクローンセットがファイルシステム内において,
どの程度広がっているかを表します.
すべてのコード片が単一のファイルに含まれるクローンセットの場合は dense,
単一のディレクトリに含まれる場合は middle,
それ以外の場合は scattered となっています.
この三つの分散度に従って,ソースコードでの強調色が異なります.
dense なクローンは赤色,
middle なクローンは緑色,
scattered なクローンは青色で強調表示されます.
Equivalence
そのコードクローンと同形のクローンがいくつ存在するかを表しています.

RNRの値が閾値以上のクローンは背景色が白色,閾値以下のクローンは背景色が灰色で表されています.
また,Related Files タブでは選択されたファイルとクローンを共有しているファイル一覧を得ることができます.
Related Files タブでも各ファイルはNOL,NOT,NOC(f),ROC(f)の4つのメトリクスで特徴づけられています.
NOL
ファイルの行数を表します.
NOT
ファイルに含まれるトークンの数を表しています.
コメントのトークン数はカウントしていません.
NOC(f)
ファイルに含まれる,ファイルfと共有しているコードクローンの数を表します.
ROC(f)
ファイルがどの程度ファイルfとクローンになっているかを表します.
クローンになっているトークン数をファイルの総トークン数で割った値です.
Related Files タブでマウスの右ボタンをクリックすることで Set as Selected File というメニューが現れます.
このメニューを選択することによって,そのファイルを File List において選択している状態にすることができます.

4. 各マニュアルへのリンク


Ariesのマニュアルへ
Libraのマニュアルへ
ICCAの紹介、インストールへ