Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
EN
Uploaded by
Koichi ITO
7,906 views
スローテスト刑事 (デカ)
第74回 Ruby関西 勉強会 (https://rubykansai.doorkeeper.jp/events/49364)
Engineering
◦
Read more
1
Save
Share
Embed
Embed presentation
1
/ 69
2
/ 69
3
/ 69
4
/ 69
5
/ 69
6
/ 69
7
/ 69
8
/ 69
9
/ 69
10
/ 69
11
/ 69
12
/ 69
13
/ 69
14
/ 69
15
/ 69
16
/ 69
17
/ 69
18
/ 69
19
/ 69
20
/ 69
21
/ 69
22
/ 69
23
/ 69
24
/ 69
25
/ 69
26
/ 69
27
/ 69
28
/ 69
29
/ 69
30
/ 69
31
/ 69
32
/ 69
33
/ 69
34
/ 69
35
/ 69
36
/ 69
37
/ 69
38
/ 69
39
/ 69
40
/ 69
41
/ 69
42
/ 69
43
/ 69
44
/ 69
45
/ 69
46
/ 69
47
/ 69
48
/ 69
49
/ 69
50
/ 69
51
/ 69
52
/ 69
53
/ 69
54
/ 69
55
/ 69
56
/ 69
57
/ 69
58
/ 69
59
/ 69
60
/ 69
61
/ 69
62
/ 69
63
/ 69
64
/ 69
65
/ 69
66
/ 69
67
/ 69
68
/ 69
69
/ 69
More Related Content
PDF
クラスローダーについて
by
Suguru ARAKAWA
KEY
Java One 2012 Tokyo JVM Lang. BOF(Groovy)
by
Uehara Junji
PDF
ClassLoader Leak Patterns
by
nekop
PDF
Kink: プロトタイプベースの俺々 JVM 言語
by
Taku Miyakawa
PPTX
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
by
Norito Agetsuma
PDF
Indy(Invokedynamic) and Bytecode DSL and Brainf*ck
by
Uehara Junji
PDF
開発時の探し物を楽にする習慣作り
by
Koichi ITO
PPTX
Uuidはどこまでuuidか試してみた
by
Yu Yamada
クラスローダーについて
by
Suguru ARAKAWA
Java One 2012 Tokyo JVM Lang. BOF(Groovy)
by
Uehara Junji
ClassLoader Leak Patterns
by
nekop
Kink: プロトタイプベースの俺々 JVM 言語
by
Taku Miyakawa
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
by
Norito Agetsuma
Indy(Invokedynamic) and Bytecode DSL and Brainf*ck
by
Uehara Junji
開発時の探し物を楽にする習慣作り
by
Koichi ITO
Uuidはどこまでuuidか試してみた
by
Yu Yamada
More from Koichi ITO
PDF
Bundler 2 の胎動
by
Koichi ITO
PDF
アプリがパッチにまみれたら
by
Koichi ITO
PDF
Stairway to The Pragmatic Rails Programmer
by
Koichi ITO
PDF
最軽の開発手法 dX 改
by
Koichi ITO
PDF
Railsアプリケーションプロジェクトでの読み書きそろばんの1周目、2周目とそれから
by
Koichi ITO
PDF
Ruby 2.4 / Rails 5.0に上げた際のパッチ5選
by
Koichi ITO
PDF
10年生きる Ruby / Rails アプリケーションプログラマーのエコシステム
by
Koichi ITO
PDF
俺の開発日誌
by
Koichi ITO
PDF
ghq gem-src and more
by
Koichi ITO
PDF
RuboCopとXPコーディング規約
by
Koichi ITO
PDF
俺たちの新人教育!!
by
Koichi ITO
PDF
Gate of Agile Web Development
by
Koichi ITO
PDF
RubyKaigi 2015 の Drinkup を支える技術
by
Koichi ITO
PDF
Motivationware
by
Koichi ITO
PDF
達人プログラマーへの道
by
Koichi ITO
PDF
Let's get ready for next Ruby
by
Koichi ITO
PDF
職と人
by
Koichi ITO
PDF
Agile Software Development with Edge Ruby
by
Koichi ITO
PDF
Safe navigation operator in Ruby
by
Koichi ITO
PDF
プロの無職についての考察:序
by
Koichi ITO
Bundler 2 の胎動
by
Koichi ITO
アプリがパッチにまみれたら
by
Koichi ITO
Stairway to The Pragmatic Rails Programmer
by
Koichi ITO
最軽の開発手法 dX 改
by
Koichi ITO
Railsアプリケーションプロジェクトでの読み書きそろばんの1周目、2周目とそれから
by
Koichi ITO
Ruby 2.4 / Rails 5.0に上げた際のパッチ5選
by
Koichi ITO
10年生きる Ruby / Rails アプリケーションプログラマーのエコシステム
by
Koichi ITO
俺の開発日誌
by
Koichi ITO
ghq gem-src and more
by
Koichi ITO
RuboCopとXPコーディング規約
by
Koichi ITO
俺たちの新人教育!!
by
Koichi ITO
Gate of Agile Web Development
by
Koichi ITO
RubyKaigi 2015 の Drinkup を支える技術
by
Koichi ITO
Motivationware
by
Koichi ITO
達人プログラマーへの道
by
Koichi ITO
Let's get ready for next Ruby
by
Koichi ITO
職と人
by
Koichi ITO
Agile Software Development with Edge Ruby
by
Koichi ITO
Safe navigation operator in Ruby
by
Koichi ITO
プロの無職についての考察:序
by
Koichi ITO
スローテスト刑事 (デカ)
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 札束で殴る✓ 潤沢な⾦と権⼒✓ お⾦がんばれ✓