Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
テストってなんだろう? Connehito Inc. @itosho 1
Slide 2
Slide 2 text
■ 自己紹介 ・伊藤 翔 @itosho ・所属:コネヒト株式会社 / リードエンジニア ・会社ではサーバーサイドエンジニアをやっています ・よく書く言語:PHP / Ruby / Golang ・家ではYome Driven Developmentをやっています ・つくっているサービス:カレンダー / 家計簿 / セール情報通知
Slide 3
Slide 3 text
■ 今日話すこと ・事前にいただいたアンケートに沿って…! ・普段書いているテスト ・テストで苦労していること ・テストのメリット / デメリット ・運用についてのコネヒト社での事例 ・今日話さないこと ・E2Eテスト / 総合テスト ・TDD / BDD
Slide 4
Slide 4 text
1. テストを実装したことありますか 4
Slide 5
Slide 5 text
5
Slide 6
Slide 6 text
2. どのようなテストを実装しましたか 6
Slide 7
Slide 7 text
■ 普段書いているテスト / ツール ・Web APIのIntegrationテスト / Unitテスト ・PHPUnit / RSpec ・CLIツールのUnitテスト ・testingパッケージ(Golang) ・OSSのUnitテスト ・https://github.com/itosho/easy-query ・PHPUnit / codecov
Slide 8
Slide 8 text
3. テストを実装する際に苦労したことはなんですか 8
Slide 9
Slide 9 text
■ 苦労している点 ・テストデータの管理・保守 ・”モノリシック”なFixtureデータ ・あるテストのためにデータを修正すると別のテストが壊れる ⇒FactoryBot(旧: FactoryGirl)を使って動的にデータを作る ・テストのためにミニ言語(DSL)を覚える必要がある ・RSpec / FactoryBot等 ・高機能なツールであるほど学習コストが高い ⇒Golangでは標準のtestingパッケージのみを使う
Slide 10
Slide 10 text
■ 苦労している点 ・外部サービス / コマンドとの連携 ・モックの実装が必要(難しい) ・意味のない壊れやすいスタブ ⇒外部とやりとりを行う境界をinterface(モックポイント)にする ⇒Consumer Driven Test(あんまり詳しくないですが…) ref: https://deeeet.com/writing/2016/10/25/go-interface-testing/
Slide 11
Slide 11 text
4. テストを実装して感じたメリットはなんですか 11
Slide 12
Slide 12 text
■ メリット ・リファクタ&仕様変更時のスピード&安心感 ・テストが”正しく”壊れる ・暖かみのある回帰テストが不要になる ・テストコードが生きたドキュメントになる ・コードの変更とほぼ自動的に同期される ・テストがあるOSSはダウンロードされやすい ・カバレッジがあるとさらにGood
Slide 13
Slide 13 text
5. テストを実装して感じたデメリットはなんですか 13
Slide 14
Slide 14 text
■ デメリット ・慣れるまで(慣れても?)開発スピードが落ちる ・TDDはこの限りではない(設計技法なので) ・プロダクトが成長するとCIの実行時間が長くなりがち ・特にiOS / Androidのテスト ・教条主義的になりやすい(特にUnitテスト) ・Unitテストを書くとコードの品質が上がる ・Unitテストを書くと設計が綺麗になる ⇒正しいけど正しくない
Slide 15
Slide 15 text
6. 運用はうまく回っていますか 15
Slide 16
Slide 16 text
■ コネヒト社でのCI/CD事例 ・Web APIに関しては原則テストコードを書く ・画面がないのでテストが書きやすい ・PHPUnitを利用 ・CIはTravis CIを利用 ・CI時に静的解析 / Lintツールを実行 ・使用ツール ・Phan / PHP CodeSniffer ・reviewdog / Danger ⇒機械が出来ることは機械に任せる
Slide 17
Slide 17 text
まとめ 17
Slide 18
Slide 18 text
■ テストとは… ・テストはお金を生まない ・Yome Drive Developmentにおいてテストを書く意味はない ・バグ出したらさっさと直すかケーキでも買ってきたほうがよい ・テストは保険 ・不具合による機会損失と運用コストを予め防ぐ ・自動化することでコスト圧縮が積分で効いてくる ref: http://shyouhei.tumblr.com/post/73195212853/テストのめどい話 ⇒テストで自分たちの身を守っていこう!
Slide 19
Slide 19 text
宣伝 19
Slide 20
Slide 20 text
■ コネヒトでも勉強会開催します! ・Connehito Marché #3〜iOS市〜 ・8/7(火)19:00〜21:30 ・LT枠 / オーディエンス枠ともに絶賛募集中! ・connpass: https://connehito.connpass.com/event/95285/ ・Twitter: https://twitter.com/connehitomarche
Slide 21
Slide 21 text
ご清聴ありがとうございました 21