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
テストってなんだろう?
Search
itosho
July 24, 2018
Programming
1
290
テストってなんだろう?
クローズドな勉強会でのLT資料です。
itosho
July 24, 2018
Tweet
Share
More Decks by itosho
See All by itosho
【2025年版】インターネットサービスの育て方 / How to Grow and Scale Internet Services 2025
itosho
0
88
Windsurf Rulesでどう自分のクローンをつくるか / How can I make a clone of myself in Windsurf Rules
itosho
0
100
Text EditorとしてのWindsurf / Windsurf as a Text Editor
itosho
0
100
【2024年版】インターネットサービスの育て方 / How to Grow and Scale Internet Services
itosho
0
98
打線組という個人サービスを Goで開発している話 / Indie Service Development by Go
itosho
1
190
Components Reconsidered
itosho
1
2.3k
打線組を支える技術 / The Technology Behind Dasengumi
itosho
0
56
組織をスケールさせるためのTech Vision / Connehito Tech Vision for Growing Our Team
itosho
2
670
生きのびるためのインディー開発 / Indie Development to Survive
itosho
0
51
Other Decks in Programming
See All in Programming
メルカリのリーダビリティチームが取り組む、AI時代のスケーラブルな品質文化
cloverrose
2
390
ゲームの物理 剛体編
fadis
0
380
PC-6001でPSG曲を鳴らすまでを全部NetBSD上の Makefile に押し込んでみた / osc2025hiroshima
tsutsui
0
190
AI Agent Dojo #4: watsonx Orchestrate ADK体験
oniak3ibm
PRO
0
110
ローカルLLMを⽤いてコード補完を⾏う VSCode拡張機能を作ってみた
nearme_tech
PRO
0
190
「コードは上から下へ読むのが一番」と思った時に、思い出してほしい話
panda728
PRO
39
26k
Combinatorial Interview Problems with Backtracking Solutions - From Imperative Procedural Programming to Declarative Functional Programming - Part 2
philipschwarz
PRO
0
120
脳の「省エネモード」をデバッグする ~System 1(直感)と System 2(論理)の切り替え~
panda728
PRO
0
120
生成AI時代を勝ち抜くエンジニア組織マネジメント
coconala_engineer
0
27k
AI時代を生き抜く 新卒エンジニアの生きる道
coconala_engineer
1
450
JETLS.jl ─ A New Language Server for Julia
abap34
2
460
안드로이드 9년차 개발자, 프론트엔드 주니어로 커리어 리셋하기
maryang
1
140
Featured
See All Featured
Agile that works and the tools we love
rasmusluckow
331
21k
Facilitating Awesome Meetings
lara
57
6.7k
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.7k
So, you think you're a good person
axbom
PRO
0
1.8k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
90
KATA
mclloyd
PRO
33
15k
Darren the Foodie - Storyboard
khoart
PRO
0
2k
Google's AI Overviews - The New Search
badams
0
870
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
520
How to train your dragon (web standard)
notwaldorf
97
6.5k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
0
98
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Transcript
テストってなんだろう? Connehito Inc. @itosho 1
▪ 自己紹介 ・伊藤 翔 @itosho ・所属:コネヒト株式会社 / リードエンジニア ・会社ではサーバーサイドエンジニアをやっています ・よく書く言語:PHP
/ Ruby / Golang ・家ではYome Driven Developmentをやっています ・つくっているサービス:カレンダー / 家計簿 / セール情報通知
▪ 今日話すこと ・事前にいただいたアンケートに沿って…! ・普段書いているテスト ・テストで苦労していること ・テストのメリット / デメリット ・運用についてのコネヒト社での事例 ・今日話さないこと
・E2Eテスト / 総合テスト ・TDD / BDD
1. テストを実装したことありますか 4
5
2. どのようなテストを実装しましたか 6
▪ 普段書いているテスト / ツール ・Web APIのIntegrationテスト / Unitテスト ・PHPUnit /
RSpec ・CLIツールのUnitテスト ・testingパッケージ(Golang) ・OSSのUnitテスト ・https://github.com/itosho/easy-query ・PHPUnit / codecov
3. テストを実装する際に苦労したことはなんですか 8
▪ 苦労している点 ・テストデータの管理・保守 ・”モノリシック”なFixtureデータ ・あるテストのためにデータを修正すると別のテストが壊れる ⇒FactoryBot(旧: FactoryGirl)を使って動的にデータを作る ・テストのためにミニ言語(DSL)を覚える必要がある ・RSpec /
FactoryBot等 ・高機能なツールであるほど学習コストが高い ⇒Golangでは標準のtestingパッケージのみを使う
▪ 苦労している点 ・外部サービス / コマンドとの連携 ・モックの実装が必要(難しい) ・意味のない壊れやすいスタブ ⇒外部とやりとりを行う境界をinterface(モックポイント)にする ⇒Consumer Driven
Test(あんまり詳しくないですが…) ref: https://deeeet.com/writing/2016/10/25/go-interface-testing/
4. テストを実装して感じたメリットはなんですか 11
▪ メリット ・リファクタ&仕様変更時のスピード&安心感 ・テストが”正しく”壊れる ・暖かみのある回帰テストが不要になる ・テストコードが生きたドキュメントになる ・コードの変更とほぼ自動的に同期される ・テストがあるOSSはダウンロードされやすい ・カバレッジがあるとさらにGood
5. テストを実装して感じたデメリットはなんですか 13
▪ デメリット ・慣れるまで(慣れても?)開発スピードが落ちる ・TDDはこの限りではない(設計技法なので) ・プロダクトが成長するとCIの実行時間が長くなりがち ・特にiOS / Androidのテスト ・教条主義的になりやすい(特にUnitテスト) ・Unitテストを書くとコードの品質が上がる
・Unitテストを書くと設計が綺麗になる ⇒正しいけど正しくない
6. 運用はうまく回っていますか 15
▪ コネヒト社でのCI/CD事例 ・Web APIに関しては原則テストコードを書く ・画面がないのでテストが書きやすい ・PHPUnitを利用 ・CIはTravis CIを利用 ・CI時に静的解析 /
Lintツールを実行 ・使用ツール ・Phan / PHP CodeSniffer ・reviewdog / Danger ⇒機械が出来ることは機械に任せる
まとめ 17
▪ テストとは… ・テストはお金を生まない ・Yome Drive Developmentにおいてテストを書く意味はない ・バグ出したらさっさと直すかケーキでも買ってきたほうがよい ・テストは保険 ・不具合による機会損失と運用コストを予め防ぐ ・自動化することでコスト圧縮が積分で効いてくる
ref: http://shyouhei.tumblr.com/post/73195212853/テストのめどい話 ⇒テストで自分たちの身を守っていこう!
宣伝 19
▪ コネヒトでも勉強会開催します! ・Connehito Marché #3〜iOS市〜 ・8/7(火)19:00〜21:30 ・LT枠 / オーディエンス枠ともに絶賛募集中! ・connpass:
https://connehito.connpass.com/event/95285/ ・Twitter: https://twitter.com/connehitomarche
ご清聴ありがとうございました 21