Slide 1

Slide 1 text

短期間での 新規プロダクト開発における 「コスパの良い」 Goのテスト戦略 GMOペパボ株式会社 大浦優太郎

Slide 2

Slide 2 text

自己紹介 大浦優太郎 ユーキャン GMOペパボ株式会社 for Gamersチーム エンジニア Go歴 1年半 X: @yukyan_p

Slide 3

Slide 3 text

はじめに 今年のGoの思い出...

Slide 4

Slide 4 text

はじめに

Slide 5

Slide 5 text

はじめに バックエンドサーバーが Goで実装されてます!

Slide 6

Slide 6 text

はじめに 開発開始から13営業日で ユーザーへの提供を開始!!!

Slide 7

Slide 7 text

なぜ短期間でのリリースを実現できたか? いろいろある・・・ ・親しんだ言語で開発 ・実装の力があるエンジニアが集まっていた ・バックエンドのテスト戦略

Slide 8

Slide 8 text

なぜ短期間でのリリースを実現できたか? いろいろある・・・ ・親しんだ言語で開発 ・実装の力があるエンジニアが集まっていた ・バックエンドのテスト戦略

Slide 9

Slide 9 text

https://speakerdeck.com/takumakume/lolipop-for-gamers-infrastructure?slide=9

Slide 10

Slide 10 text

テスト戦略

Slide 11

Slide 11 text

テスト戦略 定義したシナリオ(「ログインできる」、「サー バーを立ち上げる」など)に沿って、 実際にちゃんと動くのか を主軸にテストする。

Slide 12

Slide 12 text

テスト戦略 「実際にちゃんと動くのか」 =忠実性の高いテストをやっていきたい

Slide 13

Slide 13 text

テスト戦略 忠実性という観点であれば.... 単体テスト < 統合テスト 統合テスト < E2Eテスト

Slide 14

Slide 14 text

テスト戦略 忠実性という観点であれば.... 単体テスト < 統合テスト 統合テスト < E2Eテスト 外部サービスへの 疎通により... 実行速度が遅い! 安定性が低い! = コストが高い

Slide 15

Slide 15 text

https://levtech.jp/media/article/column/detail_496/

Slide 16

Slide 16 text

テスト戦略 「実際にちゃんと動くのか」 =忠実性の高いテストをやっていきたい 単体テスト < 統合テスト 統合テスト < E2Eテスト 実行速度が遅い! 安定性が低い! = コストが高い

Slide 17

Slide 17 text

テスト戦略 そこで!! httpstub, grpcstubを活用し スタブサーバーを実装!!

Slide 18

Slide 18 text

httpstub、grpcstubとは httptest.Serverを使ったスタブサーバーを簡単に実装できる https://github.com/k1LoW/httpstub

Slide 19

Slide 19 text

https://github.com/k1LoW/httpstub

Slide 20

Slide 20 text

httptest.Serverを使うと何が嬉しいか httptest.NewServerで立ち上げたサーバーはgoroutineで実行される Go Runtimeが構成要素を管理するため、 軽量で安定した運用が可能

Slide 21

Slide 21 text

https://speakerdeck.com/k1low/go-conference-2023?slide=8

Slide 22

Slide 22 text

テスト戦略 これらを使うことで、 統合テストやE2Eテストをミディアムテスト として実現 また、goroutineで実行されるサーバーを用いることで安定感がある https://testing.googleblog.com/2010/12/test-sizes.html

Slide 23

Slide 23 text

https://levtech.jp/media/article/column/detail_496/

Slide 24

Slide 24 text

テスト戦略 あとは... コスパ良く楽にシナリオテストを書きたい...

Slide 25

Slide 25 text

テスト戦略 あとは... コスパ良く楽にシナリオテストを書きたい... runnを活用!!

Slide 26

Slide 26 text

runnとは https://github.com/k1LoW/runn

Slide 27

Slide 27 text

runnとは YAMLで書いたシナリオテストを実行できる! GitHub ActionsやKubernetesのマニフェストを書 いたことがあれば簡単!

Slide 28

Slide 28 text

https://github.com/k1LoW/runn

Slide 29

Slide 29 text

runnとは そして... Goのテストに組み込めます!!!! 組み込んだらいつも通り go test を実行すればOK!

Slide 30

Slide 30 text

https://github.com/k1LoW/runn

Slide 31

Slide 31 text

テスト戦略 ● httpstub, grpcstubを使ったスタブサーバをテストに使用 ● シナリオテストツール runn を使用

Slide 32

Slide 32 text

テスト戦略 ● httpstub, grpcstubを使ったスタブサーバをテストに使用 ● シナリオテストツール runn を使用 ● goroutineの仕組みを使った安定性のあるミディアムテスト ● すぐにGoテストに組み込める書き心地のいいシナリオテスト

Slide 33

Slide 33 text

テスト戦略 ● httpstub, grpcstubを使ったスタブサーバをテストに使用 ● シナリオテストツール runn を使用 ● goroutineの仕組みを使った安定性のあるミディアムテスト ● すぐにGoテストに組み込める書き心地のいいシナリオテスト

Slide 34

Slide 34 text

結果...

Slide 35

Slide 35 text

一方で現在は課題もある ・実行時間増加 ・Flaky Test 5分では話しきれないので、会社の技術ブログ書きます!

Slide 36

Slide 36 text

おわりに ぜひこれらのツールを活用して 「コスパの良い」テストを実装してみてください!