本文へジャンプ English

Aries コンポーネントとは

Aries コンポーネントは, コードクローンの集約支援を行います. 集約支援を行うために,Aries は CCFinder が検出したコードクローンに対して2つの処理を施します. 1つ目の処理は,プログラミング言語の意味に照らして構造的なまとまりのある部分の抽出で, 2つ目の処理はメトリクスを用いた特徴づけです.

構造的なまとまりのある部分の抽出

CCFinder の検出したコードクローンは,そのままでは集約を行う単位としては不適切です. なぜなら,CCFinder の検出したコードクローンは連続したトークンであるからです. そこで,CCFinder の検出したコードクローンから,構造的なまとまりのある部分(クラスやメソッドなど)を抽出します. 抽出された部分は集約を行いやすいと考えています.

CCFinder が検出したクローン Ariesが抽出したクローン
CCFinder が検出したクローン Aries が抽出したクローン

メトリクスを用いた特徴づけ

構造的なまとまりの部分を抽出をすることによって, 集約を行いやすい単位のコードクローンを得ることはできましたが, それらがどの様に集約可能であるかは不明です. 特にオブジェクト指向言語では,コードクローンの集約の方法はその状況に応じてさまざまです. たとえば,重複したメソッドをユーティリティクラスに移動させる場合もあれば, 共通の親クラスに引き上げることにより,コードクローンを集約する場合もあります. Aries は各コードクローンがどの様に集約できるかを予測するために, 各抽出部分をメトリクスを用いてそれらを定量的に特徴付けます. Aries で用いてる代表的なメトリクスは以下のものがあげられます. なお,すべてのメトリクスはクローンセット単位で計算されます.

メトリクスNRV(S)はクローンセット S に含まれるコード片が, その外部で定義された変数をどの程度参照しているかを表します. 一方,メトリクスNSV(S)はクローンセット S に含まれるコード片が, その外部で定義された変数をどの程度代入しているかを表します. この2つのメトリクスの定義は以下の式で表されます.

NRV(S) と NSV(S)

このメトリクスは,クローンセット S に含まれるコード片とその周囲との結合度を表しています. このメトリクスの値が大きいほど,コード片はその外部で定義された変数を使用していることになり, コード片をソフトウェアの他の部分に移動することが困難であることが予想されます.

メトリクスDCH(S)はクローンセット S に含まれるコード片が, どの程度クラス階層中に広がっているかを表します.このメトリクスの定義は以下の式で表されます.

このメトリクスは,クローンセット S に含まれるコード片がひろく広がっているほど大きい値となります. たとえば,全てのコード片が同一のクラス内に存在する場合は,このメトリクスの値は 0 となります.

リファクタリング支援コンポーネント 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.