Slide 1

Slide 1 text

TDDのフローの本質を“3分で”明快にしたい ~TDDにおけるテストとは何なのか?~ Raccoon Tech Connect #4

Slide 2

Slide 2 text

導入 2 t-wadaのブログ【翻訳】テスト駆動開発の定義 https://t-wada.hatenablog.jp/entry/canon-tdd-by-kent-beck 2024/3/8 以下の記事が世に放たれた… 【今回の LT】 TDDの解像度が超上がるが 明快さが足りない気がした 3分で明快にする挑戦

Slide 3

Slide 3 text

TDD(テスト駆動開発)とは 3 リスト ➡ Red ➡ Green ➡ リファクタ 「 t-wadaのブログ【翻訳】テスト駆動開発の定義」では以下の流れと仰っている 1. テストリストを書く 2. テストを1つ書く(Red) 3. テストを成功させる(Green) ○ ※ 新しいテストの必要性に気づいたらリストに追加 4. 必要に応じてリファクタリングを行う 5. テストリストが空になるまでステップ2に戻って繰り返す

Slide 4

Slide 4 text

リスト ➡ Red ➡ Green ➡ リファクタ TDDの本質はどこ? 4 1. テストリストを書く 2. テストを1つ書く(Red) 3. テストを成功させる(Green) ○ ※ 新しいテストの必要性に気づいたらリストに追加 4. 必要に応じてリファクタリングを行う 5. テストリストが空になるまでステップ2に戻って繰り返す 「 t-wadaのブログ【翻訳】テスト駆動開発の定義」では以下の流れと仰っている

Slide 5

Slide 5 text

TDDの本質はどこ? – 「リスト」 5 ● (テスト) リストの位置づけ ○ t-wadaさんの記事では… ■ 『あるシステムに振る舞いの変更が望まれているとき  新しい振る舞いにおいて期待される動作をリストアップする』 ■ 必要になる「動作」のリストアップに集中する工程 ● ※ 「動作」の具体イメージ: 小さい関数 (メソッド) ○ 大きなタスク (ゴール) を多数の小さなタスク (ゴール) に分解 ● 最終ゴールへの道筋を定めていく ● 1つずつ順番に取り組む (目の前の1つに集中する) 準備 タスク 最終 ゴール タスク タスク タスク タスク タスク タスク

Slide 6

Slide 6 text

TDDの本質はどこ? –「リファクタ」 6 ● リファクタの位置づけ ○ t-wada さんの記事では… ■ 『ここまで来て、ようやく実装の設計判断を行えるようになる』 ● ※『内部実装がどうあるべきかの判断は後から確保できる』  → 内部の設計を(行えるようになったら)行う工程 ■ リファクタリング = 内部の質(設計)の改善 ○ 立ち止まって全体を見直し(設計を)改善する機会 ■ 目の前の小さなゴールに集中する = 視野が狭くなりがち  → 視野を(全体に)広げ直す = 過集中防止 ■ 「動作の実装」と「設計の改善 (洗練)」も分けて順番に行う ● ※設計の改善に取り組む際、テストが元の動作を担保する

Slide 7

Slide 7 text

リスト ➡ Red ➡ Green ➡ リファクタ TDDの本質はどこ? –「繰り返す(サイクル)」 7 最終ゴールへの 道筋を整理/定義 単なる「動作」の実 装のみに集中 必要な分だけの設計の洗 練のみに集中 このサイクル (ワークフロー) に則りながら 目の前の小さなタスク ( 動作の実装 / 設計の洗練 ) に 集中して1つずつ順番に取り組む

Slide 8

Slide 8 text

このサイクル (ワークフロー) に則りながら 目の前の小さなタスク ( 動作の実装 / 設計の洗練 ) に 集中して1つずつ順番に取り組む リスト ➡ Red ➡ Green ➡ リファクタ TDDの本質 8 最終ゴールへの 道筋を整理/定義 単なる「動作」の実 装のみに集中 必要な分だけの設計の 洗練のみに集中 本質

Slide 9

Slide 9 text

TDDの本質 9 PLAN CHECK DO ACTION PDCA cycle これに TDD のワークフローを当てはめると…

Slide 10

Slide 10 text

TDDの本質 10 PLAN CHECK DO ACTION PDCA cycle (Todo)リストの作成 ・「動作」を列挙 =タスク分解/整理

Slide 11

Slide 11 text

TDDの本質 11 PLAN CHECK ACTION PDCA cycle DO (Todo)リストの作成 ・「動作」を列挙 =タスク分解/整理 1つのタスクに着手 ・1つのゴール (動作  の実装) に集中

Slide 12

Slide 12 text

TDDの本質 12 PLAN ACTION PDCA cycle DO CHECK (Todo)リストの作成 ・「動作」を列挙 =タスク分解/整理 1つのタスクに着手 ・1つのゴール (動作  の実装) に集中 (内部) 設計を見直す ・設計の洗練  が必要か考える

Slide 13

Slide 13 text

TDDの本質 13 PLAN PDCA cycle DO CHECK ACTION (Todo)リストの作成 ・「動作」を列挙 =タスク分解/整理 1つのタスクに着手 ・1つのゴール (動作  の実装) のみに集中 (内部) 設計を見直す ・設計の洗練  が必要か考える (内部) 設計の洗練 ・リファクタリング =内部の質を改善

Slide 14

Slide 14 text

TDDの本質 14 PLAN CHECK DO ACTION PDCA cycle (Todo)リストの作成 ・「動作」を列挙 =タスク分解/整理 1つのタスクに着手 ・1つのゴール (動作  の実装) のみに集中 (内部) 設計を見直す ・設計の洗練  が必要か考える (内部) 設計の洗練 ・リファクタリング =内部の質を改善 Feedback

Slide 15

Slide 15 text

TDDの本質 15 PLAN PDCA cycle DO CHECK ACTION (Todo)リストの作成 ・「動作」を列挙 =タスク分解/整理 (内部) 設計の洗練 ・リファクタリング =内部の質を改善 1つのタスクに着手 ・1つのゴール (動作  の実装) のみに集中 (内部) 設計を見直す ・設計の洗練  が必要か考える -Where is the Test?- Feedback

Slide 16

Slide 16 text

GOAL テストの役割 16 PLAN CHECK DO ACTION PDCA cycle (Todo)リストの作成 ・「動作」を列挙 =タスク分解/整理 1つのタスクに着手 ・1つのゴール (動作  の実装) のみに集中 (内部) 設計を見直す ・設計の洗練/改善  が必要か考える 設計の洗練/改善 ・リファクタリング =内部の質を改善 Feedback Test

Slide 17

Slide 17 text

● 計画立て ➡ 動作の実装 ➡ 設計の洗練 の (Feedback) サイクルを回す ○ (計画立て) 大きなゴールを多数の小さなゴールに分解 ○ (動作の実装) 目の前の小さな1つのゴールに集中 ■ テストから書く = 小さな1つのゴールの明確化 ○ (設計の洗練) 時には立ち止まって全体を見直し改善に集中 ■ リファクタ = 内部の質を上げる(テストが元の動作を担保) ● テスト = ツール (手段) ○ テストは目的になりえない (TDD以外でも共通事項) ○ 最終ゴールへ向けて敷いていくレール という補助「ツール」 ○ 内部(設計やコード)の質を洗練する ための「手段」 まとめ 17 TDDのフローの本質とは 「小さく分解して1歩ずつ順番に取り組むこと」