Slide 1

Slide 1 text

モバイルゲームのQA課題に組織でチャレンジ! 〜子会社を跨いで挑戦するQA効率化の道のり〜 株式会社サイバーエージェント 2023.08.25 住田 直樹

Slide 2

Slide 2 text

自己紹介 住田直樹 / X:@udon_qu 株式会社サイバーエージェント/株式会社QualiArts SGEコア技術本部(コアテク) QAチーム ● QualiArts : Unityリードエンジニア ● QualiArts : 技術広報 ● SGEコア技術本部 : QAチーム ● Unity外部イベント運営 ○ CA.unity ○ UniTips(技術書典)

Slide 3

Slide 3 text

子会社制をとっており、 ゲーム・エンターテイメント事業に 携わる10社の子会社が 所属しています。 ゲーム・エンターテイメント事業部(SGE) ゲーム・エンターテイメント事業部(SGE)について

Slide 4

Slide 4 text

● モバイルゲームの開発で発生するQA課題 ● QA課題解決組織「コアテク QAチーム」の結成 ● コアテク QAチームの取り組み紹介 ○ リモートでの実機検証環境の構築 ○ テストの自動化 ● まとめと今後の展望 アジェンダ

Slide 5

Slide 5 text

モバイルゲームの開発で発生するQA課題 モバイルゲームのQA課題に組織でチャレンジ!〜子会社を跨いで挑戦するQA効率化の道のり〜

Slide 6

Slide 6 text

モバイルゲーム開発事情 クオリティ 多機能 プラット フォーム グローバル化

Slide 7

Slide 7 text

クオリティ 多機能 プラット フォーム グローバル化 昨今のモバイルゲーム開発事情 開発の大規模化と QA工程の負担の大幅な増加 QA工程の複雑化 QA工程の増加

Slide 8

Slide 8 text

● 各社それぞれでQA工程を策定 ○ フローや人員構成などは各社の裁量で決定 ● 技術的アプローチによる効率化やコスト削減が推進されていない ○ パワープレイでの解決になりがち ○ プロジェクトごとに現場のエンジニアが対策を片手間に行う程度 SGEでのQA課題事情

Slide 9

Slide 9 text

● 各社それぞれでQA工程を策定 ○ フローや人員構成などは各社の裁量で決定 ● 技術的アプローチによる効率化やコスト削減が推進されていない ○ パワープレイでの解決になりがち ○ プロジェクトごとに現場のエンジニアが対策を片手間に行う程度 SGEでのQA課題事情 SGEを横断してQAの課題解決に取り組む組織の形成へ

Slide 10

Slide 10 text

モバイルゲームのQA課題に組織でチャレンジ!〜子会社を跨いで挑戦するQA効率化の道のり〜 ボトムアップ型のQA課題解決組織の形成

Slide 11

Slide 11 text

SGEの子会社制について 子会社制のメリットとデメリット ● メリット ○ 小さな組織単位による意思決定の高速化と裁量権を活かした挑戦機会の創出 ○ 会社単位での強みを活かした開発組織づくり ● デメリット ○ ノウハウの分散によって知見が蓄積されず、各社で開発基盤が醸成される ○ 非ゲーム領域での専門的な技術開発が推進されない

Slide 12

Slide 12 text

横断する技術部署の設立 子会社を横断する技術部署「SGEコア技術本部(コアテク)」 ● 組織の技術課題を解決する会議で決議 ○ 2021年の結成 ● SGEで必要となる技術的ミッションを掲げ、数チームで活動 コアテク 基盤 描画 セキュ リティ AI QA

Slide 13

Slide 13 text

横断する技術部署の設立 子会社を横断する技術部署「SGEコア技術本部(コアテク)」 ● 組織の技術課題を解決する会議で決議 ○ 2021年の結成 ● SGEで必要となる技術的ミッションを掲げ、数チームで活動 コアテク 基盤 描画 セキュ リティ AI QA 今回の話

Slide 14

Slide 14 text

ボトムアップ型のQA組織形成 ボトムアップ型 = 現場主体で打ち手を考える ● 現場のエンジニアが主体となってやることを決めて動く プロジェクトや子会社ごとに開発手法が違うので、QAの効率化のアプローチも違う ● トップダウンでの打ち手を決定することが難しい 現場エンジニアを主体としてQAチームを立ち上げ

