91%の合格率。ゲートはグリーン。リリース完了。史上最悪のリグレッション。

インテント分類テストで91%の合格率を達成しました。しきい値は90%でした。基準をクリアし、コードをリリースしました。

それは、その四半期で最悪のリグレッションでした。

問題は計算方法にありました。評価スコアは何週間も96%または97%を維持していました。しかし、ある変更によって、特定の「スライス(区分)」が壊れてしまいました。それは「曖昧な返金リクエスト」です。そのスライスのスコアは98%から74%に急落しました。

そのスライスは、全トラフィックの4%を占めています。平均値を見ていたため、全体のスコアは91%にしか下がりませんでした。ゲートはグリーンのままだったのです。

集計値は、ノイズの中に失敗を隠してしまいます。

そのスライスを利用するユーザーが見ていたのは91%ではなく、74%でした。固定のしきい値は、システム全体が崖から転落したかどうかは教えてくれますが、システムの一部が死にかけているかどうかは教えてくれません。96個のスライスが正常で、1つがクラッシュした場合、高い平均値がそのクラッシュを隠してしまいます。その結果、テストツールではなく、サポートチケットを通じてエラーに気づくことになるのです。

私たちは戦略を変更しました。絶対値によるゲート判定をやめ、現在は「最後に成功した実行結果」と比較して判定を行っています。

2つのルールを使用しており、両方をパスする必要があります:

  • 単一のスライスがベースラインから3ポイント以上低下しないこと。
  • 全体の集計値がベースラインから1.5ポイント以上低下しないこと。

先日の失敗では、返金スライスが24ポイント低下していました。ルール1があれば、即座に検知できていたはずです。

デルタ・ゲーティング(差分判定)の罠に注意してください。ベースラインを毎回更新していると、失敗に向かって徐々にドリフト(漂流)してしまう可能性があります。毎日0.5ポイントずつ低下しても、すべてのテストをパスしてしまいます。そうして、気づかないうちに品質の低い製品へと滑り落ちていくのです。

テストを改善するために、以下のステップに従ってください:

  • メインブランチがグリーン(合格)のときのみ、ベースラインを更新する。
  • スコアの意図的な低下については、必ず人間による承認を必要とする。
  • ベースラインは、単に「最後に起きたこと」ではなく、「正しく動作するもの」の記録であるべきである。
  • 直近5回のグリーンな実行結果の分散を確認する。もしスライスの変動がしきい値を超えているなら、そのしきい値はノイズに過ぎない。
  • 最も小さいスライスでテストを行う。集計値が気づく前に、そのスライスがどこまで低下できるかを検証する。もしその答えが大きな数値であれば、集計値がエラーを隠蔽しているということだ。

出典: https://dev.to/ethanwritesai/91-pass-rate-gate-green-shipped-worst-regression-we-had-all-quarter-4dfn

オプションの学習コミュニティ: https://t.me/GyaanSetuAi