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