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
正しいテスト駆動開発についてまとめてみた
Search
k.ishikawa
April 04, 2024
Programming
46
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
正しいテスト駆動開発についてまとめてみた
2024-04-04 社内勉強会で発表した資料です
k.ishikawa
April 04, 2024
More Decks by k.ishikawa
See All by k.ishikawa
DDD 値オブジェクトってなあに?
ishikawa096
0
230
DDD ユビキタス言語ってなあに?
ishikawa096
0
58
リソース効率とフロー効率についてざっくりまとめてみた
ishikawa096
0
60
ChatGPT×AWS LambdaのSlack Botを社内運用してみた
ishikawa096
1
79
Other Decks in Programming
See All in Programming
Findy - エンジニア向け会社紹介/Findy Company Deck
findyinc
6
400k
Androidだけじゃない、DroidKaigiで広がった私の技術スタック
akkeylab
0
120
UPDATE をやめる — EF Core でマスタをバージョン管理する
panda728
PRO
0
1.2k
IBM Bob Dojo #1 仕様駆動開発入門
oniak3ibm
PRO
0
380
When benchmarks go bad - what I learned from measuring performance wrong
hollycummins
0
200
Rでドレミ/Do-Re-Mi_with_R
florets1
0
130
Starting & Sustaining Code-Based E2E Testing for Non-Coding QA Teams( #jasstniigata )
teyamagu
PRO
1
960
The Rails Doctrine Decade
koic
2
560
GemmaをJevのように使ってみる / Use Gemma like Jev
kishida
5
760
機械に任せるテスト、人が見るテスト ⽣成AIで引き直した、運⽤保守フェーズの線引き
dske104
0
180
JAWS-UG 東京支部が始める、JAWS-UG支部コラボ / JAWS-UG lunchtime LT Collaboration
y0hgi
0
220
setup-vp GitLab対応の裏側
naokihaba
0
160
Featured
See All Featured
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.8k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
270
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
260
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
610
Crafting Experiences
bethany
1
380
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
620
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
New Earth Scene 8
popppiees
4
2.7k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
31k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
360
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
Optimising Largest Contentful Paint
csswizardry
37
4k
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 ・テスト駆動開発(書籍)
ご清聴ありがとうござい ました テスト書こう!(自戒)