Slide 15

Slide 15 text

QAチームのミッション 技術アプローチと効率化の推進という二軸のミッション 技術 ● 技術検証 ● 効率化システム ● 自動テスト 推進 ● 技術や考え方の発信 ● ユースケースの提案 ● 導入のサポート QAのベースアップ

Slide 16

Slide 16 text

● モバイルゲームの開発がより高度かつ大規模になり、QAのコストが増大 ○ 各社の裁量にQAフローを任せていたが、課題感が強くなった ○ 会社をまたいで全体でのQAのコストに対するアプローチが要求されるように ● 子会社を跨いでQA課題を解決するボトムアップ型の組織を形成 ○ 現場のエンジニアが主体となって課題解決を主導 ○ 技術と推進、2つのミッションでQAのベースアップへ 前半のまとめ

Slide 17

Slide 17 text

リモートでの実機検証環境の構築 モバイルゲームのQA課題に組織でチャレンジ!〜子会社を跨いで挑戦するQA効率化の道のり〜

Slide 18

Slide 18 text

モバイルゲームにおける実機検証のフロー 検証における実機環境の確保の煩雑さ ● 柔軟な端末確保の難しさ ○ 特定のスペックの端末や、複数台の端末を要する際に手配が面倒 ■ 会社ごとに端末管理をしており、それぞれで対応 ● リモートワークへの適用 ○ リモートワークでの実機確保が面倒 ■ 出社とのハイブリットのため、端末をオフィスに置いてきていたり、その逆のケースも ■ 特定のOSやスペックの端末はリモート環境での突発の確保が困難

Slide 19

Slide 19 text

モバイルゲームにおける実機検証のフロー 検証における実機環境の確保の煩雑さ 手軽に端末を利用できる検証環境の需要 ● 柔軟な端末確保の難しさ ○ 特定のスペックの端末や、複数台の端末を要する際に手配が面倒 ■ 会社ごとに端末管理をしており、それぞれで対応 ● リモートワークへの適用 ○ リモートワークでの実機確保が面倒 ■ 出社とのハイブリットのため、端末をオフィスに置いてきていたり、その逆のケースも ■ 特定のOSやスペックの端末はリモート環境での突発の確保が困難

Slide 20

Slide 20 text

リモート操作可能な実機検証環境 操作 操作

Slide 21

Slide 21 text

AWS Device Farm AWSが提供しているモバイル向けアプリケーションテストサービス クラウド型の端末検証サービスの検討 クラウド型の端末検証サービスをいくつか試用 HeadSpin アメリカの会社が提供しているテストプラットフォームサービス Remote Testkit NTTレゾナント・テクノロジーが提供しているモバイル向けクラウド型実機検証サービス

Slide 22

Slide 22 text

クラウド型の端末検証サービスの検討 ● メリット ○ 各社での端末手配の手間なく、任意の端末が利用可能 ○ ログの利用や特定のテストフレームワークの実行などの環境が整えられている ● デメリット ○ 端末の機種やOSのラインナップがサービスの展開に依存 ■ 持ち込めるサービスも多いが、それなりの費用がかかったり制約もある ○ 端末利用での社内セキュリティ要件を満たす難易度が高い ■ ネットワークや秘匿性の制約が難しい

Slide 23

Slide 23 text

● メリット ○ 各社での端末手配の手間なく、任意の端末が利用可能 ○ ログの利用や特定のテストフレームワークの実行などの環境が整えられている ● デメリット ○ 端末の機種やOSのラインナップがサービスの展開に依存 ■ 持ち込めるサービスも多いが、それなりの費用がかかったり制約もある ○ 端末利用での社内セキュリティ要件を満たす難易度が高い ■ ネットワークや秘匿性の制約が難しい クラウド型の端末検証サービスの検討 自社で作ればデメリットを解決できるか も...?

Slide 24

Slide 24 text

リモートでの実機検証環境「SGE Test Farm」

Slide 25

Slide 25 text

端末とサーバー 社内に多数の端末を接続したサーバーとラックを設置

Slide 26

Slide 26 text

システム構成 社内に多数の端末を接続したサーバーとラックを設置 端末制御 サーバー USB 2.0 Type-C 20ポートハブ OpenSTF サーバー ︙ ルーター 専用WiFi AP 回線冗長化 USB 2.0 Type-C 20ポートハブ ︙ オフィスのIPと 会社VPNのみ許可

Slide 27

Slide 27 text

● 安定する端末を一定台数は用意 ○ 端末での単純な検証が滞りなく実行できることを担保 ● モバイルゲームに特化した端末のバリエーションを用意 ○ GPU、解像度、OSなどの環境差分をカバー ● 会社やプロジェクト単位での専用端末も用意可能 ○ プロジェクト用にOSや端末の状態を指定して支給 端末のラインナップ 通常の実機検証 GPU検証 最新OS検証 プロジェクトAの調査用

Slide 28

Slide 28 text

● 月1での定期端末チェック ○ ラック内を確認して膨張や変形している端末がないか確認 ● USB給電の動的制御の検討中 ○ 利用しているUSBハブの兼ね合いでやり方を検討中 端末管理 端末のバッテリー負荷に対するケア

Slide 29

Slide 29 text

端末制御 OpenSTFを活用したリモート操作可能な実機環境の整備 ● Androidの多種多様な端末をブラウザ上でリモート操作可能なシステム ○ https://github.com/openstf/stf ● ブラウザ経由で接続されている端末をGUIで操作可能 ○ 端末の貸出による他ユーザーからのロックなど排他制御を実現 ○ スクリプトから端末を確保するといった操作も可能

Slide 30

Slide 30 text

操作画面

Slide 31

Slide 31 text

操作画面 ログや スクリーン ショット

Slide 32

Slide 32 text

OpenSTFのカスタマイズ OpenSTFをフォークし、SGEに必要な機能を拡充 GUI セキュリティ

Slide 33

Slide 33 text

OpenSTFのカスタマイズ OpenSTFをフォークし、SGEに必要な機能を拡充 GUI セキュリティ

Slide 34

Slide 34 text

端末情報の拡充 モバイルゲームの開発に必要な情報の拡充 ● GPU情報の表示 ● 不要な情報の非表示 ● 端末のカテゴライズ

Slide 35

Slide 35 text

OpenSTFのカスタマイズ OpenSTFをフォークし、SGEに必要な機能を拡充 GUI セキュリティ

Slide 36

Slide 36 text

セキュリティ ネットワークについてのセキュリティ ● 専用のネットワークを構築(業務用ネットワークと分離) ○ 端末には専用のIPが割り当てられるので、プロジェクト側で許可(VPNの代替) ● サイバーエージェント内製の認証基盤でユーザー認証 ○ SGEとは別の部署の社員が使えない

Slide 37

Slide 37 text

セキュリティ 端末上の情報についてのセキュリティ ● 他人が利用している端末は閲覧不可能 ○ OpenSTFの標準機能で解決 ○ ラック内に端末は置いてあるので、覗き見なども不可能 ● 利用を終えたら自動的にインストールされたアプリなどを削除 ○ IPに関わるプロジェクトが使えるよう機密性を担保 ○ OpenSTFの機能より確実にアプリを削除するよう調整

Slide 38

Slide 38 text

リモートでの実機検証環境の活用 モバイルゲームのQA課題に組織でチャレンジ!〜子会社を跨いで挑戦するQA効率化の道のり〜

Slide 39

Slide 39 text

組織内での利用推進 社内のユーザーの操作のガイドや質問・要望の対応 ● 基本的な使い方のドキュメントを配備 ○ 端末を利用開始から終了、アプリケーションをインストールするといった基本動作 ● Slackチャンネルにて質問や要望、バグ報告を受付 ○ 一時的なメンテナンスなどもチャンネルにて通知

Slide 40

Slide 40 text

エンジニアでの利用実績 ● プッシュ通知やネイティブプラグインといった実機依存の機能検証 ○ プラグインの更新に伴う起動確認などにも有効 ● 特定の端末に発生する不具合の調査 ○ 一部の機種や、古い機種じゃないと発生しないような問題に有効 ○ 描画周りのパフォーマンス検証などにも有効 ● 手元に端末がない場合の検証 ○ リモートワークで手元にない場合の実機検証

Slide 41

Slide 41 text

QAでの利用実績 ● QAの端末検証での活用 ○ 端末ごとの動作検証 ○ 複数のユーザーを必要とする機能検証 ■ ユーザー同士でのグループ機能や、フレンド機能などの多人数で検証すべき機能に有効 ○ エージングテスト ■ 長時間端末を確保して放置し、手作業を止めることなく実行可能 ● テストの自動化 ○ 自動化したテストについて、任意の時間で実行可能な都合の良い環境

Slide 42

Slide 42 text

テストの自動化 モバイルゲームのQA課題に組織でチャレンジ!〜子会社を跨いで挑戦するQA効率化の道のり〜

Slide 43

Slide 43 text

テストの重要性とコスト ● バージョンや機能の並列開発におけるバグ検知の重要性 ○ 並列に複数のバージョンや機能の開発が進行 ■ 開発の並列化と実装の影響範囲の拡大によってバグの発生量が増加 ● テストの組み合わせ問題とコスト ○ 多機能化、多プラットフォーム展開、多言語展開などにより、大量の組み合わせに テストは重要だが捌くのが大変...

Slide 44

Slide 44 text

テストの重要性とコスト ● バージョンや機能の並列開発におけるバグ検知の重要性 ○ 並列に複数のバージョンや機能の開発が進行 ■ 開発の並列化と実装の影響範囲の拡大によってバグの発生量が増加 ● テストの組み合わせ問題とコスト ○ 多機能化、多プラットフォーム展開、多言語展開などにより、大量の組み合わせに 自動化によるテストの効率化の検討へ テストは重要だが捌くのが大変...

Slide 45

Slide 45 text

テストフローと自動化 人力でのテストの工程 テスト項目 の策定 テスト項目 の検証 検証結果の 報告 人が考える 人が操作する 人が報告する

Slide 46

Slide 46 text

テストフローと自動化 検証するフローの自動化 テスト項目 の策定 テスト項目 の検証 検証結果の 報告 人が考える 自動操作 自動報告

Slide 47

Slide 47 text

自動テストの技術検証 特定のプロジェクトの効果的なテストケースから技術検証へ ● 自動化する難易度 ○ 複雑な操作やフロー、特殊な条件など、自動化するには難易度が高いテストも ■ まずは単純な操作とフローで完結するテストに着目 ● 自動化による効果 ○ 頻度の低いテストや工数の少ないテストを自動化しても効果が薄い ○ 工程が長かったり面倒だが、バグを検知しづらい回帰テストが効果が高い 費用対効果の高いテストの自動化から検証

Slide 48

Slide 48 text

● チュートリアルのテスト ○ チュートリアルは多くの機能に干渉し、進行に関わる重大なバグを引き起こしがち ○ フローは長いが単純作業なので、自動化して定期的に検証を行う仕組みづくりが効果的 ● ADVパートの網羅的なテスト ○ 膨大な数があるが、実行してみるとアセットが不備などのバグが一定量存在する ○ 人間が毎日すべてみるのは骨が折れるが、自動化して実行すれば効率的 策定したテストケース

Slide 49

Slide 49 text

テストの自動化を実現する技術的な仕組み モバイルゲームのQA課題に組織でチャレンジ!〜子会社を跨いで挑戦するQA効率化の道のり〜

Slide 50

Slide 50 text

前工程 テストフロー 端末の用意 アプリの 準備 テスト 操作の記録 端末の操作 後工程 報告確認 結果報告

Slide 51

Slide 51 text

前工程 自動化したテストフロー 端末の用意 アプリの 準備 テスト 操作の記録 端末の操作 後工程 報告確認 結果報告

Slide 52

Slide 52 text

前工程 自動化したテストフロー 端末の用意 アプリの 準備 テスト 操作の記録 端末の操作 後工程 報告確認 結果報告

Slide 53

Slide 53 text

実機の環境準備 端末の確保とアプリケーションのインストール ● SGE Test Farmから端末を確保して疎通 ○ JenkinsからAPIを叩いて端末の確保や返却を実行 ○ 自動テスト用の端末は人間が検証に使う端末とは別管理 ● アプリケーションのダウンロードとインストール ○ AppCenterなどのアプリケーション配信サービスと連携

Slide 54

Slide 54 text

前工程 自動化したテストフロー 端末の用意 アプリの 準備 テスト 操作の記録 端末の操作 後工程 報告確認 結果報告

Slide 55

Slide 55 text

端末の操作 Airtestによる端末の自動操作 ● ゲームアプリケーション用のPython製自動テストフレームワーク ○ NetEase社がGitHub上で公開しているOSS ■ https://github.com/AirtestProject/Airtest ● ゲームエンジンの仕様に沿った自動操作処理を実現 ○ タップや文字入力などの端末操作 ○ スクリーンショットや録画機能 ○ レポート機能 ○ CLIの提供

Slide 56

Slide 56 text

前工程 自動化したテストフロー 端末の用意 アプリの 準備 テスト 操作の記録 端末の操作 後工程 報告確認 結果報告

Slide 57

Slide 57 text

後工程 テストレポートの出力と通知 ● AirtestのレポートをGitHub Pagesで表示 ○ privateで公開し、チーム内にのみ共有 ○ 見やすいレポートが低コストで公開可能 ● Slack上でテスト結果とレポートを通知 ○ テスト結果や環境をレポートのリンクと一緒に通知

Slide 58

Slide 58 text

Airtestのレポート例

Slide 59

Slide 59 text

テストの自動化の活用 モバイルゲームのQA課題に組織でチャレンジ!〜子会社を跨いで挑戦するQA効率化の道のり〜

Slide 60

Slide 60 text

自動テストの実績 「IDOLY PRIDE」のチュートリアル自動テスト ● 15分×環境数の単調作業を自動化

Slide 61

Slide 61 text

自動テストの実績 新規プロジェクトのADVの網羅的なテスト ● 開発環境で設定されているADVをすべて再生するテスト ○ 進行不能な不具合がないかの確認 ● 1回で500本以上のADVを自動チェック ○ 27時間におよぶ操作フローを効率化 キャラクターA:1話再生から終了 キャラクターA:2話再生から終了 … キャラクターP:16話再生から終了

Slide 62

Slide 62 text

自動テストを遂行する仕組み = 自動で端末を操作する仕組み 応用的な活用 アプリ実行 自動操作 端末での 単調作業 自動化

Slide 63

Slide 63 text

アプリ実行 ● パフォーマンスモニタリング ○ 自動テストの仕組みを使って定期的な計測フローを実現 ○ 内製のパフォーマンス計測基盤と連携し、自動的にCPUやメモリの状況などを集計 応用的な活用 自動操作と 計測処理 結果確認 計測データ

Slide 64

Slide 64 text

● 3DキャラクターのモーションパターンのGIF書き出しの自動化 ○ スクリプター向けドキュメント作成の効率化 ○ 数百のモーションを録画し、GIFとして書き出す作業が自動化 応用的な活用 アプリ実行 自動操作 ドキュメント 書き出し 録画処理

Slide 65

Slide 65 text

まとめと今後の展望 モバイルゲームのQA課題に組織でチャレンジ!〜子会社を跨いで挑戦するQA効率化の道のり〜

Slide 66

Slide 66 text

まとめ ● モバイルゲームの開発工程は大規模化し、QA工程の課題感が顕著 ● SGEではQA課題を横断して解決すべく、ボトムアップ型で組織を形成 ○ 現場の知見をもとに課題と打ち手を検討 ○ 技術アプローチと推進をセットにしたミッション策定 ● QAの効率化をミッションに技術的なアプローチを検証中 ○ リモートでの実機検証環境の構築 ■ OpenSTFを活用した社内端末利用サービスの検証 ○ 自動テストの仕組みづくり ■ 回帰テストや端末を要する作業を効率化

Slide 67

Slide 67 text

今後の展望 ● リモートでの実機検証環境の改善 ○ 各種プロジェクトのニーズに沿った機能拡張 ○ OpenSTFの技術課題の解決 ● 自動テストの活用の推進とブラッシュアップ ○ 自動テストの仕組みの各プロジェクトへの展開 ○ エディタ上での自動テストに向けた技術検証 ● 組織レベルでのQA工程の意識改革 ○ 基盤の推進や各種技術や手法のドキュメント化を推進 ○ 各プロジェクトが開発品質を検討し、QA課題の効率化に向き合う姿へ

Slide 68

Slide 68 text

ご清聴ありがとうございました