SlideShare a Scribd company logo
Benchmark Spec
Proprietary and Confidential to Ruby Development Co., LTD page1
Proprietary and Confidential to Ruby Development Co., LTD page2
• 自己紹介
• 氏名:柴田 有一郎
• 所属:株式会社 Ruby開発
https://www.ruby-dev.jp
• 職業:Web系のプロマネ的なことをやってます
Proprietary and Confidential to Ruby Development Co., LTD page3
• ここから本題
• 元ネタあります。
• http://www.gladbills.com/help/development/benchmarking.md
• 2015/10/02にGitLabにマージされています
• Benchmark Specとは
= RSpec + benchmark-ips
Proprietary and Confidential to Ruby Development Co., LTD page4
• よくあるパフォーマンス上の問題??
• 修正でパフォーマンス上問題のある処理を入れてしまった!!
• CIでの自動化テストでは検出できない
• QAで検出できても、複数の修正が入ってると特定に時間がかか
る
Proprietary and Confidential to Ruby Development Co., LTD page5
• 解決するために、こんなアプローチはどう?
• CIで自動テストのように、自動ベンチマークを行う
• パフォーマンス要求を設定できる
Proprietary and Confidential to Ruby Development Co., LTD page6
• 具体的にどんな感じ?
• describe でbenchmark を指定
• 「benchmark」が指定されたときだけ、benchmark
spec機能を有効にします。
describe User, benchmark: true do
end
Proprietary and Confidential to Ruby Development Co., LTD page7
• ユーザログイン処理のbenchmark Specを例に説明
describe User, benchmark: true do
describe ‘.by_login’ do
before do
create(:user, email: ‘alice@ruby-dev.jp’)
end
ユーザを作成
例は超適当です(_ _)
Proprietary and Confidential to Ruby Development Co., LTD page8
• パフォーマンス要求を設定
describe User, benchmark: true do
describe ‘.by_login’ do
before do
create(:user, email: ‘alice@ruby-dev.jp’)
end
let(:iterations) { 1000 }
1秒間に1000回以上で成功
(平均して1回のログイン処理
は1ミリ秒以内)
Proprietary and Confidential to Ruby Development Co., LTD page9
• subjectへ登録
let(:iterations) { 1000 }
describe ‘using a Email address’ do
subject{ -> { User.by_login(‘alice@ruby-dev.jp’)} }
テスト対象として、.by_loginを
Procオブジェクトとして登録
Proprietary and Confidential to Ruby Development Co., LTD page10
• エクスペクテーション(expectation)は?
describe ‘using a Email address’ do
subject{ -> { User.by_login(‘alice@ruby-dev.jp’)} }
it { is_expected.to iterate_per_second(iterations) }
end
end
end
カスタムマッチャ「iterate_per_second」
を作成し、使用します。
※いきなり出てきて申し訳ないです。
以降説明あります。
Proprietary and Confidential to Ruby Development Co., LTD page11
• カスタムマッチャー「iterate_per_second」
• 元ネタから説明用にかなり単純化しています。
module BenchmarkMatchers
extend RSpec::Matchers::DSL
matcher :iterate_per_second do |min_iterations|
match do |block|
report = Benchmark.ips(quiet: true) do |bench|
bench.report(&block)
end
内部で、Benchmark.ipsを実施
rails_helper.rbでinclude
config.include BenchmarkMatchers,
benchmark: true
Proprietary and Confidential to Ruby Development Co., LTD page12
• カスタムマッチャー「iterate_per_second」
matcher :iterate_per_second do |min_iterations|
match do |block|
report = Benchmark.ips(quiet: true) do |bench|
bench.report(&block)
end
expect(report.entries[0].ips).to be >= min_iterations
end
end
要求されるイテレーション以上な
ら、テスト成功。
Proprietary and Confidential to Ruby Development Co., LTD page13
まとめ
今後、benchmark specを導入して、性能を
落とす処理の混入をCIで検出できるか試し
て行きたいと考えています。
Proprietary and Confidential to Ruby Development Co., LTD page14
•最後に
• ありがとうございました!

More Related Content

