徹底したテストは将来の信用性を予測しやすくなる
- テストのカバレッジが高い=信頼性が許容できる範囲が広い
いわゆるソフトウェア開発の手法と同じ
- ユニットテスト(単体テスト)
- 結合テスト(インテグレーションテスト)
- システムテスト
- パフォーマンステスト 性能のテスト、これが必要なレベルにはまだない。リリース後性能遅延とかを見てる感じがほとんどかな?
- 回帰テスト
- RSpec + ヘッドレストブラウザ
- 独自テストフレームワーク
イメージ的にはproductionに入る値が適切な値であるかどうかをテスト。 bin/rake serverspec production:xxxx
的な感じ。
googleではテストプログラムが本番の値を調べて、差異を洗い出してくれる。
テストが無い環境などもある。それらに対してどう取り組むか?
- 何らかの優先順位をつけてそこを重点的に取り組む。
- 課金などの失敗が許されない領域をカバーする
- 外部に提供している機能をカバーする
- 報告されたバグをテストケースにする
- テスト実行基盤を作成する
信頼性を保ちながら、SREの人数がリニアにスケールしないようにするためにも、プロダクション環境はほぼ人手なしで動作しなければなりません。
- 小さな障害に弾力性がある
- SREが使用するツールは十分にテストされている必要がある(信頼性があるべき)
テストは既知のデータに対して行われるものであり、モニタリングは未知のユーザーデータに対する動作が許容範囲に収まっていることを確認するものである。
- 既知の異常・正常なリクエストを利用してテストをする。
- それらは本番でもテストすべき、なぜなら本番と結合の環境は違うだろうから