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
正しいテスト駆動開発についてまとめてみた
Search
k.ishikawa
April 04, 2024
Programming
0
23
正しいテスト駆動開発についてまとめてみた
2024-04-04 社内勉強会で発表した資料です
k.ishikawa
April 04, 2024
Tweet
Share
More Decks by k.ishikawa
See All by k.ishikawa
DDD 値オブジェクトってなあに?
ishikawa096
0
25
DDD ユビキタス言語ってなあに?
ishikawa096
0
12
リソース効率とフロー効率についてざっくりまとめてみた
ishikawa096
0
12
ChatGPT×AWS LambdaのSlack Botを社内運用してみた
ishikawa096
1
48
Other Decks in Programming
See All in Programming
Amazon Bedrock Agentsを用いてアプリ開発してみた!
har1101
0
340
as(型アサーション)を書く前にできること
marokanatani
10
2.7k
EMになってからチームの成果を最大化するために取り組んだこと/ Maximize team performance as EM
nashiusagi
0
100
ECS Service Connectのこれまでのアップデートと今後のRoadmapを見てみる
tkikuc
2
250
Ethereum_.pdf
nekomatu
0
460
CSC509 Lecture 11
javiergs
PRO
0
180
NSOutlineView何もわからん:( 前編 / I Don't Understand About NSOutlineView :( Pt. 1
usagimaru
0
340
見せてあげますよ、「本物のLaravel批判」ってやつを。
77web
7
7.8k
『ドメイン駆動設計をはじめよう』のモデリングアプローチ
masuda220
PRO
8
540
3 Effective Rules for Using Signals in Angular
manfredsteyer
PRO
0
100
Why Jakarta EE Matters to Spring - and Vice Versa
ivargrimstad
0
1.1k
3 Effective Rules for Using Signals in Angular
manfredsteyer
PRO
1
100
Featured
See All Featured
The Invisible Side of Design
smashingmag
298
50k
Optimizing for Happiness
mojombo
376
70k
Building Flexible Design Systems
yeseniaperezcruz
327
38k
Reflections from 52 weeks, 52 projects
jeffersonlam
346
20k
Code Review Best Practice
trishagee
64
17k
Rebuilding a faster, lazier Slack
samanthasiow
79
8.7k
4 Signs Your Business is Dying
shpigford
180
21k
How to Think Like a Performance Engineer
csswizardry
20
1.1k
Rails Girls Zürich Keynote
gr2m
94
13k
GraphQLの誤解/rethinking-graphql
sonatard
67
10k
Building an army of robots
kneath
302
43k
Building Adaptive Systems
keathley
38
2.3k
Transcript
正しいテスト駆動開発 (TDD)についてまとめ てみた 2024-04-04
きっかけ 下記の記事を読んで、テスト駆動開発につ いて曖昧に捉えていた部分や勘違いしてい た部分があったことに気がついた。 記事を参考に改めて情報を整理してみた。 【翻訳】テスト駆動開発の定義 https://t-wada.hatenablog.jp/entry/ canon-tdd-by-kent-beck
テスト駆動開発とは?
テスト駆動開発とは? →プログラミングの ワークフロー コードの書き方 または設計手法
テスト駆動開発とは? →プログラミングの ワークフロー コードの書き方 または設計手法 注意点 あくまでコードの書き方な ので、 「テストが揃って品質が上 がる」などは
副次的効果。 品質保証の方法ではな い。
テストコードを 先に書けば テスト駆動開発? 🤔
テストコードを 先に書けば テスト駆動開発? 🤔 テストコードを先に書くだけ ではテスト駆動開発ではない! よくある誤解
自動テスト テスト ファースト 開発者 テスト 1個流し インクリメンタル 開発 開発者が自分で テストコードを書くこと
RspecやPHPUnitなどの テスティングフレームワーク でテストを書くこと 先にテストを書くこと
自動テスト テスト ファースト 開発者 テスト 全て満たすのが TDD 1個流し インクリメンタル 開発
開発者が自分で テストコードを書くこと RspecやPHPUnitなどの テスティングフレームワーク でテストを書くこと 先にテストを書くこと
自動テスト テスト ファースト 開発者 テスト 全て満たすのが TDD 1個流し インクリメンタル 開発
開発者が自分で テストコードを書くこと メリット: 効果的なテスト を書きやすい RspecやPHPUnitなどの テスティングフレームワーク でテストを書くこと メリット: 自動化 先にテストを書くこと メリット: 必ずテストがかけ る。先に設計できる どれかだけでは TDDではない
TDDのワークフロー 1. テストリスト (TODOリスト)を書く 2. テストリストの中から ひとつだけ 選んで テストコードを書く 3.
実装して テストを成功させる (気づいたこ とはテストリストに追加) 4. テスト成功を維持しながら リファクタリン グ(設計修正) 5. テストリストが空になるまで 2に戻って繰 り返す
ステップ1 テストリスト 初めに、箇条書きメモで良いので期 待される動作をリストアップする。 右図は、いちど平文で書き出して、テスト容易性・ 重要度で整理したリスト。 よくある過ち : 実装の設計判断を混 ぜ込むこと。どう実装するかは一旦
無視するべし。 ヒント アイデアをよく理解してもら うのに 1 つの例では不十分 である場合は、あと 2 つほ ど紹介します。 https://www.youtube.com/watch?v=Q-FJ3XmFlT8&t=1145s
ステップ2 1つだけテスト書く あたかもすでに実装済みのように Classなどを呼び出して書く(使う側 の目線) アサーション(もしくはexpect…)から 書き始めて、上に向かって逆向きに 進めると書きやすい。 よくある過ち :
複数のテストを一気 に書いてしまうこと。だるいし無駄に なりやすい ヒント アイデアをよく理解してもら うのに 1 つの例では不十分 である場合は、あと 2 つほ ど紹介します。 https://www.youtube.com/watch?v=Q-FJ3XmFlT8&t=1145s
インターフェイスと実装の分離 設計には2種類ある。 ・ある振る舞いはどのように呼び出されるべきかの設計 インターフェイス(論理設計) ・システムはその振る舞いをどう実装するべきかの設計 実装(物理設計) Point!
インターフェイスと実装の分離 設計には2種類ある。 ・ある振る舞いはどのように呼び出されるべきかの設計 インターフェイス(論理設計) ・システムはその振る舞いをどう実装するべきかの設計 実装(物理設計) ステップ2 (テストを書く) で考える ステップ4
(リファクタリング) で考える Point!
ステップ3 とにかくテスト成功さ せる ベタ書きでもいいので一旦成功させ る。 ヒント アイデアをよく理解してもら うのに 1 つの例では不十分
である場合は、あと 2 つほ ど紹介します。 https://www.youtube.com/watch?v=Q-FJ3XmFlT8&t=1145s
ステップ4 リファクタリング ここでようやく実装の設計判断をす る。ベタ書きした場合はちゃんとし た実装に変更する。 よくある過ち : リファクタリングしすぎ ・早すぎる抽象化 ヒント
アイデアをよく理解してもら うのに 1 つの例では不十分 である場合は、あと 2 つほ ど紹介します。 https://www.youtube.com/watch?v=Q-FJ3XmFlT8&t=1145s
ステップ5 テストリストが空にな るまで繰り返す
TDDの効果 プログラミングの楽 しさが長続き 最初は楽しいけど現実が厳し くて削れてくるが、TDDなら心 の平穏を保って仕様変更でき る コードに自信が持て る プログラムがちゃんと動いてお
り、綺麗に書けている安心 開発の最小の フィードバックサイク ル アジャイルと相性が良い
参考 ・【翻訳】テスト駆動開発の定義(ブログ記事) https://t-wada.hatenablog.jp/entry/canon-tdd-by-kent-beck ・テスト駆動開発とは何であって、何でなかったのか?(ポッド キャスト) https://fukabori.fm/episode/114 ・見てわかるテスト駆動開発(ライブコーディング動画) https://www.youtube.com/watch?v=Q-FJ3XmFlT8&t=1145s ・テスト駆動開発(書籍)
ご清聴ありがとうござい ました テスト書こう!(自戒)