グーグルが行っているビルドとテストの種類。続々、グーグルはあれほど多くのソフトウェアのテストをどのように行っているのか?
グーグルでTest Engineering Directorを務めるJames A Whittaker氏が、ブログ「Google Testing Blog」に書いているグーグル社内のソフトウェア品質に関するノウハウ。最近の記事「How Google Tests Software - Part Four」「How Google Tests Software - Part Five」では、ビルドの種類とテストの種類について紹介しています。
One of the key ways Google achieves good results with fewer testers than many companies is that we rarely attempt to ship a large set of features at once.
ほかの多くの企業よりも少ない人数のテスターでグーグルはよい結果を得られているが、その鍵となっているのが、多くの機能をいちどに提供することをほとんどしない点にある。
Whittaker氏はグーグルのソフトウェア品質管理についてこう書いています。彼の説明によると、グーグル社内では次のようないくつかのチャンネルに分かれてリリースへのステップを踏んでいくとのことです。
複数あるビルドのためのチャンネル
Canary Channel
まだ実験的な状態で、炭鉱のカナリアのように危険を避けつつ試すためのもの。
Dev Channel
デベロッパー自身が使ってみるためのビルド。
Test Channel
いわゆる「ドッグフード」として社内的に利用してみて、β版へのリリースをさぐるためのビルド。
Beta ChannelもしくはRelease Channel
社外に提供する最初のビルド。テストと実際に利用されることでリリースへと近づけていく。
それぞれのチャンネルでバグがみつかった場合には、当然ながらテスターはそのバグの自動テストを書き、修正されたかを確認できるようにするとのこと。
If a bug is found in the field a tester can create a test that reproduces it and run it against builds in each channel to determine if a fix has already been implemented.
もし実際の利用でバグが発見されたら、テスターはそれのためのテストを作り、それぞれのチャンネルのビルドに対して修正がちゃんと実装されたかどうか実行してみる。
ビルドだけではなく、テストにも何種類かあることをWhittaker氏は紹介しています。
規模によるテストの分類
テストの種類はsmall、Medium、Largeの3つとのこと。
Google uses the language of small, medium and large tests emphasizing scope over form. Small tests cover small amounts of code and so on.
グーグルはsmall、medium、Largeの3つの言葉をテストのスコープとして用いている。Small testは短いコードをカバーする、といったことだ。
それぞれの説明をまとめてみると次のようになります。
Small Tests
ほとんどが、1つのファンクションもしくはモジュールの中で自動化されたテスト。おもに典型的や機能の問題、データが壊れるとかエラーの状況などをテストする。
Medium Tests
2つ以上の機能に関するもの、特にそうした機能同士のやりとりに関するものを自動もしくは手動でカバーするテスト。SET(Software Engineer in Test。詳しくは以前の記事「グーグルはあれほど多くのソフトウェアのテストをどのように行っているのか?」参照)が製品開発の初期に単機能のテストがおわってからこれらのテストの開発を推進していく。SWE(Software Engineer、これも詳細は以前の記事参照)はコーディング、デバッグ、メンテナンス、実行に深く関わる。
Large Tests 3つかそれ以上の機能に関するもの、現実のユーザーの利用シナリオを想定したものなど。
またソースコードの中に埋め込まれたテストコードだけでなく、人間の操作によるマニュアルテストも重要視しているとあります。
it is important to note that Google performs a great deal of manual testing, both scripted and exploratory,
強調しておくと、グーグルではスクリプトによるもの、もしくは探索的なマニュアルテストのどちらも重要なものとして扱っている。
こうしたマニュアルテストも最後は自動化し、マニュアルテスターがつねに新しい課題に取り組めるようにしているとのこと。
Industry leading recording technology converts manual tests to automated tests to be re-executed build after build to ensure minimal regressions and to keep manual testers always focusing on new issues. We also automate the submission of bug reports and the routing of manual testing tasks.
先進的なレコーディング技術によってマニュアルテストは自動テストへと変換され、ビルドの後再実行することでレグレッションを確認できるようになる。そしてこれが、マニュアルテスターがつねに新しい問題にフォーカスすることを可能にしてくれる。私たちはマニュアルテストの繰り返しとバグレポートの提出も自動化している。