本プロジェクトのテストの種類・粒度・対象範囲・実行タイミングを定める. 具体的な回帰テスト手順は TEST_01_テスト仕様 を参照する(本書は方針,TEST_01 は具体手順という役割分担).
本プロジェクトは実機カメラ(Lucam / ImagingSource)・光源・ネイティブライブラリ(OpenCvSharp)に強く依存する一方で,画像処理・色補正・設定読み込み等のハードウェアに依存しない純粋ロジックも含む.この性質に合わせ,コードを 2 層に分けてテストする.
Form1(WinForms UI)・撮影/プレビューのスレッド・コールバックに密結合した処理.自動テストの対象外とし,ビルドテスト+手動テスト+実機回帰テストで担保する.「テストできない」と「テストしていない」を混同しない.ハードウェア結合層は原理的に自動テストが困難なため対象外とするが,ピュアロジック層は自動テスト可能であり,必ずテストを書く.
標準に則る.NUnit の慣例(AAA: Arrange-Act-Assert)に従い,テストは実装のなぞり書きではなく仕様(期待される入出力)を基準に書く.
| 種類 | 対象 | 自動化 | 実行タイミング |
|---|---|---|---|
| 単体テスト | ピュアロジック層 | 自動(NUnit) | コミット前・/implement Phase 2 |
| ビルドテスト | ソリューション全体 | 自動(MSBuild) | 全コミット前 |
| 回帰テスト | 色補正・チャート検出の出力 | 半自動(基準データ比較) | リファクタ・修正の前後 |
| 手動テスト | 起動〜撮影〜保存の一連動作 | 手動(実機) | 機能追加・修正の完了時 |
回帰テスト・手動テストの具体手順は TEST_01_テスト仕様 に記載する.
どのクラス・処理を自動テストの対象とするかを明示する.新しいコードを追加した際は,この表に従って対象/対象外を判断する.
| 対象 | テスト内容の例 |
|---|---|
ColorCorrection/ColorCorrector | 次元拡張(ExtendMat)・変換行列算出・色変換の入出力.既知の入力 Mat に対する出力 Mat/数値の検証 |
ChartDetection/ChartDetector | 既知のチャート画像を入力したときのマスク位置・検出結果の幾何的検証 |
Config | 設定 XML のパース・型変換・範囲フィルタ(例: チャネル数の 4〜17 絞り込み) |
Utils/IoUtil | CSV の読み書き往復(SaveMatToCsv → LoadMatFromCsv)で値が保たれること |
ゲイン更新比率の計算(GetRatio 相当) | 入力値・目標値・更新レートに対する比率計算 |
| 対象 | 対象外の理由 |
|---|---|
Cameras/CameraBase・IScam・Lucam のカメラ制御・撮影/プレビュー | カメラ SDK(dll.* / TIS.Imaging.*)・フレームコールバック・実機に依存 |
撮影/保存のスレッド連携(RunShotLoop / SaveThread) | カメラフレーム取得・Form1 に依存.スレッド安全性は設計レビューと実機で担保 |
UI/Form1・UI/PreviewMonitor | WinForms UI スレッド・画面描画に依存 |
LightSource | 光源のシリアル通信(実機)に依存 |
※ ハードウェア結合層に手を入れた場合は,自動テストの代わりに設計レビュー+実機回帰で挙動を確認する./implement の Tester フェーズでは,対象がハードウェア結合層の場合,無理にモックを作らず設計レビューで判断してよい.
NUnit3TestAdapter で Visual Studio / dotnet test から実行).TIASshot.Tests(x64 / .NET Framework 4.8.本体と同一ターゲット).ColorCorrector 等のテストは OpenCvSharp のネイティブ DLL をロードするため,テストプロジェクトも x64 必須かつ OpenCvSharp ランタイムを参照すること(プラットフォームを AnyCPU にすると Mat 演算が実行時に失敗する).TIASshot/ ← ソリューションルート
├── TIASshot.sln
├── TIASshot/ ← 本体プロジェクト
└── TIASshot.Tests/ ← テストプロジェクト(NUnit)
├── ColorCorrectorTests.cs
├── ConfigTests.cs
└── ...
<対象クラス>Tests,テストメソッドは「対象_条件_期待結果」が分かる名前にする(日本語名も可).Assert を詰め込まない.TIASshot.Tests 配下の専用フォルダ(例: TestData/)に置き,テストから相対参照する.Config のような静的クラスへの依存がテストの妨げになる場合,テスト容易化のための最小限のシーム(引数化・依存の注入)を導入してよい.ただし本番の挙動は変えないこと.docs/06_TEST/ に追記する(本書には方針のみ残し,個別ケースは重複させない).