# テスト方針書

## 概要

本ドキュメントは、dplyrパッケージ（R言語用データ操作ライブラリ）のテスト方針を定義する。dplyrは tidyverse エコシステムの中核コンポーネントであり、データフレームの文法（Grammar of Data Manipulation）を提供する。テストはtestthatフレームワーク（Edition 3）を使用し、GitHub Actionsによる継続的インテグレーションを実施する。

## テスト戦略

### テストレベル

| レベル | 目的 | 担当 |
| --- | --- | --- |
| 単体テスト | 各関数の個別動作検証（mutate, filter, select等の動詞関数） | testthat |
| 結合テスト | パイプライン連携、グループ化操作、データベースバックエンド連携 | testthat + R CMD check |
| システムテスト | R CMD check による包括的検証（マルチプラットフォーム） | GitHub Actions |
| 受入テスト | CRAN提出基準への適合、ドキュメントビルド確認 | R CMD check + pkgdown |

### テスト種別

| 種別 | 概要 | 実施タイミング |
| --- | --- | --- |
| 機能テスト | 各動詞関数（mutate, filter, select, arrange, summarise等）の動作確認 | PR作成時、main/masterブランチへのpush時 |
| 回帰テスト | スナップショットテスト（_snaps/ディレクトリ）による出力安定性確認 | PR作成時 |
| 互換性テスト | 複数Rバージョン（devel, release, oldrel-1〜4）での動作確認 | PR作成時、main/masterブランチへのpush時 |
| エンコーディングテスト | UTF-8/非UTF-8環境での文字列処理検証 | PR作成時 |

## テスト環境

| 環境 | 用途 | 構成 |
| --- | --- | --- |
| macOS (latest) | 主要開発環境テスト | R release |
| Windows (latest) | Windows互換性テスト | R release, R oldrel-4 |
| Ubuntu (latest) | Linux環境テスト、カバレッジ計測 | R devel, release, oldrel-1〜4 |
| R-hub | 追加プラットフォームテスト | linux, windows, macos（オンデマンド） |

## テストツール

| ツール | 用途 | バージョン |
| --- | --- | --- |
| testthat | 単体テストフレームワーク | >= 3.1.5（Edition 3） |
| covr | コードカバレッジ計測 | any |
| Codecov | カバレッジレポート・可視化 | codecov-action@v5 |
| R CMD check | パッケージ検証（CRAN基準） | rcmdcheck (any) |
| r-lib/actions | GitHub Actionsワークフロー | v2 |
| withr | テストヘルパー（ローカル設定管理） | Suggests依存 |

## カバレッジ目標

| 対象 | 目標値 |
| --- | --- |
| 行カバレッジ | auto（前回からの乖離1%以内）|
| 分岐カバレッジ | auto（前回からの乖離1%以内）|

備考：Codecov設定では `target: auto`、`threshold: 1%`、`informational: true` が指定されており、カバレッジ低下時も情報提供に留まる。厳密な数値目標は設けていないが、カバレッジ維持を推奨。

## テストデータ

テストデータは以下の方式で準備する：

1. **インラインデータ作成**: `tibble()`, `data.frame()` を使用してテストケース内で直接生成
2. **サンプルデータセット**: `nycflights13`, `Lahman` パッケージのデータセットを必要に応じて利用
3. **テストヘルパー関数**: `tests/testthat/helper-*.R` に定義されたユーティリティを使用
   - `helper-dplyr.R`: `expect_no_error()`, `expect_no_warning()` 等のカスタムマッチャー
   - `helper-encoding.R`: エンコーディングテスト用のローカル環境設定関数
   - `helper-s3.R`, `helper-lazy.R`, `helper-pick.R`, `helper-torture.R`: 特定機能向けヘルパー

## 不具合管理

不具合の管理は以下の方法で実施する：

1. **GitHub Issues**: 不具合報告・追跡の主要チャネル（https://github.com/tidyverse/dplyr/issues）
2. **テスト失敗時**: GitHub Actionsでテスト失敗アーティファクトを自動アップロード
3. **スナップショット更新**: `upload-snapshots: true` により、スナップショット変更時は自動コミット提案
4. **Issue Template**: `.github/ISSUE_TEMPLATE.md` に従った報告形式

## CI/CD連携

GitHub Actionsによる自動テスト実行：

### R-CMD-check.yaml
- **トリガー**: push（main/master）、pull_request
- **マトリクス構成**:
  - macOS-latest（R release）
  - Windows-latest（R release, oldrel-4）
  - Ubuntu-latest（R devel, release, oldrel-1〜4）
- **ビルドオプション**: `--no-manual`, `--compact-vignettes=gs+qpdf`

### test-coverage.yaml
- **トリガー**: push（main/master）、pull_request
- **実行環境**: Ubuntu-latest
- **計測ツール**: covr::package_coverage()
- **レポート送信**: Codecov（cobertura.xml形式）

### rhub.yaml
- **トリガー**: workflow_dispatch（手動実行）
- **用途**: 追加プラットフォームでのテスト（linux, windows, macos）

### その他ワークフロー
- **pkgdown.yaml**: ドキュメントサイト自動ビルド・デプロイ
- **pr-commands.yaml**: PR関連自動化コマンド
- **format-suggest.yaml**: コードフォーマット提案

## 備考

### テストファイル構成
- テストファイル数: 85ファイル（tests/testthat/test-*.R）
- スナップショットファイル数: 65ファイル（tests/testthat/_snaps/*.md）
- ヘルパーファイル数: 6ファイル（tests/testthat/helper-*.R）

### テスト実行方法
```r
# ローカルでのテスト実行
devtools::test()

# 特定ファイルのテスト
devtools::test_file("tests/testthat/test-mutate.R")

# カバレッジ計測
covr::package_coverage()
```

### testthat Edition 3 の特徴
- `DESCRIPTION` に `Config/testthat/edition: 3` を設定
- スナップショットテスト機能の活用（`expect_snapshot()`）
- 並列テスト実行サポート

### 依存パッケージ（テスト用）
- broom, DBI, dbplyr, ggplot2, knitr, Lahman, lobstr, nycflights13, purrr, rmarkdown, RSQLite, stringi, testthat, tidyr, withr
