SlideShare une entreprise Scribd logo
1  sur  16
テスト実行速度を改善して
お金をかけずに開発スピード
を爆速にする
15 Jul 2017 PHPカンファレンス関西 LT
by @77web
2017
2017
• PSR当たり前
• composer当たり前
• テスト書くの当たり前
• ci回すの当たり前
2017
• PSR当たり前
• composer当たり前
• テスト書くの当たり前
• ci回すの当たり前
PR
illust from https://www.ac-illust.com/main/detail.php?id=181119
CI
done
CI
PR
PR
PR
done
PR
PR
CI
PR
PR
PR
done
PR
PR
PR
PR
PR
PR
CI
PR
PR
PR
done
PR
PR
PR
PR
PR
PR
ここを速くする
CI
PR
PR
PR
done
PR
PR
PR
PR
PR
PR
テストを速くしたい!
速くする
• 重複するアサーションをなくす
• アサーションをできるだけまとめる
軽くする
• setUp(),tearDown()を使ってテストケースのプロパ
ティを解放する。
• 複数のメソッドで使いまわしたい場合はstaticプロ
パティを使う。setUpBeforeClass(),
tearDownAfterClass()を活用。
ありがとうございました!
名古屋勤務のプログラマー募集中です!
詳細は@hidenorigotoか私まで!

Contenu connexe

Tendances

Closures and methodMissing are real
Closures and methodMissing are realClosures and methodMissing are real
Closures and methodMissing are real
Takahiro Sugiura
 
古い?ダサい?まだまだイケルChef!
古い?ダサい?まだまだイケルChef!古い?ダサい?まだまだイケルChef!
古い?ダサい?まだまだイケルChef!
Naoto Ishizawa
 
jenkins先生にライブラリの更新をお願いする
jenkins先生にライブラリの更新をお願いするjenkins先生にライブラリの更新をお願いする
jenkins先生にライブラリの更新をお願いする
Yuichi Tanaka
 

Tendances (16)

ReSharperを使ってみた
ReSharperを使ってみたReSharperを使ってみた
ReSharperを使ってみた
 
入力フォームチェックをJ queryでやってみた
入力フォームチェックをJ queryでやってみた入力フォームチェックをJ queryでやってみた
入力フォームチェックをJ queryでやってみた
 
リーダブルコード勉強会 in 筑波大 - 練習
リーダブルコード勉強会 in 筑波大 - 練習リーダブルコード勉強会 in 筑波大 - 練習
リーダブルコード勉強会 in 筑波大 - 練習
 
SpockからRSpecにきたときの気づき #coedorb
SpockからRSpecにきたときの気づき #coedorbSpockからRSpecにきたときの気づき #coedorb
SpockからRSpecにきたときの気づき #coedorb
 
Visual Studio TypeScript npm WebPack
Visual Studio TypeScript npm WebPackVisual Studio TypeScript npm WebPack
Visual Studio TypeScript npm WebPack
 
Closures and methodMissing are real
Closures and methodMissing are realClosures and methodMissing are real
Closures and methodMissing are real
 
俺とGitHub(先行公開ver.)
俺とGitHub(先行公開ver.)俺とGitHub(先行公開ver.)
俺とGitHub(先行公開ver.)
 
Flowtype Introduction
Flowtype IntroductionFlowtype Introduction
Flowtype Introduction
 
Groovyで学ぶプロセス代数 #jjug
Groovyで学ぶプロセス代数 #jjugGroovyで学ぶプロセス代数 #jjug
Groovyで学ぶプロセス代数 #jjug
 
Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所
Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所
Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所
 
第二回 クラウドサーバー管理者若葉の会
第二回 クラウドサーバー管理者若葉の会第二回 クラウドサーバー管理者若葉の会
第二回 クラウドサーバー管理者若葉の会
 
LT#7 Hello coffeeしてきた
LT#7 Hello coffeeしてきたLT#7 Hello coffeeしてきた
LT#7 Hello coffeeしてきた
 
古い?ダサい?まだまだイケルChef!
古い?ダサい?まだまだイケルChef!古い?ダサい?まだまだイケルChef!
古い?ダサい?まだまだイケルChef!
 
Rspec
RspecRspec
Rspec
 
jenkins先生にライブラリの更新をお願いする
jenkins先生にライブラリの更新をお願いするjenkins先生にライブラリの更新をお願いする
jenkins先生にライブラリの更新をお願いする
 
Jenkinsのある生活
Jenkinsのある生活Jenkinsのある生活
Jenkinsのある生活
 

Plus de 77web

第9回Symfony勉強会LT Symfony2 meets AngularJS #symfony_ja
第9回Symfony勉強会LT Symfony2 meets AngularJS #symfony_ja第9回Symfony勉強会LT Symfony2 meets AngularJS #symfony_ja
第9回Symfony勉強会LT Symfony2 meets AngularJS #symfony_ja
77web
 
