メモログ

⛰ 塵が積もって山とならないメモのログ 👄

Facebookには専任のQAチームがいない

Facebookのテストエンジニアリグの技術リーダーによると、Facebookに専任のQAチームがいないらしいです ( Facebook has no dedicated QA team )。テストエンジニアはいる。どうやら大量の自動テストをエンジニアが作成/メンテナンスしていて、そのテストを断続的に実行し、テスト結果は通知が届くようにしているみたい。QAチームがやるようなことは自動化しているということか。

そんな話がQuora - What kind of automated testing does Facebook do?に掲載されています。下記にリスト部分のてきとう抄訳で紹介します(すべての内容をきちんと訳しているわけではないので、興味のあるかたはリンクを参照してください)。

  • PHPコードに対してはPHPUnitを使って1500を超えるクラスのテストスイートを用意している。開発ツールでは自動的にコードカバレッジデータを使用して開発サンドボックスでの目立った変更をカバーするようなテストを実施している。
    また、テスト結果はパッチがレビューにサブミットされたときに自動的にコードレビューツールに入る。
  • ブラウザベースのテストではWatirを使用している。Watirのテストはサイトの機能テストをカバーしている(特にプライバシー関連機能にフォーカスしてる)。
  • 全自動のWatirテストに加えて、フォームの入力とか面倒な作業を避けるための半自動のWatirテストもある。ただそれらは正しい動作かどうかの検証は(人が)別途する必要がある
  • Javascriptのunit testingについてはJSSpecを使い始めている。
  • バックグラウンドのサービスについては、サービスによって種々のテストフレームワークを使用している。オープンソースで提供しているプロジェクトではBoostやJUnitなどのようなオープソースのフレームワークを使用している。外部に公開しないプロジェクトではオープンソースのものや、C++のテストフレームワークを使ったりする。大半のバックエンドサービスはcontinuous integration / build system と結合していて、最新のソースコードに対して断続的にテストを実施している。テスト結果はデータベースに保存されるのと、通知システムに通知される
  • HipHop は countinuous-integration system に若干のひねりをいれたシステムを持っていて、unit testの実行だけじゃなくてPHPUnitのテストも実行してくれる。テスト結果はplainなPHP interpreterで実行したPHPコードの結果と比較して、その振るまいの違いを見つける。

あと、テスト結果の通知の仕方も工夫してたり、バグ管理システムとの連携もしているみたい。ここには書かれていない取り込みもいろいろやっているのでしょう。すごいなあ。

多くのテストが”push blocking”にあたるみたいなので、そんなに細かいテストはしていないように見えなくもない。そのへんの粒度は不明。特定の条件でしか発生しないような問題はどのように対処しているのだろう。ユーザーからのフィードバックをうまく利用したりしているのか、それともそのような問題は無視するのか。いずれにせよ、Facebook的には十分な粒度であって、うまく機能しているだろうなあ。たぶん。