Subscribed unsubscribe Subscribe Subscribe

hpc-coverallsでHaskellプロジェクトのテストカバレッジを可視化する

haskell

GHCには昔からHaskell Program Coverage (HPC)というカバレッジを計測する機能とツールがついてくるのだけど、コマンドラインオプションの指定が面倒だったり、そもそもHPCにバグがあって使いづらいためか、あまり広くは使われてこなかった。

ところが最近になって状況を一変させるかもしれない、hpc-coverallsというパッケージがHackageに上がっていることに気がついたので使ってみた。

Coveralls自体は広く使われてるので解説はいらないと思う。GitHubCoverage Statusみたいなバッジをよく見かけるはず。

hpc-coverallsの使い方は簡単で、Hackageのドキュメントにあるとおり

  • before_installでcabal install hpc-coveralls
  • cabal configureする時に、--enable-library-coverageをつける
  • cabal testの代わりにrun-cabal-testする
  • after_scriptでhpc-coveralls <テスト名>

とすれば良い。ただし、

  • hvr/multi-ghc-travisと併用する場合
    • cabalコマンドがcabal-1.18という名前なので、run-cabal-testする前に、パスが通っているところにln -s /usr/bin/cabal-1.18 /path/to/cabalする必要がある
  • パッケージの依存関係を満たせずにコケる場合
    • cabal install --only-dependenciesした直後に--avoid-reinstallsをつけてhpc-coverallsすると、自分のパッケージの依存関係を壊すことなくインストールできるかもしれない

あたりに気を付けると良い。influxdbとlifted-asyncで設定してみたので、設定例が見たい方はこちらをどうぞ。

実際に使い始めると、hpcコマンドを使うよりはるかに簡単で見やすいので、カバレッジを取りたいならおすすめ。hpc-markupのような1行の中でどこが実行されたかのような細かい情報までは取れないけど、よっぽど1行が長いのでなければ十分なんじゃないかと思う。

f:id:maoe:20140409171323p:plain
f:id:maoe:20140409171331p:plain
f:id:maoe:20140409171337p:plain