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
1年目の私に伝えたい!テストコードを怖がらなくなるためのヒント/Tips for not be...
Search
プッシュ
February 22, 2025
Programming
1.3k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
1年目の私に伝えたい!テストコードを怖がらなくなるためのヒント/Tips for not being afraid of test code
プッシュ
February 22, 2025
Other Decks in Programming
See All in Programming
ローカルLLMでどこまでコードが書けるか -縮小版 / How much code can be written on a local LLM Shortened
kishida
2
190
Hatena Engineer Seminar #37「言語モデルの活用に関する研究」
slashnephy
0
520
OSINT for SRE: 学術論文とポストモーテムから探る システム障害の共通パターン / SRE NEXT 2026
tomoyk
1
3.6k
【やさしく解説 設計編 #0】DDDのコード、読めるのに分からない人へ
panda728
PRO
2
270
SLOをサービス品質の共通言語にするために 取り組んできたこと
wakana0222
0
500
そのテスト、説明できますか?~LWテスト戦略FW~のご紹介
nakahara
0
200
Even G2とAWSで推しのエージェントを召喚しよう!
har1101
1
170
信頼性について考えてみる(SRE NEXT 2026 miniLT)
hayama17
0
180
1年で人数1.5倍、PR数5.5倍増。 品質とアウトカムはどうなったか、 何が効いたか
ike002jp
0
130
共通化で考えるべきは、実装より公開する型だった
codeegg
0
230
コーディングルールの鮮度を保ちたい for SRE NEXT 2026 / keep-fresh-go-internal-conventions-sre-next-2026
handlename
0
140
ローカルLLMでどこまでコードが書けるか -拡張版 / How much code can be written on a local LLM Extended
kishida
12
4.8k
Featured
See All Featured
Practical Orchestrator
shlominoach
191
11k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
The Curious Case for Waylosing
cassininazir
1
430
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
330
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
3
1.1k
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.7k
Code Review Best Practice
trishagee
74
20k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.4k
Heart Work Chapter 1 - Part 1
lfama
PRO
8
36k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Marketing to machines
jonoalderson
1
5.6k
Transcript
1年目の私に伝えたい! テストコードを怖がらなくなるための ヒント💡 2025/02/22 PHPカンファレンス名古屋2025 #phpcon_nagoya #q
自己紹介 名前 プッシュ(@push_gawa) 所属 株式会社カオナビ 職種 バックエンドエンジニア #phpcon_nagoya #q
挫折 #phpcon_nagoya #q
😱 1年目の私 一つのAPIのテスト作成に 1週間かけたが大失敗 #phpcon_nagoya #q
原因 • なぜテストを書くのかわからない • どんなテストケースを書けばいいのか わからない • テストの書き方もわからない #phpcon_nagoya #q
😱 1年目の私 テストを書くことさえ、できなかった #phpcon_nagoya #q
📝 今日話すこと • なぜテストを書くのか • 私なりのテストの書き方 • テストコードを書いたことでの変化 • 一年目の私へのメッセージ
#phpcon_nagoya #q
なぜテストを書くのか #phpcon_nagoya #q
変更を加えた際に問題がないと 自信を持つために書く テストは #phpcon_nagoya #q
修正箇所は意図した 動作をしていますか? #phpcon_nagoya #q
修正箇所は意図した 動作をしていますか? 既存の動作は 壊れていないですか? #phpcon_nagoya #q
YES 修正箇所は意図した 動作をしていますか? 既存の動作は 壊れていないですか? #phpcon_nagoya #q
テストコードが問題を事前に発見! - 組織分析機能の開発事例 - 具体例 #phpcon_nagoya #q
組織分析機能イメージ #phpcon_nagoya #q
具体的なレスポンスのイメージ #phpcon_nagoya #q [ { 'department' => '営業部', 'member_count' =>
30, }, … … { 'department' => '経理部', 'member_count' => 5, }, ];
• 営業部メンバー:30人 • 田中さん ◦ 所属1:営業部 ◦ 所属2:営業第1グループ • 他メンバー:29人
具体的なデータ例 #phpcon_nagoya #q
具体的なデータ例(図) 営業部 [30人] ├── 👔 田中さん ├── 👤 ├── 👤
└── 営業第1グループ ├── 👔 田中さん(兼務) ├── 👤 #phpcon_nagoya #q
- 期待する結果:30人 結果 #phpcon_nagoya #q
- 期待する結果:30人 - 実際の結果:31人 結果 #phpcon_nagoya #q
差分の原因 営業部 : 👔 田中さん └── 営業第1グループ: 👔 田中さん(兼務) ※同じ人なのに2回カウント
#phpcon_nagoya #q
✓ 兼務者の重複カウント問題を発見 ✓ 本番環境に出す前に問題を発見 ✓ 早期に修正対応が可能 テストコードを書いていてよかったこと #phpcon_nagoya #q
テストは 変更を加えた際に問題がないと 自信を持つために書く 🔑 ヒント #phpcon_nagoya #q
どうやってテストを書くのか #phpcon_nagoya #q
テストケース名は test_前提条件_期待する結果 で書く #phpcon_nagoya #q
具体的なコード例 public function test_兼務社員が存在する場合_重複なしで人数がカウントされるべき(): void { } #phpcon_nagoya #q
テストコード 1. AAAパターンを使う #phpcon_nagoya #q
具体的なコード例 public function test_兼務社員が存在する場合_重複なしで人数がカウントされるべき(): void { /** Arrange(準備) */ /**
Act(実行) */ /** Assert(確認) */ } #phpcon_nagoya #q
テストコード 1. AAAパターンを使う 2. 期待値を先に書く #phpcon_nagoya #q
具体的なコード例 public function test_兼務社員が存在する場合_重複なしで人数がカウントされるべき(): void { /** Arrange(準備) */ /**
Act(実行) */ /** Assert(確認) */ $expected = [ 'department' => '営業部', 'member_count' => 30, ]; $response->assertExactJson($expected) ->assertOk(); } #phpcon_nagoya #q
テストコード 1. AAAパターンを使う 2. 期待値を先に書く 3. コメント駆動で実現したいことを書く #phpcon_nagoya #q
具体的なコード例 /** Assert(確認) */ $expected = [ 'department' => '営業部',
'member_count' => 30, ]; $response ->assertExactJson($expected) ->assertOk(); } public function test_兼務社員が存在する場合_重複な しで人数がカウントされるべき(): void { /** Arrange(準備) */ // 田中さんを営業部で登録 // 田中さんを営業第一グループで登録 /** Act(実行) */ // API叩く #phpcon_nagoya #q
テストコード 1. AAAパターンを使う 2. 期待値を先に書く 3. コメント駆動で実現したいことを書く 4. 実際にコードを書いていく #phpcon_nagoya
#q
具体的なコード例 public function test_兼務社員が存在する場合_重複なし で人数がカウントされるべき(): void { /** Arrange(準備) */
Department::query()->insert([ // 田中さんを営業部で登録 [ 'id' => 1, 'name' => '営業部', 'member' => '田中', ], // 田中さんを営業第一で登録 [ 'id' => 2, 'name' => '営業第一', 'member' => '田中', ], ]); /** Act(実行) */ // API叩く $response = $this->getAjax(self::URI); /** Assert(確認) */ $expected = [ 'department' => '営業部', 'member_count' => 30, ]; $response ->assertExactJson($expected) ->assertOk(); } #phpcon_nagoya #q
テストを書くときは 段階的に書いて、やることを明確にしよう 🔑 ヒント #phpcon_nagoya #q
私の中での変化 #phpcon_nagoya #q
• テストを書くことが「怖い」=>「楽しい」になった • レビューでの質問などがしやすくなった • とりあえず動くものが作れるようになった 変化 #phpcon_nagoya #q
✨ 1年目の私へ #phpcon_nagoya #q テストコードは僕たちの未来を守ってくれる道具さ 失敗を恐れないで小さく始めよう
ご清聴ありがとうございました #phpcon_nagoya #q