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

More Related Content

What's hot

20151021 cookpad talk_test_engineer
20151021 cookpad talk_test_engineer20151021 cookpad talk_test_engineer
20151021 cookpad talk_test_engineerKazuaki Matsuo
 
三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~
三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~
三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~Rakuten Group, Inc.
 
クラウド時代だからSpring-Retryフレームワーク
クラウド時代だからSpring-Retryフレームワーククラウド時代だからSpring-Retryフレームワーク
クラウド時代だからSpring-RetryフレームワークY Watanabe
 
バージョンアップ対応を軽減するサービス:マスティフ
バージョンアップ対応を軽減するサービス:マスティフバージョンアップ対応を軽減するサービス:マスティフ
バージョンアップ対応を軽減するサービス:マスティフToshiyuki Hirata
 
mod_perlプログラマーがYAPCで語るレガシー開発論
mod_perlプログラマーがYAPCで語るレガシー開発論mod_perlプログラマーがYAPCで語るレガシー開発論
mod_perlプログラマーがYAPCで語るレガシー開発論鉄次 尾形
 
CEDEC2015_スマホゲーム開発を支えろ!〜汗と涙のQAエンジニアリング〜
CEDEC2015_スマホゲーム開発を支えろ!〜汗と涙のQAエンジニアリング〜CEDEC2015_スマホゲーム開発を支えろ!〜汗と涙のQAエンジニアリング〜
CEDEC2015_スマホゲーム開発を支えろ!〜汗と涙のQAエンジニアリング〜gree_tech
 
【19-B-4】 そろそろ俺たちの本気を見せてやるぜ!~ マイクロソフトとOSSごった煮 DevOps 衝撃デモシリーズ!
【19-B-4】 そろそろ俺たちの本気を見せてやるぜ!~ マイクロソフトとOSSごった煮 DevOps 衝撃デモシリーズ!【19-B-4】 そろそろ俺たちの本気を見せてやるぜ!~ マイクロソフトとOSSごった煮 DevOps 衝撃デモシリーズ!
【19-B-4】 そろそろ俺たちの本気を見せてやるぜ!~ マイクロソフトとOSSごった煮 DevOps 衝撃デモシリーズ!Developers Summit
 
ポストJenkins時代のCI戦略
ポストJenkins時代のCI戦略ポストJenkins時代のCI戦略
ポストJenkins時代のCI戦略Hiroshi Maekawa
 
fastlane x iOSアプリのCI
fastlane x iOSアプリのCIfastlane x iOSアプリのCI
fastlane x iOSアプリのCIToshiyuki Hirata
 
WebのQAを5年間運営してみた
WebのQAを5年間運営してみたWebのQAを5年間運営してみた
WebのQAを5年間運営してみたTakayoshi Sakaino
 
iOSアプリの自動テストをはじめよう
iOSアプリの自動テストをはじめようiOSアプリの自動テストをはじめよう
iOSアプリの自動テストをはじめようToshiyuki Hirata
 
Xcode10での テスト周りの進化をふりかえる
Xcode10での テスト周りの進化をふりかえるXcode10での テスト周りの進化をふりかえる
Xcode10での テスト周りの進化をふりかえるToshiyuki Hirata
 
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~Hiroyuki Ohnaka
 
第9回Jenkins勉強会 超簡単Pipeline講座
第9回Jenkins勉強会 超簡単Pipeline講座第9回Jenkins勉強会 超簡単Pipeline講座
第9回Jenkins勉強会 超簡単Pipeline講座Hiroko Tamagawa
 
ネイティブゲーム開発におけるこれからの品質保証
ネイティブゲーム開発におけるこれからの品質保証ネイティブゲーム開発におけるこれからの品質保証
ネイティブゲーム開発におけるこれからの品質保証gree_tech
 
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 講演資料Y Watanabe
 
DeNAにおけるSWETの役割
DeNAにおけるSWETの役割DeNAにおけるSWETの役割
DeNAにおけるSWETの役割Toshiyuki Hirata
 
2015-05-23 クラウドの運用になって インフラエンジニアは何が変わるのか?
2015-05-23 クラウドの運用になって インフラエンジニアは何が変わるのか?2015-05-23 クラウドの運用になって インフラエンジニアは何が変わるのか?
2015-05-23 クラウドの運用になって インフラエンジニアは何が変わるのか?Operation Lab, LLC.
 
