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
140
テスト駆動開発 輪読会 Vol.5
masyus_work
August 11, 2020
Tweet
Share
More Decks by masyus_work
See All by masyus_work
ふりかえりとチームクレドが僕らにもたらしてくれたもの
masyus
2
280
【オンライン】Clean Architecture 達人に学ぶソフトウェアの構造と設計 輪読会 #16
masyus
0
120
Clean Architecture 達人に学ぶソフトウェアの 構造と設計_第10回
masyus
0
180
【オンライン】Clean Architecture 達人に学ぶソフトウェアの構造と設計 輪読会 #1
masyus
0
150
Chrome拡張で便利ツール作ってたら、思いがけず社内ツールを作ることになった話
masyus
0
140
開発速度UP & エンジニアポートフォリオ作成を同時実現する為の取り組み
masyus
0
160
メール文面確認テストを作りながら、テストについて改めて考えてみた
masyus
0
170
Other Decks in Programming
See All in Programming
Why Spring Matters to Jakarta EE - and Vice Versa
ivargrimstad
0
1k
破壊せよ!データ破壊駆動で考えるドメインモデリング / data-destroy-driven
minodriven
16
4.1k
From Subtype Polymorphism To Typeclass-based Ad hoc Polymorphism- An Example
philipschwarz
PRO
0
170
2万ページのSSG運用における工夫と注意点 / Vue Fes Japan 2024
chinen
3
1.3k
Webの技術スタックで マルチプラットフォームアプリ開発を可能にするElixirDesktopの紹介
thehaigo
2
920
Macとオーディオ再生 2024/11/02
yusukeito
0
200
What’s New in Compose Multiplatform - A Live Tour (droidcon London 2024)
zsmb
1
350
Importmapを使ったJavaScriptの 読み込みとブラウザアドオンの影響
swamp09
4
1.2k
GCCのプラグインを作る / I Made a GCC Plugin
shouth
1
150
Go言語でターミナルフレンドリーなAIコマンド、afaを作った/fukuokago20_afa
monochromegane
2
140
讓數據說話:用 Python、Prometheus 和 Grafana 講故事
eddie
0
350
Nuxtベースの「WXT」でChrome拡張を作成する | Vue Fes 2024 ランチセッション
moshi1121
1
520
Featured
See All Featured
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
355
29k
Why You Should Never Use an ORM
jnunemaker
PRO
53
9k
Reflections from 52 weeks, 52 projects
jeffersonlam
346
20k
Learning to Love Humans: Emotional Interface Design
aarron
272
40k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
504
140k
The Power of CSS Pseudo Elements
geoffreycrofte
72
5.3k
Put a Button on it: Removing Barriers to Going Fast.
kastner
59
3.5k
Become a Pro
speakerdeck
PRO
24
5k
4 Signs Your Business is Dying
shpigford
180
21k
Art, The Web, and Tiny UX
lynnandtonic
296
20k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
Testing 201, or: Great Expectations
jmmastey
38
7k
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章を読んでみての感想