Keep Test Logic Out of Production(テストロジックを本番環境から遠ざける)
1. 原則
テストコードを本番環境用のコードに含めてはならない
- ユニットテストのロジックを、製品として出荷される本番コードに含めない
- テスト用のコードは、専用のディレクトリやモジュールに配置する
- 本番環境には、テストコードを含まない成果物をデプロイする
2. 根拠
セキュリティとパフォーマンスの確保
- テストコードに機密情報や脆弱性のあるコードが含まれる可能性がある
- テストコードは本番環境での実行を想定しておらず、予期せぬ動作を引き起こすリスクがある
- 余分なコードはデプロイのサイズを増大させ、パフォーマンスに悪影響を与える可能性がある
3. 指針
ビルドプロセスの最適化
- ビルドツールやパッケージマネージャを活用する
- テストコードと本番コードを明確に区別し、ビルド時にテストコードを除外する設定を行う
- 例:JavaのMavenやGradle、JavaScriptのnpmやyarnなど
4. 注意事項
テスト容易性の例外
- テストのために本番コード内にテスト用のメソッドやクラスを追加する必要がある場合がある
- そのような場合でも、テスト用のコードは条件付きコンパイルやビルド設定で本番から除外されるようにする
- この原則は、テストしやすい設計を前提としており、設計を見直すことがより良い解決策となる