ユニットテスト(Unit Test)
- 別名:単体テスト
- クラスやメソッド単体の小さい範囲でテストすること
- 様々な部品が組み合わさって動くソフトウェアのテストとしては不十分
- ローカル環境で実施することが多い
メリット
- 1つ1つのテスト範囲が小さいので、素早く実行できる
- バグを早く発見できる
- コード変更によるバグ混入を予防する
- コード変更が正しいか確認できる
- 再現率の低い条件を作りやすい
注意点
- テスト項目を増やすとバグ発見率は上がるが、その分コストもかかってしまう
- どこまでやるか、ゴールを明確にする
- 適切なテストでないと、品質が上がることはない
- 設計から間違えていたら意味がない
- 書けば終わりではない
- 何度も実行することが重要
- JenkinsなどのCIを用意して、自動でテストが実行される環境を構築しておくとよい
- ユニットテスト導入のコストは高い
- 実装コストの2倍以上を見積もるべき
- テストにおけるパターンを網羅するために様々な状況やテストデータを検討する必要がある
- 運用保守体制も計画的に
Unity でのユニットテストツール
- Unity Test Runner
- Unityのテスト実行ツール
- NUnit という.NET用テスティングフレームワークが使われている
- EditMode, PlayMode のテスト実行環境がある
インテグレーションテスト(Integration Test)
- 別名:結合テスト
- 他のクラスや外部モジュールと結合してテストすること
- 実際の環境に近いテスト環境で実行することが多い
- 機能間の連携や一連の機能が仕様書通りに正しく動作するか確認する
- 最下位のモジュールから上位に向かって順番にテストしていく方式を「ボトムアップテスト」
- 最上位のモジュールから下位に向かって順番にテストしていく方式を「トップダウンテスト」
メリット
- 機能間の連携や一連の機能が仕様書通りに正しく動作するか確認できる
- ユニットテストより高レベルのため、アプリケーション全体のテストガバレッジを向上させる傾向がある
- E2Eテストのような、より高いテストの基礎になる
注意点
- 本番環境に近い環境、データでテストする
- DBなどのデータを直接書き換えたりしない
- 想定していないデータができることを防ぐ
- アプリケーションの機能を使って変更する
- テストスケジュールに余裕をもたせる
- 設計上のミスや単体テストのケース漏れなどがこの段階で発覚する可能性がある
- 手戻りによる大きな時間ロスが発生する可能性がある
Unity でのインテグレーションテストツール
- Scene ベースのテストは、Poco や AltUnityTester を検討するべき
- どちらもUIテストができる、UIテストツール
E2Eテスト(End to End Test)
- システム全体を通してテストすること
- ユーザーと同じようにシステムを操作して、挙動が想定通りになっているか確認する
- アプリケーションの様々なシステムやレイヤーを検証できる
メリット
- UIからデータベース層まで、すべて期待通りに動作していることを確認する
- エンドユーザーがバグを発見する前にバグを発見することが出来る
- アプリの全体的なテストカバレッジが向上する
注意点
- 様々な手法があるので、導入コスト・運用コストが高い
- メンテナンスが大変
- 細かいUIのテストを実装し、ちょっとした文言変更、レイアウト変更でテストが失敗する
- テストの実行時間は長くなりがち
- 並列実行などを検討する
- どの領域をテストするか明確にしておく
Unity でのE2Eテストツール
- Airtest + Poco など