ひげろぐ

技術者として仕事人としての思うところや覚え書きやらです
Home      Profile      Works     
2008-03-05

カバレッジの厳密さにどこまでこだわるか

rcovは行カバレッジのツールなので、次のようなコードでは問題なくカバレッジを判定できる。
@itemがnilであるケースがテストされていなければ2行目のカバレッジは赤だ。

if @item.nil?
  return render(:nothing => true, :status => '404 Not Found')
end

しかし次のようなコードでは if の結果がどちらに分岐してもカバーしているとみなされる。
@itemがnilであるケースがテストされていなくてもカバレッジはパスする。

return render(:nothing => true, :status => '404 Not Found') if @item.nil?

ということなのでif修飾子を使うのはやめた方がよい。おわり。

.
.
.

というのはウソで、カバレッジの厳密さにこだわってコードの書き方を変える必要はないと思う。
カバレッジは所詮目安なんだから。

あと100%である必要もないし、100%であることを強制するのはナンセンス。
中身の薄いテストでも100%にするだけならできるわけなので。

でもまあTDDで開発してたら自然と100%になる気はするなぁ。
100%にする必要はないと言ったけど、100%だったらやっぱり気持ちいいな。
だからTDDは気持ちいい。

うむ、なんだかきれいにまとまった気がする。(ほんとか?)

参考

コード品質を追求する: カバレッジ・レポートに騙されないために

2008-03-04

RSpec on Railsとrcovを組み合わせて使う

rcovでRSpecのテストカバレッジも出すことができる。
ぐーぐる先生の力を借りて過去の歴史を紐解くと先人たちの苦労の跡が忍ばれるのだが、そのおかげか今はRakeのコマンド一発で連携が可能。

rake spec:rcov

すばらしい。

spec/rcov.opts

rake spec:rcovした時にrcovに与えるオプションはspec.optsで指定できる。

デフォルトの内容は以下。

--exclude "spec/*,gems/*"
--rails 

他人の作ったライブラリなどカバレッジテストの対象外にしたいものは–excludeに追加するとよろしい。

近頃のこと

コカ・コーラのカナダドライ ジンジャーエール エクストラが辛くてうまい。
でもすぐ消えそうな予感もする。

2008-01-26

rcovでRailsのカバレッジテスト

つくるぶガイドブログ: Rails + rcov でテストカバレッジを調べるを見てrcovを試してみたら面白かった。

前半コードを交えていろいろ書いてあるけど、普段からテストを普通に書いてるなら「rcov でテストカバレッジを調べる」の節から読んだらいいと思う。

以下のコマンドでrcovをgemからインストールして

sudo gem install rcov

以下のコマンドで実行。

rcov -x /usr/local/lib/ruby --rails test/**/*_test.rb

「-x /usr/local/lib/ruby」で自分が作ったのではないgem等のテストを無視(パス指定が大雑把かもしれん)、「–rails」でRailsの余計なファイルを無視してくれるということだ。

これでさくっとテストのカバレッジを示したHTMLが出来上がる。
実に簡単で、見て面白い。

アプリを作ってるときにテスト書くのをサボると後でテストを書くというのはけっこうモチベーション的にしんどいものがあるが、これを使いながらだったら書けそうだ。

ちなみにカバレッジによってテストされてないコード箇所は分かるが、適切なテストが書かれているかが保証されるわけではないし、そもそも必要なコードが書かれているかということも教えてくれないので過信は禁物。
カバレッジが100%でもバグはあり得る。

とはいえ、テストの品質と作成効率を上げるのにかなり役立つツールであることは間違いない。

copyright brass.to | powered by WordPress ME