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
650
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
81
Clean_Architecture輪読会_6.pdf
kojirock5260
0
95
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
72
Effective_DevOps_輪読会_vol.7.pdf
kojirock5260
1
270
初心者にやさしいLT会1.pdf
kojirock5260
0
600
レガシー感謝の日で発表してみたかった話
kojirock5260
0
1.4k
Other Decks in Technology
See All in Technology
[モダンアプリ勉強会]今更聞けないGit/GitHub入門
tsukuboshi
0
370
Disciplined Vibes: Scaling AI-Assisted Engineering
sheharyar
0
140
AIの性能が向上しても未解決な組織の重大問題は何か?/An Unsolved Organizational Problem in the Age of AI
moriyuya
4
630
AI-DLCを活用した高品質・安全なAI駆動開発実践 / AI Driven Development with AI-DLC
yoshidashingo
0
170
20260619 私の日常業務での生成 AI 活用
masaruogura
1
140
プロダクト開発から業務改善コンサルまで。事業全体へ「染み出す」ことで広がるエンジニアの可能性
ham0215
0
110
現地で盛り上がった WWDC26 Keynote
zozotech
PRO
1
210
AI駆動開発を通して感じた、 AI時代のデザイナーの役割変化
whisaiyo
2
1.5k
AAIFに入ってみた ~内から見えるコミュニティ動向~
sato4
0
180
非定型業務をAI slackbotで自動化する ~ 社内要望を自動壁打ちするbotを作った ~/automating-ad-hoc-work-with-ai-slackbot
shibayu36
0
620
Djangoユーザが知っ得なPostgreSQL機能 - 設計の選択肢を増やす / Djang-use-PostgreSQL
soudai
PRO
1
230
NAB Show 2026 動画技術関連レポート / NAB Show 2026 Report
cyberagentdevelopers
PRO
0
170
Featured
See All Featured
sira's awesome portfolio website redesign presentation
elsirapls
0
280
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
1.1k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
Building Flexible Design Systems
yeseniaperezcruz
330
40k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
55k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.8k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.9k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.7k
Agile that works and the tools we love
rasmusluckow
331
21k
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