本文へジャンプ English

Welcome to ICCA page

ICCA はコードクローン統合分析環境です. ICCA はソースコード中のコードクローンをグラフィカルに解析します. ICCA を用いることでソフトウェアの開発・保守をより効率的に行うことが出来ます. ICCA は目的別に 3つのコンポーネントに分かれています. ソースコード中に存在するコードクローンの把握, 品質調査には Gemini コンポーネントを用います. コードクローンの集約(リファクタリング)を行うにはAries コンポーネントを用います. デバッグや機能追加時の修正漏れを防ぐには,Libra コンポーネントを用います. ICCA は内部で コードクローン検出ツール CCFinder を使用しています.

ICCA 誕生まで

コードクローン検出ツール CCFinder

1999年,井上研究室はある企業から相談を受けました. 「長い間保守をしているレガシーシステムに新しい機能を付け加える場合, 既存のモジュールを拡張すべきか, 新規にモジュールを開発すべきかの判断の基準がほしい」. その答えとして井上研究室で開発したのが CCFinder でした. CCFinder はそれまでに研究開発されていた他のコードクローン検出ツールに比べて, 検出速度が圧倒的に高速でした.CCFinder の開発によって, 大規模なソフトウェアのソースコードから, 現実的な時間でコードクローンの検出が可能となりました. CCFinder の有効性は認められ,初めは Cobol のみであった対象言語は, C/C++, Java, Cobol, Fortan, emacs-lisp と増やされました.

CUI の弱点

CCFinderの出力ファイル

CCFinder はいくつかの企業に配られ,使われるようになりました. そしてフィードバックが返ってきました. 多く寄せられたのは,対応するプログラミング言語を増やしてほしいというもの, それから,CCFinder の使い勝手の改善でした. CCFinder はコマンドラインツールです.コマンドプロンプトで, 引数として対象ソースコードや検出オプションを指定することで, 出力ファイルにコードクローン情報を出力します. 1つめの問題はその CCFinder の引数の複雑さでした. 対象ソースコード群,出力ファイル,最小一致トークン数, メモリ量などすべての情報を引数として与えなければならないため, そのコマンドは必然的に複雑になってしまいました. 2つめの問題は CCFinder の検出したコードクローン情報です. CCFinder はファイルにコードクローンを吐き出します. 左の図は CCFinderの出力ファイルの例です. CCFinder はこのように対象ファイルのどの部分がクローンになっているかを, 行数・列数で表現しています. ユーザがこの情報から,ソースコードを閲覧するためにエディタプログラムなどを起動し, ファイルのその部分まで移動する,というのは大変な作業です.

Gemini の誕生

旧Gemini

ユーザインターフェースの問題を解決するために,我々は2001年に Gemini を開発しました. Gemini は CCFinder のGUIフロントエンドプログラムであり, ユーザは Gemini 上で検出オプションを設定し CCFinder を実行することが出来ます. Gemini により,CCFinder をコマンドライン上で実行しなくてもよくなりました. また,Gemini は CCFinder の出力ファイルを読み込み, コードクローン情報を視覚的に表示します. Gemini を用いることでユーザは対象ソフトウェアのどの部分がクローンなっているか, また,他のどの部分とクローンになっているかということを瞬時に把握できるようになりました. Gemini にはソースコードを表示する機能もあり, コードクローンのソースコードを閲覧するために, エディタなどを起動する必要もなくなりました.

Gemini の限界

しかし,Gemini には致命的な欠点がありました,スケーラビリティの低さです. CCFinder の長所は"大規模ソフトウェアから,コードクローンを高速に検出する"ことです. しかし,Gemini は検出対象ソフトウェアの規模が大きいとき, 負荷に耐えることが出来ませんでした. 検出されたコードクローンの量に依存しますが, Gemini が動作するのは対象ソフトウェアが数万の規模まででした. また,Gemini には他の問題もありました. 検出したコードクローンの情報はさまざまな状況で利用することが考えられます. 例えば,(a)外注プログラムの品質をチェックしたい, (b)検出したコードクローンを集約したい, (c)デバッグや機能拡張を行うときに,編集すべき箇所の一覧を得たい, などです. このような状況のうち,Gemini が適しているのは (a) のみです. 例えば,(b) に対しては,ユーザに与える情報が少なすぎます. Gemini がユーザに与える情報は, ソフトウェアのどの部分とどの部分がクローンになっているか, ということだけです. 集約支援を行うためには,集約が可能であるか,また可能であるのならば, どのように集約を行うべきなのか,などという情報を与えるべきです. (c) に対しては,無駄な情報が多すぎます. Gemini は対象ソースコードに含まれる全てのコードクローンを表示します. しかし(c)のような状況では, ユーザから指定されたコード片とのクローンのみを表示すればよく, 効率が悪いといえます.

コードクローン統合分析環境 ICCA

Gemini コンポーネント
Aries コンポーネント
Libra コンポーネント

ICCA は2005年,旧 Gemini の後継として誕生しました. ICCA には 旧 Gemini のスケーラビリティの問題や, 例(b) ,(c) の状況での問題を解決しています. ICCA はさまざまな状況でのコードクローン情報を用いることが出来るように, その目的別に,3つのコンポーネントを使い分けます. (a)の状況で用いるのは,Gemini コンポーネントです. 名前こそ,旧 Gemini と同じですが スケーラビリティの改善など, さまざまな改良が施されています. Gemini コンポーネントについての詳しい情報は, Gemini コンポーネントのページを参照してください. (b)の状況で用いるのは Aries コンポーネントです. Aries コンポーネントでは リファクタリングのための支援情報が, コードクローンに付加されており,ユーザは効率的に集約作業を進めることが出来ます. Aries コンポーネントについての詳しい情報は, Aries コンポーネントのページを参照してください. (c)の状況で用いるのは Libra コンポーネントです. Libra コンポーネントでは, ユーザが指定したコード辺と対象ソースコード間のコードクローンのみを検出します. Libra コンポーネントについての詳しい情報は, Libra コンポーネントのページを参照してください.

Copyright © 2005-2007 大阪大学大学院情報科学研究科 コンピュータサイエンス専攻 井上研究室 Rights Reserved.