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
テスト駆動開発_輪読会_vol.1.pdf
Search
kojirock5260
July 08, 2020
Technology
660
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
88
Clean_Architecture輪読会_6.pdf
kojirock5260
0
98
Clean_Architecture輪読会_1.pdf
kojirock5260
0
350
Effective_DevOps_輪読会_vol.14.pdf
kojirock5260
0
270
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
610
レガシー感謝の日で発表してみたかった話
kojirock5260
0
1.4k
Other Decks in Technology
See All in Technology
AI時代のAPI品質を支えるガードレール / API Guardrails for API quality in the AI era
yokawasa
1
110
ブラウザアプリの継続的パフォーマンスモニタリング (序) / Continuous Browser Application Performance Monitoring; Act 1
moznion
0
110
grill-me(grilling):AI駆動開発を超助けてくれるSkill / grill me
mathbullet
0
100
Kiro Crewしか勝たん!?
miu_crescent
PRO
0
180
AIとペアプロを始める。人とのペアプロをやめる。ペアプロの良さを改めて知る。もっと好きになった。 / Rediscovering Pair Programming
honyanya
1
230
Amazon S3 Tablesに全部任せてみた結果——コンパクション/スナップショット管理は本当に手放せるか
shigeruoda
0
380
When Does a Local Qwen Start to Break
morshoto
0
170
AI-DLCって実際どう? 〜聞きたいこと全部聞いてみる〜
news_it_enj
0
220
KPIだけでは評価できないプロダクトが考えるべき Evalsという第二の評価系 / Beyond KPIs: Evals as a Second Evaluation Framework for Products #PdEConf
aki_iinuma
4
3.6k
Bet AI Day 2026丨AIによって本質に戻るシステムリスク管理
layerx
PRO
0
880
Benchmarking Vector Databases: pgvector vs. LanceDB
tsho
0
140
DMMブックスのNext.js化を加速させるAI活用 / Migrating DMM Books to Next.js with AI
kentarom
1
330
Featured
See All Featured
Statistics for Hackers
jakevdp
799
230k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.5k
Into the Great Unknown - MozCon
thekraken
41
2.7k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.4k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.9k
Designing for Timeless Needs
cassininazir
1
470
Design in an AI World
tapps
1
300
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.3k
The Limits of Empathy - UXLibs8
cassininazir
1
640
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
600
Become a Pro
speakerdeck
PRO
31
6.2k
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