Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
スローテスト刑事
(デカ)
第74回�Ruby関⻄�勉強会
京都⼥⼦大学�C508
2016-09-11�(Sun)
伊藤�浩⼀�(@koic)
(株)永和システムマネ...
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
わたし
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
わたし
(株)永和システムマネジメントで
働く会社員。Rubyとかメタルと
か好きです。
https://github.com/koic✓
https://twitte...
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
�
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
御礼
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
�
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
今⽇の話
Railsアプリケーションのスロ
ーテスト対策について
✓
XP�で伝えられる�Testing�と�
Continuous�Integration�への
現実...
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
まとめ
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
Thanks�(デカ部屋)
@1syo✓
@onk✓
@yattom✓
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
フルビル
ド何分で
すか?
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
とあるアンケート
10分以内に抑えるようにして
います
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
10分と
いう目標
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
目標と現
実の差を
知る
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
ある現実
だいたい3,795�examplesほど✓
ある時点で�rake�stats�した
Code�LOC:�12796✓
Test�LOC:�23518✓
Cod...
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
1時間越え
24つのPull�Requestが出たら
1⽇の処理量を越える
✓
というか翌朝出社しても終わら
ない
✓
ないわー✓
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
86,400
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
時間の重み
1⽇は86,400秒✓
例えば60秒かかるスローテス
トが30つあると、
✓
⼀⽇に処理できるCIの上限は
48つ以下
チームは⼀⽇何回のコミットをして
ま...
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
⾦を払いま
すか?労⼒
を払います
か?
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
最速での事件解決法
札束で殴る✓
潤沢な⾦と権⼒✓
お⾦がんばれ✓
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
労⼒を⾦で解決する
問題解決の基礎戦略のひとつ✓
潤沢な⾦と権限のあるプロジェ
クトは動きやすい
あまりそういったプロジェクトばか
りでないのが現実
✓
今⽇の話は制約...
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
スローテスト刑事�(デカ)�の
⽇常
テストの並列化と個別のチュー
ンナップを頑張る
✓
まるで靴底をすり減らした聞き
込みのように地道な作業
デカだからね✓
✓
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
TL;DR
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
コアでスケー
ルアウトしメ
モリでスケー
ルアップする
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
私のオススメ
倍速レベルで速くなる並列化を
初⼿にすると良い
投資対効果が⾼い✓
✓
DBのデータファイルのメモリ
化でディスクIO削減
RDBMS自体のパフォーマンス...
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
Topics
1.�Parallel✓
2.�DB✓
3.�Tips✓
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
1.Parallel
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
Gemfileに以下を書いて
bundle�install�(1/4)
parallel̲tests�/�test-queueとい
った並列化ライブラリがある。
����...
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
各種設定を並列対応�(2/4)
データベースを並列分用意して、
config/database.ymlを対応する
�����
����������������������...
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
並列分のスキーマ作成�(3/4)
rake�db:migrate�の実⾏より�
rake�db:schema:load�の⽅が速い
ので意図がないならオススメ
����...
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
テストの並列実⾏�(4/4)
--suffixでテスト対象を絞り込んで
⾒てみても良い。
�����������������������������������������...
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
効果
4コア:�約1時間のテストが約
15分になった。
✓
2コア:�約1時間のテストが約
30分になった。
✓
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
共有リソースが容疑者
基本的に個別のテストに⼿を⼊
れず効果を得られる
✓
Isolated�Testの原則からそれ
ぞれが影響しないはず
✓
Shared�resou...
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
並列化まとめ
tmm1/test-queue,�grosser/
parallel̲testsなどで並列化
✓
並列化するためデータベースや
全⽂検索エンジンなどのリソ...
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
効果が⾼い
ので最初に
やると良い
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
2.�DB
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
データファイルのtmpfs搭載
RDBMSによるが2割減などが
⾒込めたりするらしい
✓
⼀⽅でDisk�IO減は思いのほか
効いていない
✓
というかこの間、Vagr...
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
Vagrantメモリ割当の変
問題.�この設定で�vagrant�reload�
してテストを流しました�(配点2点)
������������������������...
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
まだ⽣傷が
癒えていな
いので割愛
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
データベースのクリーニング
を整理する
スローテストの原因は、だいた
いデータベースがネック
CI�実⾏もアプリケーションでの実
⾏もボトルネックは同じ
✓
✓
ama...
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
DatabaseCleaner.strategy
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
spec̲helper.rb
あるいはrails̲helper.rbに以下が
あれば⾼速化の狙い目。
���������������������������������...
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
DatabaseCleaner.strate
gyはできるだけ
transactionに任せる
データベースのデータ挿⼊と取得
で異なるスレッドが現れる
JavaScr...
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
容疑者探し
example.metadata�が⼿掛かり。
���������������������������
��������������������������...
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
やること
@javascriptを必要な場所に移す
������������
��������������
�����������������������������
...
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
効果�1�BEFORE
�����������������������������������������������������������
������������...
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
効果�1�AFTER
�����������������������������������������������������������
�������������...
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
効果�2�BEFORE
�����������������������������������������������������������
������������...
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
効果�2�AFTER
����������������������������������������������������������
��������������...
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
効果�3�BEFORE
�����������������������������������������������������������
������������...
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
効果�3�AFTER
�����������������������������������������������������������
�������������...
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
効果�4�BEFORE
�����������������������������������������������������������
������������...
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
効果�4�AFTER
����������������������������������������������������������
��������������...
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
全体効果
約40分のテストが35分になっ
た。
9%ほど削減✓
✓
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
あとは地道に細かいチューニ
ング
投資対効果が⾼いテストからチ
ューニングしていく
✓
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
3.Tips
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
プロファイリング
推測するな、計測せよ�(--profile)
��������������������������������
������
�������������...
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
sleepを取り締まる
grep�sleep�.�|�wc�-l�で⾒つか
った件数以上の待ち時間が発⽣
スローの原因場所は⾒つけやすい✓
✓
JavaScriptの関...
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
DRY
テストの重複を消す✓
コピペによる迷宮⼊り✓
コードを書いた時点でないと⾒
つけることが現実的には困難?
Code�Climate的な静的解析で⼿掛
かりを⾒つ...
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
断捨離
使われていないテスト�(と呼び
出される不要な)�コードを捨て
る
✓
⾜し算より引き算の⽅が難しい✓
コードを捨てることができて⼀
⼈前
✓
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
最適化
before(:all),�before(:each),�
aggregate̲failures�あたりの
最適化
✓
毎回の初期化が必要かどうかは
⼀考の余地...
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
できるだけインメモリ
不要な�AR�オブジェクト作ら
ない�(factory�で関連作らず�
nil�にしておく)
✓
DB�にアクセスさせない�
(FactoryGi...
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
system�呼び出さない
他のテストで担保している遅い
外部コマンド�(ImageMagick)�
をスタブ化するなど
✓
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
無駄な処理
サムネイル作らない✓
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
付録
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
対象絞り込み
変更と関係のあるテストだけ実
⾏するという選択肢
✓
タグ(rspec�--tag)で対象のテ
ストを絞る
ただし全テストを⾒たいCIの前段ま
で
✓
✓
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
ci�skip
rails/railsはじめ常套⼿段✓
コメント修正といったレビュー
をパスすれば良いだけのものは
テストしない
CI�の設定✓
✓
ci�skip�/...
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
To�be�continued...
スローテスト刑事�(デカ)�の捜
査は続く
✓
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
�
スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8
Dying�Message
札束で殴る✓
潤沢な⾦と権⼒✓
お⾦がんばれ✓
Upcoming SlideShare
Loading in …5
×

スローテスト刑事 (デカ)

2,248 views

Published on

第74回 Ruby関西 勉強会 (https://rubykansai.doorkeeper.jp/events/49364)

Published in: Engineering
  • Be the first to comment

スローテスト刑事 (デカ)

  1. 1. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 スローテスト刑事 (デカ) 第74回�Ruby関⻄�勉強会 京都⼥⼦大学�C508 2016-09-11�(Sun) 伊藤�浩⼀�(@koic) (株)永和システムマネジメント
  2. 2. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 わたし
  3. 3. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 わたし (株)永和システムマネジメントで 働く会社員。Rubyとかメタルと か好きです。 https://github.com/koic✓ https://twitter.com/koic✓ https://koic.hatenablog.com✓
  4. 4. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 �
  5. 5. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 御礼
  6. 6. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 �
  7. 7. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 今⽇の話 Railsアプリケーションのスロ ーテスト対策について ✓ XP�で伝えられる�Testing�と� Continuous�Integration�への 現実的課題点について考察 ✓ 現場での実践とポイント オンプレJenkins✓ ✓
  8. 8. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 まとめ
  9. 9. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 Thanks�(デカ部屋) @1syo✓ @onk✓ @yattom✓
  10. 10. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 フルビル ド何分で すか?
  11. 11. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 とあるアンケート 10分以内に抑えるようにして います
  12. 12. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 10分と いう目標
  13. 13. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 目標と現 実の差を 知る
  14. 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. 15. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 1時間越え 24つのPull�Requestが出たら 1⽇の処理量を越える ✓ というか翌朝出社しても終わら ない ✓ ないわー✓
  16. 16. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 86,400
  17. 17. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 時間の重み 1⽇は86,400秒✓ 例えば60秒かかるスローテス トが30つあると、 ✓ ⼀⽇に処理できるCIの上限は 48つ以下 チームは⼀⽇何回のコミットをして ますか? ✓ ✓
  18. 18. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 ⾦を払いま すか?労⼒ を払います か?
  19. 19. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 最速での事件解決法 札束で殴る✓ 潤沢な⾦と権⼒✓ お⾦がんばれ✓
  20. 20. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 労⼒を⾦で解決する 問題解決の基礎戦略のひとつ✓ 潤沢な⾦と権限のあるプロジェ クトは動きやすい あまりそういったプロジェクトばか りでないのが現実 ✓ 今⽇の話は制約の中でどうしていく か ✓ ✓
  21. 21. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 スローテスト刑事�(デカ)�の ⽇常 テストの並列化と個別のチュー ンナップを頑張る ✓ まるで靴底をすり減らした聞き 込みのように地道な作業 デカだからね✓ ✓
  22. 22. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 TL;DR
  23. 23. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 コアでスケー ルアウトしメ モリでスケー ルアップする
  24. 24. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 私のオススメ 倍速レベルで速くなる並列化を 初⼿にすると良い 投資対効果が⾼い✓ ✓ DBのデータファイルのメモリ 化でディスクIO削減 RDBMS自体のパフォーマンスが上 がるわけではないので、20%の速度 向上など⼀定⽐率で頭打ちはある ✓ ✓
  25. 25. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 Topics 1.�Parallel✓ 2.�DB✓ 3.�Tips✓
  26. 26. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 1.Parallel
  27. 27. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 Gemfileに以下を書いて bundle�install�(1/4) parallel̲tests�/�test-queueとい った並列化ライブラリがある。 ����������������������������������������� ここはparallel̲testsを例にする。
  28. 28. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 各種設定を並列対応�(2/4) データベースを並列分用意して、 config/database.ymlを対応する ����� ��������������������������������������������������������� RDBMSに並列実⾏分のスキーマ� (あるいはDB)�を用意する ✓
  29. 29. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 並列分のスキーマ作成�(3/4) rake�db:migrate�の実⾏より� rake�db:schema:load�の⽅が速い ので意図がないならオススメ ��������������������������� ������������������������������������������������
  30. 30. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 テストの並列実⾏�(4/4) --suffixでテスト対象を絞り込んで ⾒てみても良い。 ������������������������������������������ ���������������������������������������������������
  31. 31. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 効果 4コア:�約1時間のテストが約 15分になった。 ✓ 2コア:�約1時間のテストが約 30分になった。 ✓
  32. 32. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 共有リソースが容疑者 基本的に個別のテストに⼿を⼊ れず効果を得られる ✓ Isolated�Testの原則からそれ ぞれが影響しないはず ✓ Shared�resourcesに気をつ ける 逆にいうとだいたいここくらい✓ ✓
  33. 33. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 並列化まとめ tmm1/test-queue,�grosser/ parallel̲testsなどで並列化 ✓ 並列化するためデータベースや 全⽂検索エンジンなどのリソー スも並列可能にする ✓ コアの数でほぼ頭打ちになるの でハイスペックのマシンが良い ✓
  34. 34. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 効果が⾼い ので最初に やると良い
  35. 35. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 2.�DB
  36. 36. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 データファイルのtmpfs搭載 RDBMSによるが2割減などが ⾒込めたりするらしい ✓ ⼀⽅でDisk�IO減は思いのほか 効いていない ✓ というかこの間、Vagrantのパ ラメータやらtmpfs化と合わせ てしておくREDOログの設定し くっててMac�MiniのCI死んだ ✓
  37. 37. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 Vagrantメモリ割当の変 問題.�この設定で�vagrant�reload� してテストを流しました�(配点2点) �������������������������������������� �������������������������������������������������������� ��������������������������������������������������������������� ������������������������������������������������������ ������������������������������������������������������ ���
  38. 38. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 まだ⽣傷が 癒えていな いので割愛
  39. 39. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 データベースのクリーニング を整理する スローテストの原因は、だいた いデータベースがネック CI�実⾏もアプリケーションでの実 ⾏もボトルネックは同じ ✓ ✓ amatsuda/ database̲rewinderというプ ロダクトもあるが、ここでは DatabaseCleanerのお話 ✓
  40. 40. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 DatabaseCleaner.strategy
  41. 41. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 spec̲helper.rb あるいはrails̲helper.rbに以下が あれば⾼速化の狙い目。 ��������������������������������� ���������������������������������� ������������������������������������������������������������� ������ ������������������������������������������� ����� ���
  42. 42. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 DatabaseCleaner.strate gyはできるだけ transactionに任せる データベースのデータ挿⼊と取得 で異なるスレッドが現れる JavaScriptのテスト以外は truncationではなく、同⼀スレッ ドで扱えるtransactionにする。
  43. 43. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 容疑者探し example.metadata�が⼿掛かり。 ��������������������������� ����������������������������������� ������� 容疑者の絞り込みまで出来るとあ とはやるだけなので割りと楽。
  44. 44. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 やること @javascriptを必要な場所に移す ������������ �������������� ����������������������������� ��������� �������������� �������������������������� ��������� ����������������������������� ���������
  45. 45. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 効果�1�BEFORE ����������������������������������������������������������� �����������������������
  46. 46. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 効果�1�AFTER ����������������������������������������������������������� �����������������������
  47. 47. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 効果�2�BEFORE ����������������������������������������������������������� ����������������������
  48. 48. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 効果�2�AFTER ���������������������������������������������������������� ����������������������
  49. 49. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 効果�3�BEFORE ����������������������������������������������������������� �����������������������
  50. 50. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 効果�3�AFTER ����������������������������������������������������������� �����������������������
  51. 51. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 効果�4�BEFORE ����������������������������������������������������������� ����������������������
  52. 52. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 効果�4�AFTER ���������������������������������������������������������� ����������������������
  53. 53. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 全体効果 約40分のテストが35分になっ た。 9%ほど削減✓ ✓
  54. 54. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 あとは地道に細かいチューニ ング 投資対効果が⾼いテストからチ ューニングしていく ✓
  55. 55. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 3.Tips
  56. 56. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 プロファイリング 推測するな、計測せよ�(--profile) �������������������������������� ������ ������������������������������ ����� ������������������������������������������������������������������������������������������ ����� ������������������������������������������������������������������������������������������ ����� ������������������������������������������������������������������������������������������ ���� オリコンチャート的な。
  57. 57. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 sleepを取り締まる grep�sleep�.�|�wc�-l�で⾒つか った件数以上の待ち時間が発⽣ スローの原因場所は⾒つけやすい✓ ✓ JavaScriptの関わるE2Eテス トでの遭遇率⾼い ✓ 1秒もsleepするならDBに状態 を問い合わせた⽅が速い ✓
  58. 58. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 DRY テストの重複を消す✓ コピペによる迷宮⼊り✓ コードを書いた時点でないと⾒ つけることが現実的には困難? Code�Climate的な静的解析で⼿掛 かりを⾒つけたりできる? ✓ 知⾒を知りたい✓ ✓
  59. 59. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 断捨離 使われていないテスト�(と呼び 出される不要な)�コードを捨て る ✓ ⾜し算より引き算の⽅が難しい✓ コードを捨てることができて⼀ ⼈前 ✓
  60. 60. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 最適化 before(:all),�before(:each),� aggregate̲failures�あたりの 最適化 ✓ 毎回の初期化が必要かどうかは ⼀考の余地有り ✓ 最近は�1�example(it,specify)� で�1�テストケースよりも速度 重視に思考が変わってきた ✓
  61. 61. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 できるだけインメモリ 不要な�AR�オブジェクト作ら ない�(factory�で関連作らず� nil�にしておく) ✓ DB�にアクセスさせない� (FactoryGirl.create�->�build) ✓
  62. 62. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 system�呼び出さない 他のテストで担保している遅い 外部コマンド�(ImageMagick)� をスタブ化するなど ✓
  63. 63. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 無駄な処理 サムネイル作らない✓
  64. 64. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 付録
  65. 65. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 対象絞り込み 変更と関係のあるテストだけ実 ⾏するという選択肢 ✓ タグ(rspec�--tag)で対象のテ ストを絞る ただし全テストを⾒たいCIの前段ま で ✓ ✓
  66. 66. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 ci�skip rails/railsはじめ常套⼿段✓ コメント修正といったレビュー をパスすれば良いだけのものは テストしない CI�の設定✓ ✓ ci�skip�/�CI�SKIP�/�skip�ci�/� SKIP�CI�いずれでも受⼊れるよ うにしておくと良い ✓
  67. 67. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 To�be�continued... スローテスト刑事�(デカ)�の捜 査は続く ✓
  68. 68. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 �
  69. 69. スローテスト刑事�(デカ) Powered�by�Rabbit�2.1.8 Dying�Message 札束で殴る✓ 潤沢な⾦と権⼒✓ お⾦がんばれ✓

×