Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Ruby Hack Challenge #4 カバレッジ特別回 資料

Ruby Hack Challenge #4 カバレッジ特別回 資料

Yusuke Endoh

June 21, 2018
Tweet

More Decks by Yusuke Endoh

Other Decks in Programming

Transcript

  1. 事務連絡 • Gitter にお入りください – https://gitter.im/rubyhackchallenge/Lobby – URL やテキストの共有にお使いください •

    この資料は slideshare にあります – (あとでリンクにする) • 今日の資料は github にあります – https://github.com/ko1/rubyhackchallenge /blob/master/JA/6_coverage.md
  2. 今日の予定 • 13:00~ オープニングと自己紹介 • 13:20~ 講義 • 14:00~ 実習

    • 16:30~ 成果発表 • 17:00 解散 ※すでに資料を読んできた人は講義を聞かずに実習を 始めても大丈夫です
  3. 今日の内容 • コードカバレッジを参考に Ruby のテストを書く – カバレッジ:どのコードを実行したか・していないか – 例:lib/irb/context.rb –

    https://rubyci.s3.amazonaws.com/debian8-coverage/ruby-trunk/lcov/ruby/lib/irb/context.rb.gcov.html 青:実行されている行 赤:実行されていない行 青:elseに 進んだ 赤:thenに 進んでない
  4. 今日の内容 • コードカバレッジを参考に Ruby のテストを書く – カバレッジの変化 @verbose.nil? の分岐が then

    節に進んだ! then 節に 進んでいなかったのが まだ実行されてない 部分はあるけれども
  5. Ruby のビルドとテストのやり方(特急版) • 依存関係を入れる(Debian 系の場合) – sudo apt-get install git

    ruby autoconf bison gcc make zlib1g-dev libffi-dev libreadline-dev libgdbm-dev libssl-dev lcov • ソースを取ってくる – git https://git.ruby-lang.org/ruby.git • ビルドする – cd ruby – autoconf – ./configure --prefix=`pwd`/local – make • テストを実行する – make test-all
  6. カバレッジの測定方法(C言語) • 古いビルド結果を全部消す(重要) – git clean -fxd • ビルド時の configure

    にオプションをつける – autoconf – ./configure --prefix=`pwd`/local --enable-gcov – make • テストを実行する – make test-all • カバレッジを可視化する – make lcov – ブラウザで lcov-c-out/index.html を開く
  7. カバレッジの測定方法(Ruby) • 古いビルド結果を全部消す(重要) – git clean –fxd • ビルドは普通にやる –

    autoconf – ./configure --prefix=`pwd`/local – make • テストを COVERAGE=true 付きで実行する – make test-all COVERAGE=true – (coverage/index.html で可視化したものが見えるはず) • オプション:LCOV でカバレッジを可視化する – make lcov – ブラウザで lcov-rb-out/index.html を開く
  8. Ruby テストの構成 • Ruby にはいっぱいテストスイートがある – make btest / make

    test-all / make test-spec – 遠藤は test-all しかよく知らない • make test-all の実態は test/ ディレクトリ – test/ruby: コアのテスト – test/(標準添付ライブラリ名): ライブラリのテスト – 他にも雰囲気でいろいろ置いてある • 特定のテストファイルだけを実行する方法 – make test-all TESTS=test/irb/test_context.rb – 指定しないと全部実行して遅いので、 テストを書き足したらそのファイルだけ実行してみるとよい
  9. Ruby テストの書き足し方 • カバレッジを見て実行したい箇所の狙いをつける • 試行錯誤を繰り返していろいろ考える – ライブラリのコードを読解し、どうすれば実行できるか – 既存テストを読解し、どのようなテストを書けば良いか

    – テストを書いて実行し、当該箇所に徐々に迫っていく • make test-all TESTS=テストファイル で、テストを書き 足したファイルだけ実行すると速い • 毎回カバレッジをとっても良いが、当該箇所付近に出力 コードを突っ込んで print デバッグしたほうが速いかも – (マニュアル化したやり方はない、基本的に気合い)
  10. ポイント:古いビルド結果を消す • C言語コードのテストを書く場合 – C言語コードのカバレッジは、gcc(C コンパイラ)に カバレッジ測定用バイナリを生成させて測定している – ソースコードを編集・リビルドすると、測定結果が おかしなことになる

    – C言語コードのテストを書くときは、ハマりたくなければビル ド結果を消す方がよい • Rubyコードのテストを書く場合 – ビルド全体を消す必要はないが、テスト実行のたびに test-coverage.dat ファイルを消す • Ruby のカバレッジデータを蓄積しているファイル