Panopticode

丸一日かかった…orz

Panopticodeとは

Javaコードの品質測定を実施、収集、可視化するためのツール。
測定自体は、以下のツールを使用している。

Simianはオープンソースプロジェクト以外に使用する場合は、購入しなきゃいけないようだ。

特色

Panopticodeの特色は、簡単なインストールと上記ツールの統合的利用、CruiseControlとの協調。
Panopticodeをダウンロードすると、一連のツールとともに、build-sample.xmlという、antのbuild.xmlのサンプルが入っている。
このxmlファイルをベースにプロジェクトを作成すると、それだけでツール類を利用できるというわけ。
さらにこれらの結果を可視化してくれる。

経緯

CruiseControlを使ったものの、カバレージなんかに対応してないなーと思って調べてたら、Panopticodeが出てきた。
早速ダウンロードしてきたものの、エラーが出まくってまともに動かすまでに一日かかった。

環境

手順

ソース、テストディレクトリはbuild.xmlの記述で変更可能。

  • build.xmlを編集。プロジェクト名は必ず変更、ほか各プロジェクト固有の記述が入るが、panopticode用の記述を壊さないように。
  • プロジェクトのソース書き。テストコード書き。
  • % ant metricsで一連のツールが実行される。

測定結果

  • target/rawmetrics以下に、各ツールが生成した測定結果が入る。例えばテストコードのカバレージ詳細は、html/emma/emma-coverage.html にある。
  • target/reports/svg以下に、Panopticodeが収集、可視化したsvgファイルが入る。
HelloWorldProject
-- build.xml
-- lib
-- (略)
-- panopticode
-- (略)
-- prod
`-- src
`-- localhost
`-- HelloWorld.java
`-- unittest `-- src `-- localhost `-- HelloWorldTest.java `-- target (略) |-- rawmetrics | |-- html | | |-(略) | `-- xml | |-(略) |-- reports | `-- svg | |-- complexity-treemap.svg | |-- coverage-treemap.svg | |-- interactive-complexity-treemap.svg | `-- interactive-coverage-treemap.svg `(略)

可視化


画面は、クラス1つ、内訳としてメソッド2つに対するテストコードのカバレージ。main()はテストしてないので黒い。
svgなだけに、クリックした部分の詳細を表示したりと表現力豊か。SafariFirefoxならデフォルト対応。今のIEはどうだか知らない。

上の画像は、Emmaが生成したカバレージ詳細のhtmlファイル。上の図に対応する。

嵌ったところ(うろ覚えなところもあるのであしからず)

  • ant 1.6.5ではエラー発生。 ant 1.7 では動く。
  • ANT/libにいくつかjarを入れた。
    • complexian-0.9.1.jar
    • jdepend-2.9.1.jar
    • junit-4.4.jar
  • プロジェクトにunit testコードが一行も無いとエラー。

まぁ終わってみれば、そりゃエラーになるよな、というところか。

感想

動いてみると、非常に楽しい。クロスワードパズルを埋めていくような感覚で、テストを書く意欲がわく。以前の案件では、カバレージ用のコードを埋め込んだ記憶があるが、単体テストを実施するだけで、コードに手を加えずにカバレージが取れるのは、そうあるべき。
これでコーディングの問題が全部解決するわけでもないけど、引き続き調べていきたい。Findbugsなんかも統合すべきなんだろうなぁ。
あと破裂音の多い名前がふざけて聞こえて気に入った。パノプティコードと読むのか?

CruiseControl内で表示させてみた。ここでも嵌った…。