SlideShare une entreprise Scribd logo
1  sur  30
Télécharger pour lire hors ligne
Copyright © 2016 Yuta Ohashi All Rights Reserved.
テスト書くのに
挫折したあと
やったこと
雑兵MeetUp #3
2016.02.19
Yuta Ohashi
2Copyright © 2016 Yuta Ohashi All Rights Reserved.
テスト書いてますか?
3Copyright © 2016 Yuta Ohashi All Rights Reserved.photo by Jonno Witts [ https://www.flickr.com/photos/jonnowitts/2429136239/ ]
4Copyright © 2016 Yuta Ohashi All Rights Reserved.
そもそもスキルが足りないんzy(ry
そ・・・そんなこと・・・あ、あるよ・・・
5Copyright © 2016 Yuta Ohashi All Rights Reserved.
ところで
現場はレガシーコード?
6Copyright © 2016 Yuta Ohashi All Rights Reserved.
レガシーコード改善ガイド
テストのないコードは
レガシーコードだ!
7Copyright © 2016 Yuta Ohashi All Rights Reserved.
テスト・・書くぞ!!
8Copyright © 2016 Yuta Ohashi All Rights Reserved.
と、思っても・・・
9Copyright © 2016 Yuta Ohashi All Rights Reserved.
モデルの中でnewしてる
ジャマだ・・・
private function setMemoOption($memos){
if(!empty($memos)){
$memos = array();
foreach ($memos as $value) {
$memos[] = new Memo($value);
}
}
return $memos;
}
※コードはサンプルですよ
10Copyright © 2016 Yuta Ohashi All Rights Reserved.
コントローラーの中でrequireしてる
なぜそこで・・・(500行目くらい)
try {
require_once 'Models/Memo.php';
$memo = $this->_getMemo($memo_id);
} catch (Exception $e) {
throw $e;
}
protected function _getMemo($memo_id){
$memo = Memo::getMemo($memo_id);
if($memo !== null){
return $memo;
}
return Memo::getMemoFromDB($memo_id);
}
※コードはサンプルですよ
11Copyright © 2016 Yuta Ohashi All Rights Reserved.photo by Bev Sykes [ https://www.flickr.com/photos/basykes/490907537/ ]
いやだー!!!
12Copyright © 2016 Yuta Ohashi All Rights Reserved.
もうテスト書くのやーめた(白目
テスト初心者の心は折れた・・・
• 検索すれば色々な手法があるが全然分からん。←勉強不足
• ファイルがてんこ盛りで大杉内
• 気軽にコミットできない
• そもそも1人でやるのつらくない!?
• みんなでやりたいなぁ・・・(と声を上げる勇気もない
• etc…etc….etc…..
13Copyright © 2016 Yuta Ohashi All Rights Reserved.
でも何かやらなきゃ・・・という気持ちはある
あきらめたらそこで試合終了ですよ。
• 1人でやる方法はないか?
• 既存コードを汚さず(修正せず)できることはないか?
14Copyright © 2016 Yuta Ohashi All Rights Reserved.
そこで
15Copyright © 2016 Yuta Ohashi All Rights Reserved.
16Copyright © 2016 Yuta Ohashi All Rights Reserved.
テスト書くのに挫折してテスト書いてた
Selenium WebDriverを試してみた!
• 1人で始められる
• ローカルに環境整えればOK
• 既存のコードと完全に分けて書いておける
• 自分のPCでブラウザ動いて見ていて楽しい
• テストやってるー!って気分になる
• etc…etc….etc…..
17Copyright © 2016 Yuta Ohashi All Rights Reserved.
Selenium WebDriver with PHPUnit
Vagrant 自分のPC
Jenkins
PHPUnit Test
Selenium Grid Server(hub)
Selenium Grid Server(node)
Brower
0.登場人物
18Copyright © 2016 Yuta Ohashi All Rights Reserved.
Selenium WebDriver with PHPUnit
1.JenkinsからPHPUnitを実行
Vagrant 自分のPC
19Copyright © 2016 Yuta Ohashi All Rights Reserved.
Selenium WebDriver with PHPUnit
2.PHPUnitからSelenium Grid Server(hub)を呼ぶ
Vagrant 自分のPC
20Copyright © 2016 Yuta Ohashi All Rights Reserved.
Selenium WebDriver with PHPUnit
3.Selenium Grid Server(hub)がNodeを呼ぶ
Vagrant 自分のPC
21Copyright © 2016 Yuta Ohashi All Rights Reserved.
Selenium WebDriver with PHPUnit
4.指定されたブラウザでページを開いてテスト
Vagrant 自分のPC
22Copyright © 2016 Yuta Ohashi All Rights Reserved.
どんなことをテストした?
主要なページでできること(機能)をテスト化
• タイトルタグの中身は正しい?
• ちゃんと投稿ができるか?
• いいねボタンは機能するか?
• Javascriptの動作は正常か?
• ログインしていない場合はログインページに遷移するか?
• Jenkinsで定期実行
• いわゆるリグレッションテスト?
Webページを自分で操作して確認できることは、
だいたいテストとして表現が可能
23Copyright © 2016 Yuta Ohashi All Rights Reserved.
気付いたこと
こんなことが良かった
• ぼっちではじめられる!
• 既存のコードは汚さずこっそりできた!
• テスト書いたページに改修が入るとテストの調整がいる
• 読み込みエラーとか(広告が刺さったり)でたまにSeleniumこける
• Seleniumが動いている間はフォーカスが奪われて作業にならない
こんなことが悪かった
24Copyright © 2016 Yuta Ohashi All Rights Reserved.
そして数ヶ月・・・
JenkinsでSeleniumを毎晩定期実行してたら・・・
デグレを発見できた!
25Copyright © 2016 Yuta Ohashi All Rights Reserved.
何を見つけた?
クリック後にポップアップが出る部分
• いいねボタンを押すと対象者の名前がポップアップで出る
↓
• ex)「○○さんの投稿にいいねしました!」
↓
• なぜか「undefinedさんの投稿にいいねしました!」になってる
↓
• 対象者の名前が入ってるDOMの要素を間違って削除しちゃってた(気づきにくいよね
↓
• JavascriptでDOMが読めなくて変数ないのでundefined
↓
• 気がついて連絡
↓
• Seleniumまぁまぁやるじゃん!の声をいただく
26Copyright © 2016 Yuta Ohashi All Rights Reserved.photo by Elisabeth Audrey [ https://www.flickr.com/photos/worldgreen/2761649246/ ]
テストがちょっと
楽しくなった瞬間でした
27Copyright © 2016 Yuta Ohashi All Rights Reserved.
そしてたぶん・・・
28Copyright © 2016 Yuta Ohashi All Rights Reserved.
チームの中でもテストが
ちょっとでも意識された瞬間
photo by littlekiss☆l[ https://www.flickr.com/photos/littlekiss3/15172213184/ ]
29Copyright © 2016 Yuta Ohashi All Rights Reserved.
まとめ?
テストが書けるスキルは必要とされる時代
• やっぱりテスト大事
• 「書かない」を選んでるならまだいい
• 「書けない」のはまずい
• Laravelリファレンス本でも50ページに渡ってテストの章が(分かりやすい
• でも困ったらSeleniumからはじめてみてもいいかも
30Copyright © 2016 Yuta Ohashi All Rights Reserved.
ありがとうございました

Contenu connexe

Tendances

Web matrix でプログラミング生放送してみた
Web matrix でプログラミング生放送してみたWeb matrix でプログラミング生放送してみた
Web matrix でプログラミング生放送してみた
Hidetoshi Yanagi
 
The History of Groovy #GroovyBase
The History of Groovy #GroovyBaseThe History of Groovy #GroovyBase
The History of Groovy #GroovyBase
kyon mm
 
Raspberry pi on java 20130510
Raspberry pi on java 20130510Raspberry pi on java 20130510
Raspberry pi on java 20130510
Masafumi Ohta
 
Vimを学びたい初心者のための5つの豆知識
Vimを学びたい初心者のための5つの豆知識Vimを学びたい初心者のための5つの豆知識
Vimを学びたい初心者のための5つの豆知識
alwei
 
Raspberry pi on java 20130514
Raspberry pi on java 20130514Raspberry pi on java 20130514
Raspberry pi on java 20130514
Masafumi Ohta
 
Hachioji.pm #40 次のbounceHammer開発中
Hachioji.pm #40 次のbounceHammer開発中Hachioji.pm #40 次のbounceHammer開発中
Hachioji.pm #40 次のbounceHammer開発中
azumakuniyuki 🐈
 

Tendances (18)

Web matrix でプログラミング生放送してみた
Web matrix でプログラミング生放送してみたWeb matrix でプログラミング生放送してみた
Web matrix でプログラミング生放送してみた
 
Testing in Sinatra
Testing in SinatraTesting in Sinatra
Testing in Sinatra
 
Hands on - JetBrains IDE Rider C# 00-Preparation r01.01
Hands on - JetBrains IDE Rider C# 00-Preparation r01.01Hands on - JetBrains IDE Rider C# 00-Preparation r01.01
Hands on - JetBrains IDE Rider C# 00-Preparation r01.01
 
ぱろっと、Padrinoやめるってよ
ぱろっと、Padrinoやめるってよぱろっと、Padrinoやめるってよ
ぱろっと、Padrinoやめるってよ
 
【サポーターズCoLab勉強会】「美少女になりたい…」お手軽VTuber入門ハンズオン
【サポーターズCoLab勉強会】「美少女になりたい…」お手軽VTuber入門ハンズオン【サポーターズCoLab勉強会】「美少女になりたい…」お手軽VTuber入門ハンズオン
【サポーターズCoLab勉強会】「美少女になりたい…」お手軽VTuber入門ハンズオン
 
Scala 初めての人が Heroku で Web アプリを公開するまで
Scala 初めての人が Heroku で Web アプリを公開するまでScala 初めての人が Heroku で Web アプリを公開するまで
Scala 初めての人が Heroku で Web アプリを公開するまで
 
The History of Groovy #GroovyBase
The History of Groovy #GroovyBaseThe History of Groovy #GroovyBase
The History of Groovy #GroovyBase
 
かなりすごい発表(かなり) at VimConf2014
かなりすごい発表(かなり) at VimConf2014かなりすごい発表(かなり) at VimConf2014
かなりすごい発表(かなり) at VimConf2014
 
Raspberry pi on java 20130510
Raspberry pi on java 20130510Raspberry pi on java 20130510
Raspberry pi on java 20130510
 
スキトラGit
スキトラGitスキトラGit
スキトラGit
 
Php beginnerが beginner + になるための話
Php beginnerが beginner + になるための話Php beginnerが beginner + になるための話
Php beginnerが beginner + になるための話
 
Vimを学びたい初心者のための5つの豆知識
Vimを学びたい初心者のための5つの豆知識Vimを学びたい初心者のための5つの豆知識
Vimを学びたい初心者のための5つの豆知識
 
Raspberry pi on java 20130514
Raspberry pi on java 20130514Raspberry pi on java 20130514
Raspberry pi on java 20130514
 
Tanabata.trac@kaorun
Tanabata.trac@kaorunTanabata.trac@kaorun
Tanabata.trac@kaorun
 
Mon, Muninによる楽々監視生活
Mon, Muninによる楽々監視生活Mon, Muninによる楽々監視生活
Mon, Muninによる楽々監視生活
 
QEMUでARM64bitベアメタルプログラミング
QEMUでARM64bitベアメタルプログラミングQEMUでARM64bitベアメタルプログラミング
QEMUでARM64bitベアメタルプログラミング
 
シェル芸生放送
シェル芸生放送シェル芸生放送
シェル芸生放送
 
Hachioji.pm #40 次のbounceHammer開発中
Hachioji.pm #40 次のbounceHammer開発中Hachioji.pm #40 次のbounceHammer開発中
Hachioji.pm #40 次のbounceHammer開発中
 

En vedette

En vedette (10)

雑兵デブエンジニアに起こった痛風という悲劇
雑兵デブエンジニアに起こった痛風という悲劇雑兵デブエンジニアに起こった痛風という悲劇
雑兵デブエンジニアに起こった痛風という悲劇
 
LoRAの見通しって?
LoRAの見通しって?LoRAの見通しって?
LoRAの見通しって?
 
The First React on Rails
The First React on Rails The First React on Rails
The First React on Rails
 
無限ループビルダーズ @ Zohyo Meetup #3
無限ループビルダーズ @ Zohyo Meetup #3 無限ループビルダーズ @ Zohyo Meetup #3
無限ループビルダーズ @ Zohyo Meetup #3
 
IoT再入門。はじめてのIoT、何をする?何を選ぶ?
IoT再入門。はじめてのIoT、何をする?何を選ぶ?IoT再入門。はじめてのIoT、何をする?何を選ぶ?
IoT再入門。はじめてのIoT、何をする?何を選ぶ?
 
Kobots - Konnected to Everyone
Kobots - Konnected to EveryoneKobots - Konnected to Everyone
Kobots - Konnected to Everyone
 
2016 0914 iotlt勉強会_レーザー加工機のすすめ
2016 0914 iotlt勉強会_レーザー加工機のすすめ2016 0914 iotlt勉強会_レーザー加工機のすすめ
2016 0914 iotlt勉強会_レーザー加工機のすすめ
 
IoT Cyber Security Counter Measurement
IoT Cyber Security Counter MeasurementIoT Cyber Security Counter Measurement
IoT Cyber Security Counter Measurement
 
Wio Nodeを使った
高校生のIoTプログラミング体験
Wio Nodeを使った
高校生のIoTプログラミング体験Wio Nodeを使った
高校生のIoTプログラミング体験
Wio Nodeを使った
高校生のIoTプログラミング体験
 
JavaScriptで簡単IoT! RasPiをインターネットから制御するプラットフォームを作ったよ!
JavaScriptで簡単IoT! RasPiをインターネットから制御するプラットフォームを作ったよ!JavaScriptで簡単IoT! RasPiをインターネットから制御するプラットフォームを作ったよ!
JavaScriptで簡単IoT! RasPiをインターネットから制御するプラットフォームを作ったよ!
 

Similaire à テストを書くのに挫折したあとやったこと

#MA6 Mashup Lightning Talks #114 ATND Draft イベントの下書き保存とプレビュー できちゃう Chrome Ex...
#MA6 Mashup Lightning Talks #114 ATND Draft イベントの下書き保存とプレビューできちゃう Chrome Ex...#MA6 Mashup Lightning Talks #114 ATND Draft イベントの下書き保存とプレビューできちゃう Chrome Ex...
#MA6 Mashup Lightning Talks #114 ATND Draft イベントの下書き保存とプレビュー できちゃう Chrome Ex...
Nobuhiro Nakajima
 
Unity開発で週イチ呑み会を支える技術
Unity開発で週イチ呑み会を支える技術Unity開発で週イチ呑み会を支える技術
Unity開発で週イチ呑み会を支える技術
kazuya noshiro
 
Yahoo! JAPANのサービス開発を10倍早くした社内PaaS構築の今とこれから
Yahoo! JAPANのサービス開発を10倍早くした社内PaaS構築の今とこれからYahoo! JAPANのサービス開発を10倍早くした社内PaaS構築の今とこれから
Yahoo! JAPANのサービス開発を10倍早くした社内PaaS構築の今とこれから
Yahoo!デベロッパーネットワーク
 

Similaire à テストを書くのに挫折したあとやったこと (20)

#MA6 Mashup Lightning Talks #114 ATND Draft イベントの下書き保存とプレビュー できちゃう Chrome Ex...
#MA6 Mashup Lightning Talks #114 ATND Draft イベントの下書き保存とプレビューできちゃう Chrome Ex...#MA6 Mashup Lightning Talks #114 ATND Draft イベントの下書き保存とプレビューできちゃう Chrome Ex...
#MA6 Mashup Lightning Talks #114 ATND Draft イベントの下書き保存とプレビュー できちゃう Chrome Ex...
 
Yahoo! JAPAN の Ambari 活用事例 #ambarimeetup
Yahoo! JAPAN の Ambari 活用事例 #ambarimeetupYahoo! JAPAN の Ambari 活用事例 #ambarimeetup
Yahoo! JAPAN の Ambari 活用事例 #ambarimeetup
 
Ambari運用ツラたん #ambarimeetup
Ambari運用ツラたん #ambarimeetupAmbari運用ツラたん #ambarimeetup
Ambari運用ツラたん #ambarimeetup
 
Yahoo! JAPAN の Ambari 活用事例 #yjdsnight
Yahoo! JAPAN の Ambari 活用事例 #yjdsnightYahoo! JAPAN の Ambari 活用事例 #yjdsnight
Yahoo! JAPAN の Ambari 活用事例 #yjdsnight
 
ヒカラボ「自社サービス開発会社で活躍し続けるために必要な○○とは?」開発エンジニア
ヒカラボ「自社サービス開発会社で活躍し続けるために必要な○○とは?」開発エンジニア ヒカラボ「自社サービス開発会社で活躍し続けるために必要な○○とは?」開発エンジニア
ヒカラボ「自社サービス開発会社で活躍し続けるために必要な○○とは?」開発エンジニア
 
ヒカラボ「自社サービス開発会社で活躍し続けるために必要な○○とは?」開発エンジニア
ヒカラボ「自社サービス開発会社で活躍し続けるために必要な○○とは?」開発エンジニアヒカラボ「自社サービス開発会社で活躍し続けるために必要な○○とは?」開発エンジニア
ヒカラボ「自社サービス開発会社で活躍し続けるために必要な○○とは?」開発エンジニア
 
車載組込ブラウザの過去7年と今を40分でまとめてみる
車載組込ブラウザの過去7年と今を40分でまとめてみる車載組込ブラウザの過去7年と今を40分でまとめてみる
車載組込ブラウザの過去7年と今を40分でまとめてみる
 
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例
 
いままでのJaSSTnanoLT動画を振り返る&おススメしたいの! / Looking back and recommend on the JaSSTna...
いままでのJaSSTnanoLT動画を振り返る&おススメしたいの! / Looking back and recommend on the JaSSTna...いままでのJaSSTnanoLT動画を振り返る&おススメしたいの! / Looking back and recommend on the JaSSTna...
いままでのJaSSTnanoLT動画を振り返る&おススメしたいの! / Looking back and recommend on the JaSSTna...
 
ドリコムを支える課金ライブラリを支えるJenkins
ドリコムを支える課金ライブラリを支えるJenkinsドリコムを支える課金ライブラリを支えるJenkins
ドリコムを支える課金ライブラリを支えるJenkins
 
ザ・ノンフィクション - 僕…コントロールパネルつくりました。~新卒2年目の苦闘~ -
ザ・ノンフィクション - 僕…コントロールパネルつくりました。~新卒2年目の苦闘~ -ザ・ノンフィクション - 僕…コントロールパネルつくりました。~新卒2年目の苦闘~ -
ザ・ノンフィクション - 僕…コントロールパネルつくりました。~新卒2年目の苦闘~ -
 
Rancher Virtual Rodeo Japan 2020/04「初回編」
Rancher Virtual Rodeo Japan 2020/04「初回編」Rancher Virtual Rodeo Japan 2020/04「初回編」
Rancher Virtual Rodeo Japan 2020/04「初回編」
 
決済金融から始めるデータドリブンカンパニー #yjmu
決済金融から始めるデータドリブンカンパニー #yjmu決済金融から始めるデータドリブンカンパニー #yjmu
決済金融から始めるデータドリブンカンパニー #yjmu
 
Logcatの話
Logcatの話Logcatの話
Logcatの話
 
RPAって何、どんなことできるの
RPAって何、どんなことできるのRPAって何、どんなことできるの
RPAって何、どんなことできるの
 
Unity開発で週イチ呑み会を支える技術
Unity開発で週イチ呑み会を支える技術Unity開発で週イチ呑み会を支える技術
Unity開発で週イチ呑み会を支える技術
 
Yahoo! JAPANのサービス開発を10倍早くした社内PaaS構築の今とこれから
Yahoo! JAPANのサービス開発を10倍早くした社内PaaS構築の今とこれからYahoo! JAPANのサービス開発を10倍早くした社内PaaS構築の今とこれから
Yahoo! JAPANのサービス開発を10倍早くした社内PaaS構築の今とこれから
 
ソフトウェア開発の見える化
ソフトウェア開発の見える化ソフトウェア開発の見える化
ソフトウェア開発の見える化
 
決済金融から始めるデータドリブンカンパニー
決済金融から始めるデータドリブンカンパニー決済金融から始めるデータドリブンカンパニー
決済金融から始めるデータドリブンカンパニー
 
海外通販楽しい! for Engineer
海外通販楽しい! for Engineer海外通販楽しい! for Engineer
海外通販楽しい! for Engineer
 

Plus de Yuta Ohashi

三項演算子を見ると「ウッ」てなる人のはなし
三項演算子を見ると「ウッ」てなる人のはなし三項演算子を見ると「ウッ」てなる人のはなし
三項演算子を見ると「ウッ」てなる人のはなし
Yuta Ohashi
 
Laravel5.5から6.4にアップグレードしたときに必要だった7つのこと
Laravel5.5から6.4にアップグレードしたときに必要だった7つのことLaravel5.5から6.4にアップグレードしたときに必要だった7つのこと
Laravel5.5から6.4にアップグレードしたときに必要だった7つのこと
Yuta Ohashi
 
Vue.jsでFormをAtomic Designしてみた時のコンポーネント間のデータのやりとり
Vue.jsでFormをAtomic Designしてみた時のコンポーネント間のデータのやりとりVue.jsでFormをAtomic Designしてみた時のコンポーネント間のデータのやりとり
Vue.jsでFormをAtomic Designしてみた時のコンポーネント間のデータのやりとり
Yuta Ohashi
 
Laravelで式年遷宮中の現場で うまくいってること・ うまくいっていないこと
Laravelで式年遷宮中の現場でうまくいってること・うまくいっていないことLaravelで式年遷宮中の現場でうまくいってること・うまくいっていないこと
Laravelで式年遷宮中の現場で うまくいってること・ うまくいっていないこと
Yuta Ohashi
 
「Laravelから学びレガシーと闘いはじめた」のその後
「Laravelから学びレガシーと闘いはじめた」のその後「Laravelから学びレガシーと闘いはじめた」のその後
「Laravelから学びレガシーと闘いはじめた」のその後
Yuta Ohashi
 
Dockerをすこーしさわってみる
DockerをすこーしさわってみるDockerをすこーしさわってみる
Dockerをすこーしさわってみる
Yuta Ohashi
 
5分でなんとなーくわかるDocker
5分でなんとなーくわかるDocker5分でなんとなーくわかるDocker
5分でなんとなーくわかるDocker
Yuta Ohashi
 

Plus de Yuta Ohashi (18)

三項演算子を見ると「ウッ」てなる人のはなし
三項演算子を見ると「ウッ」てなる人のはなし三項演算子を見ると「ウッ」てなる人のはなし
三項演算子を見ると「ウッ」てなる人のはなし
 
レガシーなWebアプリケーションと向き合う
レガシーなWebアプリケーションと向き合うレガシーなWebアプリケーションと向き合う
レガシーなWebアプリケーションと向き合う
 
Laravel5.5から6.4にアップグレードしたときに必要だった7つのこと
Laravel5.5から6.4にアップグレードしたときに必要だった7つのことLaravel5.5から6.4にアップグレードしたときに必要だった7つのこと
Laravel5.5から6.4にアップグレードしたときに必要だった7つのこと
 
Vue.jsでFormをAtomic Designしてみた時のコンポーネント間のデータのやりとり
Vue.jsでFormをAtomic Designしてみた時のコンポーネント間のデータのやりとりVue.jsでFormをAtomic Designしてみた時のコンポーネント間のデータのやりとり
Vue.jsでFormをAtomic Designしてみた時のコンポーネント間のデータのやりとり
 
Laravelで式年遷宮中の現場で うまくいってること・ うまくいっていないこと
Laravelで式年遷宮中の現場でうまくいってること・うまくいっていないことLaravelで式年遷宮中の現場でうまくいってること・うまくいっていないこと
Laravelで式年遷宮中の現場で うまくいってること・ うまくいっていないこと
 
GoでシュッとWebスクレイピングする
GoでシュッとWebスクレイピングするGoでシュッとWebスクレイピングする
GoでシュッとWebスクレイピングする
 
初心者がGoでCLIツール作ってみて学んだこと
初心者がGoでCLIツール作ってみて学んだこと初心者がGoでCLIツール作ってみて学んだこと
初心者がGoでCLIツール作ってみて学んだこと
 
今日からGoをはじめる人に伝えたい$GOPATHではまった話
今日からGoをはじめる人に伝えたい$GOPATHではまった話今日からGoをはじめる人に伝えたい$GOPATHではまった話
今日からGoをはじめる人に伝えたい$GOPATHではまった話
 
「Laravelから学びレガシーと闘いはじめた」のその後
「Laravelから学びレガシーと闘いはじめた」のその後「Laravelから学びレガシーと闘いはじめた」のその後
「Laravelから学びレガシーと闘いはじめた」のその後
 
無知の表明でチームをビルドする
無知の表明でチームをビルドする無知の表明でチームをビルドする
無知の表明でチームをビルドする
 
許可を求めるな謝罪せよ?
許可を求めるな謝罪せよ?許可を求めるな謝罪せよ?
許可を求めるな謝罪せよ?
 
Laravelから学びレガシーと闘いはじめた
Laravelから学びレガシーと闘いはじめたLaravelから学びレガシーと闘いはじめた
Laravelから学びレガシーと闘いはじめた
 
2016年恥ずかしいふりかえり
2016年恥ずかしいふりかえり2016年恥ずかしいふりかえり
2016年恥ずかしいふりかえり
 
My開発環境の話
My開発環境の話My開発環境の話
My開発環境の話
 
LaravelアプリケーションをSeleniumでテストしてみた
LaravelアプリケーションをSeleniumでテストしてみたLaravelアプリケーションをSeleniumでテストしてみた
LaravelアプリケーションをSeleniumでテストしてみた
 
Dockerをすこーしさわってみる
DockerをすこーしさわってみるDockerをすこーしさわってみる
Dockerをすこーしさわってみる
 
5分でなんとなーくわかるDocker
5分でなんとなーくわかるDocker5分でなんとなーくわかるDocker
5分でなんとなーくわかるDocker
 
WindowsでもVagrantとChefでLaravelのローカル環境を(自分で)つくりたい!
WindowsでもVagrantとChefでLaravelのローカル環境を(自分で)つくりたい!WindowsでもVagrantとChefでLaravelのローカル環境を(自分で)つくりたい!
WindowsでもVagrantとChefでLaravelのローカル環境を(自分で)つくりたい!
 

Dernier

Dernier (11)

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

テストを書くのに挫折したあとやったこと

  • 1. Copyright © 2016 Yuta Ohashi All Rights Reserved. テスト書くのに 挫折したあと やったこと 雑兵MeetUp #3 2016.02.19 Yuta Ohashi
  • 2. 2Copyright © 2016 Yuta Ohashi All Rights Reserved. テスト書いてますか?
  • 3. 3Copyright © 2016 Yuta Ohashi All Rights Reserved.photo by Jonno Witts [ https://www.flickr.com/photos/jonnowitts/2429136239/ ]
  • 4. 4Copyright © 2016 Yuta Ohashi All Rights Reserved. そもそもスキルが足りないんzy(ry そ・・・そんなこと・・・あ、あるよ・・・
  • 5. 5Copyright © 2016 Yuta Ohashi All Rights Reserved. ところで 現場はレガシーコード?
  • 6. 6Copyright © 2016 Yuta Ohashi All Rights Reserved. レガシーコード改善ガイド テストのないコードは レガシーコードだ!
  • 7. 7Copyright © 2016 Yuta Ohashi All Rights Reserved. テスト・・書くぞ!!
  • 8. 8Copyright © 2016 Yuta Ohashi All Rights Reserved. と、思っても・・・
  • 9. 9Copyright © 2016 Yuta Ohashi All Rights Reserved. モデルの中でnewしてる ジャマだ・・・ private function setMemoOption($memos){ if(!empty($memos)){ $memos = array(); foreach ($memos as $value) { $memos[] = new Memo($value); } } return $memos; } ※コードはサンプルですよ
  • 10. 10Copyright © 2016 Yuta Ohashi All Rights Reserved. コントローラーの中でrequireしてる なぜそこで・・・(500行目くらい) try { require_once 'Models/Memo.php'; $memo = $this->_getMemo($memo_id); } catch (Exception $e) { throw $e; } protected function _getMemo($memo_id){ $memo = Memo::getMemo($memo_id); if($memo !== null){ return $memo; } return Memo::getMemoFromDB($memo_id); } ※コードはサンプルですよ
  • 11. 11Copyright © 2016 Yuta Ohashi All Rights Reserved.photo by Bev Sykes [ https://www.flickr.com/photos/basykes/490907537/ ] いやだー!!!
  • 12. 12Copyright © 2016 Yuta Ohashi All Rights Reserved. もうテスト書くのやーめた(白目 テスト初心者の心は折れた・・・ • 検索すれば色々な手法があるが全然分からん。←勉強不足 • ファイルがてんこ盛りで大杉内 • 気軽にコミットできない • そもそも1人でやるのつらくない!? • みんなでやりたいなぁ・・・(と声を上げる勇気もない • etc…etc….etc…..
  • 13. 13Copyright © 2016 Yuta Ohashi All Rights Reserved. でも何かやらなきゃ・・・という気持ちはある あきらめたらそこで試合終了ですよ。 • 1人でやる方法はないか? • 既存コードを汚さず(修正せず)できることはないか?
  • 14. 14Copyright © 2016 Yuta Ohashi All Rights Reserved. そこで
  • 15. 15Copyright © 2016 Yuta Ohashi All Rights Reserved.
  • 16. 16Copyright © 2016 Yuta Ohashi All Rights Reserved. テスト書くのに挫折してテスト書いてた Selenium WebDriverを試してみた! • 1人で始められる • ローカルに環境整えればOK • 既存のコードと完全に分けて書いておける • 自分のPCでブラウザ動いて見ていて楽しい • テストやってるー!って気分になる • etc…etc….etc…..
  • 17. 17Copyright © 2016 Yuta Ohashi All Rights Reserved. Selenium WebDriver with PHPUnit Vagrant 自分のPC Jenkins PHPUnit Test Selenium Grid Server(hub) Selenium Grid Server(node) Brower 0.登場人物
  • 18. 18Copyright © 2016 Yuta Ohashi All Rights Reserved. Selenium WebDriver with PHPUnit 1.JenkinsからPHPUnitを実行 Vagrant 自分のPC
  • 19. 19Copyright © 2016 Yuta Ohashi All Rights Reserved. Selenium WebDriver with PHPUnit 2.PHPUnitからSelenium Grid Server(hub)を呼ぶ Vagrant 自分のPC
  • 20. 20Copyright © 2016 Yuta Ohashi All Rights Reserved. Selenium WebDriver with PHPUnit 3.Selenium Grid Server(hub)がNodeを呼ぶ Vagrant 自分のPC
  • 21. 21Copyright © 2016 Yuta Ohashi All Rights Reserved. Selenium WebDriver with PHPUnit 4.指定されたブラウザでページを開いてテスト Vagrant 自分のPC
  • 22. 22Copyright © 2016 Yuta Ohashi All Rights Reserved. どんなことをテストした? 主要なページでできること(機能)をテスト化 • タイトルタグの中身は正しい? • ちゃんと投稿ができるか? • いいねボタンは機能するか? • Javascriptの動作は正常か? • ログインしていない場合はログインページに遷移するか? • Jenkinsで定期実行 • いわゆるリグレッションテスト? Webページを自分で操作して確認できることは、 だいたいテストとして表現が可能
  • 23. 23Copyright © 2016 Yuta Ohashi All Rights Reserved. 気付いたこと こんなことが良かった • ぼっちではじめられる! • 既存のコードは汚さずこっそりできた! • テスト書いたページに改修が入るとテストの調整がいる • 読み込みエラーとか(広告が刺さったり)でたまにSeleniumこける • Seleniumが動いている間はフォーカスが奪われて作業にならない こんなことが悪かった
  • 24. 24Copyright © 2016 Yuta Ohashi All Rights Reserved. そして数ヶ月・・・ JenkinsでSeleniumを毎晩定期実行してたら・・・ デグレを発見できた!
  • 25. 25Copyright © 2016 Yuta Ohashi All Rights Reserved. 何を見つけた? クリック後にポップアップが出る部分 • いいねボタンを押すと対象者の名前がポップアップで出る ↓ • ex)「○○さんの投稿にいいねしました!」 ↓ • なぜか「undefinedさんの投稿にいいねしました!」になってる ↓ • 対象者の名前が入ってるDOMの要素を間違って削除しちゃってた(気づきにくいよね ↓ • JavascriptでDOMが読めなくて変数ないのでundefined ↓ • 気がついて連絡 ↓ • Seleniumまぁまぁやるじゃん!の声をいただく
  • 26. 26Copyright © 2016 Yuta Ohashi All Rights Reserved.photo by Elisabeth Audrey [ https://www.flickr.com/photos/worldgreen/2761649246/ ] テストがちょっと 楽しくなった瞬間でした
  • 27. 27Copyright © 2016 Yuta Ohashi All Rights Reserved. そしてたぶん・・・
  • 28. 28Copyright © 2016 Yuta Ohashi All Rights Reserved. チームの中でもテストが ちょっとでも意識された瞬間 photo by littlekiss☆l[ https://www.flickr.com/photos/littlekiss3/15172213184/ ]
  • 29. 29Copyright © 2016 Yuta Ohashi All Rights Reserved. まとめ? テストが書けるスキルは必要とされる時代 • やっぱりテスト大事 • 「書かない」を選んでるならまだいい • 「書けない」のはまずい • Laravelリファレンス本でも50ページに渡ってテストの章が(分かりやすい • でも困ったらSeleniumからはじめてみてもいいかも
  • 30. 30Copyright © 2016 Yuta Ohashi All Rights Reserved. ありがとうございました