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
27
正しいテスト駆動開発についてまとめてみた
2024-04-04 社内勉強会で発表した資料です
k.ishikawa
April 04, 2024
Tweet
Share
More Decks by k.ishikawa
See All by k.ishikawa
DDD 値オブジェクトってなあに?
ishikawa096
0
38
DDD ユビキタス言語ってなあに?
ishikawa096
0
15
リソース効率とフロー効率についてざっくりまとめてみた
ishikawa096
0
15
ChatGPT×AWS LambdaのSlack Botを社内運用してみた
ishikawa096
1
61
Other Decks in Programming
See All in Programming
A full stack side project webapp all in Kotlin (KotlinConf 2025)
dankim
0
140
Composerが「依存解決」のためにどんな工夫をしているか #phpcon
o0h
PRO
1
330
20250628_非エンジニアがバイブコーディングしてみた
ponponmikankan
0
710
LT 2025-06-30: プロダクトエンジニアの役割
yamamotok
0
830
生成AI時代のコンポーネントライブラリの作り方
touyou
1
260
ISUCON研修おかわり会 講義スライド
arfes0e2b3c
1
460
Modern Angular with Signals and Signal Store:New Rules for Your Architecture @enterJS Advanced Angular Day 2025
manfredsteyer
PRO
0
250
新メンバーも今日から大活躍!SREが支えるスケールし続ける組織のオンボーディング
honmarkhunt
5
8.4k
効率的な開発手段として VRTを活用する
ishkawa
0
160
レベル1の開発生産性向上に取り組む − 日々の作業の効率化・自動化を通じた改善活動
kesoji
0
270
PipeCDのプラグイン化で目指すところ
warashi
1
290
#QiitaBash MCPのセキュリティ
ryosukedtomita
1
1.5k
Featured
See All Featured
Code Review Best Practice
trishagee
69
19k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
Done Done
chrislema
184
16k
Building Flexible Design Systems
yeseniaperezcruz
328
39k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Visualization
eitanlees
146
16k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.7k
Git: the NoSQL Database
bkeepers
PRO
430
65k
Bash Introduction
62gerente
613
210k
Producing Creativity
orderedlist
PRO
346
40k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.8k
The Cost Of JavaScript in 2023
addyosmani
51
8.5k
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 ・テスト駆動開発(書籍)
ご清聴ありがとうござい ました テスト書こう!(自戒)