# テスト方針書

## 概要

本ドキュメントは、Dear ImGui（Immediate Mode Graphical User Interface）ライブラリのテスト方針を定義する。Dear ImGuiはC++で実装されたクロスプラットフォームGUIライブラリであり、複数のグラフィックスバックエンド（OpenGL、DirectX、Vulkan、Metal等）とプラットフォーム（Windows、Linux、macOS、iOS、Android、Emscripten）をサポートしている。

## テスト戦略

### テストレベル

| レベル | 目的 | 担当 |
| --- | --- | --- |
| 単体テスト | ImGuiコア機能の個別検証（ウィジェット、入力処理、描画コマンド生成等） | imgui_test_engine（外部リポジトリ） |
| 結合テスト | バックエンド統合テスト（各プラットフォーム + レンダラーの組み合わせ） | GitHub Actions CI/CD |
| システムテスト | マルチプラットフォームビルド検証、静的解析 | GitHub Actions CI/CD |
| 受入テスト | デモアプリケーション（imgui_demo.cpp）による視覚的検証 | 手動テスト |

### テスト種別

| 種別 | 概要 | 実施タイミング |
| --- | --- | --- |
| ビルドテスト | 各プラットフォーム・コンパイラでのコンパイル成功確認 | Push/PR毎、定期実行（毎日9:00 UTC） |
| 静的解析テスト | PVS-Studioによるコード品質分析 | ビルドワークフロー実行時 |
| 構成バリエーションテスト | 各種コンパイルフラグの組み合わせ検証 | CI/CD実行時 |
| 機能テスト | imgui_test_engineによる自動テスト | CI/CD実行時（Windows/Linux） |
| パフォーマンステスト | 明示的な自動パフォーマンステストなし | 手動検証 |
| セキュリティテスト | 明示的なセキュリティテストなし | 該当なし |

## テスト環境

| 環境 | 用途 | 構成 |
| --- | --- | --- |
| Windows | ビルド・テスト実行 | windows-2025、Visual Studio 2022 Enterprise、MinGW |
| Linux | ビルド・テスト実行 | ubuntu-latest、GCC、Clang |
| macOS | ビルド | macos-latest、Xcode、Clang |
| iOS | ビルド | macos-14、Xcode |
| Emscripten | ビルド | ubuntu-latest、emsdk |
| Android | ビルド | ubuntu-latest、Gradle |

## テストツール

| ツール | 用途 | バージョン |
| --- | --- | --- |
| imgui_test_engine | 自動テスト実行（外部リポジトリ：ocornut/imgui_test_engine） | 最新 |
| GitHub Actions | CI/CDパイプライン | v6（actions/checkout） |
| PVS-Studio | 静的解析 | 最新 |
| MSBuild | Windows ビルド | Visual Studio 2022（v143ツールセット） |
| Make/CMake | Linux/macOS ビルド | システム標準 |
| Gradle | Android ビルド | システム標準 |
| Xcode | macOS/iOS ビルド | システム標準 |

## カバレッジ目標

| 対象 | 目標値 |
| --- | --- |
| 行カバレッジ | 明示的な目標値なし |
| 分岐カバレッジ | 明示的な目標値なし |

**補足**: Dear ImGuiはGUIライブラリという性質上、視覚的な確認が重要であり、コードカバレッジよりもビルド成功率とマルチプラットフォーム対応を重視している。imgui_test_engineによる自動テストは機能の動作検証に焦点を当てている。

## テストデータ

