minimize

事業拡大のため、新しい仲間を募集しています。
→詳しくはこちら

Javaプロジェクトの様々な数値を計測してレポートをHTML形式で出力できます。
出力結果は こんな感じ です。

使い方

使い方はとっても簡単です。
Package Explorerビューで対象のJavaプロジェクトを選択して
メニューから「Limy QALab -> レポート作成」を実行するだけです。
内部でAntを使用していますので、システムにAntがインストールされていて
そこにパスが通っている必要があります。

現在、以下のレポートに対応しています。

QALab / Checkstyle / PMD / PMD CPD / Findbugs / JUnit / Cobertura / JavaNCSS / JDepend / UmlGraph / Javadoc / TODO

QALab

様々な計測値を時間系列でグラフ化します。
これが、このプラグインの核となる機能です。
QA(品質保証)というのは本来、継続的に行われていくものです。
例えプロジェクトにCheckstyleを導入しても、それを一時的に行っただけでは全く意味がありません。
自動化テスト同様、こういうものは継続して行うことで真価を発揮するのです。

IMG:/dest/limy-core/qalab/summary.png

このように、QA結果を時間系列で表示します。

Checkstyle

コードを書く人によって様々な「クセ」があるのはご承知の通りだと思います。
しかし、チームで開発するプロジェクトにとってそれは好ましいことではありません。
多少の「ルール」を定めた方が良いのです。
Checkstyle は、そういったルールをチェックして「ルール違反」箇所をレポートに出力します。

インデントや括弧の位置、System.outの規制など、Checkstyle のルールは多岐に渡ります。
ルールはプロジェクトの規模やメンバーのスキルに応じて
柔軟に作成してあげることが大事です。
誰も守れないようなルールなら、作る意味がありません。

PMD

PMD は Checkstyle と似たコードチェックProductです。
Checkstyle がローカルルールを定めるとするならば、PMDはより一般的なルールを定めます。
まぁ最近はどちらもルールが拡張されていますから
両Productに重複したルールというのも多数存在することは事実ですが。

PMD CPD

PMDの付属機能である、CPD(Copy/Paste Detector)を使って
システム内の重複コードを発見します。
クラス名や変数名が異なるだけの重複コードも検出できる優れものです。

Findbugs

その名の通り、バグを発見するためのProductです。
初心者が犯しやすいミスや、上級者でもついうっかりしてしまうコーディング上の問題点を検出します。

JUnit

テスト結果を実行時間と共に表示します。
失敗した結果は赤く表示されるので視覚的にもわかりやすいです。

Cobertura

テストコードには「カバレッジ率」という値(概念)があります。
これは、そのテストは実コードのどれくらいをカバーしているかというものです。
カバレッジ率は高い方が望ましいのですが
当然100%になったからといってバグが全く存在しないというわけではありません。

どちらかというと、カバーされていないコードを検証する事が目的です。
カバーされていないコードを発見したら、対処方法は2通りあります。

Coberturaではカバレッジ率をプロジェクト・パッケージ・クラス単位でグラフ化してくれます。
これによって、率の低いクラスやパッケージを簡単に探すことが出来ます。

もう一つ重要な事があります。
「カバレッジ率を計る」ためには、テストを実施しなければなりません。
テストは毎日実行することが理想ですが、ほとんどの現場ではそれをルーチン化していません。
カバレッジ率の計測を導入すれば、事ある毎にテストを実施する必要が出てくるので
テストの質が自然と向上するのです。

JavaNCSS

NCSS とは、Non Commenting Source Statements の略です。
コメント化されていないソースステートメント数。
空行やコメント行はカウントされませんし、1行で複数のメソッドを呼び出していれば
NCSSは複数回カウントされます。
これによってNCSSは、純粋なコード量を表すのです。

また、メソッド毎のCCN(Cyclomatic Complexity Number)も計測します。
これは処理の「複雑度」を表すもので、例えばfor文をネストしたり
if文で大量の条件を記述したりすると数値は増加します。

長すぎたり複雑すぎるクラスやメソッドを検出するために、JavaNCSSのレポートは有用です。
NCSSやCCNの数値でソートすることも可能ですので、これらの対象箇所を一発で見極められます。

JDepend

JDependによるメトリクス計測結果を出力します。
各パッケージのメトリクス数値の表、パッケージ間の循環依存、
そしてメイン・ストリームからの距離とパッケージの依存関係をグラフ化します。

UmlGraph

クラスのUMLダイアグラムをレポートします。

Javadoc

多くの現場でJavadocがほとんど書かれない理由。
それは、JavadocをHTMLとして出力しない事に一番の原因があるのです。
Javadocは必ず出力しましょう。

TODO

コード内のTODO文字列を検出してレポートします。
まだ自作のα版なので精度は低いです。

レポート用コマンド

以下、その他のレポート関連コマンドです。
全てQALabメニューのサブメニューとして登録されています。
キーバインドも割り当てていますのでタイピング派の方はそちらからどうぞ。

レポート作成

Ctrl-C Ctrl-X C
レポートを作成します。作成される場所は $PROJECT_HOME/dest となっています。
この場所は プロパティページ で変更することが出来ます。

レポートを見る

Ctrl-C Ctrl-X V
ブラウザを開いてレポートを見るためのコマンドです。

build.xml作成

Ctrl-C Ctrl-X B
レポート用のbuild.xmlを作成します。
レポート作成コマンドでは、内部的にまずこのコマンドを実行してから
レポートを作成しています。

EclipseからのAnt実行は結構処理が重いので、
Ant実行は外部から行いたい!という人はこのコマンドを使用して下さい。

使用しているProduct

このプラグインでは、内部で以下のフリーライセンスProductを使用しています。
一部のProductは若干の修正を加えた上で使っています(ソースコードはPluginに付属)。

QALab 1.0
Checkstyle 4.4
PMD 4.2.1
FindBugs 1.3.4-rc1
Cobertura 1.9改
JavaNCSS 29.50
JDepend 2.9
UmlGraph 5.0