Facebookはどのように「試験の試験」を行っているのか?
「試験」は何かの効果や性能を試すために行うものですが、試験自体にも良否や存在したり、時間の流れとともに試験が時代遅れになったりするため、「試験自体の評価」を行うことが時には必要です。世界でも有数の巨大プラットフォームを持つFacebookが自社内で行う「試験自体の試験」について、ブログ上で解説しています。
Probabilistic flakiness: How do you test your tests? - Facebook Engineering
https://engineering.fb.com/2020/12/10/developer-tools/probabilistic-flakiness/
エンジニアがアプリの新機能の実装と最適化を日夜行っているため、Facebookのコードベースは日々変化しています。Facebookはこうしたコードベースの品質低下を検出する自動試験を運用しているものの、「自動試験が時間の経過によって劣化しているかどうかを調べる自動試験」は存在しなかったとのこと。
試験自体の信頼性を検証するためには「試験自体の試験」が重要ですが、Facebookによると、試験自体の試験に関する学術研究は「どの試験に欠陥が存在するのか」「どの試験は信頼できるのか」ばかりを重視してきたとのこと。Facebookはどんな完璧な試験であっても現実で実行するのならばある程度は欠陥が存在するという思想のもとに、「どの程度の欠陥を有しているのか」を突き止める試験の試験を設計するため、「Probabilistic Flakiness Score(確率的信頼性スコア:PFS)」という概念を構築しました。PFSは、ネットワーク障害などの雑多な要因によってエラーが発生する確率を数値化したものです。
仮に実施する試験が「1回だけ」だった場合、試験の結果を額面通りに受け取る以外の選択肢は存在せず、試験自体の信頼性を検証することは不可能です。しかし特定の試験を複数回実行するならば、試験結果の分布から試験に内在する偏りを見抜くことが可能です。Facebookは、試験が失敗する確率とは「試験対象のコードないしは試験環境が原因で失敗する確率」と「環境自体が良好な場合に失敗する確率(=PFS)」の2つの確率に依存していると考えました。試験自体の試験を設計するのならば、「試験対象のコードないしは試験環境が原因で失敗する確率」は無視して、PFSのみを求めることが必要です。
Facebookは、プログラミング言語「Stan」で構築したベイス推定アルゴリズムによる統計モデリング環境で、試験の「成功」「失敗」という2種類の結果から算出されるPFSを分布化。分布が特定のスコア値に集中している場合は信頼度が高く、分布が広いか複数の極大値が存在する場合は試験回数が足りないという判断材料に使っているとのこと。
Facebookによると、2018年以降PFSを測定し続けたことで、「いつPFSに大きな変化が生じたか」を察知できる環境を整え、試験自体に問題が生じた原因が特定しやすくなったそうです。
Facebookは2020年時点ではPFSが社内で信頼性を獲得しており、「品質改善の取り組みをいつ打ち切るべきか」などの判断にPFSが採用されていると記しています。
・関連記事
Facebookが「ニュース記事を読まなくても内容を理解できるように要約するツール」を開発している - GIGAZINE
「相手のあらゆる行動の確率を計算する」ポーカーAIをFacebookが開発、将来的にはサイバーセキュリティへの応用も - GIGAZINE
Facebookは次世代プロトコル「QUIC」をどのように導入しサービスを高速化したのか? - GIGAZINE
TwitterやFacebookの書き込みから人々の感情やうつ病の危険度を判定する「センチメント分析」とは? - GIGAZINE
・関連コンテンツ