Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
テスト駆動開発_輪読会_vol.1.pdf
Search
kojirock5260
July 08, 2020
Technology
670
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
テスト駆動開発_輪読会_vol.1.pdf
kojirock5260
July 08, 2020
More Decks by kojirock5260
See All by kojirock5260
Clean_Architecture輪読会_11.pdf
kojirock5260
0
90
Clean_Architecture輪読会_6.pdf
kojirock5260
0
100
Clean_Architecture輪読会_1.pdf
kojirock5260
0
350
Effective_DevOps_輪読会_vol.14.pdf
kojirock5260
0
280
Effective_DevOps_輪読会_vol.11.pdf
kojirock5260
0
250
Effective_DevOps_輪読会_vol.3.pdf
kojirock5260
0
73
Effective_DevOps_輪読会_vol.7.pdf
kojirock5260
1
280
初心者にやさしいLT会1.pdf
kojirock5260
0
620
レガシー感謝の日で発表してみたかった話
kojirock5260
0
1.4k
Other Decks in Technology
See All in Technology
DBについての基礎説明(MySQL編) - コロプラ 2026年度 新卒研修
colopl
0
140
自作バイナリを動かす「入口」8選
puhitaku
2
1.3k
Webの常識が通じないHTMLメールのダークモード
teamlab
PRO
0
140
価値について
gree_tech
PRO
0
110
NDIでApple Vision Proにリアルタイム映像送信
jyouryuusui
0
130
コンテナ運用におけるネットワーク・コンテナコストの削減方法/How to Reduce Network and Container Costs in Container Operations
masakiokuda
2
320
Refining Active Record
shugo
0
170
日本語に強いオープンな大規模言語モデル「LLM-jp」
odashi
5
1.2k
Code for Security プロジェクト紹介 2026年10月
yu23ki14
0
110
hackers_champloo_2026_tidb
makocchi
0
170
Tofu-Controller lightning talk @ Containerday 2026
gionn
0
120
AI時代のPRレビューにどう向き合うか?
kairim0
1
240
Featured
See All Featured
Game over? The fight for quality and originality in the time of robots
wayneb77
1
310
Technical Leadership for Architectural Decision Making
baasie
3
600
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
1
450
How Software Deployment tools have changed in the past 20 years
geshan
2
35k
New Earth Scene 8
popppiees
4
2.7k
ラッコキーワード サービス紹介資料
rakko
1
5.4M
Skip the Path - Find Your Career Trail
mkilby
1
260
How STYLIGHT went responsive
nonsquared
100
6.3k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
Making Projects Easy
brettharned
120
6.8k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
270
Transcript
テスト駆動開発 テスト駆動開発 テスト駆動開発 テスト駆動開発 テスト駆動開発 テスト駆動開発 輪読会 vol.1 輪読会 vol.1
輪読会 vol.1 輪読会 vol.1 輪読会 vol.1 輪読会 vol.1 対象 1 〜5 章 対象 1 〜5 章 対象 1 〜5 章 対象 1 〜5 章 対象 1 〜5 章 対象 1 〜5 章 - 2020/07/09 - - 2020/07/09 - - 2020/07/09 - - 2020/07/09 - - 2020/07/09 - - 2020/07/09 - © 2020 kojirock 1 / 14
TDD TDD TDD TDD TDD TDD のゴールとは のゴールとは のゴールとは のゴールとは
のゴールとは のゴールとは 「動作するきれいなコード」 「動作するきれいなコード」 「動作するきれいなコード」 「動作するきれいなコード」 「動作するきれいなコード」 「動作するきれいなコード」 © 2020 kojirock 2 / 14
TDD TDD TDD TDD TDD TDD におけるシンプルな2 つのルール におけるシンプルな2 つのルール
におけるシンプルな2 つのルール におけるシンプルな2 つのルール におけるシンプルな2 つのルール におけるシンプルな2 つのルール 自動化されたテストが失敗したときのみ、新しいコードを書く。 自動化されたテストが失敗したときのみ、新しいコードを書く。 自動化されたテストが失敗したときのみ、新しいコードを書く。 自動化されたテストが失敗したときのみ、新しいコードを書く。 自動化されたテストが失敗したときのみ、新しいコードを書く。 自動化されたテストが失敗したときのみ、新しいコードを書く。 重複を除去する。 重複を除去する。 重複を除去する。 重複を除去する。 重複を除去する。 重複を除去する。 © 2020 kojirock 3 / 14
第一部 第一部 第一部 第一部 第一部 第一部 多国通貨 多国通貨 多国通貨 多国通貨
多国通貨 多国通貨 WyCash という債権ポートフォリオ管理システムで、現在米ドル建て通 WyCash という債権ポートフォリオ管理システムで、現在米ドル建て通 WyCash という債権ポートフォリオ管理システムで、現在米ドル建て通 WyCash という債権ポートフォリオ管理システムで、現在米ドル建て通 WyCash という債権ポートフォリオ管理システムで、現在米ドル建て通 WyCash という債権ポートフォリオ管理システムで、現在米ドル建て通 貨しか取り扱えないシステムを、多国通貨の債権を取り扱えるように対 貨しか取り扱えないシステムを、多国通貨の債権を取り扱えるように対 貨しか取り扱えないシステムを、多国通貨の債権を取り扱えるように対 貨しか取り扱えないシステムを、多国通貨の債権を取り扱えるように対 貨しか取り扱えないシステムを、多国通貨の債権を取り扱えるように対 貨しか取り扱えないシステムを、多国通貨の債権を取り扱えるように対 応する。 応する。 応する。 応する。 応する。 応する。 © 2020 kojirock 4 / 14
第一章 第一章 第一章 第一章 第一章 第一章 仮実装 仮実装 仮実装 仮実装
仮実装 仮実装 TODO リストを作成し、やるべきことを見える化する TODO リストを作成し、やるべきことを見える化する TODO リストを作成し、やるべきことを見える化する TODO リストを作成し、やるべきことを見える化する TODO リストを作成し、やるべきことを見える化する TODO リストを作成し、やるべきことを見える化する テストから先に書いて、気づいた問題点をTODO に追加する テストから先に書いて、気づいた問題点をTODO に追加する テストから先に書いて、気づいた問題点をTODO に追加する テストから先に書いて、気づいた問題点をTODO に追加する テストから先に書いて、気づいた問題点をTODO に追加する テストから先に書いて、気づいた問題点をTODO に追加する テストを実行して失敗を確認し、失敗したテストをグリーンになるよ テストを実行して失敗を確認し、失敗したテストをグリーンになるよ テストを実行して失敗を確認し、失敗したテストをグリーンになるよ テストを実行して失敗を確認し、失敗したテストをグリーンになるよ テストを実行して失敗を確認し、失敗したテストをグリーンになるよ テストを実行して失敗を確認し、失敗したテストをグリーンになるよ う対応していく う対応していく う対応していく う対応していく う対応していく う対応していく © 2020 kojirock 5 / 14
第一章 第一章 第一章 第一章 第一章 第一章 仮実装 仮実装 仮実装 仮実装
仮実装 仮実装 テストのサイクルとは テストのサイクルとは テストのサイクルとは テストのサイクルとは テストのサイクルとは テストのサイクルとは 1 1 1 1 1 1. . . . . . 小さいテストを1 つ書く。 小さいテストを1 つ書く。 小さいテストを1 つ書く。 小さいテストを1 つ書く。 小さいテストを1 つ書く。 小さいテストを1 つ書く。 2 2 2 2 2 2. . . . . . すべてのテストを実行し、1 つ失敗することを確認する。 すべてのテストを実行し、1 つ失敗することを確認する。 すべてのテストを実行し、1 つ失敗することを確認する。 すべてのテストを実行し、1 つ失敗することを確認する。 すべてのテストを実行し、1 つ失敗することを確認する。 すべてのテストを実行し、1 つ失敗することを確認する。 3 3 3 3 3 3. . . . . . 小さい変更を行う。 小さい変更を行う。 小さい変更を行う。 小さい変更を行う。 小さい変更を行う。 小さい変更を行う。 4 4 4 4 4 4. . . . . . 再びテストを実行し、全て成功することを確認する。 再びテストを実行し、全て成功することを確認する。 再びテストを実行し、全て成功することを確認する。 再びテストを実行し、全て成功することを確認する。 再びテストを実行し、全て成功することを確認する。 再びテストを実行し、全て成功することを確認する。 5 5 5 5 5 5. . . . . . リファクタリングを行い、重複を除去する。 リファクタリングを行い、重複を除去する。 リファクタリングを行い、重複を除去する。 リファクタリングを行い、重複を除去する。 リファクタリングを行い、重複を除去する。 リファクタリングを行い、重複を除去する。 © 2020 kojirock 6 / 14
第2 章 第2 章 第2 章 第2 章 第2 章
第2 章 明白な実装 明白な実装 明白な実装 明白な実装 明白な実装 明白な実装 目指すところは「動作するきれいなコード」 目指すところは「動作するきれいなコード」 目指すところは「動作するきれいなコード」 目指すところは「動作するきれいなコード」 目指すところは「動作するきれいなコード」 目指すところは「動作するきれいなコード」 © 2020 kojirock 7 / 14
第2 章 第2 章 第2 章 第2 章 第2 章
第2 章 明白な実装 明白な実装 明白な実装 明白な実装 明白な実装 明白な実装 TDD の TDD の TDD の TDD の TDD の TDD の3 つの戦略 3 つの戦略 3 つの戦略 3 つの戦略 3 つの戦略 3 つの戦略 1 1 1 1 1 1. . . . . . 仮実装 仮実装 仮実装 仮実装 仮実装 仮実装 ベタ書きの値を使ってコードを書き、実装を進める際に変数に置き ベタ書きの値を使ってコードを書き、実装を進める際に変数に置き ベタ書きの値を使ってコードを書き、実装を進める際に変数に置き ベタ書きの値を使ってコードを書き、実装を進める際に変数に置き ベタ書きの値を使ってコードを書き、実装を進める際に変数に置き ベタ書きの値を使ってコードを書き、実装を進める際に変数に置き 換えていく 換えていく 換えていく 換えていく 換えていく 換えていく 2 2 2 2 2 2. . . . . . 明白な実装 明白な実装 明白な実装 明白な実装 明白な実装 明白な実装 頭の中の実装をすぐにコードに落とす 頭の中の実装をすぐにコードに落とす 頭の中の実装をすぐにコードに落とす 頭の中の実装をすぐにコードに落とす 頭の中の実装をすぐにコードに落とす 頭の中の実装をすぐにコードに落とす 3 3 3 3 3 3. . . . . . 三角測量 三角測量 三角測量 三角測量 三角測量 三角測量 次章で説明 次章で説明 次章で説明 次章で説明 次章で説明 次章で説明 © 2020 kojirock 8 / 14
第3 章 第3 章 第3 章 第3 章 第3 章
第3 章 三角測量 三角測量 三角測量 三角測量 三角測量 三角測量 ValueObject を適切に使い、別名参照問題を回避する ValueObject を適切に使い、別名参照問題を回避する ValueObject を適切に使い、別名参照問題を回避する ValueObject を適切に使い、別名参照問題を回避する ValueObject を適切に使い、別名参照問題を回避する ValueObject を適切に使い、別名参照問題を回避する コードを一般化出来るのは、2 つ以上の実例があるときだけ コードを一般化出来るのは、2 つ以上の実例があるときだけ コードを一般化出来るのは、2 つ以上の実例があるときだけ コードを一般化出来るのは、2 つ以上の実例があるときだけ コードを一般化出来るのは、2 つ以上の実例があるときだけ コードを一般化出来るのは、2 つ以上の実例があるときだけ © 2020 kojirock 9 / 14
第3 章 第3 章 第3 章 第3 章 第3 章
第3 章 三角測量 三角測量 三角測量 三角測量 三角測量 三角測量 ValueObject ValueObject ValueObject ValueObject ValueObject ValueObject のメリット のメリット のメリット のメリット のメリット のメリット Immutable であるため、ロジックの途中で内部の値が変わるような副 Immutable であるため、ロジックの途中で内部の値が変わるような副 Immutable であるため、ロジックの途中で内部の値が変わるような副 Immutable であるため、ロジックの途中で内部の値が変わるような副 Immutable であるため、ロジックの途中で内部の値が変わるような副 Immutable であるため、ロジックの途中で内部の値が変わるような副 作用が起きない 作用が起きない 作用が起きない 作用が起きない 作用が起きない 作用が起きない 高凝集なクラスとなる 高凝集なクラスとなる 高凝集なクラスとなる 高凝集なクラスとなる 高凝集なクラスとなる 高凝集なクラスとなる © 2020 kojirock 10 / 14
第4 章 第4 章 第4 章 第4 章 第4 章
第4 章 意図を語るテスト 意図を語るテスト 意図を語るテスト 意図を語るテスト 意図を語るテスト 意図を語るテスト プロダクトコードに対して、どのようなテストを実行しているか、テス プロダクトコードに対して、どのようなテストを実行しているか、テス プロダクトコードに対して、どのようなテストを実行しているか、テス プロダクトコードに対して、どのようなテストを実行しているか、テス プロダクトコードに対して、どのようなテストを実行しているか、テス プロダクトコードに対して、どのようなテストを実行しているか、テス トコードが語っているはず トコードが語っているはず トコードが語っているはず トコードが語っているはず トコードが語っているはず トコードが語っているはず © 2020 kojirock 11 / 14
第5 章 第5 章 第5 章 第5 章 第5 章
第5 章 原則をあえて破るとき 原則をあえて破るとき 原則をあえて破るとき 原則をあえて破るとき 原則をあえて破るとき 原則をあえて破るとき 正しい設計を、正しいタイミングで行う。動かしてから、正しくする 正しい設計を、正しいタイミングで行う。動かしてから、正しくする 正しい設計を、正しいタイミングで行う。動かしてから、正しくする 正しい設計を、正しいタイミングで行う。動かしてから、正しくする 正しい設計を、正しいタイミングで行う。動かしてから、正しくする 正しい設計を、正しいタイミングで行う。動かしてから、正しくする © 2020 kojirock 12 / 14
まとめ まとめ まとめ まとめ まとめ まとめ このメソッドはこう動くはずだよねというテストを書くことで、実装 このメソッドはこう動くはずだよねというテストを書くことで、実装 このメソッドはこう動くはずだよねというテストを書くことで、実装 このメソッドはこう動くはずだよねというテストを書くことで、実装
このメソッドはこう動くはずだよねというテストを書くことで、実装 このメソッドはこう動くはずだよねというテストを書くことで、実装 時に足りないパターンや例外などが気づきやすいのかと思った。 時に足りないパターンや例外などが気づきやすいのかと思った。 時に足りないパターンや例外などが気づきやすいのかと思った。 時に足りないパターンや例外などが気づきやすいのかと思った。 時に足りないパターンや例外などが気づきやすいのかと思った。 時に足りないパターンや例外などが気づきやすいのかと思った。 明白な実装 明白な実装 明白な実装 明白な実装 明白な実装 明白な実装で開発しつつ、予期せずテストがコケた場合は、 で開発しつつ、予期せずテストがコケた場合は、 で開発しつつ、予期せずテストがコケた場合は、 で開発しつつ、予期せずテストがコケた場合は、 で開発しつつ、予期せずテストがコケた場合は、 で開発しつつ、予期せずテストがコケた場合は、仮実装 仮実装 仮実装 仮実装 仮実装 仮実装で で で で で で リファクタリングをしながら正しい実装に近づけていく事が大事。 リファクタリングをしながら正しい実装に近づけていく事が大事。 リファクタリングをしながら正しい実装に近づけていく事が大事。 リファクタリングをしながら正しい実装に近づけていく事が大事。 リファクタリングをしながら正しい実装に近づけていく事が大事。 リファクタリングをしながら正しい実装に近づけていく事が大事。 CA の「叫ぶアーキテクチャ」のように、意図を伝えるテストを書くこ CA の「叫ぶアーキテクチャ」のように、意図を伝えるテストを書くこ CA の「叫ぶアーキテクチャ」のように、意図を伝えるテストを書くこ CA の「叫ぶアーキテクチャ」のように、意図を伝えるテストを書くこ CA の「叫ぶアーキテクチャ」のように、意図を伝えるテストを書くこ CA の「叫ぶアーキテクチャ」のように、意図を伝えるテストを書くこ とが大事と感じた。 とが大事と感じた。 とが大事と感じた。 とが大事と感じた。 とが大事と感じた。 とが大事と感じた。 © 2020 kojirock 13 / 14
PHP での実装コード PHP での実装コード PHP での実装コード PHP での実装コード PHP での実装コード
PHP での実装コード https://github.com/kojirock5260/tdd-example https://github.com/kojirock5260/tdd-example https://github.com/kojirock5260/tdd-example https://github.com/kojirock5260/tdd-example https://github.com/kojirock5260/tdd-example https://github.com/kojirock5260/tdd-example © 2020 kojirock 14 / 14