Hello. Continuous Integration
Hello. Continuous IntegrationHello. Continuous Integration
Hello. Continuous IntegrationYuki Matsumura
 

What's hot (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 to Benchmarkspec

QCon2009 Tokyo - Ruby on Railsで変わるエンタープライズ開発の現場
QCon2009 Tokyo - Ruby on Railsで変わるエンタープライズ開発の現場QCon2009 Tokyo - Ruby on Railsで変わるエンタープライズ開発の現場
QCon2009 Tokyo - Ruby on Railsで変わるエンタープライズ開発の現場Yasuko Ohba
 
ぼくたちのじゅたくかいはつ
ぼくたちのじゅたくかいはつぼくたちのじゅたくかいはつ
ぼくたちのじゅたくかいはつAtsushi Harada
 
増井雄一郎の「wri.pe」を事例に学ぶ、自作サービスの広め方〜PR・継続できる目標の立て方・改善編 先生:増井 雄一郎
増井雄一郎の「wri.pe」を事例に学ぶ、自作サービスの広め方〜PR・継続できる目標の立て方・改善編 先生:増井 雄一郎増井雄一郎の「wri.pe」を事例に学ぶ、自作サービスの広め方〜PR・継続できる目標の立て方・改善編 先生:増井 雄一郎
増井雄一郎の「wri.pe」を事例に学ぶ、自作サービスの広め方〜PR・継続できる目標の立て方・改善編 先生:増井 雄一郎schoowebcampus
 
リモートチームとふりかえり改善フレームワーク
リモートチームとふりかえり改善フレームワークリモートチームとふりかえり改善フレームワーク
リモートチームとふりかえり改善フレームワークMaehana Tsuyoshi
 
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選Koichi ITO
 
表参道.rb #1 Ruby Gold 2.1 に合格した話
表参道.rb #1 Ruby Gold 2.1 に合格した話表参道.rb #1 Ruby Gold 2.1 に合格した話
表参道.rb #1 Ruby Gold 2.1 に合格した話Yoshiaki Yoshida
 
ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜
ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜
ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜TrinityT _
 
マイクロサービスにおける 非同期アーキテクチャ
マイクロサービスにおける非同期アーキテクチャマイクロサービスにおける非同期アーキテクチャ
マイクロサービスにおける 非同期アーキテクチャota42y
 
Lineにおけるspring frameworkの活用
Lineにおけるspring frameworkの活用Lineにおけるspring frameworkの活用
Lineにおけるspring frameworkの活用Tokuhiro Matsuno
 
Productive Organization with Ruby
Productive Organization with RubyProductive Organization with Ruby
Productive Organization with RubyHiroshi SHIBATA
 
Unofficial redmine cooking , unofficial-redmine.org 直近カスタマイズ事例
Unofficial redmine cooking , unofficial-redmine.org 直近カスタマイズ事例Unofficial redmine cooking , unofficial-redmine.org 直近カスタマイズ事例
Unofficial redmine cooking , unofficial-redmine.org 直近カスタマイズ事例Yuuki Nara
 
本番環境で使える実行コード記録機能
本番環境で使える実行コード記録機能本番環境で使える実行コード記録機能
本番環境で使える実行コード記録機能mametter
 
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 TDDYasutomo Uemori
 
JaSST Niigata'20
JaSST Niigata'20JaSST Niigata'20
JaSST Niigata'20JumpeiIto2
 
PHP Application E2E with Capybara
PHP Application E2E with CapybaraPHP Application E2E with Capybara
PHP Application E2E with CapybaraYoshiaki Yoshida
 
今なぜサーバーレスなのか
今なぜサーバーレスなのか今なぜサーバーレスなのか
今なぜサーバーレスなのか真吾 吉田
 
HerokuでRailsアプリ運用の パフォーマンス、SEO対策
HerokuでRailsアプリ運用の パフォーマンス、SEO対策HerokuでRailsアプリ運用の パフォーマンス、SEO対策
HerokuでRailsアプリ運用の パフォーマンス、SEO対策Salesforce Developers Japan
 
Rubyと仕事と自由なソフトウェア
Rubyと仕事と自由なソフトウェアRubyと仕事と自由なソフトウェア
Rubyと仕事と自由なソフトウェアKouhei Sutou
 

Similar to 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と仕事と自由なソフトウェア
 

Recently uploaded

モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 

Recently uploaded (8)

モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
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振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 

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

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