91%の合格率。ゲートはグリーン。リリース完了。史上最悪のリグレッション。
インテント分類テストで91%の合格率を達成しました。しきい値は90%でした。基準をクリアし、コードをリリースしました。
それは、その四半期で最悪のリグレッションでした。
問題は計算方法にありました。評価スコアは何週間も96%または97%を維持していました。しかし、ある変更によって、特定の「スライス(区分)」が壊れてしまいました。それは「曖昧な返金リクエスト」です。そのスライスのスコアは98%から74%に急落しました。
そのスライスは、全トラフィックの4%を占めています。平均値を見ていたため、全体のスコアは91%にしか下がりませんでした。ゲートはグリーンのままだったのです。
集計値は、ノイズの中に失敗を隠してしまいます。
そのスライスを利用するユーザーが見ていたのは91%ではなく、74%でした。固定のしきい値は、システム全体が崖から転落したかどうかは教えてくれますが、システムの一部が死にかけているかどうかは教えてくれません。96個のスライスが正常で、1つがクラッシュした場合、高い平均値がそのクラッシュを隠してしまいます。その結果、テストツールではなく、サポートチケットを通じてエラーに気づくことになるのです。
私たちは戦略を変更しました。絶対値によるゲート判定をやめ、現在は「最後に成功した実行結果」と比較して判定を行っています。
2つのルールを使用しており、両方をパスする必要があります:
- 単一のスライスがベースラインから3ポイント以上低下しないこと。
- 全体の集計値がベースラインから1.5ポイント以上低下しないこと。
先日の失敗では、返金スライスが24ポイント低下していました。ルール1があれば、即座に検知できていたはずです。
デルタ・ゲーティング(差分判定)の罠に注意してください。ベースラインを毎回更新していると、失敗に向かって徐々にドリフト(漂流)してしまう可能性があります。毎日0.5ポイントずつ低下しても、すべてのテストをパスしてしまいます。そうして、気づかないうちに品質の低い製品へと滑り落ちていくのです。
テストを改善するために、以下のステップに従ってください:
- メインブランチがグリーン(合格)のときのみ、ベースラインを更新する。
- スコアの意図的な低下については、必ず人間による承認を必要とする。
- ベースラインは、単に「最後に起きたこと」ではなく、「正しく動作するもの」の記録であるべきである。
- 直近5回のグリーンな実行結果の分散を確認する。もしスライスの変動がしきい値を超えているなら、そのしきい値はノイズに過ぎない。
- 最も小さいスライスでテストを行う。集計値が気づく前に、そのスライスがどこまで低下できるかを検証する。もしその答えが大きな数値であれば、集計値がエラーを隠蔽しているということだ。
オプションの学習コミュニティ: https://t.me/GyaanSetuAi
