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
AWS IaCの注目アップデート 2024年10月版
konokenj
3
3.3k
エンジニアとして関わる要件と仕様(公開用)
murabayashi
0
290
見せてあげますよ、「本物のLaravel批判」ってやつを。
77web
7
7.7k
카카오페이는 어떻게 수천만 결제를 처리할까? 우아한 결제 분산락 노하우
kakao
PRO
0
110
3 Effective Rules for Using Signals in Angular
manfredsteyer
PRO
0
110
Jakarta EE meets AI
ivargrimstad
0
160
cmp.Or に感動した
otakakot
3
160
よくできたテンプレート言語として TypeScript + JSX を利用する試み / Using TypeScript + JSX outside of Web Frontend #TSKaigiKansai
izumin5210
6
1.7k
watsonx.ai Dojo #4 生成AIを使ったアプリ開発、応用編
oniak3ibm
PRO
1
110
タクシーアプリ『GO』のリアルタイムデータ分析基盤における機械学習サービスの活用
mot_techtalk
4
1.4k
AWS Lambdaから始まった Serverlessの「熱」とキャリアパス / It started with AWS Lambda Serverless “fever” and career path
seike460
PRO
1
260
Make Impossible States Impossibleを 意識してReactのPropsを設計しよう
ikumatadokoro
0
170
Featured
See All Featured
Building an army of robots
kneath
302
43k
Statistics for Hackers
jakevdp
796
220k
Reflections from 52 weeks, 52 projects
jeffersonlam
346
20k
Speed Design
sergeychernyshev
25
620
Imperfection Machines: The Place of Print at Facebook
scottboms
265
13k
The Invisible Side of Design
smashingmag
298
50k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
364
24k
Producing Creativity
orderedlist
PRO
341
39k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
159
15k
Happy Clients
brianwarren
98
6.7k
Optimizing for Happiness
mojombo
376
70k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
6
410
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章を読んでみての感想