はじめに
Curlの統合開発環境「CDE」のメトリクスでは、Curlソースコードを解析し、パッケージ、ファイル、クラスおよびCurl定義単位での規模、さまざまな比率、そして、複雑度・依存度・継承度といった代表的な指標の計測を実施します。以下、Curlメトリクスの大分類になります。
メトリクス(大分類) | 説明 |
複雑度 | コードの複雑度を測定。プロジェクトの複雑度の監視や簡素化の必要な可能性があるコードの特定に使用。 |
依存度 | パッケージ間の依存関係の度合を測定。 |
ドキュメンテーション | プロジェクト内のドキュメンテーションの量と割合を測定(指定サブディレクトリ内のdocstring、コメント、ファイルなどが含まれる)。 |
継承度 | クラス継承の様々な状況を測定。プロジェクトの継承ツリーのサイズや複雑度を分析し、継承関係が過度に複雑に交錯したクラスを特定する。 |
トータルサイズ | 測定されているコードのトータルサイズについての様々な指標を提供。生産性の測定や将来のプロジェクトに対する作業量の見積りなどに役立つ。 |
テスト | 指定サブディレクトリ内のコードを測定することにより、テストに関連したコードの量や比率を算出。 |
本稿では、まずCurlメトリクスの基本的な使い方を解説します。そして、Curlアプリケーション開発に役立つメトリクスの使用例について紹介します。
今回使用する「統合開発環境 Curl CDE 8.0」は、以下からダウンロードが可能です。インストールに関しては、こちらを参照ください。
早速使ってみよう!
Curlメトリクスの計測
Curlメトリクスの計測はとても簡単です。プロジェクトエクスプローラビュー上で、メトリクスを計測したいCurlプロジェクト、パッケージ、またはCurlソースファイルを選択して右クリックし、表示されるコンテキストメニューから[Curl メトリクスの計測]を実行します。
Curlパースペクティブ内の問題ビューやコンソールビューと同様にCurlメトリクスビューが表示され、計測結果を確認できます。
メトリクスの計測結果を確認しよう!
Curlメトリクスビューは上下のペインに分かれており、上部には計測したメトリクスとその値が、下部にはそのメトリクスの説明とブレークダウンが表示されます。
例えば、「コード行」では、選択されたスコープ内の要素に対するソース行数(空白、コメント、docstringを除く)をそれぞれ確認できます。
「トップレベル定義」では、選択されたスコープ内のファイルにあるトップレベル定義の数をそれぞれ確認できます。また、ブレークダウンでは、列挙型数、パラメータ化クラス数、Valueクラス数および一般クラス数などを表示します。
Curlデフォルトのメトリクスセット(32個)は以下になります。
メトリクス(大分類) | 説明 |
docstringおよびコメント比率(ドキュメンテーションメトリクス) | コード行に対するコメントおよびdocstring行の比率。コードのメンテナンスを行う人や内部ユーザに対して、どの程度コードが説明・解説されているかの目安。 |
docstring行(ドキュメンテーションメトリクス) | 選択されたスコープに含まれるdocstring内の実ソース行数。APIドキュメントの合計サイズの目安。 |
クラスあたりのフィールド(平均サイズメトリクス) | クラスあたりのフィールド(平均サイズメトリクス) |
クラスあたりのメンバ(平均サイズメトリクス) | クラスあたりのクラスメンバ平均数。クラスメンバの全種のクラスに対する割合。 |
コメント行(ドキュメンテーションメトリクス) | 選択中のコメントに含まれる行数。 |
コンポーネント(トータルサイズメトリクス) | 選択中のライブラリのアプレット、パッケージおよびスクリプトの数。 各ライブラリのマニフェストに記述されたコンポーネントのみ含まれます。 |
コンポーネントあたりのコード行(平均サイズメトリクス) | Curlアプレット、パッケージまたはスクリプトあたりの平均コード行。 |
コンポーネントあたりのファイル(平均サイズメトリクス) | アプレット、パッケージ、またはスクリプトごとのファイルの平均数。 ファイルのコンポーネント(アプレット、パッケージ、スクリプト)に対する割合。 |
コードのテスト行(テストメトリクス) | 空白およびコメント以外のコードを含むテストファイルの行数。テストコードの総量の目安。 |
コード行(トータルサイズメトリクス) | 空白、コメント、ドキュメンテーションを除くソースコード行数。 |
ステートメント(トータルサイズメトリクス) | 選択中のCurlステートメント数。 |
テスト比率(テストメトリクス) | テストコード行数のプロダクションコード行数に対する割合。どの程度のコードが出荷されるコードに関するテストに充てられているかの目安。 |
テスト行(テストメトリクス) | テストファイルの実ソース行数。 テストコードの総量の目安。 |
トップレベル定義(トータルサイズメトリクス) | クラス、列挙型、プロシージャ、マクロなどを含むトップレベル定義の数。 |
ドキュメンテーション比率(ドキュメンテーションメトリクス) | 選択されたスコープにおける、ドキュメンテーション行数のプロダクションコード行数に対する割合。ユーザに対してAPIがどの程度ドキュメント化されているかの目安。 |
ドキュメンテーション行(ドキュメンテーションメトリクス) | ドキュメンテーションファイル中およびプロダクションパッケージからのdocstringにおける実ソース行数。ドキュメンテーションの総量の目安。 |
ファイル(トータルサイズメトリクス) | ソースファイル数。 |
ファイルあたりのコード行(平均サイズメトリクス) | ファイルあたりの平均コード行。 コード行数のコンポーネント(アプレット、パッケージ、スクリプト)に対する割合。 |
ファイルあたりの定義(平均サイズメトリクス) | ファイルごとのトップレベル定義の平均数。 |
ファイルあたりの行(平均サイズメトリクス) | ソースファイルあたりの平均行数。 |
ブロック深さ(複雑度メトリクス) | 関数およびメソッドの平均最大ブロック深さ。 選択中のコードのネストが、どの程度の深さを持つかの概要を把握。 |
プロダクション行(複雑度メトリクス) | プロダクションファイルの実ソース行数。 |
平均サイクロマティック複雑度(複雑度メトリクス) | サイクロマティック複雑度メトリクスの平均値。 |
平均直接継承サブクラス(継承メトリクス) | 選択されたスコープにおける、非Valueクラスの直接サブクラスの平均数。 |
平均直接継承スーパークラス(継承メトリクス) | 選択されたスコープにおける、非Valueクラスの直接スーパークラスの平均数。 |
平均継承幅(継承メトリクス) | 選択されたスコープ内に存在するすべての非Valueクラスの継承幅メトリクスの平均値。 |
平均継承深さ(継承メトリクス) | 選択されたスコープ内に存在するすべての非Valueクラスの継承深さメトリクスの平均値。 |
行(トータルサイズメトリクス) | docstringを含む、ターゲット中の実ソース行数。 |
行あたりの文字(平均サイズメトリクス) | ソース行あたりの平均文字数。 |
関数(トータルサイズメトリクス) | 関数(トップレベルのプロシージャ、マクロ、テキストプロシージャ、クラスプロシージャ、コンストラクタ、ファクトリ、メソッド、ゲッター、セッター)の数。 |
関数あたりのコード行(平均サイズメトリクス) | 関数の平均コード行。 |
関数あたりの位置引数(平均サイズメトリクス) | 関数あたりの位置引数の平均数。 |
その他メトリクスの詳細については、ワークベンチの[ヘルプ]-[ヘルプ目次]を選択し、表示されたヘルプ画面から[Curl 開発ユーザーガイド]-[参照]-[Curl メトリクス]をご覧ください。
計測したいメトリクスを選択しよう!
これまで、デフォルトのメトリクスセットの計測方法を紹介してきました。次は計測したいメトリクスを自由に選択し、カスタマイズしたメトリクスセットに変えてみましょう。
ワークベンチの[ウィンドウ]-[設定]を選択し、表示された設定画面から、[Curl]-[メトリクス]を選択します。そして、右ペインで[メトリクスセット]タブを選択します。
メトリクスセットで[新規]を選択し、新規メトリクスセットを追加します(デフォルトの名前は、メトリクスセット+数字)。再び[メトリクス]タブを選択し、「メトリクスセットの編集」にて、追加したメトリクスセットを選択します。「計測するメトリクスを選択」で追加したいメトリクス項目を選択します。
プロジェクトエクスプローラビュー上で、メトリクスを計測したいCurlプロジェクト、パッケージ、およびCurlソースファイルを選択して右クリックし、表示されるコンテキストメニューから[Curl メトリクスの計測で使用...]を選択します。計測したいメトリクスセットを選択して、[OK]をクリックすると、Curlメトリクスビューが表示され、計測結果を確認できます。
計測結果をCSVやXMLで見てみよう!
メトリクスの計測結果は、CurlメトリクスビューからCSVファイルもしくはXMLファイルにエクスポートできます。計測結果が表示されたCurlメトリクスビュー上で右クリック、コンテキストメニューから「カンマ区切り値としてエクスポート(CSV)」および「XMLとしてエクスポート」を選択します。[名前を付けて保存]で任意の場所・ファイル名を指定して、保存します。
[名前を付けて保存]で保存した任意の場所に出力されます。以下、出力例になります。
type,name,kind,LOC session,session,,426 library,COM.CURL.CSK.EXTRAS.WATER-PICTURE,,426 package,COM.CURL.CSK.EXTRAS.WATER-PICTURE,,395 file,COM.CURL.CSK.EXTRAS.WATER-PICTURE:load.scurl,,13 file,COM.CURL.CSK.EXTRAS.WATER-PICTURE:WaterPictureGui.scurl,,47 class,COM.CURL.CSK.EXTRAS.WATER-PICTURE:WaterPictureGui,class,47 binding,COM.CURL.CSK.EXTRAS.WATER-PICTURE:WaterPictureGui.default,primary-constructor,45 file,COM.CURL.CSK.EXTRAS.WATER-PICTURE:WaterPicture.scurl,,257 class,COM.CURL.CSK.EXTRAS.WATER-PICTURE:WaterPicture,class,257 binding,COM.CURL.CSK.EXTRAS.WATER-PICTURE:WaterPicture.default,primary-constructor,87
<metrics version="1.0"> <metric name="type" /> <metric name="name" /> <metric name="kind" /> <metric name="url" /> <metric name="LOC" /> <scope type="session" name="session"> <metric name="LOC" value="426" /> </scope> <scope url="file:///c:/eclipse/ws/water-picture/manifest.mcurl" type="library" name="COM.CURL.CSK.EXTRAS.WATER-PICTURE"> <metric name="LOC" value="426" /> </scope>
もっと便利に。さらに詳しく見てみよう!
ここからは、Curlアプリケーション開発でのメトリクス機能の使用例について紹介します。Curlメトリクスを使用して、品質のよいCurlアプリケーションを作成しましょう!
使用例:コーディング規約準拠の確認
では、ソースコードがコーディング規約に準拠しているかCurlメトリクスを利用して確認してみましょう。例として、以下のコーディング規約を設定します。
- コード行数:1ファイルあたり600行以内
- クラス数:1ファイルあたり10クラス
- メソッド数:1クラスあたり10メソッド
- 関数内のコード行:1プロシージャおよびメソッドあたり50行
上記のコーディング規約をチェックするために、以下のメトリクスを選択しましょう。
-
トータルサイズメトリクス
- コード行
- クラス数
- メソッド
- 関数からのコード行
上記のコーディング規約に準拠していないソースコードをメトリクス計測し、Curlメトリクスビューのメトリクス計測結果を確認します。
次は、コーディング規約に準拠しているソースコードをメトリクス計測し、Curlメトリクスビューのメトリクス計測結果を確認してみましょう。下記のようにCurlメトリクスを設定すれば、開発中のソースコードがコーディング規約に準拠しているか確認できます。
Curlメトリクス設定の[オプション]にて、「個々の定義に対するメトリクスを表示」のチェックを外すと、クラス配下の要素の表示結果が省略されます。
同じく[オプション]からリンクされているCurlプログラムアナライザページのメトリクスオプションでは、ドキュメンテーションメトリクスおよびテストメトリクスの分析対象となるファイルの探索場所(正規表現)を設定できます。
まとめ
今回は、Curlメトリクスの基本的な使用法について紹介しました。Curlメトリクスは、他にもさまざまな角度からアプリケーションの分析および品質チェックが可能です。
Curlメトリクスを用いて、Curlアプリケーション開発の品質向上・効率アップにつながれば幸いです。