月曜日ごろ、アカウントを発行してもらいました。やりたい放題です。
とりあえずは、Ruby のテストを充実させたいです。目標は gcov のカバレッジで 80% 以上。手始めに bignum.c 、sprintf.c 、struct.c 、math.c のカバレッジを 90% 以上にしてみました (ruby-dev:33258 、ruby-dev:33280) 。テストはカバレッジが高けりゃいいってもんではないと思いますが、ないよりは良いだろうということで。時間のかかるテストはなるべく避けます。
真の目的はソースを読むことです。理由もなくソースを読むより、テストを書くという理由があった方が楽しいのです。弱点は、重箱の隅ばかり読むことになること。
ついでに Ruby と Python と Perl のテストカバレッジを (てきとーに) 調べてみました。
対象行数 | 実行行数 | カバレッジ | |
Ruby | 40273 | 29421 | 73.05% |
Python | 45320 | 35641 | 78.64% |
Perl | 47920 | 37405 | 78.06% |
カバレッジの調査方法は以下の通り。どう見ても gcov を使いこなせてないので、もっといいやり方があったら教えてください。
# gcov が使えるようにビルドする $ CFLAGS="-fprofile-arcs -ftest-coverage" \ > DLDFLAGS="-Wl,-whole-archive -lgcov -Wl,-no-whole-archive" \ > ./configure $ make $ make install # gcov のデータを一端消す $ rm *.gcda # テストを実行する $ make test $ make test-all # gcov を実行する $ gcov *.c # 全体のカバレッジを計算する $ ruby -e ' > t = c = 0 > $<.each do |l| > t += 1 if l[/^\s*(\d|#)/] > c += 1 if l[/^\s*(\d)/] > end > puts "%d of %d (%.2f%%)" % [c, t, 100.0 * c / t] > ' *.c 29421 of 40273 (73.05%)