# テスト方針書

## 概要

本ドキュメントは、SQL Server First Responder Kitプロジェクトのテスト方針を定義するものである。SQL Server First Responder Kitは、SQL Serverの診断・パフォーマンス分析を行うT-SQLストアドプロシージャ群で構成されており、複数のSQL Serverバージョン（2017、2019、2022）および異なる照合順序環境での動作を保証する必要がある。

## テスト戦略

### テストレベル

| レベル | 目的 | 担当 |
| --- | --- | --- |
| 単体テスト | 各ストアドプロシージャの基本機能検証。パラメータの組み合わせ、出力形式、エラーハンドリングを検証 | 開発者 |
| 結合テスト | Pesterテストフレームワークによる自動テスト。GitHub Actionsでの自動実行により、各SQL Serverバージョンでのデプロイと基本動作を検証 | 開発者/CI |
| システムテスト | 複数のSQL Serverバージョン（2017/2019/2022）でのマトリクステスト。実際のSQL Server環境での手動検証（_TestBed.sql使用） | 開発者/QA |
| 受入テスト | コミュニティによるフィードバック、本番環境での使用実績確認。Slackチャンネル（#FirstResponderKit）でのユーザーレポート | コミュニティ/ユーザー |

### テスト種別

| 種別 | 概要 | 実施タイミング |
| --- | --- | --- |
| 機能テスト | 各ストアドプロシージャのパラメータ組み合わせテスト、出力結果検証 | プルリクエスト時、リリース前 |
| 互換性テスト | 複数SQL Serverバージョン（2017/2019/2022）での動作確認、異なる照合順序（SQL_Latin1_General_CP1_CS_AS）での検証 | CI/CDパイプライン、リリース前 |
| 回帰テスト | 既存機能への影響確認、_TestBed.sqlによる主要パラメータ組み合わせ検証 | コード変更時、リリース前 |
| セキュリティテスト | 権限チェック（VIEW_SERVER_STATE等）、SQLインジェクション対策の確認 | 手動レビュー時 |

## テスト環境

| 環境 | 用途 | 構成 |
| --- | --- | --- |
| GitHub Actions CI | 自動結合テスト | Ubuntu Latest + potatoqualitee/mssqlsuite（SQL Server 2017/2019/2022コンテナ） |
| ローカル開発環境 | 開発者による手動テスト | 開発者のSQL Server環境（SSMS/Azure Data Studio） |
| AWS クラウドラボ | リリース前検証 | SQL Server 2008-2016（Microsoft未サポート版含む）での互換性確認 |

## テストツール

| ツール | 用途 | バージョン |
| --- | --- | --- |
| Pester | PowerShellベースのテストフレームワーク。結合テストの自動実行 | 未指定（最新版を使用） |
| sqlcmd | SQL Serverへのスクリプト実行・デプロイ | SQL Server付属版 |
| SqlServer PowerShell Module | PowerShellからのSQL Server操作 | PSGallery最新版 |
| potatoqualitee/mssqlsuite | GitHub Actions用SQL Serverコンテナ | v1.7 |
| _TestBed.sql | 手動テスト用スクリプト集 | プロジェクト内蔵 |

## カバレッジ目標

| 対象 | 目標値 |
| --- | --- |
| ストアドプロシージャデプロイ成功率 | 100% |
| 主要パラメータ組み合わせテスト | _TestBed.sqlに記載された全パターン |
| SQL Serverバージョン対応 | 2017, 2019, 2022（Microsoft現行サポート版） |
| 照合順序対応 | SQL_Latin1_General_CP1_CS_AS（ケースセンシティブ） |

## テストデータ

テストデータの準備方針は以下の通りである：

1. **自動テスト（CI/CD）**: GitHub Actionsのmssqlsuiteで構築された素のSQL Server環境を使用。システムデータベース（master, tempdb）を対象に基本動作を検証
2. **手動テスト（_TestBed.sql）**:
   - DBAtools データベースへの出力テスト
   - StackOverflow サンプルデータベース（sp_BlitzIndex、sp_BlitzQueryStore等）
3. **sp_DatabaseRestore テスト**: Ola Hallengren バックアップスクリプトで作成したバックアップファイルを使用
4. **ユニコード対応テスト**: Unicode文字を含むデータベース名、テーブル名、インデックス名でのテスト

## 不具合管理

不具合管理は以下の方法で行う：

1. **GitHubイシュー**: 全ての不具合はGitHub Issuesで管理
   - バグ報告テンプレート（.github/ISSUE_TEMPLATE/bug_report.md）を使用
   - SQL Serverバージョン、ビルド番号、ツールバージョンを必須情報として収集
2. **マイルストーン管理**: リリース単位でマイルストーンを作成し、関連イシューをタグ付け
3. **優先度管理**: sp_Blitzの出力プライオリティ（1が最優先）に準じた分類
4. **コミュニティサポート**: SQLCommunity Slackの#FirstResponderKitチャンネルで報告・対応

## CI/CD連携

GitHub Actionsを使用した自動テストパイプラインの構成は以下の通りである：

### トリガー条件
- `push`: 全ブランチへのプッシュ時
- `pull_request`: オープン、レビュー依頼、同期時
- `workflow_dispatch`: 手動実行

### テストマトリクス
```yaml
matrix:
  SQL_ENGINE_VERSION: [2017, 2019, 2022]
  COLLATION: [SQL_Latin1_General_CP1_CS_AS]
```

### 実行ステップ
1. **リポジトリチェックアウト**: actions/checkout@v4
2. **SqlServerモジュールインストール**: PowerShell Gallery から SqlServer モジュールをインストール
3. **SQL Serverインストール**: potatoqualitee/mssqlsuite@v1.7 を使用してコンテナ化されたSQL Serverをデプロイ
4. **SQL Server接続確認**: sqlcmdでバージョン・照合順序を確認
5. **FRKデプロイ**: 全ストアドプロシージャ（sp_BlitzCache, sp_BlitzWho, sp_Blitz, sp_BlitzFirst, sp_BlitzAnalysis, sp_BlitzBackups, sp_BlitzIndex, sp_BlitzLock）をmasterデータベースにデプロイ
6. **デプロイ確認**: sys.proceduresからsp_Blitz%の存在を確認
7. **Pesterテスト実行**: tests/run-tests.ps1 を実行

### 認証情報
- ユーザー: sa
- パスワード: dbatools.I0
- タイムアウト: 60秒

## 備考

### 既知の制限事項
- Azure SQL DBは公式にはサポート対象外（一部動作する場合あり）
- SQL Server on Linuxではsp_DatabaseRestoreが動作しない（xp_cmdshell未提供のため）
- データベース名に疑問符（?）が含まれる場合、一部テストが失敗する可能性あり
- オフラインデータベースが存在する場合、初回実行時にsp_Blitzが失敗する場合あり

### コード要件（テスト観点）
テスト時に確認すべきコード要件：
- 全てのMicrosoft現行サポートバージョンでコンパイル・実行可能であること
- ケースセンシティブなデータベース・サーバーで動作すること
- Unicodeオブジェクト名に対応すること
- 異なる日付フォーマットに対応すること（ISO 8601推奨）

### リリース前テストプロセス
1. 全マイルストーンのイシューがクローズされていることを確認
2. devブランチのコードをクラウドラボ（SQL Server 2008-2016）でテスト
3. Merge Blitz.ps1でスクリプトをマージ
4. _TestBed.sqlで主要パラメータ組み合わせをテスト
5. テスト通過後、バージョン番号を更新
6. masterブランチにマージしてリリース
