Submit Search
Upload
スローテスト刑事 (デカ)
•
1 like
•
7,437 views
Koichi ITO
Follow
第74回 Ruby関西 勉強会 (https://rubykansai.doorkeeper.jp/events/49364)
Read less
Read more
Engineering
Report
Share
Report
Share
1 of 69
Recommended
クラスローダーについて
クラスローダーについて
Suguru ARAKAWA
Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Uehara Junji
ClassLoader Leak Patterns
ClassLoader Leak Patterns
nekop
Kink: プロトタイプベースの俺々 JVM 言語
Kink: プロトタイプベースの俺々 JVM 言語
Taku Miyakawa
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
Norito Agetsuma
Indy(Invokedynamic) and Bytecode DSL and Brainf*ck
Indy(Invokedynamic) and Bytecode DSL and Brainf*ck
Uehara Junji
開発時の探し物を楽にする習慣作り
開発時の探し物を楽にする習慣作り
Koichi ITO
Uuidはどこまでuuidか試してみた
Uuidはどこまでuuidか試してみた
Yu Yamada
More Related Content
More from Koichi ITO
Bundler 2 の胎動
Bundler 2 の胎動
Koichi ITO
アプリがパッチにまみれたら
アプリがパッチにまみれたら
Koichi ITO
Stairway to The Pragmatic Rails Programmer
Stairway to The Pragmatic Rails Programmer
Koichi ITO
最軽の開発手法 dX 改
最軽の開発手法 dX 改
Koichi ITO
Railsアプリケーションプロジェクトでの読み書きそろばんの1周目、2周目とそれから
Railsアプリケーションプロジェクトでの読み書きそろばんの1周目、2周目とそれから
Koichi ITO
Ruby 2.4 / Rails 5.0に上げた際のパッチ5選
Ruby 2.4 / Rails 5.0に上げた際のパッチ5選
Koichi ITO
10年生きる Ruby / Rails アプリケーションプログラマーのエコシステム
10年生きる Ruby / Rails アプリケーションプログラマーのエコシステム
Koichi ITO
俺の開発日誌
俺の開発日誌
Koichi ITO
ghq gem-src and more
ghq gem-src and more
Koichi ITO
RuboCopとXPコーディング規約
RuboCopとXPコーディング規約
Koichi ITO
俺たちの新人教育!!
俺たちの新人教育!!
Koichi ITO
Gate of Agile Web Development
Gate of Agile Web Development
Koichi ITO
RubyKaigi 2015 の Drinkup を支える技術
RubyKaigi 2015 の Drinkup を支える技術
Koichi ITO
Motivationware
Motivationware
Koichi ITO
達人プログラマーへの道
達人プログラマーへの道
Koichi ITO
Let's get ready for next Ruby
Let's get ready for next Ruby
Koichi ITO
職と人
職と人
Koichi ITO
Agile Software Development with Edge Ruby
Agile Software Development with Edge Ruby
Koichi ITO
Safe navigation operator in Ruby
Safe navigation operator in Ruby
Koichi ITO
プロの無職についての考察:序
プロの無職についての考察:序
Koichi ITO
More from Koichi ITO
(20)
Bundler 2 の胎動
Bundler 2 の胎動
アプリがパッチにまみれたら
アプリがパッチにまみれたら
Stairway to The Pragmatic Rails Programmer
Stairway to The Pragmatic Rails Programmer
最軽の開発手法 dX 改
最軽の開発手法 dX 改
Railsアプリケーションプロジェクトでの読み書きそろばんの1周目、2周目とそれから
Railsアプリケーションプロジェクトでの読み書きそろばんの1周目、2周目とそれから
Ruby 2.4 / Rails 5.0に上げた際のパッチ5選
Ruby 2.4 / Rails 5.0に上げた際のパッチ5選
10年生きる Ruby / Rails アプリケーションプログラマーのエコシステム
10年生きる Ruby / Rails アプリケーションプログラマーのエコシステム
俺の開発日誌
俺の開発日誌
ghq gem-src and more
ghq gem-src and more
RuboCopとXPコーディング規約
RuboCopとXPコーディング規約
俺たちの新人教育!!
俺たちの新人教育!!
Gate of Agile Web Development
Gate of Agile Web Development
RubyKaigi 2015 の Drinkup を支える技術
RubyKaigi 2015 の Drinkup を支える技術
Motivationware
Motivationware
達人プログラマーへの道
達人プログラマーへの道
Let's get ready for next Ruby
Let's get ready for next Ruby
職と人
職と人
Agile Software Development with Edge Ruby
Agile Software Development with Edge Ruby
Safe navigation operator in Ruby
Safe navigation operator in Ruby
プロの無職についての考察:序
プロの無職についての考察:序
スローテスト刑事 (デカ)
1.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 スローテスト刑事 (デカ) 第74回�Ruby関⻄�勉強会 京都⼥⼦大学�C508 2016-09-11�(Sun) 伊藤�浩⼀�(@koic) (株)永和システムマネジメント
2.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 わたし
3.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 わたし (株)永和システムマネジメントで 働く会社員。Rubyとかメタルと か好きです。 https://github.com/koic✓ https://twitter.com/koic✓ https://koic.hatenablog.com✓
4.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 �
5.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 御礼
6.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 �
7.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 今⽇の話 Railsアプリケーションのスロ ーテスト対策について ✓ XP�で伝えられる�Testing�と� Continuous�Integration�への 現実的課題点について考察 ✓ 現場での実践とポイント オンプレJenkins✓ ✓
8.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 まとめ
9.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 Thanks�(デカ部屋) @1syo✓ @onk✓ @yattom✓
10.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 フルビル ド何分で すか?
11.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 とあるアンケート 10分以内に抑えるようにして います
12.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 10分と いう目標
13.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 目標と現 実の差を 知る
14.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 ある現実 だいたい3,795�examplesほど✓ ある時点で�rake�stats�した Code�LOC:�12796✓ Test�LOC:�23518✓ Code�to�Test�Ratio:�1:1.8✓ ✓ 素朴にテストを書いて実⾏とか だと1時間越え ✓
15.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 1時間越え 24つのPull�Requestが出たら 1⽇の処理量を越える ✓ というか翌朝出社しても終わら ない ✓ ないわー✓
16.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 86,400
17.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 時間の重み 1⽇は86,400秒✓ 例えば60秒かかるスローテス トが30つあると、 ✓ ⼀⽇に処理できるCIの上限は 48つ以下 チームは⼀⽇何回のコミットをして ますか? ✓ ✓
18.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 ⾦を払いま すか?労⼒ を払います か?
19.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 最速での事件解決法 札束で殴る✓ 潤沢な⾦と権⼒✓ お⾦がんばれ✓
20.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 労⼒を⾦で解決する 問題解決の基礎戦略のひとつ✓ 潤沢な⾦と権限のあるプロジェ クトは動きやすい あまりそういったプロジェクトばか りでないのが現実 ✓ 今⽇の話は制約の中でどうしていく か ✓ ✓
21.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 スローテスト刑事�(デカ)�の ⽇常 テストの並列化と個別のチュー ンナップを頑張る ✓ まるで靴底をすり減らした聞き 込みのように地道な作業 デカだからね✓ ✓
22.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 TL;DR
23.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 コアでスケー ルアウトしメ モリでスケー ルアップする
24.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 私のオススメ 倍速レベルで速くなる並列化を 初⼿にすると良い 投資対効果が⾼い✓ ✓ DBのデータファイルのメモリ 化でディスクIO削減 RDBMS自体のパフォーマンスが上 がるわけではないので、20%の速度 向上など⼀定⽐率で頭打ちはある ✓ ✓
25.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 Topics 1.�Parallel✓ 2.�DB✓ 3.�Tips✓
26.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 1.Parallel
27.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 Gemfileに以下を書いて bundle�install�(1/4) parallel̲tests�/�test-queueとい った並列化ライブラリがある。 ����������������������������������������� ここはparallel̲testsを例にする。
28.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 各種設定を並列対応�(2/4) データベースを並列分用意して、 config/database.ymlを対応する ����� ��������������������������������������������������������� RDBMSに並列実⾏分のスキーマ� (あるいはDB)�を用意する ✓
29.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 並列分のスキーマ作成�(3/4) rake�db:migrate�の実⾏より� rake�db:schema:load�の⽅が速い ので意図がないならオススメ ��������������������������� ������������������������������������������������
30.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 テストの並列実⾏�(4/4) --suffixでテスト対象を絞り込んで ⾒てみても良い。 ������������������������������������������ ���������������������������������������������������
31.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 効果 4コア:�約1時間のテストが約 15分になった。 ✓ 2コア:�約1時間のテストが約 30分になった。 ✓
32.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 共有リソースが容疑者 基本的に個別のテストに⼿を⼊ れず効果を得られる ✓ Isolated�Testの原則からそれ ぞれが影響しないはず ✓ Shared�resourcesに気をつ ける 逆にいうとだいたいここくらい✓ ✓
33.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 並列化まとめ tmm1/test-queue,�grosser/ parallel̲testsなどで並列化 ✓ 並列化するためデータベースや 全⽂検索エンジンなどのリソー スも並列可能にする ✓ コアの数でほぼ頭打ちになるの でハイスペックのマシンが良い ✓
34.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 効果が⾼い ので最初に やると良い
35.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 2.�DB
36.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 データファイルのtmpfs搭載 RDBMSによるが2割減などが ⾒込めたりするらしい ✓ ⼀⽅でDisk�IO減は思いのほか 効いていない ✓ というかこの間、Vagrantのパ ラメータやらtmpfs化と合わせ てしておくREDOログの設定し くっててMac�MiniのCI死んだ ✓
37.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 Vagrantメモリ割当の変 問題.�この設定で�vagrant�reload� してテストを流しました�(配点2点) �������������������������������������� �������������������������������������������������������� ��������������������������������������������������������������� ������������������������������������������������������ ������������������������������������������������������ ���
38.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 まだ⽣傷が 癒えていな いので割愛
39.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 データベースのクリーニング を整理する スローテストの原因は、だいた いデータベースがネック CI�実⾏もアプリケーションでの実 ⾏もボトルネックは同じ ✓ ✓ amatsuda/ database̲rewinderというプ ロダクトもあるが、ここでは DatabaseCleanerのお話 ✓
40.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 DatabaseCleaner.strategy
41.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 spec̲helper.rb あるいはrails̲helper.rbに以下が あれば⾼速化の狙い目。 ��������������������������������� ���������������������������������� ������������������������������������������������������������� ������ ������������������������������������������� ����� ���
42.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 DatabaseCleaner.strate gyはできるだけ transactionに任せる データベースのデータ挿⼊と取得 で異なるスレッドが現れる JavaScriptのテスト以外は truncationではなく、同⼀スレッ ドで扱えるtransactionにする。
43.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 容疑者探し example.metadata�が⼿掛かり。 ��������������������������� ����������������������������������� ������� 容疑者の絞り込みまで出来るとあ とはやるだけなので割りと楽。
44.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 やること @javascriptを必要な場所に移す ������������ �������������� ����������������������������� ��������� �������������� �������������������������� ��������� ����������������������������� ���������
45.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 効果�1�BEFORE ����������������������������������������������������������� �����������������������
46.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 効果�1�AFTER ����������������������������������������������������������� �����������������������
47.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 効果�2�BEFORE ����������������������������������������������������������� ����������������������
48.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 効果�2�AFTER ���������������������������������������������������������� ����������������������
49.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 効果�3�BEFORE ����������������������������������������������������������� �����������������������
50.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 効果�3�AFTER ����������������������������������������������������������� �����������������������
51.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 効果�4�BEFORE ����������������������������������������������������������� ����������������������
52.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 効果�4�AFTER ���������������������������������������������������������� ����������������������
53.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 全体効果 約40分のテストが35分になっ た。 9%ほど削減✓ ✓
54.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 あとは地道に細かいチューニ ング 投資対効果が⾼いテストからチ ューニングしていく ✓
55.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 3.Tips
56.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 プロファイリング 推測するな、計測せよ�(--profile) �������������������������������� ������ ������������������������������ ����� ������������������������������������������������������������������������������������������ ����� ������������������������������������������������������������������������������������������ ����� ������������������������������������������������������������������������������������������ ���� オリコンチャート的な。
57.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 sleepを取り締まる grep�sleep�.�|�wc�-l�で⾒つか った件数以上の待ち時間が発⽣ スローの原因場所は⾒つけやすい✓ ✓ JavaScriptの関わるE2Eテス トでの遭遇率⾼い ✓ 1秒もsleepするならDBに状態 を問い合わせた⽅が速い ✓
58.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 DRY テストの重複を消す✓ コピペによる迷宮⼊り✓ コードを書いた時点でないと⾒ つけることが現実的には困難? Code�Climate的な静的解析で⼿掛 かりを⾒つけたりできる? ✓ 知⾒を知りたい✓ ✓
59.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 断捨離 使われていないテスト�(と呼び 出される不要な)�コードを捨て る ✓ ⾜し算より引き算の⽅が難しい✓ コードを捨てることができて⼀ ⼈前 ✓
60.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 最適化 before(:all),�before(:each),� aggregate̲failures�あたりの 最適化 ✓ 毎回の初期化が必要かどうかは ⼀考の余地有り ✓ 最近は�1�example(it,specify)� で�1�テストケースよりも速度 重視に思考が変わってきた ✓
61.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 できるだけインメモリ 不要な�AR�オブジェクト作ら ない�(factory�で関連作らず� nil�にしておく) ✓ DB�にアクセスさせない� (FactoryGirl.create�->�build) ✓
62.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 system�呼び出さない 他のテストで担保している遅い 外部コマンド�(ImageMagick)� をスタブ化するなど ✓
63.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 無駄な処理 サムネイル作らない✓
64.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 付録
65.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 対象絞り込み 変更と関係のあるテストだけ実 ⾏するという選択肢 ✓ タグ(rspec�--tag)で対象のテ ストを絞る ただし全テストを⾒たいCIの前段ま で ✓ ✓
66.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 ci�skip rails/railsはじめ常套⼿段✓ コメント修正といったレビュー をパスすれば良いだけのものは テストしない CI�の設定✓ ✓ ci�skip�/�CI�SKIP�/�skip�ci�/� SKIP�CI�いずれでも受⼊れるよ うにしておくと良い ✓
67.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 To�be�continued... スローテスト刑事�(デカ)�の捜 査は続く ✓
68.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 �
69.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 Dying�Message 札束で殴る✓ 潤沢な⾦と権⼒✓ お⾦がんばれ✓