mcpField
T
test-driven-development

test-driven-development

github.com/oakossテスト・品質2092 回インストール11 週間前に更新
リポジトリ

test-driven-development について

test-driven-developmentは、開発者向けに、失敗するテスト、最小限の実装、リファクタリングの順で変更を進めるスキルです。観察可能な振る舞いをテストし、本番コードの変更前に必要性を確かめます。

主な機能

  1. 01レッド・グリーン・リファクターのサイクル
  2. 02テストを一つずつ完了
  3. 03実装ではなく振る舞いをテスト
  4. 04入出力境界のみをモック
  5. 05テスト通過後にリファクタリング
  6. 06失敗するテストでバグを再現

活用シーン

  1. 01垂直スライスで機能のテストを作成
  2. 02修正前にバグを再現
  3. 03テストを通じたインターフェース設計
  4. 04テストを通した状態でのリファクタリング

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/oakoss/agent-skills --skill test-driven-development

インストール後、Claude Code で/test-driven-developmentを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
design-for-testability.md
mocking-boundaries.md
test-quality.md

詳細

テスト駆動開発

次の振る舞いを示す失敗するテストを1つ書き、それを通す最小限のコードを書いてから、テストがすべて通っている状態でリファクタリングします。すべての本番コードの変更は、その必要性を示すテストから始めます。これは各垂直スライスで守るべき規律です。重要なのはフレームワークの構文ではなく、テストを書くタイミングと理由です。

探索的なプロトタイピング、設定のみの変更(環境変数、機能フラグ)、ビジュアルやCSSのみの調整、保守を予定していない単発のスクリプトでは省略します。

クイックリファレンス — TDD サイクル

フェーズアクションルール
RED適切な理由で失敗するテストを1つ書く失敗するテストなしで本番コードを書かない
GREENテストを通す最もシンプルなコードを書く早まって汎用化したくなる気持ちを抑える
REFACTORすべてのテストを通したまま構造を改善する振る舞いと構造を同時に変更しない

クイックリファレンス — 原則

原則実践
一度に1つのテスト次のテストを書く前に、レッド・グリーン・リファクタリングのサイクルを完了する
実装より振る舞いコードの動作をテストし、動作の仕方はテストしない。出力と副作用を検証する
垂直スライスレイヤーごとではなく、エンドツーエンドの振る舞いを一度に1つずつTDDする
境界でモックするI/O、ネットワーク、ファイルシステム、クロックをモックする。内部の協調相手はモックしない
深いモジュール内部が豊かな小さなインターフェースを設計する。より少ないテストで多くの振る舞いを網羅する
グリーンのときだけリファクタリング構造に手を加える前にすべてのテストを通す。レッドの状態でのリファクタリングは新たなバグを隠す
テストを通して設計する最初のテストがAPI設計の決定そのもの。テストが書きにくければ、インターフェースも扱いにくい
すべてのバグに失敗するテスト修正コードを書く前に、失敗するテストでバグを再現する

コーディング前の計画

手順アクション成果物
1振る舞いを特定する機能が示すべき、観測可能な振る舞いの一覧
2依存関係順に並べる各テストが、それまでに合格したテストを基に進む順序
3インターフェースを設計する関数シグネチャ、パラメーター型、戻り値の型
4モックの境界を特定するテストダブルが必要な外部依存関係

よくある間違い

間違い正しいパターン
すべてのテストを最初に書くテストは一度に1つずつ書きます。次に進む前にサイクルを完了させます
プライベートメソッドをテストするパブリックインターフェースを通じてテストします。プライベートメソッドは実装の詳細です
内部の協調オブジェクトをモックするI/O の境界でのみモックし、自分のコードは信頼します
失敗するテストを書く前にコードを書くまず RED にします。失敗するテストによって、その動作がまだ実装されていないことを確認できます
テストが失敗している間にリファクタリングするまず GREEN にします。その後、自信を持ってリファクタリングします
呼び出し順序に依存するテスト内部メソッドが呼び出されたかどうかではなく、出力と状態を検証します
リファクタリングの段階を省略するGREEN になっても完了ではありません。次に進む前に重複や命名を整理します
期待値をハードコードする三角測量を使います。2つ目のテストケースを追加して、汎用的な解決策が必要になるようにします
1つの機能につき巨大なテストを1つ書く動作ごとにテストを1つ書きます。小さく、焦点が絞られ、単独で意味を持つテストにします

委任

  • スライスへの分解:tracer-bullets スキルが利用できる場合は、各スライス内で TDD を適用する前に、機能を垂直スライスに分解するために使用します
  • テストフレームワークの構文:フレームワーク固有のパターンは、vitest-testing、e2e-testing、または api-testing スキルに委任します
  • 機能の計画:plan-first-development スキルが利用できる場合は、TDD サイクルに入る前の事前計画に使用します
  • 個々の TDD サイクル:コンテキストを集中させるため、各 red-green-refactor サイクルを Task サブエージェントに委任します

参考資料

  • テストの品質 — 良いテストと悪いテスト、何をテストするか、命名、三角測量、リファクタリングの兆候
  • モックの境界 — 境界ルール、テストダブル、依存性注入、アンチパターン
  • テスト容易性を考慮した設計 — 深いモジュール、インターフェース優先の設計、純粋関数、計算と I/O

コメント