PDF
自社開発プロダクト ALL-IN で行っている単体テストのパフォーマンスチューニングTips
PPTX
5minQues - SWET近況報告
PPTX
Android ReactNative UITesting
PDF
渋谷java−あなたのプロジェクトで気軽にjavaをバージョンアップするために必要なこと
PPTX
エンドツーエンドテストを自動化したらチームがすごく良くなった@XPまつり2015LT
PDF
開発とテストが一体となったソフトウェア開発
PPTX
KPT発表会 - アジャイルひよこクラブ
PDF
2014-04-22 Ques #4 Automation Testing of Mobage Platform
自社開発プロダクト ALL-IN で行っている単体テストのパフォーマンスチューニングTips
5minQues - SWET近況報告
Android ReactNative UITesting
渋谷java−あなたのプロジェクトで気軽にjavaをバージョンアップするために必要なこと
エンドツーエンドテストを自動化したらチームがすごく良くなった@XPまつり2015LT
開発とテストが一体となったソフトウェア開発
KPT発表会 - アジャイルひよこクラブ
2014-04-22 Ques #4 Automation Testing of Mobage Platform

What's hot (20)

PDF
20151021 cookpad talk_test_engineer
PDF
三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~
PDF
クラウド時代だからSpring-Retryフレームワーク
PPTX
バージョンアップ対応を軽減するサービス:マスティフ
PDF
mod_perlプログラマーがYAPCで語るレガシー開発論
PDF
CEDEC2015_スマホゲーム開発を支えろ!〜汗と涙のQAエンジニアリング〜
PDF
【19-B-4】 そろそろ俺たちの本気を見せてやるぜ!~ マイクロソフトとOSSごった煮 DevOps 衝撃デモシリーズ!
PDF
ポストJenkins時代のCI戦略
PPTX
fastlane x iOSアプリのCI
PDF
WebのQAを5年間運営してみた
PPTX
iOSアプリの自動テストをはじめよう
PPTX
Xcode10での テスト周りの進化をふりかえる
PDF
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
PPTX
第9回Jenkins勉強会 超簡単Pipeline講座
PDF
ネイティブゲーム開発におけるこれからの品質保証
PDF
Javaでやってみる The Twelve Factor App JJUG-CCC 2014 Fall 講演資料
PPTX
DeNAにおけるSWETの役割
PDF
UnitTest
PDF
2015-05-23 クラウドの運用になって インフラエンジニアは何が変わるのか?
PDF
Hello. Continuous Integration
20151021 cookpad talk_test_engineer
三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~
クラウド時代だからSpring-Retryフレームワーク
バージョンアップ対応を軽減するサービス:マスティフ
mod_perlプログラマーがYAPCで語るレガシー開発論
CEDEC2015_スマホゲーム開発を支えろ!〜汗と涙のQAエンジニアリング〜
【19-B-4】 そろそろ俺たちの本気を見せてやるぜ!~ マイクロソフトとOSSごった煮 DevOps 衝撃デモシリーズ!
ポストJenkins時代のCI戦略
fastlane x iOSアプリのCI
WebのQAを5年間運営してみた
iOSアプリの自動テストをはじめよう
Xcode10での テスト周りの進化をふりかえる
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
第9回Jenkins勉強会 超簡単Pipeline講座
ネイティブゲーム開発におけるこれからの品質保証
Javaでやってみる The Twelve Factor App JJUG-CCC 2014 Fall 講演資料
DeNAにおけるSWETの役割
UnitTest
2015-05-23 クラウドの運用になって インフラエンジニアは何が変わるのか?
Hello. Continuous Integration
Ad

Similar to Benchmarkspec (6)

PDF
Ruby/Rails Benchmarking and Profiling with TDD
PPTX
RSpecの実行速度を3.5倍にした話
PDF
今さらながらRSpecに入門してみた
PPT
ODP
RSpecのここがすごい!
PPTX
実は怖くないDevOps
Ruby/Rails Benchmarking and Profiling with TDD
RSpecの実行速度を3.5倍にした話
今さらながらRSpecに入門してみた
RSpecのここがすごい!
実は怖くないDevOps
Ad

