著者: 神谷 年洋(かみや としひろ) 日付: 2008/05/07 連絡先: info@ccfinder.net 著作権: 2005-2008 ( C ) Tosihiro Kamiya. All rights reserved.
Contents
メニュー[ファイル]-[クローンを検出]から、対象となるソースファイルのプログラミング言語(に応じたプリプロセススクリプト)および 対象となるディレクトリを指定します。
- ディレクトリは複数指定することもできます。ドラッグアンドドロップで指定することもできます。
- CCFinderXは、ディレクトリを再帰的にたどって、ソースファイルを探し出します。
検出オプションの設定では、最初は既定値のままで検出してみてください。検出オプションの詳細については、マニュアルを参照してください。
以上が終わると、コードクローンの検出が始まります。検出が終わると、画面の各部分が更新されます
ヒント: | もし、検出されるコードクローンが多すぎる場合には、検出オプションの設定で「事前審査を使用する」をチェックしてみてください。 |
|---|
ヒント: | 既定で、ソースファイルの順序はファイルのパスのマルチバイト文字列として表現したときの辞書順になっています。 また、指定されたディレクトリから、あらかじめ決められた拡張子を持つファイルだけを検出対象とします。 (たとえば、C/C++なら、.c, .cc, .cpp, .cxx, .h, .hh, .hpp, .hxx。) ソースファイルの順序を自分で決めたい場合や、特殊な拡張子を持つソースファイルを対象にしたい場合には、 ファイルリスト(1行に1つのファイルのパスを含むテキストファイル)を手作業で作成し、 GemXのメニュー[ファイル]-[ファイルリストからクローンを検出]でコードクローンを検出してください。 |
|---|
検出されたコードクローンを「ファイルテーブル」、 「クローンセットテーブル」 、 「散布図」、「ソーステキスト」、「スクラップブック」、「検索ボックス」を使って調べていきます。
| ファイルテーブル: | 対象となったソースコードの一覧を表示します |
|---|---|
| クローンセットテーブル: | 検出されたコードクローンの一覧を表示します |
| 散布図: | ソースコードの全体で、コードクローンがどのように分布しているかを見るための散布図を表示します |
| ソーステキスト: | 特定のソースファイルのコードを表示し、コードクローンになっている部分をハイライト表示します |
| スクラップブック: | ソーステキストに表示されているコード断片をスクラップブックにコピーすることができます。 ソーステキストとほぼ同じですが、ファイルテーブルやクローンセットテーブル内での選択状態の変化に連動しません。 |
| 検索ボックス: | ファイルテーブル、クローンセットテーブル、ソーステキスト、スクラップブック内で検索を行います |
対象となっているソースファイル全体に含まれているコードクローンが表示されています。 上部に散布図のオプションを指定するバーが配置されています。散布図のオプションについてはマニュアルを参照してください。
また、対象となっているソースファイルの一覧が、散布図の左のファイルテーブルに表示されています。
ドラッグでファイルを選択し、右クリックメニュー[選択中のファイルをスコープに]で、対象となるソースファイルを絞り込むことができます。 (この操作により、 ファイルテーブルに表示されるファイルの一覧も変わることに注意してください。)
元に戻すには、同じく右クリックメニューの[スコープを一つ戻す]を使ってください。
ソースファイルの絞り込みにより、ファイルテーブル中のファイルIDに欠番が生じることがあります。 そのようなファイルIDの不連続部分について、散布図中の該当するファイル境界は点線で表示されます。
ヒント: | ディレクトリの正方形の、右上角または左下の角をALT+クリックすることで、そのディレクトリ内のすべてのファイルを選択することができます。 |
|---|
ファイルテーブルは、対象となっているソースファイルの一覧を表示します。
それぞれのファイルについて、以下が表示されます。
上部に表示されているパスは、ファイルテーブルのすべてのファイルについて共通するパスを示します。
右クリックメニューから、対象となるソースファイルを絞り込むことができます。
いったん絞り込んだソースファイルは、同じ右クリックメニューの「スコープをポップする」で元に戻すことができます。
ヒント: | より複雑な絞り込み(たとえば、2つのディレクトリのファイルだけを残す、選択していないファイルだけを残す、など)には、 ファイルテーブルのファイル名ぞれぞれに付加されているチェックボックスを利用します。チェックボックスの利用法はマニュアルを参照してください。 |
|---|
ソーステキストは、ソースコードを参照し、コードクローンになっている部分をハイライト表示します。
「ファイルテーブル」中のソースファイルを1つクリックすると、そのソースファイルが「ソーステキスト」に表示されます。
ソーステキストにフォーカスが当たっているときに、検索ボックスに単語を記入すると、 表示されているファイル内でその単語を検索することができます。 また、「#番号」と記入すると、その行番号に移動することができます。
ファイルテーブルまたは散布図で2つ(以上)のファイルを選択すると、ソーステキストにそれら2つが並べて表示されます。
このとき、マップに以下の図形が表示されます。
ヒント: | ソーステキストのペインの数(同時に表示される最大ファイル数)はメニュー[設定]-[GemX設定]から変更することができます。 |
|---|
クローンセットテーブルは、検出されたコードクローンの一覧です。 ここで、クローンセットとは、コード断片の集合であり、その要素であるコード断片の任意のペアがコードクローンになっているものです。 それぞれのクローンセットについて、通し番号(Clone-Set ID)とコード断片の長さ(Length)が表示されます。
クローンセットテーブルは、ファイルテーブルに追随します。 つまり、対象となるファイルが(絞り込みによって)取り除かれると、取り除かれたファイルにしか存在しないコードクローンがクローンセットテーブルから削除されます。 (その逆は行いません。つまり、クローンセットテーブルからコードクローンを絞り込んでも、対象となるファイルが削除されることはありません。)
ファイルメニューから、スコープやファイルリストを保存することができます。
| スコープの保存: | スコープとは、ファイルやクローンセットの絞り込みの状態です。画面左の「スコープ履歴」に表示されています。
|
|---|---|
| ファイルリストの保存: | ファイルリストとは、ファイルテーブルに表示されているソースファイルのリストです。
|
| クローンの再検出: | 現在表示しているスコープと同じソースファイルに対して、異なった検出オプションを適用したいときは、メニュー[ファイル]-[クローンを検出し直す] |
コードクローンやソースファイルのメトリクスを用いれば、着目すべきコードクローンやソースファイルを見つけやすくなります。 また、行ベースのメトリクスを用いることで、ソースコードの行で数えた統計量を知ることができます。 GemXは、メトリクスの表示およびコードクローンやソースファイルのメトリクスによる絞り込みの機能を備えています。
メニュー[メトリクス]-[ファイルメトリクスを表示]により、ファイルテーブルにメトリクスが表示されます。
| NBR (neighbor): | そのファイルとの間にコードクローンを持っているファイルの数 |
|---|---|
| RSA (ratio of similarity between another files): | |
| そのファイルのテキストが、そのファイル以外との間のコードクローンによって占められている割合。 この値が1に近いものは、ファイル全体をコピーすることによって作られたものである可能性があります。 | |
| RSI (ratio of similarity within the file): | |
| そのファイルのテキストが、そのファイル内のコードクローンによって占められている割合。 この値が1に近いものは、単純な文や定義の繰り返しが並んでいるコードであるか (その場合はRNRも1に近くなります)、あるいは、似たような文や定義が何種類か含まれていて、 それらがそのファイルをほぼ覆っているようなコードになります。 | |
| CVR (coverage): | そのファイルのテキストが、何らかのコードクローンによって占められている割合。 定義より、max(RSA, RSI) <= CVR <= RSA+RSI。 |
| RNR (ratio of non-repeated code): | |
| 非繰り返し率。1 - (そのファイルのテキストに含まれる繰り返し部分の割合)。 この値が0に近いものは、単純な文や定義の繰り返しが並んでいるコードです。 | |
メニュー[メトリクス]-[ファイルメトリクスによるフィルタリング]からメトリクスの最大値と最小値でファイルを絞り込むことができます。
ヒント: | 既定では、ファイルメトリクスを表示した後で、ソースファイルの絞り込みを行うと、ファイルメトリクスが表示されなくなります。 メニュー[設定]-[GemX設定]で表示されるダイアログの、[ファイルメトリクスを常に算出]にチェックをつけると、絞り込みの後、 自動的にファイルメトリクスを再計算し、表示するようになります。 |
|---|
メニュー[メトリクス]-[クローンセットメトリクスを表示]により、クローンセットテーブルにメトリクスが表示されます。
| LEN (length): | そのコードクローンに含まれる一つのコード断片の長さ(トークンで測った)。 |
|---|---|
| POP (population): | |
| コードクローンになっているコード断片の数。 | |
| NIF: | そのコードクローンのコード断片を1つ以上含むソースファイルの個数。 定義より、NIF <= POP。 (このメトリクスは、大阪大学の肥後芳樹さんのGeminiから取り入れました。) |
| RAD (radius): | コード断片を持っているソースファイルが、ディレクトリ上でどれだけ広がっているか(RAD=0なら同じソースファイル内)。 RADが大きい場合、そのコードクローンが広い範囲に広がっているため、より注意が必要です。 |
| RNR (ratio of non-repeated tokens): | |
| コード断片のうち、繰り返し部分に含まれないトークンの割合(百分率)。 | |
| TKS (token set size): | |
| コード断片のトークンの種類数。 TKSが極端に小さなコードクローンは、変数の宣言の連続などである可能性があります。 | |
| LOOP, COND, McCabe: | |
| LOOPはコード断片に含まれるループの数, CONDは条件分岐の数, McCabeはそれらの合計です。 複雑なコードに着目したいときは、このメトリックの値が大きなものを選んでください。 | |
メニュー[メトリクス]-[クローンセットメトリクスによるフィルタリング]から、フィルタリングを行うことができます。
クローンセットメトリクスを表示すると、散布図に表示されているコードクローンが、(既定では)メトリックRNRの値に応じてで着色されます。
ヒント: | ファイルメトリクスと同様に、クローンセットメトリクスも、 メニュー[設定]-[GemX設定]によって、ソースファイルの絞り込みの後で、自動的に再計算・再表示させることができます。 |
|---|
メニュー[メトリクス]-[行ベースのメトリクスの表示]から、行ベースのメトリクスを表示することができます。
| LOC: | ソースファイルの行数。 |
|---|---|
| SLOC: | トークンを含まない行をのぞいた場合のソースファイルの行数。 ただし、ここでの「トークン」とはCCFinderXによって無視されるものは含まれません。 たとえば、Javaのソースファイルなら、単純なgetter/setterメソッドの定義は無視されます。 ソースコード中でCCFinderXによって無視されている文字は、ソーステキスト内では緑色の文字で表示されます。 |
| CLOC: | コードクローンのコード断片のトークンを1つ以上含む行の数。 |
| CVRL: | コードクローンのコード断片のトークンを含む行の割合。CVRL = CLOC / SLOC。 |