---
paths: ["DeepTIAS.Tests/**", "Tongue extraction/**/*.cs"]
---

# テスト方針 (Testing)

テストを書く・実行するときは本方針に従うこと．フレームワークは MSTest を使う（[技術スタック](../../docs/02_ENV/ENV_01_技術スタック.md)）．

## テストの種類 (Test Types)

| 種類 | 目的 | 対象 |
| --- | --- | --- |
| 回帰テスト | 研究で使われてきた旧 exe と同じ解析結果が出ることを確かめる | サンプル画像を現行ソースで解析した `analysis.csv` と，旧 exe（2021 年 12 月版 `DeepTIAS2.7.exe`）で出した正解の比較 |
| 単体テスト | 切り出した処理が単体で正しく動くことを確かめる | 領域分割，形状特徴，CSV の組み立て等，画面に依存しない処理 |

- **回帰テストを最優先する．**本プロジェクトの目的は「解析結果を変えずに整理する」ことであり，その保証の中心になる．
- **正解は旧 exe の出力である．**研究データは旧 exe で出されており，過去のデータと比べられることを守るため．現行ソースの出力を正解にしない．
- 画面（`Form1`）の操作は自動テストの対象にしない．人が動作確認する．

## 回帰テストの決まり (Regression Tests)

- 正解データ（入力画像と，旧 exe で出した `analysis.csv`・中間画像）は `DeepTIAS.Tests/TestData/` に置き，Git LFS で管理する．どの exe（パス・ビルド日）でいつ出したかを `TestData/README.md` に記録する．
- 比較は `analysis.csv` の列構成（見出し行）と値で行う．小数の値は許容誤差を決めて比べる．許容誤差は旧 exe と現行ソースの比較結果（[開発ステップ](../../docs/03_PLAN/PLAN_02_開発ステップ.md) のステップ 3）をもとに決め，値と理由をテストコードに書く．
- 列ごとに許容誤差を変える場合（例: OpenCV のバージョン差で特定の列だけずれる）は，ユーザーの承認を得てから設定し，対象の列と理由を記録する．
- 正解データを作り直すのは，解析結果を変える変更をユーザーが承認したときだけとする．テストを通すために正解データを書き換えてはならない．
- 外部 exe・モデルを使うため時間がかかる．テスト名やカテゴリで単体テストと区別し，単体テストだけを素早く回せるようにする．

## 単体テストの決まり (Unit Tests)

- テストメソッド名は `対象_条件_期待結果` の形にする（例: `Get3areaMask_EmptyMask_ReturnsEmpty`）．
- 画像を使うテストは，小さな画像をテストコード内で作るか，`TestData/` の画像を使う．PC ごとの絶対パスを書かない．
- 1 つのテストでは 1 つのことだけを確かめる．

## 実行タイミング (When to Run)

- コードを変更したら，コミット前に単体テストと回帰テストの両方を実行し，すべて通ることを確認する．
- 実行コマンドは [開発コマンド](../../docs/02_ENV/ENV_04_開発コマンド.md) に記載する．
