本文へスキップ
totonoe.tech

設計・開発手法を整える

中級

TDDを整える。

= テスト駆動開発のRed→Green→Refactorを、次へボタンで1周体験

TDDが初めての方は、先に そもそも TDD とは・どんな場面で使うか をどうぞ。

⚠️ 「TDDとは」の説明は、Kent Beckが体系化したとされる考え方の一般的な要約です。特定の書籍・解説記事の言い回しをなぞったものではありません。

⚠️ Red/Green/Refactorの厳密な運用(1サイクルの粒度・テストの粒度など)は流派・現場により異なります。本ページの整理は一般的な一例であり、断定するものではありません。

Red → Green → Refactor サイクル図解

3つの状態がこの順で繰り返される円環です。「次へ」を押すと、1周を段階ごとに追体験できます。「戻る」で1つ前に戻れます。

🔴 Red 🟢 Green 🔵 Refactor

—

下の「次へ」を押すと、Redから1周を追体験できます。

✅ やること

—

🚫 やらないこと

—

テストファースト手順チェッカー

実際にやった順にチェックしてください(上から順でなくてもOK)。チェックした「順番」を記録し、本来より後にやるべき手順を先にチェックしていないかを検出します。

実際の作業を、やった順にチェック チェックするそばから判定(送信ゼロ・保存なし)

結果

チェックすると、ここに判定が出ます

そもそも TDD とは

先にテストを書いてから、中身を作る。

TDD は Test-Driven Development(テスト駆動開発) の略で、Kent Beck が広めた開発の進め方です。実装を書く前に、まず失敗する自動テストを書き、それを通す最小限のコードを書き、最後にコードを整える、という短いサイクルを繰り返します。

身近なたとえでは、料理を作る前に「完成したらこうなっているはず」という見本の写真を先に決めておくようなものです。作った後で確認方法を考えるより、ゴールが先にあるので迷いにくくなります。近い言葉の BDD は、このリズムの手前で、業務の振る舞いを合意する考え方です。

どこで・どんな場面で使うか

  • 関数やクラスを書くときの開発現場

    計算や判定のロジックのように、入力と結果がはっきりした部分から先にテストを書きます。

  • バグ修正

    直す前に、そのバグを再現するテストを書いておくと、直ったことと再発しないことを確かめられます。

  • リファクタリング(コードの整理)

    テストが通る状態を保ったまま、安心して中身の構造を整えられます。

  • SES・受託の品質管理

    自動テストが残っていると、後から入った人が変更しても壊れていないかを確認できます。

  • ITパスポート・基本情報・応用情報

    テスト手法や開発手法の分野で、用語として出てくることがあります。

知らないと何が困るか

  • テストが後付けになり、確認になっていない。書いたコードに合わせたテストでは、仕様の取りこぼしを見つける効果が弱くなります。
  • 変更するのが怖くなる。自動テストがないと、直した後に別の場所が壊れていないか手で確かめることになります。
  • 「テストを書くこと」が目的になる。大切なのは本数ではなく、先にゴールを決めて小さく進める順番です。

上のサイクル図で Red から Refactor まで1周たどり、手順チェッカーで順番の崩れを確かめてみてください。

TDDとは — 提唱者 Kent Beck

TDD(テスト駆動開発、Test-Driven Development)は、Kent Beckが体系化したとされる開発の進め方です。実装コードを書く前に、まずその機能が満たすべき条件を示す自動テストを書き、テストが失敗する状態(Red)から、テストを通す最小限の実装(Green)を経て、コードの内部構造を整理するリファクタリング(Refactor)へと進む、という短いサイクルを繰り返します。

重要なのは「自動テストを書くこと」自体ではなく、実装よりテストを先に書く、という順番にあるとされます。先にテストを書くと、そのテストは「これから作るものの仕様・使われ方」を先に決める役割を持ちます。逆に実装を先に書いてから後付けでテストを足すと、そのテストは「今書いたコードに合わせて通るように書かれたテスト」になりやすく、仕様を先に固定するという効果は得にくいとされます。上のチェッカーが「順番」を見ているのはこのためです。

BDDとの関係

TDDとBDD(振る舞い駆動開発、提唱者はDan Northとされます)は、しばしば対比して語られますが、対立する手法ではないとされます。TDDは主に開発者の視点で実装コードの正しさを内側から検証するのに対し、BDDはその外側で、ユーザーや業務の視点から「どう振る舞うべきか」を業務言語で記述し、関係者で合意することに重きを置く、という整理がされます。

現場によっては、BDDで合意した振る舞い(シナリオ)を出発点にしつつ、その内部実装をTDDのRed→Green→Refactorで進める、という併用のされ方もあります。どちらか一方を選ぶ・選ばないという関係ではなく、扱う抽象度(外側の振る舞いか、内側の実装か)が異なる、という捉え方が一般的です。詳しくは「BDDを整える」をご覧ください。

