Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
短期間での新規プロダクト開発における「コスパの良い」Goのテスト戦略」 / kamakura.go
Search
yukyan
December 13, 2024
Programming
2
220
短期間での新規プロダクト開発における「コスパの良い」Goのテスト戦略」 / kamakura.go
yukyan
December 13, 2024
Tweet
Share
Other Decks in Programming
See All in Programming
Fibonacci Function Gallery - Part 1
philipschwarz
PRO
0
270
Package Traits
ikesyo
1
180
LLM Supervised Fine-tuningの理論と実践
datanalyticslabo
8
1.8k
DevFest - Serverless 101 with Google Cloud Functions
tunmise
0
130
快速入門可觀測性
blueswen
0
490
Запуск 1С:УХ в крупном энтерпрайзе: мечта и реальность ПМа
lamodatech
0
910
선언형 UI에서의 상태관리
l2hyunwoo
0
260
PHPとAPI Platformで作る本格的なWeb APIアプリケーション(入門編) / phpcon 2024 Intro to API Platform
ttskch
0
370
Findy Team+ Awardを受賞したかった!ベストプラクティス応募内容をふりかえり、開発生産性向上もふりかえる / Findy Team Plus Award BestPractice and DPE Retrospective 2024
honyanya
0
140
Monixと常駐プログラムの勘どころ / Scalaわいわい勉強会 #4
stoneream
0
340
Androidアプリのモジュール分割における:x:commonを考える
okuzawats
1
270
Итераторы в Go 1.23: зачем они нужны, как использовать, и насколько они быстрые?
lamodatech
0
1.3k
Featured
See All Featured
Build your cross-platform service in a week with App Engine
jlugia
229
18k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
38
1.9k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
26
1.9k
How to Ace a Technical Interview
jacobian
276
23k
What's in a price? How to price your products and services
michaelherold
244
12k
The Cult of Friendly URLs
andyhume
78
6.1k
Designing Experiences People Love
moore
139
23k
jQuery: Nuts, Bolts and Bling
dougneiner
62
7.6k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
The World Runs on Bad Software
bkeepers
PRO
66
11k
Designing for humans not robots
tammielis
250
25k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.2k
Transcript
短期間での 新規プロダクト開発における 「コスパの良い」 Goのテスト戦略 GMOペパボ株式会社 大浦優太郎
自己紹介 大浦優太郎 ユーキャン GMOペパボ株式会社 for Gamersチーム エンジニア Go歴 1年半 X:
@yukyan_p
はじめに 今年のGoの思い出...
はじめに
はじめに バックエンドサーバーが Goで実装されてます!
はじめに 開発開始から13営業日で ユーザーへの提供を開始!!!
なぜ短期間でのリリースを実現できたか? いろいろある・・・ ・親しんだ言語で開発 ・実装の力があるエンジニアが集まっていた ・バックエンドのテスト戦略
なぜ短期間でのリリースを実現できたか? いろいろある・・・ ・親しんだ言語で開発 ・実装の力があるエンジニアが集まっていた ・バックエンドのテスト戦略
https://speakerdeck.com/takumakume/lolipop-for-gamers-infrastructure?slide=9
テスト戦略
テスト戦略 定義したシナリオ(「ログインできる」、「サー バーを立ち上げる」など)に沿って、 実際にちゃんと動くのか を主軸にテストする。
テスト戦略 「実際にちゃんと動くのか」 =忠実性の高いテストをやっていきたい
テスト戦略 忠実性という観点であれば.... 単体テスト < 統合テスト 統合テスト < E2Eテスト
テスト戦略 忠実性という観点であれば.... 単体テスト < 統合テスト 統合テスト < E2Eテスト 外部サービスへの 疎通により...
実行速度が遅い! 安定性が低い! = コストが高い
https://levtech.jp/media/article/column/detail_496/
テスト戦略 「実際にちゃんと動くのか」 =忠実性の高いテストをやっていきたい 単体テスト < 統合テスト 統合テスト < E2Eテスト 実行速度が遅い!
安定性が低い! = コストが高い
テスト戦略 そこで!! httpstub, grpcstubを活用し スタブサーバーを実装!!
httpstub、grpcstubとは httptest.Serverを使ったスタブサーバーを簡単に実装できる https://github.com/k1LoW/httpstub
https://github.com/k1LoW/httpstub
httptest.Serverを使うと何が嬉しいか httptest.NewServerで立ち上げたサーバーはgoroutineで実行される Go Runtimeが構成要素を管理するため、 軽量で安定した運用が可能
https://speakerdeck.com/k1low/go-conference-2023?slide=8
テスト戦略 これらを使うことで、 統合テストやE2Eテストをミディアムテスト として実現 また、goroutineで実行されるサーバーを用いることで安定感がある https://testing.googleblog.com/2010/12/test-sizes.html
https://levtech.jp/media/article/column/detail_496/
テスト戦略 あとは... コスパ良く楽にシナリオテストを書きたい...
テスト戦略 あとは... コスパ良く楽にシナリオテストを書きたい... runnを活用!!
runnとは https://github.com/k1LoW/runn
runnとは YAMLで書いたシナリオテストを実行できる! GitHub ActionsやKubernetesのマニフェストを書 いたことがあれば簡単!
https://github.com/k1LoW/runn
runnとは そして... Goのテストに組み込めます!!!! 組み込んだらいつも通り go test を実行すればOK!
https://github.com/k1LoW/runn
テスト戦略 • httpstub, grpcstubを使ったスタブサーバをテストに使用 • シナリオテストツール runn を使用
テスト戦略 • httpstub, grpcstubを使ったスタブサーバをテストに使用 • シナリオテストツール runn を使用 • goroutineの仕組みを使った安定性のあるミディアムテスト
• すぐにGoテストに組み込める書き心地のいいシナリオテスト
テスト戦略 • httpstub, grpcstubを使ったスタブサーバをテストに使用 • シナリオテストツール runn を使用 • goroutineの仕組みを使った安定性のあるミディアムテスト
• すぐにGoテストに組み込める書き心地のいいシナリオテスト
結果...
一方で現在は課題もある ・実行時間増加 ・Flaky Test 5分では話しきれないので、会社の技術ブログ書きます!
おわりに ぜひこれらのツールを活用して 「コスパの良い」テストを実装してみてください!