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.5
Search
masyus_work
August 11, 2020
Programming
0
180
テスト駆動開発 輪読会 Vol.5
masyus_work
August 11, 2020
Tweet
Share
More Decks by masyus_work
See All by masyus_work
ふりかえりとチームクレドが僕らにもたらしてくれたもの
masyus
2
330
【オンライン】Clean Architecture 達人に学ぶソフトウェアの構造と設計 輪読会 #16
masyus
0
150
Clean Architecture 達人に学ぶソフトウェアの 構造と設計_第10回
masyus
0
240
【オンライン】Clean Architecture 達人に学ぶソフトウェアの構造と設計 輪読会 #1
masyus
0
190
Chrome拡張で便利ツール作ってたら、思いがけず社内ツールを作ることになった話
masyus
0
160
開発速度UP & エンジニアポートフォリオ作成を同時実現する為の取り組み
masyus
0
200
メール文面確認テストを作りながら、テストについて改めて考えてみた
masyus
0
200
Other Decks in Programming
See All in Programming
Basic Architectures
denyspoltorak
0
170
Deno Tunnel を使ってみた話
kamekyame
0
310
Cap'n Webについて
yusukebe
0
160
從冷知識到漏洞,你不懂的 Web,駭客懂 - Huli @ WebConf Taiwan 2025
aszx87410
2
3.3k
CSC307 Lecture 02
javiergs
PRO
1
740
Findy AI+の開発、運用におけるMCP活用事例
starfish719
0
2k
AI前提で考えるiOSアプリのモダナイズ設計
yuukiw00w
0
210
0→1 フロントエンド開発 Tips🚀 #レバテックMeetup
bengo4com
0
470
AIの誤りが許されない業務システムにおいて“信頼されるAI” を目指す / building-trusted-ai-systems
yuya4
7
4.3k
フロントエンド開発の勘所 -複数事業を経験して見えた判断軸の違い-
heimusu
1
330
Navigation 3: 적응형 UI를 위한 앱 탐색
fornewid
1
530
HTTPプロトコル正しく理解していますか? 〜かわいい猫と共に学ぼう。ฅ^•ω•^ฅ ニャ〜
hekuchan
2
600
Featured
See All Featured
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
210
A Modern Web Designer's Workflow
chriscoyier
698
190k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
0
100
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
130
So, you think you're a good person
axbom
PRO
0
1.9k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
140
Optimising Largest Contentful Paint
csswizardry
37
3.6k
Bash Introduction
62gerente
615
210k
Building Applications with DynamoDB
mza
96
6.9k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
1
340
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.1k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
37
Transcript
テスト駆動開発 輪読会 Vol.5 第25〜28章 2020/08/11 @masyus_work
1~24章まで学んできた テスト駆動開発のTipsを紹介 1. テスト(名詞) 2. 独立したテスト 3. TODOリスト 4. テストファースト
5. アサートファースト 6. テストデータ 7. 明示的なデータ 第25章 テスト駆動開発の パターン
第25章 テスト駆動開発のパターン 1. テスト(名詞) - テスト(動詞) = 評価する - 手動のニュアンス
- テスト(名詞) = 合格か不合格かを判定する手順 - ★自動のニュアンス 2. 独立したテスト - テスト同士は独立にしておかないと、1つのFailで後続のテストも連鎖 的にFailしてしまうから良くないよね
第25章 テスト駆動開発のパターン 3. TODOリスト - やるべきことを粗い粒度で書き出す - 「すぐやる」「あとで」「やる必要なし」に仕分け - テストケースは後回しにしない
4. テストファースト - 実装後にテストを書くことってあまりない - テストを先に書くと、設計について考えたりスコープ制御するように なるので、テストを書くこと自体のストレスを減らせる上に、もっとテ ストを書くようになる
第25章 テスト駆動開発のパターン 5. アサートファースト - 実装した機能がどんな結果を返すかを評価するところから書く - 正しい結果とは何か・それをどう検証するかを設計に起こしやすく なる 6.
テストデータ - 2 (第1引数) - 3 (第2引数) = -1 - 3 (第1引数) -2 (第2引数) = 1 - 本番に近いデータを準備する - 並列試験中やリファクタリング前後の結果を評価する際便利
第25章 テスト駆動開発のパターン 7. 明示的なデータ - テストでマジックナンバーを使うのはアリ - 入力数字と期待値計算に使われた数字の関係性が読み取りやす い -
仮実装もやりやすくなる
テストを書き始めていくためのTips 1. 1歩を示すテスト 2. はじめのテスト 3. 説明的なテスト 4. 学習用テスト 5.
脱線はTODOリストへ 6. 回帰テスト 7. 休憩・やり直す・安い机に良い椅子 第26章 レッドバーの パターン
第26章 レッドバーのパターン 1. 一歩を示すテスト - 明白なものを取り除いた後に残るテストが、これから書くテスト - トップダウン or ボトムアップどちらからアプローチしても良い
2. はじめのテスト - 本物に近いテストから書かない - すぐに書けそうなテストから始める 3. 説明的なテスト - TDDを普及させるには、テストコードのように知識を共有する
第26章 レッドバーのパターン 4. 学習用テスト - 依存パッケージのテストを書いておくと、バージョンアップ後の機能変 化を検知しやすくなる 5. 脱線はTODOリストへ -
脇道に逸れたくなるけど、、仕事に戻りましょう 6. 回帰テスト - 機能追加等の際、システム全体のチェック作業に立ち返って想定外の 異常が発生していないかを調べるテスト - 不具合報告 → 不具合を再現させる最小テストを書こう
第26章 レッドバーのパターン 7. 休憩・やり直す・安い机に良い椅子 - 休憩: - アイデアを得るために必要 - 今日のゴールは妥当だったか?
- やり直す: - 手詰まったら思い切って実装し直すことも手 - 安い机に良い椅子: - 椅子はもちろんだが、机もこだわったほうが良いと思う(持論)
テストを上手に書く上での様々なTips 1. 小さいテスト 2. Mock Objectパターン 3. Self Shuntパターン 4.
Log Stringパターン 5. Crash Test Dummyパターン 6. 失敗させたままのテスト 7. きれいなチェックイン 第27章 テスティングの パターン
第27章 テスティングのパターン 1. 小さいテスト - そもそも大きなテストを書く必要がない実装を心がけるべし 2. Mock Objectパターン -
ネットワーク越しのリソースに依存させない - テスト速度UP、信頼性向上、可読性向上 3. Self Shuntパターン - テストケース自身がMock Objectのように振る舞う書き方で、あるオ ブジェクトが他のオブジェクトときちんとやりとりしているかをテストでき る
第27章 テスティングのパターン 4. Log Stringパターン - メソッドが正しい順序で呼び出されているかをテストするパターンで、 文字列を活用する - Observerパターンの通知順番テストで使える
5. Crash Test Dummyパターン - 仮実装でシミュレートする。例外テストする際に便利 - 無名クラスはPHPでも7以降からサポートされている
第27章 テスティングのパターン 6. 失敗させたままのテスト - 実装が途中でもコードを書くのを終わらせる時に有効 - 最後に書いたテストをわざと失敗させることで、次回コードを書く際にど こから着手すべきかの目印にする -
ただし個人で開発している時に限る 7. きれいなチェックイン - チームで開発している場合はテストを全て通した上で終えること
速やかにテストをグリーンにするためのTips 1. 仮実装を経て本実装へ 2. 三角測量 3. 明白な実装 4. 一から多へ 第28章
グリーンバーの パターン
第28章 グリーンバーのパターン 1. 仮実装を経て本実装へ - 動いていることには、動かないことよりも価値がある - 心理的に安全 - 目の前の問題に集中できる
2. 三角測量 - 仮実装から本実装へ移行させる為に有用
第28章 グリーンバーのパターン 3. 明白な実装 - 仮実装や三角測量せずともすぐに書けるコードは書いちゃおう - まずは動くコードを、次にきれいなコードを 4. 一から多へ
- オブジェクトのコレクションを扱う操作を実装する時に有効 - まずは単数が通るように実装 - 続いて複数が通るように実装し直す - 変更の分離も可能
1. 実際にテストコードを書く時、何に気をつけるべきかが分かった 2. テストコードを書く時にマジックナンバーは意図して頻繁に使っていたので 「やっぱりな〜」と思った 3. 仮実装、大いにアリ。実戦でもっと活用したい 4. Exceptionのテストは、現場で十分やれてない気がしている。今後積極的に 書いていく
5. Self Shuntパターンでのテストコードはあまり発想が無かった。現場に活か す 第25~28章を読んでみての感想