Gemini概要

CloneWarrior
http://se.aist-nara.ac.jp/clonewarrior/
大杉 直樹†, 神谷 年洋‡, 門田 暁人†, 松本 健一†
†奈良先端科学技術大学院大学 情報工学科
{naoki-o, akito-m, matumoto}@is.aist-nara.ac.jp
‡科学技術振興事業団 さきがけ研究21
[email protected]
SEA関西SPIN
1
内容

CloneWarrior






概要
検索対象のコード
サンプルコード
コードクローン
利用手順
今後の課題
SEA関西SPIN
2
概要

GUIベースのコードクローン視覚化ツール

容易なセットアップ
• InstallShield によるセットアップウィザード

シンプルなインタフェース
• マウス操作によるコードクローンの検索,閲覧

高速コードクローン検索
• CCFinder によるコードクローン検索

コードクローン分析作業の保存
• コードクローン,オプション設定,ビューの状態を保存

コーディング作業との高い親和性
• ソースコードの変更を追跡
SEA関西SPIN
3
アーキテクチャ
CloneWarrior
Interfaces
Source code list manager
CCFinder controller
Source code list view
Source code
selection
information
CCFinder
Code clone
detector
User
Code clone list manager
Code clone list view
Source codes and
Code clones
Information
Code clone
selection
information
Source code editor
Source code editor
Source codes
SEA関西SPIN
4
画面の概要
検索対象のコードの一覧
サンプルコードの一覧
検索対象のコード
コードクローン
サンプルコード
コードクローンの一覧
SEA関西SPIN
5
検索対象のコード(1/2)
検索対象のコードの一覧
検索対象のコード
SEA関西SPIN
6
検索対象のコード(2/2)

コードクローンを検索する対象のソースコード



HDD上に記録されているソースコードを指定する
コードクローンが含まれている可能性があるソースコード
を指定する
下記の何れかの言語で書かれているソースコードを指
定する
• C; C++; Java; COBOL; COBOL/S; HPL; Emacs Lisp;
FORTRAN; Plain Text
SEA関西SPIN
7
サンプルコード(1/2)
サンプルコードの一覧
SEA関西SPIN
サンプルコード
8
サンプルコード(2/2)

検索対象のコードと比較するコード断片(コードの
一部,或いは,全部)



検索対象のコードの一部(或いは,全部)をコピー&
ペーストして指定する
検索対象のコードの一部に類似している可能性がある
コード断片を指定する
記述言語は切り取り元の検索対象のコードに準ずる
SEA関西SPIN
9
コードクローン(1/2)
コードクローン
コードクローンの一覧
SEA関西SPIN
10
コードクローン(2/2)

検索対象のコードとサンプルコードの間の類似した
コード断片



検索対象のコードの一部(或いは,全部)と類似したサン
プルコードの一部(或いは,全部)が検出される
[最小クローンサイズ]オプションで指定したトークン数以
上,類似したトークンを含むものが検出される
検出されるコードクローンは CCFinder の実装に依存
する
SEA関西SPIN
11
利用手順










セットアップ
CloneWarrior の起動
プロジェクトの作成
オプションの設定
検索対象のコードの追加
サンプルコードの追加
プロジェクトの保存
コードクローンの検索
検索結果の閲覧
その他の機能
SEA関西SPIN
12
セットアップ

CloneWarrior セットアッププログラムをメディアか
らコピーしてください

セットアッププログラムは以下のURLからダウンロードす
ることもできます
• http://se.aistnara.ac.jp/clonewarrior/CloneWarrior_1_6_7_26.zip

setup.exe を実行し,セットアッププログラムの支
持に従ってセットアップを行ってください
SEA関西SPIN
13
CloneWarrior の起動

Windowsの [スタート] メニューで [すべてのプロ
グラム(P)]→[NAIST CloneWarrior 1.6]→
[CloneWarrior1.6] を選択して CloneWarrior
を起動してください
SEA関西SPIN
14
プロジェクトの作成

「プロジェクトの新規作成」ダイアログで新しく作成
するプロジェクトの名前を入力してください.



プロジェクトの名前は,ユーザがプロジェクトを識別する
ための文字列です.
入力できる文字に制限はありません.
入力が終わったら,[OK] ボタンを押して「プロジェ
クト」の名前を決定してください.
SEA関西SPIN
15
プロジェクトについて

CloneWarrior プロジェクトファイル(拡張子cwp)
はコードクローン検索作業の保存単位です

プロジェクトファイルには,以下の情報が保存されます
•
•
•
•

プロジェクト名
追加された,検索対象のコード
追加された,サンプルコード
検索された,コードクローン
プロジェクトファイルを開くことで,
以前に行った検索作業を再開することができます
• プロジェクトの保存方法は「プロジェクトの保存」で説明します
SEA関西SPIN
16
オプションの設定

コードクローンの検索方法や,画面の表示方法に
関するオプションを設定してください


