SlideShare une entreprise Scribd logo
1  sur  14
Télécharger pour lire hors ligne
Cookpad Ruby Hack Challenge
#4 カバレッジ特別回
2018/06/23 (Sat.)
事務連絡
• Gitter にお入りください
– https://gitter.im/rubyhackchallenge/Lobby
– URL やテキストの共有にお使いください
• この資料は slideshare にあります
– (あとでリンクにする)
• 今日の資料は github にあります
– https://github.com/ko1/rubyhackchallenge
/blob/master/JA/6_coverage.md
今日の予定
• 13:00~ オープニングと自己紹介
• 13:20~ 講義
• 14:00~ 実習
• 16:30~ 成果発表
• 17:00 解散
※すでに資料を読んできた人は講義を聞かずに実習を
始めても大丈夫です
今日の内容
• コードカバレッジを参考に Ruby のテストを書く
– カバレッジ:どのコードを実行したか・していないか
– 例:lib/irb/context.rb
– https://rubyci.s3.amazonaws.com/debian8-coverage/ruby-trunk/lcov/ruby/lib/irb/context.rb.gcov.html
青:実行されている行
赤:実行されていない行青:elseに
進んだ
赤:thenに
進んでない
今日の内容
• コードカバレッジを参考に Ruby のテストを書く
– つまりどういうことかというと……
verbose?
メソッド自体は
呼ばれているが
@verbose = nil の
状態で呼ぶテストが
足りない模様
今日の内容
• コードカバレッジを参考に Ruby のテストを書く
– 適当にテストを書き足してみる
IRB.conf[:VERBOSE] = nil で
@verbose = nil にできるらしい
この条件下で verbose?
メソッドを呼ぶテスト
今日の内容
• コードカバレッジを参考に Ruby のテストを書く
– カバレッジの変化
@verbose.nil? の分岐が
then 節に進んだ!then 節に
進んでいなかったのが
まだ実行されてない
部分はあるけれども
目次
• Ruby のビルドとテストのやりかた(特急版)
• カバレッジの測定方法
– C 言語コード(処理系本体)の部分
– Ruby コード(標準添付ライブラリ)の部分
• Ruby テストの構成と書き足し方
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
カバレッジの測定方法(C言語)
• 古いビルド結果を全部消す(重要)
– git clean -fxd
• ビルド時の configure にオプションをつける
– autoconf
– ./configure --prefix=`pwd`/local --enable-gcov
– make
• テストを実行する
– make test-all
• カバレッジを可視化する
– make lcov
– ブラウザで lcov-c-out/index.html を開く
カバレッジの測定方法(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 を開く
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
– 指定しないと全部実行して遅いので、
テストを書き足したらそのファイルだけ実行してみるとよい
Ruby テストの書き足し方
• カバレッジを見て実行したい箇所の狙いをつける
• 試行錯誤を繰り返していろいろ考える
– ライブラリのコードを読解し、どうすれば実行できるか
– 既存テストを読解し、どのようなテストを書けば良いか
– テストを書いて実行し、当該箇所に徐々に迫っていく
• make test-all TESTS=テストファイル で、テストを書き
足したファイルだけ実行すると速い
• 毎回カバレッジをとっても良いが、当該箇所付近に出力
コードを突っ込んで print デバッグしたほうが速いかも
– (マニュアル化したやり方はない、基本的に気合い)
ポイント:古いビルド結果を消す
• C言語コードのテストを書く場合
– C言語コードのカバレッジは、gcc(C コンパイラ)に
カバレッジ測定用バイナリを生成させて測定している
– ソースコードを編集・リビルドすると、測定結果が
おかしなことになる
– C言語コードのテストを書くときは、ハマりたくなければビル
ド結果を消す方がよい
• Rubyコードのテストを書く場合
– ビルド全体を消す必要はないが、テスト実行のたびに
test-coverage.dat ファイルを消す
• Ruby のカバレッジデータを蓄積しているファイル

Contenu connexe

Plus de mametter

A Static Type Analyzer of Untyped Ruby Code for Ruby 3
A Static Type Analyzer of Untyped Ruby Code for Ruby 3A Static Type Analyzer of Untyped Ruby Code for Ruby 3
A Static Type Analyzer of Untyped Ruby Code for Ruby 3
mametter
 
Cookpad Hackarade #04: Create Your Own Interpreter
Cookpad Hackarade #04: Create Your Own InterpreterCookpad Hackarade #04: Create Your Own Interpreter
Cookpad Hackarade #04: Create Your Own Interpreter
mametter
 

Plus de mametter (20)

型プロファイラ:抽象解釈に基づくRuby 3の静的解析
型プロファイラ:抽象解釈に基づくRuby 3の静的解析型プロファイラ:抽象解釈に基づくRuby 3の静的解析
型プロファイラ:抽象解釈に基づくRuby 3の静的解析
 
Ruby 3の型推論やってます
Ruby 3の型推論やってますRuby 3の型推論やってます
Ruby 3の型推論やってます
 
マニアックなRuby 2.7新機能紹介
マニアックなRuby 2.7新機能紹介マニアックなRuby 2.7新機能紹介
マニアックなRuby 2.7新機能紹介
 
A Static Type Analyzer of Untyped Ruby Code for Ruby 3
A Static Type Analyzer of Untyped Ruby Code for Ruby 3A Static Type Analyzer of Untyped Ruby Code for Ruby 3
A Static Type Analyzer of Untyped Ruby Code for Ruby 3
 
A Plan towards Ruby 3 Types
A Plan towards Ruby 3 TypesA Plan towards Ruby 3 Types
A Plan towards Ruby 3 Types
 
Ruby 3 の型解析に向けた計画
Ruby 3 の型解析に向けた計画Ruby 3 の型解析に向けた計画
Ruby 3 の型解析に向けた計画
 
A Type-level Ruby Interpreter for Testing and Understanding
A Type-level Ruby Interpreter for Testing and UnderstandingA Type-level Ruby Interpreter for Testing and Understanding
A Type-level Ruby Interpreter for Testing and Understanding
 
本番環境で使える実行コード記録機能
本番環境で使える実行コード記録機能本番環境で使える実行コード記録機能
本番環境で使える実行コード記録機能
 
Transcendental Programming in Ruby
Transcendental Programming in RubyTranscendental Programming in Ruby
Transcendental Programming in Ruby
 
Cookpad Hackarade #04: Create Your Own Interpreter
Cookpad Hackarade #04: Create Your Own InterpreterCookpad Hackarade #04: Create Your Own Interpreter
Cookpad Hackarade #04: Create Your Own Interpreter
 
Ruby 3のキーワード引数について考える
Ruby 3のキーワード引数について考えるRuby 3のキーワード引数について考える
Ruby 3のキーワード引数について考える
 
TRICK 2018 results
TRICK 2018 resultsTRICK 2018 results
TRICK 2018 results
 
Type Profiler: An Analysis to guess type signatures
Type Profiler: An Analysis to guess type signaturesType Profiler: An Analysis to guess type signatures
Type Profiler: An Analysis to guess type signatures
 
Esoteric, Obfuscated, Artistic Programming in Ruby
Esoteric, Obfuscated, Artistic Programming in RubyEsoteric, Obfuscated, Artistic Programming in Ruby
Esoteric, Obfuscated, Artistic Programming in Ruby
 
Cookpad Spring 1day internship 2018 超絶技巧プログラミングコース資料
Cookpad Spring 1day internship 2018 超絶技巧プログラミングコース資料Cookpad Spring 1day internship 2018 超絶技巧プログラミングコース資料
Cookpad Spring 1day internship 2018 超絶技巧プログラミングコース資料
 
Esoteric, Obfuscated, Artistic Programming in Ruby
Esoteric, Obfuscated, Artistic Programming in RubyEsoteric, Obfuscated, Artistic Programming in Ruby
Esoteric, Obfuscated, Artistic Programming in Ruby
 
An introduction and future of Ruby coverage library
An introduction and future of Ruby coverage libraryAn introduction and future of Ruby coverage library
An introduction and future of Ruby coverage library
 
Ruby でつくる型付き Ruby
Ruby でつくる型付き RubyRuby でつくる型付き Ruby
Ruby でつくる型付き Ruby
 
Ruby で高速なプログラムを書く
Ruby で高速なプログラムを書くRuby で高速なプログラムを書く
Ruby で高速なプログラムを書く
 
Optcarrot: A Pure-Ruby NES Emulator
Optcarrot: A Pure-Ruby NES EmulatorOptcarrot: A Pure-Ruby NES Emulator
Optcarrot: A Pure-Ruby NES Emulator
 

Dernier

Dernier (11)

Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 

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

  • 1. Cookpad Ruby Hack Challenge #4 カバレッジ特別回 2018/06/23 (Sat.)
  • 2. 事務連絡 • Gitter にお入りください – https://gitter.im/rubyhackchallenge/Lobby – URL やテキストの共有にお使いください • この資料は slideshare にあります – (あとでリンクにする) • 今日の資料は github にあります – https://github.com/ko1/rubyhackchallenge /blob/master/JA/6_coverage.md
  • 3. 今日の予定 • 13:00~ オープニングと自己紹介 • 13:20~ 講義 • 14:00~ 実習 • 16:30~ 成果発表 • 17:00 解散 ※すでに資料を読んできた人は講義を聞かずに実習を 始めても大丈夫です
  • 4. 今日の内容 • コードカバレッジを参考に Ruby のテストを書く – カバレッジ:どのコードを実行したか・していないか – 例:lib/irb/context.rb – https://rubyci.s3.amazonaws.com/debian8-coverage/ruby-trunk/lcov/ruby/lib/irb/context.rb.gcov.html 青:実行されている行 赤:実行されていない行青:elseに 進んだ 赤:thenに 進んでない
  • 5. 今日の内容 • コードカバレッジを参考に Ruby のテストを書く – つまりどういうことかというと…… verbose? メソッド自体は 呼ばれているが @verbose = nil の 状態で呼ぶテストが 足りない模様
  • 6. 今日の内容 • コードカバレッジを参考に Ruby のテストを書く – 適当にテストを書き足してみる IRB.conf[:VERBOSE] = nil で @verbose = nil にできるらしい この条件下で verbose? メソッドを呼ぶテスト
  • 7. 今日の内容 • コードカバレッジを参考に Ruby のテストを書く – カバレッジの変化 @verbose.nil? の分岐が then 節に進んだ!then 節に 進んでいなかったのが まだ実行されてない 部分はあるけれども
  • 8. 目次 • Ruby のビルドとテストのやりかた(特急版) • カバレッジの測定方法 – C 言語コード(処理系本体)の部分 – Ruby コード(標準添付ライブラリ)の部分 • Ruby テストの構成と書き足し方
  • 9. 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
  • 10. カバレッジの測定方法(C言語) • 古いビルド結果を全部消す(重要) – git clean -fxd • ビルド時の configure にオプションをつける – autoconf – ./configure --prefix=`pwd`/local --enable-gcov – make • テストを実行する – make test-all • カバレッジを可視化する – make lcov – ブラウザで lcov-c-out/index.html を開く
  • 11. カバレッジの測定方法(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 を開く
  • 12. 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 – 指定しないと全部実行して遅いので、 テストを書き足したらそのファイルだけ実行してみるとよい
  • 13. Ruby テストの書き足し方 • カバレッジを見て実行したい箇所の狙いをつける • 試行錯誤を繰り返していろいろ考える – ライブラリのコードを読解し、どうすれば実行できるか – 既存テストを読解し、どのようなテストを書けば良いか – テストを書いて実行し、当該箇所に徐々に迫っていく • make test-all TESTS=テストファイル で、テストを書き 足したファイルだけ実行すると速い • 毎回カバレッジをとっても良いが、当該箇所付近に出力 コードを突っ込んで print デバッグしたほうが速いかも – (マニュアル化したやり方はない、基本的に気合い)
  • 14. ポイント:古いビルド結果を消す • C言語コードのテストを書く場合 – C言語コードのカバレッジは、gcc(C コンパイラ)に カバレッジ測定用バイナリを生成させて測定している – ソースコードを編集・リビルドすると、測定結果が おかしなことになる – C言語コードのテストを書くときは、ハマりたくなければビル ド結果を消す方がよい • Rubyコードのテストを書く場合 – ビルド全体を消す必要はないが、テスト実行のたびに test-coverage.dat ファイルを消す • Ruby のカバレッジデータを蓄積しているファイル