Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

SYM
April 29, 2024
50

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

4/23 Raccoon Tech Connect #4 (3分LT) での発表スライド(公開用版)
3分には収まりましたが、3分で話す内容ではなかったので無茶でした

Mission Failed. (To be continued...
➡ ということで、作りました。
不足や3分では到底語れなかった実践Tips的なものも含めてまとめました(45分ボリューム)
https://speakerdeck.com/symthy/tddnohuronoben-zhi-toen-hui-woyin-kichu-sutamenokao-efang

SYM

April 29, 2024
Tweet

Transcript

  1. TDD(テスト駆動開発)とは 3 リスト ➡ Red ➡ Green ➡ リファクタ 「

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

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

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

    • ※『内部実装がどうあるべきかの判断は後から確保できる』  → 内部の設計を(行えるようになったら)行う工程 ▪ リファクタリング = 内部の質(設計)の改善 ◦ 立ち止まって全体を見直し(設計を)改善する機会 ▪ 目の前の小さなゴールに集中する = 視野が狭くなりがち  → 視野を(全体に)広げ直す = 過集中防止 ▪ 「動作の実装」と「設計の改善 (洗練)」も分けて順番に行う • ※設計の改善に取り組む際、テストが元の動作を担保する
  5. リスト ➡ Red ➡ Green ➡ リファクタ TDDの本質はどこ? –「繰り返す(サイクル)」 7

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

    集中して1つずつ順番に取り組む リスト ➡ Red ➡ Green ➡ リファクタ TDDの本質 8 最終ゴールへの 道筋を整理/定義 単なる「動作」の実 装のみに集中 必要な分だけの設計の 洗練のみに集中 本質
  7. TDDの本質 9 PLAN CHECK DO ACTION PDCA cycle これに TDD

    のワークフローを当てはめると…
  8. TDDの本質 11 PLAN CHECK ACTION PDCA cycle DO (Todo)リストの作成 ・「動作」を列挙

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

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

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

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

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

    ・「動作」を列挙 =タスク分解/整理 1つのタスクに着手 ・1つのゴール (動作  の実装) のみに集中 (内部) 設計を見直す ・設計の洗練/改善  が必要か考える 設計の洗練/改善 ・リファクタリング =内部の質を改善 Feedback Test
  14. • 計画立て ➡ 動作の実装 ➡ 設計の洗練 の (Feedback) サイクルを回す ◦

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