- **ヌルバックエンド（example_null）**: グラフィックス出力なしでImGuiコアの動作を検証するための最小構成
- **デモウィンドウ（imgui_demo.cpp）**: 全機能のショーケースとして使用
- **テスト用構成マクロ**:
  - `IMGUI_DISABLE_OBSOLETE_FUNCTIONS`: 非推奨関数の無効化テスト
  - `IMGUI_DISABLE_OBSOLETE_KEYIO`: 非推奨キー入力の無効化テスト
  - `IMGUI_USE_WCHAR32`: Unicode拡張テスト
  - `IMGUI_DISABLE_DEMO_WINDOWS`: デモ無効化テスト
  - `IMGUI_DISABLE_DEBUG_TOOLS`: デバッグツール無効化テスト
  - `IMGUI_DISABLE_FILE_FUNCTIONS`: ファイル機能無効化テスト
  - `IMGUI_USE_BGRA_PACKED_COLOR`: カラーフォーマットテスト
  - `IMGUI_DISABLE_WIN32_FUNCTIONS`: Win32関数無効化テスト

## 不具合管理

- **課題管理**: GitHubのIssues機能を使用
- **プルリクエストテンプレート**: `.github/pull_request_template.md`で標準化
- **バグ報告**: GitHubのIssue Templateを使用（`.github/ISSUE_TEMPLATE/issue_template.yml`）

## CI/CD連携

### ワークフロー構成

| ワークフロー | トリガー | 目的 |
| --- | --- | --- |
| build | push、pull_request、workflow_run | マルチプラットフォームビルド・テスト |
| static-analysis | build実行時 | PVS-Studioによる静的解析 |
| scheduled | cron（毎日9:00 UTC） | 定期ビルドトリガー |
| manual | workflow_dispatch | 手動フルビルドトリガー |

### ビルドマトリックス

**Windowsビルド（windows-2025）**:
- MinGW 64-bit（追加警告、DLLビルド、シングルファイルビルド）
- MSVC 64-bit（追加警告）
- Win32/Win64各種サンプル（GLFW、SDL2、SDL3、DirectX9/10/11/12、Vulkan）

**Linuxビルド（ubuntu-latest）**:
- GCC 32-bit/64-bit（追加警告）
- Clang 32-bit/64-bit（追加警告）
- 各種構成フラグでのビルド（FreeType、ImWchar32、C++20/C++26等）
- Vulkanバックエンドビルド

**macOSビルド（macos-latest）**:
- Clang 64-bit
- GLFW、SDL2、SDL3、Metalバックエンド
- Xcodeプロジェクトビルド

**iOSビルド（macos-14）**:
- example_apple_metal（コード署名無効）

**Emscriptenビルド（ubuntu-latest）**:
- SDL2 + OpenGL3
- GLFW + WebGPU（Makefile/CMake両方）

**Androidビルド（ubuntu-latest）**:
- example_android_opengl3（Gradle）

### テスト実行

- **Windows/Linuxのみ**: imgui_test_engineによる自動テストを実行
- **テスト項目**: `tests`カテゴリ、Dockingブランチでは`viewport`カテゴリも追加
- **macOS**: テストはコメントアウト状態（現在無効）

## 備考

### プロジェクト特性

- Dear ImGuiはイミディエイトモードGUIライブラリであり、状態管理が最小限のため、単体テストよりも統合テストとビルド検証が重視されている
- 豊富なバックエンド対応（OpenGL2/3、DirectX9/10/11/12、Vulkan、Metal、WebGPU、SDL Renderer）により、ビルドマトリックスが非常に広範
- シングルファイルビルド（`misc/single_file/imgui_single_file.h`）のサポートによる統合の容易さ

### テストの制限事項

- 視覚的な出力検証は手動で実施（自動スクリーンショット比較なし）
- パフォーマンスのリグレッションテストは明示的に自動化されていない
- セキュリティに特化したテストは実施していない（GUIライブラリという性質上）

### 外部依存

- **imgui_test_engine**: ocornut/imgui_test_engineリポジトリから取得
- **SDL2/SDL3**: 各プラットフォームのパッケージマネージャーまたはダウンロードで取得
- **Vulkan SDK**: Windowsでは手動ビルドライブラリを使用
- **FreeType**: Linuxでのオプション依存（フォントレンダリング強化）
