メトリクスとは何か
メトリクス測定ツール
メトリクスの測定ツールは、単にJavaのソースコードからメトリクス測定を行うだけでなく、JavaのソースコードをUMLやグラフに変換するものや、パッケージの相互依存などのルール違反も可視化するものまでさまざまあります。
ここではJavaの開発ツールとしてデファクトと認知されているEclipseにプラグインして利用できる無料と有料の2つの代表的なメトリクス測定ツールの紹介をします。
無料(BSDライセンス)のツールとして紹介するのは「CAP」です。CAPの特徴は前ページのパッケージのメトリクスで取り上げたA-Iグラフを表示できることです。CAPのA-Iグラフでは、パッケージに含まれるクラス数がパッケージを示すA-Iグラフ上の○の大きさによって変化します。A-Iグラフ上に巨大な○が現れた場合、パッケージの分割を考える必要があります。
有料のツールの代表は「Lattix」です。Lattixの大きな特徴はDSM(ディペンデンシー ストラクチャ マトリックス)手法に基づいて、モデルを管理することができることです。モデルをUMLで表現した場合、規模の大きいシステムでは、モジュール間の依存関係が複雑に絡み合うために関係線が交錯し、モデルを理解することが非常に困難になります。
Lattixは、モジュール間の依存関係をDSMで表現するため、モジュール間の依存関係が複雑な場合もUMLで記述されたモデルと比較すると分かりやすくなっています。
また、通常のメトリクス測定ツールでは、モデルのメトリクスを測定するだけで、モデルが不適切だった場合の変更のアプローチは別の開発ツールで行い、その変更によってモデルが適切に修正されたか否かのメトリクス測定を再度実施する必要がありました。
Lattixは、DSMを利用してパッケージ構造や階層構造を表現すること、依存の循環などを発見するだけでなく、適切なパッケージ分割や依存関係の最小化など、モデルに対する変更やリファクタリングも、DSMを操作することで行うことができることが最大の特徴であり、利点です。
以上がメトリクス測定ツールの紹介です。実際のプロジェクトで利用するためには、それぞれの特長を生かして、複数のツールを使いこなすことも考えてみてください。
開発での適用
最後に、実際の開発現場で、どのようにメトリクスを利用してモデルを管理すれば良いかを解説します。
実際の開発では、要件定義段階で目標とする値を決め、設計や実装段階でモデルのメトリクスを測定し、目標とする値と付き合わせて、必要があればインスペクションを行い改善するという流れになります。
また、実際の開発現場でモデルのメトリクスを利用する場合は、その作業をできる限り自動化することが望まれます。例えば、開発者がクラスを作成する度に、モデルの管理者が手作業でツールを動かしていたのでは、管理者に対する作業負担が大きく、十分な評価やモデルに問題があった時のフォローができません。
自動化の具体例としては、構成管理ツールにチェックインされたクラスを、Antを利用して取り出し、Ant内でコンパイルなどを実施した後にLattixなどのメトリクス測定ツールを動作させ、その測定値を、HTML形式のレポートとして出力する方法を利用することなどが考えられます。また、モデルのメトリクスだけではなく、テストの実行や、そのテスト結果やカバレッジ率などのレポート出力もあわせて、自動で管理すると良いでしょう。
このようにモデルだけではなく、テスト結果などについても自動で管理することは、開発者が増えてくる実装フェーズ以降では特に重要になってきます。
また、モデルのメトリクスと組み合わせて、アーキテクチャ構築完了時にATAM(Architecture Trade-off Analysis Method:SEIによって開発されたアーキテクチャの分析手法)やCBAM(Cost Benefit Analysis Method:ROI(Return on Investment:投資回収率)に基づいたアーキテクチャの分析手法)を、設計完了時にインスペクションを実施することで、ソフトウェアのアーキテクチャを管理し、より良いシステムを開発することができます。
以上のように、モデルのメトリクスは、単なる学者の理論ではなく、皆さんの開発現場で実践することができるものです。ぜひ、より良いシステム開発のために取り入れてください。