Upgrade to Pro — share decks privately, control downloads, hide ads and more …

テストってなんだろう?

Ad4c3c738e57a9bbcb800871e81c232d?s=47 itosho
July 24, 2018

 テストってなんだろう?

クローズドな勉強会でのLT資料です。

Ad4c3c738e57a9bbcb800871e81c232d?s=128

itosho

July 24, 2018
Tweet

Transcript

  1. テストってなんだろう? Connehito Inc. @itosho 1

  2. ▪ 自己紹介 ・伊藤 翔 @itosho  ・所属:コネヒト株式会社 / リードエンジニア ・会社ではサーバーサイドエンジニアをやっています  ・よく書く言語:PHP

    / Ruby / Golang ・家ではYome Driven Developmentをやっています  ・つくっているサービス:カレンダー / 家計簿 / セール情報通知
  3. ▪ 今日話すこと ・事前にいただいたアンケートに沿って…!  ・普段書いているテスト  ・テストで苦労していること  ・テストのメリット / デメリット  ・運用についてのコネヒト社での事例 ・今日話さないこと

     ・E2Eテスト / 総合テスト  ・TDD / BDD
  4. 1. テストを実装したことありますか 4

  5. 5

  6. 2. どのようなテストを実装しましたか 6

  7. ▪ 普段書いているテスト / ツール ・Web APIのIntegrationテスト / Unitテスト  ・PHPUnit /

    RSpec ・CLIツールのUnitテスト  ・testingパッケージ(Golang) ・OSSのUnitテスト  ・https://github.com/itosho/easy-query  ・PHPUnit / codecov
  8. 3. テストを実装する際に苦労したことはなんですか 8

  9. ▪ 苦労している点 ・テストデータの管理・保守  ・”モノリシック”なFixtureデータ  ・あるテストのためにデータを修正すると別のテストが壊れる   ⇒FactoryBot(旧: FactoryGirl)を使って動的にデータを作る ・テストのためにミニ言語(DSL)を覚える必要がある  ・RSpec /

    FactoryBot等  ・高機能なツールであるほど学習コストが高い   ⇒Golangでは標準のtestingパッケージのみを使う
  10. ▪ 苦労している点 ・外部サービス / コマンドとの連携  ・モックの実装が必要(難しい)  ・意味のない壊れやすいスタブ   ⇒外部とやりとりを行う境界をinterface(モックポイント)にする   ⇒Consumer Driven

    Test(あんまり詳しくないですが…) ref: https://deeeet.com/writing/2016/10/25/go-interface-testing/
  11. 4. テストを実装して感じたメリットはなんですか 11

  12. ▪ メリット ・リファクタ&仕様変更時のスピード&安心感  ・テストが”正しく”壊れる  ・暖かみのある回帰テストが不要になる ・テストコードが生きたドキュメントになる  ・コードの変更とほぼ自動的に同期される ・テストがあるOSSはダウンロードされやすい  ・カバレッジがあるとさらにGood

  13. 5. テストを実装して感じたデメリットはなんですか 13

  14. ▪ デメリット ・慣れるまで(慣れても?)開発スピードが落ちる  ・TDDはこの限りではない(設計技法なので) ・プロダクトが成長するとCIの実行時間が長くなりがち  ・特にiOS / Androidのテスト ・教条主義的になりやすい(特にUnitテスト)  ・Unitテストを書くとコードの品質が上がる

     ・Unitテストを書くと設計が綺麗になる   ⇒正しいけど正しくない
  15. 6. 運用はうまく回っていますか 15

  16. ▪ コネヒト社でのCI/CD事例 ・Web APIに関しては原則テストコードを書く  ・画面がないのでテストが書きやすい  ・PHPUnitを利用 ・CIはTravis CIを利用  ・CI時に静的解析 /

    Lintツールを実行 ・使用ツール  ・Phan / PHP CodeSniffer  ・reviewdog / Danger   ⇒機械が出来ることは機械に任せる
  17. まとめ 17

  18. ▪ テストとは… ・テストはお金を生まない  ・Yome Drive Developmentにおいてテストを書く意味はない  ・バグ出したらさっさと直すかケーキでも買ってきたほうがよい ・テストは保険  ・不具合による機会損失と運用コストを予め防ぐ  ・自動化することでコスト圧縮が積分で効いてくる

    ref: http://shyouhei.tumblr.com/post/73195212853/テストのめどい話  ⇒テストで自分たちの身を守っていこう!
  19. 宣伝 19

  20. ▪ コネヒトでも勉強会開催します! ・Connehito Marché #3〜iOS市〜  ・8/7(火)19:00〜21:30  ・LT枠 / オーディエンス枠ともに絶賛募集中!  ・connpass:

    https://connehito.connpass.com/event/95285/  ・Twitter: https://twitter.com/connehitomarche
  21. ご清聴ありがとうございました 21