コンテンツにスキップ

1. テスト戦略

このドキュメントは、プロジェクトの成果物の品質を保証し、信頼性を高めるためのテスト戦略について定義します。 高品質なソフトウェアを提供するためには、網羅的かつ効率的なテストが不可欠です。このドキュメントは、本プロジェクトにおけるテストの目的、範囲、種類、実施方法、および管理に関する基本的な方針を示します。

1. テストの目的

本プロジェクトにおけるテストの主な目的は以下の通りです。

  • 機能の正当性検証: 各機能が設計仕様通りに正しく動作することを確認します。
  • バグの早期発見と修正: 開発サイクルの早い段階で不具合を発見し、修正コストを低減します。
  • リグレッションの防止: コード変更や機能追加によって、既存の機能が損なわれないこと(デグレードしないこと)を保証します。
  • 設計とコードの品質向上: テスト容易性を考慮した設計を促進し、結果としてコードのモジュール性や保守性を高めます。
  • ドキュメントとしての役割: テストコード自体が、システムの具体的な使用方法を示す生きたドキュメントとしての役割も果たします。

2. テストの範囲

テストの対象範囲は、原則としてプロジェクトを構成する全てのコンポーネントとします。

  • コアロジック: ビジネスルール、ドメインモデル、主要なアルゴリズムなど。
  • インターフェース: APIエンドポイント、UIコンポーネントなど、外部との接点。
  • データ永続化: データベースとのやり取り、ファイルI/Oなど。
  • インフラ連携: 外部サービスとの接続部分。
  • エラーハンドリング: 不正な入力や予期せぬ状態に対する、システムの挙動。

3. テストの種類とアプローチ

本プロジェクトでは、品質を多角的に保証するために、以下の種類のテストをバランス良く組み合わせて実施します(テストピラミッド)。

具体的なテストケースの書き方について

各テストの具体的な実装ルールや命名規則、推奨ツールについては、以下の各規定を参照してください。 2.1 単体テスト規定 / 2.2 結合テスト規定 / 2.3 E2Eテスト規定 / 2.4 パフォーマンステスト規定

  • 単体テスト (Unit Tests):
    • 目的: システム内の最小単位のコンポーネント(クラス、メソッド、関数など)が個別に正しく機能することを確認します。
    • アプローチ: 依存関係はモックやスタブを用いて分離し、テスト対象のユニットに集中します。正常系、異常系、境界値を網羅します。
  • 結合テスト (Integration Tests):
    • 目的: 複数のコンポーネントを組み合わせて連携させた際に、全体として正しく機能することを確認します。
    • アプローチ: データベースやファイルシステム、外部APIとの連携など、単体テストではモックアウトしていた部分を実際に接続してテストします。
  • E2Eテスト (End-to-End Tests):
    • 目的: 実際のユーザーシナリオに沿って、システム全体が最初から最後まで正しく動作することを確認します。
    • アプローチ: UI(Webブラウザやクライアントアプリ)を自動操作し、ユーザーの視点でシステムをテストします。
  • パフォーマンステスト (Performance Tests) / ベンチマーク:
    • 目的: システムの主要な機能が、要求される性能要件(応答時間、スループットなど)を満たしているかを確認し、リグレッションを検出します。
    • アプローチ: 専用のツール(k6, JMeter, BenchmarkDotNetなど)を利用し、負荷をかけた状態での性能を測定します。

4. テストの実施と管理

  • テストコードの場所:
  • 自動化 (CI):
    • 全ての単体テストと結合テストは、CI (継続的インテグレーション) プロセスの一部として、コードがプッシュされるたびに自動実行します。
  • テストカバレッジ:
    • コードカバレッジツールを利用してテストカバレッジを測定し、高いカバレッジ(例: 80%以上)を維持するよう努めます。ただし、カバレッジの数値を目的化するのではなく、重要なロジックが網羅されているかを重視します。
  • プルリクエストとテスト:
    • 新しい機能の追加やバグ修正を行う際は、必ず対応するテストコードを作成または更新し、プルリクエストに含めます。
    • プルリクエストは、全ての関連テストが成功することをマージの必須条件とします。