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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
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
83
Clean_Architecture輪読会_6.pdf
kojirock5260
0
97
Clean_Architecture輪読会_1.pdf
kojirock5260
0
340
Effective_DevOps_輪読会_vol.14.pdf
kojirock5260
0
270
Effective_DevOps_輪読会_vol.11.pdf
kojirock5260
0
240
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
サイバー捜査員研修(前半)
nomizone
1
1.7k
[MIRU26] Open-Vocabulary Intention-Guided Object Detection in Diverse Scenes
keio_smilab
PRO
0
140
SmartHR Engineering Team Deck
smarthr
0
190
PLaMo 3.0 Primeの構造化出力サポート
pfn
PRO
0
190
第3回しろおびセキュリティスポンサーセッション
log0417
0
150
QAエンジニア起点で進める、SmartHRにおける信頼性向上について
kaomi_wombat
1
110
[ChatGPT Work LT]事務作業が苦手な人のための バックオフィスの「半」自動化
chimaki_iot
0
200
制約理論(ToC)入門 2026版
recruitengineers
PRO
5
1.3k
データ組織の転換期 一足飛びしない段階的戦略
leveragestech
PRO
0
150
AIエージェントの知識表現と推論に なぜグラフが使われるのか - 記号的AIの復権とニューラルAIとの統合
yohei1126
1
280
AIが自社のTableauを操作する世界へ:Tableau MCP超入門
tbtykk
0
110
Breaking the Seal: Static Deobfuscation of Compiled V8 JavaScript Bytecode Malware
hshrzd
0
510
Featured
See All Featured
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
How Software Deployment tools have changed in the past 20 years
geshan
1
34k
Paper Plane (Part 1)
katiecoart
PRO
1
10k
Context Engineering - Making Every Token Count
addyosmani
9
1k
Scaling GitHub
holman
464
140k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.5k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
64
56k
A better future with KSS
kneath
240
18k
Claude Code のすすめ
schroneko
67
230k
Writing Fast Ruby
sferik
630
63k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4.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