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
160
テスト駆動開発 輪読会 Vol.5
masyus_work
August 11, 2020
Tweet
Share
More Decks by masyus_work
See All by masyus_work
ふりかえりとチームクレドが僕らにもたらしてくれたもの
masyus
2
310
【オンライン】Clean Architecture 達人に学ぶソフトウェアの構造と設計 輪読会 #16
masyus
0
140
Clean Architecture 達人に学ぶソフトウェアの 構造と設計_第10回
masyus
0
220
【オンライン】Clean Architecture 達人に学ぶソフトウェアの構造と設計 輪読会 #1
masyus
0
170
Chrome拡張で便利ツール作ってたら、思いがけず社内ツールを作ることになった話
masyus
0
150
開発速度UP & エンジニアポートフォリオ作成を同時実現する為の取り組み
masyus
0
180
メール文面確認テストを作りながら、テストについて改めて考えてみた
masyus
0
190
Other Decks in Programming
See All in Programming
Language Server と喋ろう – TSKaigi 2025
pizzacat83
2
670
複雑なフォームを継続的に開発していくための技術選定・設計・実装 #tskaigi / #tskaigi2025
izumin5210
12
6.4k
ワンバイナリWebサービスのススメ
mackee
10
7.5k
MLOps Japan 勉強会 #52 - 特徴量を言語を越えて一貫して管理する, 『特徴量ドリブン』な MLOps の実現への試み
taniiicom
2
570
ソフトウェア品質特性、意識してますか?AIの真の力を引き出す活用事例 / ai-and-software-quality
minodriven
19
6.7k
OpenTelemetryで始めるベンダーフリーなobservability / Vendor-free observability starting with OpenTelemetry
seike460
PRO
0
160
TVer iOSチームの共通認識の作り方 - Findy Job LT iOSアプリ開発の裏側 開発組織が向き合う課題とこれから
techtver
PRO
0
710
Interface vs Types ~型推論が過多推論~
hirokiomote
1
230
衛星の軌道をWeb地図上に表示する
sankichi92
0
250
Cloudflare Realtime と Workers でつくるサーバーレス WebRTC
nekoya3
0
230
TSConfig Solution Style & subpath imports to switch types on a per-file basis
maminami373
1
180
TypeScript LSP の今までとこれから
quramy
0
110
Featured
See All Featured
The Straight Up "How To Draw Better" Workshop
denniskardys
233
140k
Side Projects
sachag
454
42k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
129
19k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
47
2.8k
Music & Morning Musume
bryan
47
6.6k
Designing for humans not robots
tammielis
253
25k
GitHub's CSS Performance
jonrohan
1031
460k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Why Our Code Smells
bkeepers
PRO
336
57k
RailsConf 2023
tenderlove
30
1.1k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
5
620
Gamification - CAS2011
davidbonilla
81
5.3k
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章を読んでみての感想