Benchmarkspec

  • 1. Benchmark Spec Proprietary and Confidential to Ruby Development Co., LTD page1
  • 2. Proprietary and Confidential to Ruby Development Co., LTD page2 • 自己紹介 • 氏名:柴田 有一郎 • 所属:株式会社 Ruby開発 https://www.ruby-dev.jp • 職業:Web系のプロマネ的なことをやってます
  • 3. Proprietary and Confidential to Ruby Development Co., LTD page3 • ここから本題 • 元ネタあります。 • http://www.gladbills.com/help/development/benchmarking.md • 2015/10/02にGitLabにマージされています • Benchmark Specとは = RSpec + benchmark-ips
  • 4. Proprietary and Confidential to Ruby Development Co., LTD page4 • よくあるパフォーマンス上の問題?? • 修正でパフォーマンス上問題のある処理を入れてしまった!! • CIでの自動化テストでは検出できない • QAで検出できても、複数の修正が入ってると特定に時間がかか る
  • 5. Proprietary and Confidential to Ruby Development Co., LTD page5 • 解決するために、こんなアプローチはどう? • CIで自動テストのように、自動ベンチマークを行う • パフォーマンス要求を設定できる
  • 6. Proprietary and Confidential to Ruby Development Co., LTD page6 • 具体的にどんな感じ? • describe でbenchmark を指定 • 「benchmark」が指定されたときだけ、benchmark spec機能を有効にします。 describe User, benchmark: true do end
  • 7. Proprietary and Confidential to Ruby Development Co., LTD page7 • ユーザログイン処理のbenchmark Specを例に説明 describe User, benchmark: true do describe ‘.by_login’ do before do create(:user, email: ‘alice@ruby-dev.jp’) end ユーザを作成 例は超適当です(_ _)
  • 8. Proprietary and Confidential to Ruby Development Co., LTD page8 • パフォーマンス要求を設定 describe User, benchmark: true do describe ‘.by_login’ do before do create(:user, email: ‘alice@ruby-dev.jp’) end let(:iterations) { 1000 } 1秒間に1000回以上で成功 (平均して1回のログイン処理 は1ミリ秒以内)
  • 9. Proprietary and Confidential to Ruby Development Co., LTD page9 • subjectへ登録 let(:iterations) { 1000 } describe ‘using a Email address’ do subject{ -> { User.by_login(‘alice@ruby-dev.jp’)} } テスト対象として、.by_loginを Procオブジェクトとして登録
  • 10. Proprietary and Confidential to Ruby Development Co., LTD page10 • エクスペクテーション(expectation)は? describe ‘using a Email address’ do subject{ -> { User.by_login(‘alice@ruby-dev.jp’)} } it { is_expected.to iterate_per_second(iterations) } end end end カスタムマッチャ「iterate_per_second」 を作成し、使用します。 ※いきなり出てきて申し訳ないです。 以降説明あります。
  • 11. Proprietary and Confidential to Ruby Development Co., LTD page11 • カスタムマッチャー「iterate_per_second」 • 元ネタから説明用にかなり単純化しています。 module BenchmarkMatchers extend RSpec::Matchers::DSL matcher :iterate_per_second do |min_iterations| match do |block| report = Benchmark.ips(quiet: true) do |bench| bench.report(&block) end 内部で、Benchmark.ipsを実施 rails_helper.rbでinclude config.include BenchmarkMatchers, benchmark: true
  • 12. Proprietary and Confidential to Ruby Development Co., LTD page12 • カスタムマッチャー「iterate_per_second」 matcher :iterate_per_second do |min_iterations| match do |block| report = Benchmark.ips(quiet: true) do |bench| bench.report(&block) end expect(report.entries[0].ips).to be >= min_iterations end end 要求されるイテレーション以上な ら、テスト成功。
  • 13. Proprietary and Confidential to Ruby Development Co., LTD page13 まとめ 今後、benchmark specを導入して、性能を 落とす処理の混入をCIで検出できるか試し て行きたいと考えています。
  • 14. Proprietary and Confidential to Ruby Development Co., LTD page14 •最後に • ありがとうございました!

Editor's Notes

  • #2: こんにちは! よろしくお願いします。 直前でタイトル変えました。 Benchmark Specというのを紹介したいと思います。
  • #6: パフォーマンス要求 どれくらいの処理速度が必要か指定できる。
  • #9: 内部の仕組みとしてはbenchmark-ipsを使用しているので、指定した処理に対して、1秒間に何回実行できたかを測るものです。
  • #13: これで、ある処理が要求するパフォーマンスを満たしているかのテストがかけます。