設定したオプションは CloneWarrior 終了時に ini
ファイルに保存され,次回起動時に再現されます
[ヘルプ] ボタンを押すと,
設定項目についての説明
が表示されます
SEA関西SPIN
17
検索対象のコードの追加

ボタンを押して,追加するソースコードを選択
してください

以下のディレクトリにインストールされている Java のサ
ンプルコードを追加してみてください
• D:\Program Files\NAIST CloneWarrior\samples\
multiprogressbar\jp\ac\aist_nara\is\naoki_o\progressbar
SEA関西SPIN
18
検索対象のコードの一覧
ここをクリックすると「名前」でソートします.もう一度クリックすると,ソートの
方向(降順,昇順)を入れ替えます
ここをドラッグして左右にスライドさせると,「検索対
象のコードの一覧」の幅を変更することができます
SEA関西SPIN
19
検索対象のコードの表示
表示されている検索対象のコードをダブルクリックすると,そのコードの内容
をテキストエディタ部分に表示します.
SEA関西SPIN
20
サンプルコードの追加(1/3)
ボタンを押してください



空白のサンプルコードが追加されます
ユーザはカット&ペースト等で,サンプルコードを編集す
ることができます
SEA関西SPIN
21
サンプルコードの追加(2/3)


検索対象のコードの一覧で,マウスを右クリックし
てください
ポップアップメニューから [サンプルコードとして追
加(E)] を選択してください
検索対象のコードの一覧で選択している,検索対象のコードのテキスト
(ソースコード全体)が,サンプルコードとして追加されます
SEA関西SPIN
22
サンプルコードの追加(3/3)


テキストエディタで,サンプルコードにする部分を選
択し,マウスを右クリックしてください
ポップアップメニューから [サンプルコードとして追
加(E)] を選択してください
テキストエディタで選択している,検索対象のコードのテキストの一部が,
サンプルコードとして追加されます
SEA関西SPIN
23
サンプルコードの一覧
ここをクリックすると「サイズ」でソートします.もう一度クリックすると,ソート
の方向(降順,昇順)を入れ替えます
ここをドラッグして左右にスライドさせると,「サンプ
ルコードの一覧」の幅を変更することができます
SEA関西SPIN
24
サンプルコードの表示
表示されているサンプルコードをダブルクリックすると,そのコードの内容を
テキストエディタ部分に表示します
SEA関西SPIN
25
プロジェクトの保存

ボタンを押し,保存するファイルの名前を入力し
てください
SEA関西SPIN
26
コードクローンの検索
ボタンを押してください


コードクローン検索が完了するまでは,一部のメニュー
の実行ができなくなります
SEA関西SPIN
27
コードクローンの検索

コードクローン検索中は進行状況がウインドウ右下
のステータスバーに表示されます
検索開始前
ccfinder.exe でコードクローン検索中
検出したコードクローンの追加中
検索完了
SEA関西SPIN
28
コードクローンの一覧
ここをクリックすると「サイズ」でソートします.もう一度クリックすると,
ソートの方向(降順,昇順)を入れ替えます
ここをドラッグして上下にスライドさせると,「コードク
ローンの一覧」の高さを変更することができます
SEA関西SPIN
29
コードクローンの表示
表示されているコードクローンを選択すると,コードクローン
の範囲をテキストエディタ上で強調表示します
SEA関西SPIN
30
コードクローンの絞込み
一覧で選択された「検索対象のコード」と「サンプルコード」の間に含まれる
コードクローンだけが{コードクローンの一覧」に表示されます
SEA関西SPIN
31
コードへの変更の追跡

検索の後,変更があった検索対象のコード,及び,
サンプルコードの横には マークが表示される



タイムスタンプが変更され検索対象のコードは
CloneWarrior が読み込み直す
CloneWarrior 組込のテキストエディタによる編集も追
跡する
次回検索時には,変更があったコードのみを対象
に検索を行う

変更がないコードには新たなコードクローンはないから
SEA関西SPIN
32
今後の課題(1/3)

ユーザビリティの改善

「検索対象のコード」,「サンプルコード」という分類を
廃止する
• 「検索対象のコード」,「サンプルコード」という分類は分かり
にくいという指摘をいただいたので


ユーザインタフェースの国際化(英語化)を行う
ドキュメントの国際化(英語化)を行う
SEA関西SPIN
33
今後の課題(2/3)

スケーラビリティの改善

検索対象のコードの一覧,サンプルコードの一覧,並び
に,コードクローンの一覧の描画処理の経過を示すプロ
グレスバーを実装する
• 大量のデータを処理すると,リアルタイムに制御が帰ってこなく
なるので
SEA関西SPIN
34
今後の課題(3/3)

ポータビリティの改善

.NET アプリケーションとしてビルドする
• 現在,Windows XP などの限られた OS 上でしか動作しない
ので
SEA関西SPIN
35