まだ技術ブログを始めてないPHPerのあなたへ。PHPカンファレンス関西2013 LT
まだ技術ブログを始めてないPHPerのあなたへ。PHPカンファレンス関西2013 LTまだ技術ブログを始めてないPHPerのあなたへ。PHPカンファレンス関西2013 LT
まだ技術ブログを始めてないPHPerのあなたへ。PHPカンファレンス関西2013 LT
77web
 

Plus de 77web (9)

最近のPHP事情とNagoya.phpへのお誘い #ngk2018b
最近のPHP事情とNagoya.phpへのお誘い #ngk2018b最近のPHP事情とNagoya.phpへのお誘い #ngk2018b
最近のPHP事情とNagoya.phpへのお誘い #ngk2018b
 
すばやく実装するための戦略とテクニック
すばやく実装するための戦略とテクニックすばやく実装するための戦略とテクニック
すばやく実装するための戦略とテクニック
 
ズンドコキヨシon Workflower
ズンドコキヨシon Workflowerズンドコキヨシon Workflower
ズンドコキヨシon Workflower
 
Formとは何か?〜例えば、Symfony\Component\Formを避ける〜
Formとは何か?〜例えば、Symfony\Component\Formを避ける〜Formとは何か?〜例えば、Symfony\Component\Formを避ける〜
Formとは何か?〜例えば、Symfony\Component\Formを避ける〜
 
CoderDojo Nagoyaの取り組みについて at Scratch day 2015 Aichi 3分間トーク
CoderDojo Nagoyaの取り組みについて at Scratch day 2015 Aichi 3分間トークCoderDojo Nagoyaの取り組みについて at Scratch day 2015 Aichi 3分間トーク
CoderDojo Nagoyaの取り組みについて at Scratch day 2015 Aichi 3分間トーク
 
Scratch day 2015 Aichi プログラミングバトル by CoderDojo Nagoya
Scratch day 2015 Aichi プログラミングバトル by CoderDojo NagoyaScratch day 2015 Aichi プログラミングバトル by CoderDojo Nagoya
Scratch day 2015 Aichi プログラミングバトル by CoderDojo Nagoya
 
こういうデータ、どこに保存してますか? #nagoyaphp
こういうデータ、どこに保存してますか? #nagoyaphpこういうデータ、どこに保存してますか? #nagoyaphp
こういうデータ、どこに保存してますか? #nagoyaphp
 
第9回Symfony勉強会LT Symfony2 meets AngularJS #symfony_ja
第9回Symfony勉強会LT Symfony2 meets AngularJS #symfony_ja第9回Symfony勉強会LT Symfony2 meets AngularJS #symfony_ja
第9回Symfony勉強会LT Symfony2 meets AngularJS #symfony_ja
 
まだ技術ブログを始めてないPHPerのあなたへ。PHPカンファレンス関西2013 LT
まだ技術ブログを始めてないPHPerのあなたへ。PHPカンファレンス関西2013 LTまだ技術ブログを始めてないPHPerのあなたへ。PHPカンファレンス関西2013 LT
まだ技術ブログを始めてないPHPerのあなたへ。PHPカンファレンス関西2013 LT
 

Dernier

Dernier (11)

論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 

Notes de l'éditeur

  1. 私が前回PHPカンファレンス関西に来たのは2014年。3年ぶり。 3年経つと色々変わりましたね。
  2. 今回は特に後ろの2つについてお話したいと思います。
  3. まずコードを書いてプルリク作りますね。bitbucketユーザーの人はマージリクエストかもしれませんが。
  4. pushしたプルリクはciを通って…
  5. マージされます。
  6. サクサクコードを書いてたくさんプルリクを作っても、ビール瓶の首は細くて1個ずつしか進みません。
  7. プルリク作って、作って、作って…おっと詰まってしまいました。 ここでうんとお金をかけまくればビール瓶自体の本数が増えるんですが、注ぎ口の大きいピッチャーにしてもらうこともできるんですが、できればお金は節約したいですよね。 そこで、ビール瓶1本のままお金をかけずに、速くビールを注ぎ終わる方法はないものでしょうか? (10秒)
  8. ここを速くすればいいですね。
  9. 重複するアサーションをなくす…クラスのユニットテストでテスト済のことを機能テストでも確認する、みたいなのをなくす まとめる…コード例 なるべく1つのアサーションで済ませる
  10. (2つ読んでから)何となく複数のテストメソッドがあるテストケースでもテストケースクラスのインスタンスは1個しか作られないってイメージありませんか?実は違うんです。実行イメージを見てください(コード例へ)
  11. 実際のphpunitのコードは複雑なのでこれは簡単な実行イメージです。各テストメソッドごと、dataProvider設定があれば各dataProviderごとにテストケースのインスタンスは違っていて、テストケースにプロパティがあってtearDown()で解放されてない場合は同じテストケース内の全部のテストが実行終わるまで残ってしまいます。これをtearDown()で解放するのとしないのとでは、テストメソッド数が多ければ多いほど、実行時の軽さが違ってきます。
  12. 快適なテストライフを!