③ 使い方

「テストを書けばTDD」ではなく、先に書くリズムが本質。

  1. 1

    まず円環図解で、1周の流れをつかむ。

    「次へ」を押しながら、Red・Green・Refactorそれぞれの段階で「やること」だけでなく「やらないこと」も確認してください。特にRefactorで新機能を追加しない、という制約は見落とされやすいポイントです。

  2. 2

    次に手順チェッカーで、自分の実際の作業順を検証する。

    日々の開発の中で、6項目を実際にやった順にチェックしてみてください。「実装を先に書いてしまい、テストを後付けした」ような順序の崩れがあれば、⚠️としてその場で検出されます。

  3. 3

    「テストを書けばTDD」ではないことを意識する。

    自動テストが存在すること自体はTDDの証明にはならないとされます。実装より先にテストを書き、Red→Green→Refactorの短いリズムを繰り返すこと自体に価値がある、という一般的な整理を持ち帰ってください。

⚠️ 本ツールはTDDの一般的な整理の一例です。1サイクルの粒度・テストの書き方・チーム運用のルールは流派・現場により異なり、個別のプロジェクトのルールに優先するものではありません。

🧭 BDD・DDD・MSA・TDDは、同じプロダクトで同時に使われることが多い、選択問題ではない4つの技術です。設計の話をするときは、あわせてご覧ください。

🔒 サイクル図解・手順チェッカーの表示・判定はすべてこの端末(ブラウザ)の中で完結します。チェック内容はどこにも保存・送信されません(送信ゼロ)。

このツールについて

失敗するテストを先に書く(Red)→そのテストを通す最小限の実装をする(Green)→テストが通ったままコードを整理する(Refactor)。この短いサイクルを「次へ」で1周たどりながら、各段階の「やること・やらないこと」を確認できます。テストファースト手順チェッカーは、実際にチェックした順番から「順序」の崩れを検出します。

Red→Green→Refactorを円環図解+「次へ」で1周体験。各段階のやること・やらないことを確認。テストファースト手順チェッカーは、チェックした順番から「実装を先にしてしまった」等の順序違反を検出。

主な機能

  • Red→Green→Refactorの円環SVG図解(次へ/戻る/最初から で1周を追体験)
  • 各段階の「やること・やらないこと」を1行ずつ表示
  • テストファースト手順チェッカー:チェック順から順序違反を検出(決定論)
  • 未チェック項目の抜けも同時表示
  • TDDとは(Kent Beckの一般的な要約)/BDDとの関係(通説)を解説
  • 送信ゼロ・保存なし

よくある質問

Q. TDD(テスト駆動開発)とは何ですか?

A. 実装コードを書く前にまず失敗するテスト(Red)を書き、それを通す最小限の実装(Green)をし、テストが通ったままコードを整理する(Refactor)というサイクルを繰り返す開発手法です。Kent Beckが体系化したとされます。「テストを書く」こと自体ではなく、実装より先にテストを書くリズムを繰り返す点が特徴とされます。

Q. テストを後から書くのと何が違うのですか?

A. 後から書くテストは「動くことの確認」が主な役割になりがちですが、先に書くテストは「これから作るものの仕様・使い方」を先に決める役割を持つとされます。本ツールの手順チェッカーで実際の作業順を記録すると、後付けのテストになっていないかを確認できます。

Q. リファクタリングの段階で新しい機能を追加してもいいですか?

A. 一般的には推奨されないとされます。Refactorはテストが通っている状態を保ったまま内部構造だけを整理する段階とされ、新しい振る舞いを追加するとその変更がテストで守られていない状態になるためです。新機能は次のRedから始めるサイクルで追加するのが一般的とされます。

Q. BDD(振る舞い駆動開発)とはどう違いますか?

A. TDDは実装コードを開発者視点で検証する手法、BDDはその外側でユーザーや業務の視点から「どう振る舞うべきか」を業務言語で記述し合意する手法、とされます。対立するものではなく、BDDで合意した振る舞いを内部ではTDDのサイクルで実装していく、という併用がされることもあります。

Q. 順番を守らないと何がまずいのですか?

A. 実装を先に書いてからテストを書くと、そのテストは「今書いたコードに合わせて通るように書かれたテスト」になりやすく、本来テストが持つ「仕様を先に固定する」役割が働きにくいとされます。手順チェッカーはチェックした順番を記録し、後の手順を先にチェックした箇所を検出して注意表示します。

入力値はURLの「#」以降に入るためサーバーには送信されません。リンクを開くと同じ状態を復元します。

続けて整える

totonoe.tech を運営する株式会社Koinobori は、法人向けの研修サービス「NOBORIBA®」も運営しています。 ここで手を動かした内容を、講師から教わる形の研修です。このページの道具は無料のまま、登録もいりません。

運営サイト

私たちが運営するサイト