重複コード

先日、ソースコードに含まれる重複コードを検出するアプリがあることを知る。
AIST CCFinderX
http://www.ccfinder.net/ccfinderxos-j.html

とりあえず、インストールしてみる。動作させるのにJavaPythonが必要みたいだ。
Python 2.7だと動作しない?
よくわからないので以下の場所からPython 2.6.6をダウンロードしてきて、Python2.7のアンインストールは行わずに、Python 2.6.6をインストール。
http://www.python.jp/Zope/download/pythoncore
これで起動するようになったようだ。

ためしに自作アプリのソースを用いて、重複コードの検出を試してみる。
とりあえずgemx.batを実行。
「File」→「Detect Clones...」を選択する。

ソース言語に「cpp」を選択し、検出したいソースの入っているフォルダを指定して、「Next」を押下。

う〜ん…色々設定がある。とりあえず初期値のまま「OK」を押下しよう。

しばらくすると、何か出た。

プロット上の黒丸をクリックすると、該当するソースが選択されるようだ。
その状態のまま「Sorce Text」タブを選択してみる。

なるほど、ここが重複ソースと判断されたらしい。
ここは、画面上のボタン等の各プロパティを設定する処理だ。
たしかに、if文の条件式が違うだけで、処理は同じようだ。
あれ?やっぱ違う?同じ?……と悩んだりするのも重複ソースのよろしくない点なんだな、きっと。
このご時世、ボタン等のプロパティを手動で記述すること自体が、既に間違いという気もするけど。

ここは、処理は同じで戻り値だけ違う関数が重複ソースと判断されてる。
たしかにコピペして作った記憶がある。
テンプレート化するべきなんだろう。

現在の設定を保存しておくには、「File」→「Save Current Scope As...」を選択する。

このアプリ、2011/1/8までに仕上がるかな?