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
コンテナ運用におけるネットワーク・コンテナコストの削減方法/How to Reduce Network and Container Costs in Container Operations
masakiokuda
2
310
USB PDを使ってスマホを労わりたい
raspython3
0
180
フィンテック養成勉強会#68
finengine
0
160
AI駆動で「他アプリの音を加工できる」アプリを作った
satomasahiro2005
0
180
専門領域のAIをどう評価するか
bengo4com
2
310
フロントエンドカンファレンス関西2026 - 速すぎるUIに、待ち時間を
teamlab
PRO
0
190
JAWSUG TOHOKU 青森支部 「LoGoチャット」のAWS移行で 乗り越えたこと
taketakekaho
0
350
ストレスなくAIと付き合いたい!こんなときどうしてる?
namiki64
4
630
Post AI時代のリファクタリング実践記 / Refactoring in the post AI era
kaminashi
1
300
エンタメ企業のM&Aを支えるデータ基盤 ― 統合から店舗のリアルタイム分析まで / Data Engineering Summit 2026
genda
0
200
Rustuna: Rustによる高速なOptuna実装
pfn
PRO
0
200
Temporal 最高!でも改めて「日付」について調べたら人類の負債すぎる件
riyaamemiya
0
190
Featured
See All Featured
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
2
360
Facilitating Awesome Meetings
lara
57
7.2k
4 Signs Your Business is Dying
shpigford
187
23k
Ten Tips & Tricks for a 🌱 transition
stuffmc
1
270
Measuring & Analyzing Core Web Vitals
bluesmoon
9
1k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.5k
Code Review Best Practice
trishagee
74
20k
How to build a perfect <img>
jonoalderson
1
6.1k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.7k
Product Roadmaps are Hard
iamctodd
55
13k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.6k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
630
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