Skip to content

Instantly share code, notes, and snippets.

@koriym
Created March 26, 2026 16:06
Show Gist options
  • Select an option

  • Save koriym/b1b6e922bb5ccc745d0184946ef20771 to your computer and use it in GitHub Desktop.

Select an option

Save koriym/b1b6e922bb5ccc745d0184946ef20771 to your computer and use it in GitHub Desktop.
Design by Buzzword TDD編

2003年、Kent Beckは『テスト駆動開発』を出版しました。「テストを自動化する」という話ではありません。不確実なプログラミングという作業の中で、一歩ずつ理解を深め、設計を導き出すためのワークフロー。Beckが書いたのはそういう本でした。

核心は、分析・設計・実装を時間軸で切り離し、小さな歩幅で繰り返すことにあります。

  1. **分析(テストリスト)**── 解くべき問題を「期待される振る舞い」としてリストアップする
  2. **インターフェースの設計(テストを1つ書く)**── リストから一つ選び、「どう呼び出されるのが理想か」を決める
  3. **実装(テストを成功させる)**── 設計の良し悪しは脇に置き、振る舞いの実現だけに集中する
  4. **実装の設計(リファクタリング)**── 動作が保証された状態で、初めて内部構造を整える

一度に一つのことだけに集中する。問題を解きながら設計が立ち上がってくる。オーバーエンジニアリングも、設計の放棄も、このリズムが防いでいました。

しかし「TDD」が広まる過程で、このプロセスの大半が消えました。残ったのは「実装の前にテストコードを書く」というステップ2だけです。最初の分析(テストリスト)も、最後の設計改善(リファクタリング)も省かれた。

「設計が固まっていないのにテストは書けない」「テストを書いても設計の質が上がらない」── 分析と設計のステップを飛ばして「テスト」だけを持ち込めば、そうなります。

Beck自身がこう書いています。

"If you are critiquing TDD and you are not critiquing my workflow, you are critiquing a strawman."

「もしもあなたがTDDを批評しようとしていて、かつ、私のワークフローを批評対象としていないのであれば、あなたは藁人形論法を使っていることになる」1

「問題をどう解くか」というプロセスが、「先にテストを書く」というルールに置き換わる。RESTと同じ構造がここにもあります。

source: https://gist.github.com/smeghead/61bdc57c2499389d84ae0fce91c2a57b

Footnotes

  1. Canon TDD

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment