グリーのQAチームとテストエンジニアリングへの取り組み
こんにちは、やまもと@テスト番長です。
このエントリーは「GREE Advent Calendar 2014」13日目の記事です。
最近はグリーのQuality Assurance部のテストエンジニアリングチームを担当しています。
品質管理を行う部署のため、エンジニアブログに顔を出すのは初めてなのですが、
今回はグリーのQA体制のご紹介および、テストエンジニアリング面からの
取り組みをご紹介させて頂きたいと思います。
グリーのQA体制について
QAチームは、2011年の夏にカスタマーサポートチームから派生する形で組織されました。
2012年に起きたカード複製の不具合や未成年課金の問題など、多くのトラブルを経験・奔走しつつも徐々に体制を整え、現在は社員20名・協力会社の方々も加えると50名ほどのグループとなっています。
ネイティブゲーム、ウェブゲーム、ガレージスタジオ&プラットフォーム、テストエンジニアリングの4つのチームに分かれており、それぞれクオリティを上げるべく活動しております。
対象のカテゴリーによって守るべき価値観やQAのプロセスは異なりますが、
大別すると自社開発のソーシャルゲームと、グリープラットフォーム/SNSなどシステム系に分かれており、即日〜一週間くらいのスパンでデバッグ〜リリースまでが進行します。
過去、終電間際まで稼働するようなスタイルで働いていた時もありましたが、
現在は時間外の稼働を避け、テスト実行前の準備をきっちり行うことを重要視して
標準の時間内に作業を終えるような体制を作っています。
また、メンバーのスキルアップにも積極的に取り組んでおり、
JSTQBの資格取得を奨励したり、実際に自分たちでゲーム制作をする勉強会を開くなどの活動もしています。
機能面のQA以外にも、社内には審査やセキュリティといった別のチームがあり、
様々な角度からサービスの品質を作り上げています。
テストエンジニアリングチームについて
エンジニアリングによる品質問題解決への試行は2013年春頃から始まり、テスト自動化に興味を持っているエンジニア達に協力を仰ぎつつ、UIテストの自動化をスコープとして主にリグレッション部分からナレッジの蓄積を開始しました。
テストエンジニアリングチームの正式な発足は2013年11月で、当初は3名からスタートし徐々に増えて現在7名体制となっています。
当時、チームのミッションとしては以下のものを掲げておりました。
- エンジニアリングによってテストのコストを下げ、リソースの再配分を可能にし、より高品質な製品づくりを支援する
- 人間では実施不可能な複雑・高速な検証を実現する
- 最新のテスト技術を追いかけ情報発信を行い、組織の価値を高める
- 希少人材である優秀なテストエンジニアを育成する
- 社内でのテストエンジニアのスキルパスを整備する
イメージとしては、下の図のように開発とQAの狭間にある見落としがちなタスクを遂行していくスタイルです。
(この図はWebソーシャルゲームを想定しています。)
その後、様々なトライを続けていく中で次第にスコープを広げてゆき、マニュアルテストの代替としての自動化に留まらず、初期段階からの品質向上を目指して新規開発中のプロダクトに常駐し、テストフレームワークやテストライブラリの作成も試行していくようになってきました。
ミッションについても見直しをかけ、開発プロセスを加速させる一助になろう、という意識へシフトしてきています。
開発段階から品質の計測を行い、基礎部分でのバグを押さえエンバグを防止する事で、スムーズな開発を行いエンジニアを幸せにすることができると考えています。
その他に、各種自動化ソリューションや有用なツール類の試用、情報収集なども行っており、
一年前は主にWebアプリを対象としていましたが、今はNativeアプリへの対応を模索しています。
それでは、チームが実際に手掛けた案件を幾つかご紹介します。
UIテスト自動化の試み
一年以上前になりますが、初期はWebのドリランドを対象にしてリグレッションの自動化を行っていました。
Selenium Webdriverを用い、Jenkinsで各テストシナリオを実行する形で、メインサイクルとして
チュートリアルやダンジョン探索、サブ要素としてアイテム購入やギルド周りなどの確認を実装しました。
リグレッションテストを流用してイベントやコンテンツ拡張をカバー
上記リグレッションテストは開発者の安心を担保するためのテストであり、不具合が検出されることは少ないのですが、そのシステムを流用してイベントのテストやコンテンツ拡張のテストを自動で行うことも試行しました。
ソーシャルゲームはイベントを絶え間なく提供しますので、その検証も頻繁に発生しています。
時間的な制約などからカバレッジの低いチェックになってしまったり、テスト用に設定を変えて実施するケースが多いのですが、
自動化の仕組みを使い、ナチュラルな状況での全数チェックを実現しています。
テストデータ管理ライブラリ
テストを繰り返し実行していく中で、テストデータ管理は重要なトピックです。
テストデータの正しさが保証されなければ、テスト結果に擬陽性の不具合報告として現れてきます。
そのため、fixtureからテストデータを自在に生成して管理出来るライブラリなどを作りました。
データの整合性確認ツールの作成
ソーシャルゲームはイベント施策を打ち続け、各種データの更新をし続けるため、データの設定ミスによる障害が多く発生する傾向に有ります。そこで、本番環境とQA環境での差分をチェックするツールを作成しました。
非エンジニアの企画職でも使いやすいように設計されており好評稼働中です。
Jenkinsのメンテナンスを担当
開発が難航しているプロジェクトではCI環境が放置されているケースがあります。
ゲーム開発では特に面白さの作り込みが重要であり、ロジック的に正しくても手戻りする事が多いため、むしろ奇麗にされていることのほうが少ないかもしれません。
しかし放置してしまうと後で確実に困りますので、そこの巻き取り対応をしています。
マシンの論理&物理的管理に始まり、Jenkinsのデーモン化、botの追加や
カバレッジ計測、静的解析、HTMLレポート作成のプラグイン追加などを行いました。
QAエンジニア女子がカバレッジを可視化することにより、カバレッジの数字がすくすく伸びていく、という現象も局地的に観測出来たとか出来ないとか。
まとめ
設立から一年あまり活動してきたテストエンジニアリングチームですが
クリエイティビティを重要視する姿勢を根幹に据え、様々なノウハウを貯めつつあります。
ソフトウェアテストは時代の転換期に差し掛かっており、求められる品質の定義が変化すると共に、
テストエンジニアリングのトピックを追うことはこの先生き残るために必須となっています。
来年も更に様々なトライを進めていきたいと考えております。
今回、エンジニアブログなのでエンジニアリング寄りのお話をさせていただきましたが、
品質を守る主役は依然として人間の操作によるマニュアルテストが最重要だったりしますので、
いずれ何かの機会にそちらもご紹介できれば幸いです。
明日はらんさんによるPrestoのCustomizationと3rd-partyデータソースとのintegrationの記事です。お楽しみに!