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.

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

1,954 views

Published on

雑兵MeetUp #3で発表した資料です。
http://zohyo.connpass.com/event/24420/

Published in: Technology
  • Be the first to comment

  • Be the first to like this

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

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

×