Aries コンポーネントは, コードクローンの集約支援を行います. 集約支援を行うために,Aries は CCFinder が検出したコードクローンに対して2つの処理を施します. 1つ目の処理は,プログラミング言語の意味に照らして構造的なまとまりのある部分の抽出で, 2つ目の処理はメトリクスを用いた特徴づけです.
CCFinder が検出したクローン | Ariesが抽出したクローン |
構造的なまとまりの部分を抽出をすることによって, 集約を行いやすい単位のコードクローンを得ることはできましたが, それらがどの様に集約可能であるかは不明です. 特にオブジェクト指向言語では,コードクローンの集約の方法はその状況に応じてさまざまです. たとえば,重複したメソッドをユーティリティクラスに移動させる場合もあれば, 共通の親クラスに引き上げることにより,コードクローンを集約する場合もあります. Aries は各コードクローンがどの様に集約できるかを予測するために, 各抽出部分をメトリクスを用いてそれらを定量的に特徴付けます. Aries で用いてる代表的なメトリクスは以下のものがあげられます. なお,すべてのメトリクスはクローンセット単位で計算されます.
Aries は1と2の処理を行った後,解析結果をファイルに出力します. ユーザはそのファイルを Aries の GUI部に読み込ませることにより,グラフィカルにリファクタリング支援を行うことができます. 左の図は Aries のスナップショットです. Aries の GUI の使い方は Gemini コンポーネントのクローンベースの解析に似ています. Aries はクローンの単位に応じて,使用するメトリクスが異なっています. ユーザは,ウィンドウの左上のタブで,単位を宣言,メソッド,文の中から選択します. Aries ではウィンドウの左側にメトリクスグラフとクローン単位選択パネルが存在します. メトリクスグラフは,各メトリクス値に基づいたクローンの絞込みを行うことができます. メトリクスグラフについては Gemini コンポーネント のページを参照してください. また,クローン単位選択パネルでは,クローンの単位に基づいた絞込みを行うことができます. 左の図は文単位のタブの様子です. 文単位のクローンは,do,for,if,switch,synchronized,try,while の7つがあります. クローン単位選択パネルでは,それぞれの単位についてチェックボックスがあり, 絞込みの対象とするかを選択できます. メトリクスグラフとクローン単位選択パネルの絞込み結果は, ウィンドウ右側のクローンセットリストに反映されます. 絞込みの結果,該当するクローンセットのみがクローンセットリストに表示されます.
クローンセットリストに表示されたクローンセットを選択すると左の図のようなウィンドウが立ち上がります. このウィンドウには選択されたクローンセットに関する詳細な情報は表示されています. ウィンドウの上部には,そのクローンセットのメトリクス値の一覧が表示されています. その下にはフラグメントリストがあります. フラグメントリストでは,そのクローンセットに含まれるコード片の一覧が表示されています. ウィンドウの下部にはソースコードビューと外部変数リストが存在します. ユーザがフラグメントリストにおいてコード片を選択すると, 選択されたコード片のソースコードがソースコードビューに, そのコード片で用いている外部変数のリストが外部変数リストに表示されます. 外部変数とは,コード片の内部で使われており,その外側で定義されている変数のことです. リファクタリングを行う際は,この外部変数を適切に処理する必要があります.
Copyright © 2005-2007 大阪大学大学院情報科学研究科 コンピュータサイエンス専攻 井上研究室 All Rights Reserved.