フレームワークの隠れた状態など。テストの 順序やタイミングの変化で悪影響を及ぼす 依存コンポーネ ントの不安定さ 依存する外部サービスや外部コンポーネント (OS等) 未定義・未既定 の処理 未初期化の変数値を使うなど、コードの未 定義・未既定の振る舞い 本質的にテスト 対象が不安定 機械制御や物理計測など、対象が本質的 にランダム性を持つ テストのための実装の基礎力確保 (未定義・未既定を避ける、ロジックや 状態をシンプルに保つ等) テストからのランダム性の排除 (不安定なコンポーネントはテストダブ ルに置換) 適切な並行処理の設計・実装 (適切な保護、並行処理のシンプル化、 適切な非同期処理機能の仕様) テストのモジュール性の向上 (テストの不適切な結合性を削減、状 態や副作用のスコープを制限) テストの自己診断機能の充実 (起動時・接続時の状態チェック、 防御的プログラミングの推進) 統計的アプローチの導入 (本質的に不安定さを持つなら、相関 分析等で判定するように変更) 品質改善の積み重ねで高度な信頼性が確保され、高度なテストが実現される