# テスト方針書

## 概要

本ドキュメントは、Oh My Zsh プロジェクトにおけるテスト方針を定義するものである。Oh My Zsh は Zsh シェルの設定管理フレームワークであり、355以上のプラグインと140以上のテーマを提供している。本プロジェクトのテストは、シェルスクリプト（Zsh）の構文検証とプラグイン機能の動作確認を主な対象としている。

## テスト戦略

### テストレベル

| レベル | 目的 | 担当 |
| --- | --- | --- |
| 単体テスト | 個別プラグイン・関数の動作検証 | プラグイン開発者 |
| 結合テスト | プラグイン間の連携・競合確認 | コントリビューター |
| システムテスト | Oh My Zsh 全体のインストール・動作確認 | CI/CD パイプライン |
| 受入テスト | ユーザー環境での動作確認 | コミュニティ（PR レビュー時） |

### テスト種別

| 種別 | 概要 | 実施タイミング |
| --- | --- | --- |
| 構文検証テスト | Zsh スクリプトの構文エラー検出 | PR 作成時・マージ時（CI） |
| 機能テスト | プラグイン・関数の動作確認 | 開発時・PR レビュー時 |
| インストールテスト | インストーラースクリプトの動作確認 | インストーラー変更時（CI） |
| セキュリティテスト | サプライチェーンセキュリティの監査 | 定期実行（週次） |

## テスト環境

| 環境 | 用途 | 構成 |
| --- | --- | --- |
| GitHub Actions (Ubuntu) | 主要テスト実行環境 | ubuntu-latest + zsh パッケージ |
| GitHub Actions (macOS) | クロスプラットフォーム検証 | macos-latest（zsh プリインストール） |
| ローカル開発環境 | 開発者によるテスト | 各開発者の Zsh 環境 |

## テストツール

| ツール | 用途 | バージョン |
| --- | --- | --- |
| zsh -n | Zsh スクリプト構文検証 | システム標準 |
| ZUnit | プラグイン単体テストフレームワーク | 最新版 |
| diff | テスト出力の比較検証 | システム標準 |
| OSSF Scorecard | サプライチェーンセキュリティ監査 | v2.4.3 |
| step-security/harden-runner | CI/CD ランナーセキュリティ強化 | v2.14.2 |

## カバレッジ目標

| 対象 | 目標値 |
| --- | --- |
| 行カバレッジ | 明示的な目標値なし（コードカバレッジツール未導入） |
| 分岐カバレッジ | 明示的な目標値なし（コードカバレッジツール未導入） |
| 構文検証カバレッジ | 100%（全 .zsh、.zsh-theme、プラグインファイル） |

### カバレッジに関する補足

本プロジェクトはシェルスクリプト（Zsh）で構成されており、従来のコードカバレッジツール（Jest、PHPUnit 等）は使用していない。代わりに、以下の観点でテストカバレッジを確保している：

1. **構文検証**: 全ての Zsh スクリプトに対して `zsh -n` による構文チェックを CI で自動実行
2. **プラグイン個別テスト**: ZUnit フレームワークを使用した単体テスト（alias-finder プラグイン等）
3. **インストーラーテスト**: 複数プラットフォームでのインストール実行確認

## テストデータ

### テストデータの準備方針

1. **プラグインテスト**: 各テストケース内で動的にテストデータ（エイリアス、環境変数等）を設定
2. **CLI テスト**: テスト用の一時ファイルを生成し、テスト完了後に削除
3. **インストーラーテスト**: クリーンな環境でインストールスクリプトを実行

### テストデータの管理

- テストフィクスチャ: `plugins/*/tests/_support/` ディレクトリに配置
- テスト出力: `plugins/*/tests/_output/` ディレクトリに配置（.gitkeep で管理）

## 不具合管理

### 不具合報告フロー

1. GitHub Issues でのバグ報告（テンプレートに従って詳細情報を記載）
2. 再現手順、期待動作、実際の動作を明記
3. 関連するプラグイン・テーマのメンテナーをメンション

### 不具合修正フロー

1. 問題の特定と修正ブランチの作成
2. 修正内容の実装とローカルでのテスト
3. PR 作成（関連 Issue を参照）
4. CI での自動テスト実行
5. レビュー後マージ

### 不具合の優先度

- **Critical**: セキュリティ脆弱性、インストール/起動の失敗
- **High**: 主要機能の動作不良
- **Medium**: 特定プラグイン/テーマの問題
- **Low**: ドキュメントの誤り、軽微な UI 問題

## CI/CD連携

### GitHub Actions ワークフロー

| ワークフロー | トリガー | 内容 |
| --- | --- | --- |
| CI (main.yml) | PR作成、masterプッシュ | 全Zshスクリプトの構文検証 |
| installer.yml | install.sh変更時 | インストーラーのマルチプラットフォームテスト |
| scorecard.yml | 週次・masterプッシュ | OSSF Scorecardによるセキュリティ監査 |
| dependencies.yml | 週次 | 依存関係の更新チェック |
| project.yml | Issue/PR作成時 | プロジェクトボードへの自動追加 |

### CI/CD パイプラインの特徴

1. **並行性制御**: 同一ワークフローの重複実行を防止（`concurrency` 設定）
2. **セキュリティ強化**: `harden-runner` による外部通信の監査
3. **クロスプラットフォーム**: Ubuntu と macOS での並行テスト
4. **自動デプロイ**: インストーラーの Vercel への自動デプロイ

### テスト実行の詳細

#### 構文検証（CI）
```bash
for file in ./oh-my-zsh.sh \
            ./lib/*.zsh \
            ./plugins/*/*.plugin.zsh \
            ./plugins/*/_* \
            ./themes/*.zsh-theme; do
  zsh -n "$file" || return 1
done
```

#### インストーラーテスト
- Ubuntu: zsh パッケージをインストール後に `sh ./tools/install.sh` を実行
- macOS: プリインストールの zsh で `sh ./tools/install.sh` を実行

## 備考

### テストに関する制約事項

1. **Zsh 依存**: テストの実行には Zsh シェルが必要
2. **CI 環境制限**: テストは `github.repository == 'ohmyzsh/ohmyzsh'` の場合のみ実行
3. **対話的テスト不可**: CI 環境では対話的な操作を伴うテストは実行不可

### 今後の改善計画

1. ZUnit を使用したプラグインテストの拡充
2. より多くのプラットフォーム（FreeBSD、各種 Linux ディストリビューション）でのテスト
3. コードカバレッジ測定ツールの導入検討

### 参考情報

- [Oh My Zsh Wiki - Troubleshooting](https://github.com/ohmyzsh/ohmyzsh/wiki/Troubleshooting)
- [CONTRIBUTING.md](https://github.com/ohmyzsh/ohmyzsh/blob/master/CONTRIBUTING.md)
- [GitHub Actions ワークフロー設定](https://github.com/ohmyzsh/ohmyzsh/tree/master/.github/workflows)
