💭

テスト駆動開発

に公開

このページでは、テスト駆動開発の重要性を考え、既存のプロジェクトに途中からテスト駆動開発を適用していくために、システム開発におけるテストの基本を振り返りながら、よりシステム開発/運用が効率的に行えるようになるためのアプローチを考え実践していく。

システムレビューの簡易化や、本番デプロイ後のバグ検出の減少が主な目的になる。

システム開発におけるテスト

テストパターンの全体像

機能テスト

システムやソフトウェア、製品、またはサービスが提供する特定の目的を達成するために実行されるタスクや操作を行う部分

  • 単体テスト
    対象:関数やコンポーネントなど
  • 結合テスト
    対象:複数の関数やコンポーネント
  • 総合テスト
    対象:フロントエンドからバックエンドまで全ての関数やコンポーネント
  • 受入テスト
    対象:ユーザー

非機能テスト

マシンリソースやブラウザに対するパフォーマンステストなど

  • パフォーマンス
    対象:システムインフラやブラウザ
  • レジリエンス(弾性)
    対象:システムインフラやブラウザ
  • ミューテーション(品質の見える化)
    対象:プロダクションコード
  • 互換性
    対象:ブラウザ
  • セキュリティ
    対象:システムインフラやブラウザ

UI/UXテスト

ブラウザの外観に関する機能など、見た目の変化に関する部分

  • ビジュアル
    対象:レスポンシブデザイン、デスクトップ・モバイルのデバイス
  • アクセシビリティ
    対象:キーボード操作など

テスト駆動開発とは

https://panda-program.com/posts/test-driven-development
前述したテスト群を軸として開発を進めて、テストが問題なければ良しとする開発手法

ではなく

ソフトウェアが期待しない動作をすることに対する不安を取り除くための一連の手法

TDD実践の流れ

  1. 目標をTODOリストとして書き出す
  2. TODOリストから一つピックアップし、テストを書く
  3. テストコードを実行して失敗させる(レッド)
  4. 実装コードを書く
  5. できる限り最短でテストが通るコードを実装する(グリーン)
  6. コードの重複を除去する(リファクタリング)
  7. 次のTODOを選び、2に進む

実コードで実践

実践中、追記予定

Discussion