SlideShare una empresa de Scribd logo
1 de 14
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
•最後に
• ありがとうございました!

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

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

Similar a Benchmarkspec

Similar a Benchmarkspec (20)

QCon2009 Tokyo - Ruby on Railsで変わるエンタープライズ開発の現場
QCon2009 Tokyo - Ruby on Railsで変わるエンタープライズ開発の現場QCon2009 Tokyo - Ruby on Railsで変わるエンタープライズ開発の現場
QCon2009 Tokyo - Ruby on Railsで変わるエンタープライズ開発の現場
 
ぼくたちのじゅたくかいはつ
ぼくたちのじゅたくかいはつぼくたちのじゅたくかいはつ
ぼくたちのじゅたくかいはつ
 
増井雄一郎の「wri.pe」を事例に学ぶ、自作サービスの広め方〜PR・継続できる目標の立て方・改善編 先生:増井 雄一郎
増井雄一郎の「wri.pe」を事例に学ぶ、自作サービスの広め方〜PR・継続できる目標の立て方・改善編 先生:増井 雄一郎増井雄一郎の「wri.pe」を事例に学ぶ、自作サービスの広め方〜PR・継続できる目標の立て方・改善編 先生:増井 雄一郎
増井雄一郎の「wri.pe」を事例に学ぶ、自作サービスの広め方〜PR・継続できる目標の立て方・改善編 先生:増井 雄一郎
 
リモートチームとふりかえり改善フレームワーク
リモートチームとふりかえり改善フレームワークリモートチームとふりかえり改善フレームワーク
リモートチームとふりかえり改善フレームワーク
 
Ruby 2.4 / Rails 5.0に上げた際のパッチ5選
Ruby 2.4 / Rails 5.0に上げた際のパッチ5選Ruby 2.4 / Rails 5.0に上げた際のパッチ5選
Ruby 2.4 / Rails 5.0に上げた際のパッチ5選
 
表参道.rb #1 Ruby Gold 2.1 に合格した話
表参道.rb #1 Ruby Gold 2.1 に合格した話表参道.rb #1 Ruby Gold 2.1 に合格した話
表参道.rb #1 Ruby Gold 2.1 に合格した話
 
ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜
ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜
ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜
 
マイクロサービスにおける 非同期アーキテクチャ
マイクロサービスにおける非同期アーキテクチャマイクロサービスにおける非同期アーキテクチャ
マイクロサービスにおける 非同期アーキテクチャ
 
Lineにおけるspring frameworkの活用
Lineにおけるspring frameworkの活用Lineにおけるspring frameworkの活用
Lineにおけるspring frameworkの活用
 
Productive Organization with Ruby
Productive Organization with RubyProductive Organization with Ruby
Productive Organization with Ruby
 
Unofficial redmine cooking , unofficial-redmine.org 直近カスタマイズ事例
Unofficial redmine cooking , unofficial-redmine.org 直近カスタマイズ事例Unofficial redmine cooking , unofficial-redmine.org 直近カスタマイズ事例
Unofficial redmine cooking , unofficial-redmine.org 直近カスタマイズ事例
 
本番環境で使える実行コード記録機能
本番環境で使える実行コード記録機能本番環境で使える実行コード記録機能
本番環境で使える実行コード記録機能
 
Ruby/Rails Benchmarking and Profiling with TDD
Ruby/Rails Benchmarking and Profiling with TDDRuby/Rails Benchmarking and Profiling with TDD
Ruby/Rails Benchmarking and Profiling with TDD
 
JaSST Niigata'20
JaSST Niigata'20JaSST Niigata'20
JaSST Niigata'20
 
PHP Application E2E with Capybara
PHP Application E2E with CapybaraPHP Application E2E with Capybara
PHP Application E2E with Capybara
 
今なぜサーバーレスなのか
今なぜサーバーレスなのか今なぜサーバーレスなのか
今なぜサーバーレスなのか
 
HerokuでRailsアプリ運用の パフォーマンス、SEO対策
HerokuでRailsアプリ運用の パフォーマンス、SEO対策HerokuでRailsアプリ運用の パフォーマンス、SEO対策
HerokuでRailsアプリ運用の パフォーマンス、SEO対策
 
2015 12-19-ruby rails
2015 12-19-ruby rails2015 12-19-ruby rails
2015 12-19-ruby rails
 
QA@IT on Heroku
QA@IT on HerokuQA@IT on Heroku
QA@IT on Heroku
 
Rubyと仕事と自由なソフトウェア
Rubyと仕事と自由なソフトウェアRubyと仕事と自由なソフトウェア
Rubyと仕事と自由なソフトウェア
 

Último

Último (7)

LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 

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 •最後に • ありがとうございました!

Notas del editor

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