Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CEDEC2023 『ロマンシング サガ リ・ユニバース』に適用したクラウド完結型のモバイルゲーム自動テストシステム完成までの軌跡

CEDEC2023 『ロマンシング サガ リ・ユニバース』に適用したクラウド完結型のモバイルゲーム自動テストシステム完成までの軌跡

2023-08-23 から 2023-08-25 に開催された CEDEC2023 で発表した資料です。

登壇者: 山﨑 友貴、氏平 誠司
詳細は以下をご確認ください。
https://cedec.cesa.or.jp/2023/session/detail/s64257fa889833

Other Decks in Technology

Transcript

  1. ©Akatsuki Games Inc.
    『ロマンシング サガ リ・ユニバース』に
    適用したクラウド完結型のモバイルゲーム
    自動テストシステム完成までの軌跡
    株式会社アカツキゲームス
    山﨑 友貴 氏平 誠司
    CEDEC2023 2023-08-24

    View full-size slide

  2. ©Akatsuki Games Inc.
    自己紹介
    株式会社アカツキゲームス
    研究開発部 QA Engineering
    QAエンジニア
    山﨑 友貴 tomotaka-yamasaki
    @tomo_tk11
    JSTQB FL/AL-TA 資格保有
    二児のパパ(4y, 1y)
    子供の全力目覚ましで起きる日々。
    2

    View full-size slide

  3. ©Akatsuki Games Inc.
    自己紹介
    株式会社アカツキゲームス
    ゲーム事業部
    サーバエンジニア
    氏平 誠司 seiji-ujihira
    趣味は柔道と筋トレ
    3

    View full-size slide

  4. ©Akatsuki Games Inc.
    ターゲットリスナー
    4
    自動テスト導入してるけど、
    デバイス管理がネックなんだ
    よなぁ。
    自動テスト興味あるんだけど、
    どこ目指せばいいかわかんない
    んだよなぁ。
    ● 運営型モバイルゲームの品質向上を目指している方
    ● 自動テストの導入を検討している方
    ● 自動テストを導入しているが、メンテナンスに苦しんでいる方

    View full-size slide

  5. ©Akatsuki Games Inc.
    ストーリーライン
    1. テスト対象について
    2. 運営型モバイルゲームテストの難しさ
    3. 自動テストにおける課題
    4. 自動テスト導入目的
    5. 持続可能な自動テストシステムのための技術紹介
    6. クラウド完結型の自動テストシステム完成までの軌跡
    7. 『ロマンシング サガ リ・ユニバース』への適用事例
    8. まとめ
    9. 今後の展望
    5

    View full-size slide

  6. ©Akatsuki Games Inc.
    テスト対象について
    1
    6

    View full-size slide

  7. ©Akatsuki Games Inc.
    1 テスト対象について
    『ロマンシング サガ リ・ユニバース』(ロマサガRS)の紹介
    7
    ● 2018年12月に株式会社スクウェア・エニックスから
    リリースされた「ロマンシング サガ」完全新作
    ○ 「ロマンシング サガ3」から300年後の世界が舞台
    ● 2023年06月で4.5周年を迎えた長期運営タイトル
    ● iOS、Android プラットフォームで提供している
    © SQUARE ENIX
    Powered by Akatsuki Inc.
    ILLUSTRATION: TOMOMI KOBAYASHI

    View full-size slide

  8. ©Akatsuki Games Inc.
    運営型モバイルゲーム
    テストの難しさ
    2
    8

    View full-size slide

  9. ©Akatsuki Games Inc. 9
    ゲームテストの難易度を高めている
    3つの要因

    View full-size slide

  10. ©Akatsuki Games Inc.
    2 運営型モバイルゲームテストの難しさ
    ゲームテストの難易度を高めている3つの要因
    10
    更新頻度 x 更新量 =
    テスト実行コスト
    運用レベルの更新 新規開発レベルの更新
    ● キャラクター
    ○ ステータス、スキル、…
    ○ 立ち絵、アイコン、エフェクト、…
    ● イベント
    ○ 難易度、報酬、…
    ○ ミッション、シナリオ、…
    ● and more…
    月単位のシステム変更
    週単位のデータ更新
    ● 新機能の追加
    ● 既存機能の大規模改修
    ● OS やゲームエンジンのアップデート追従
    ● and more…

    View full-size slide

  11. ©Akatsuki Games Inc.
    2
    11
    増え続ける機能 =
    増え続けるコスト
    運営型モバイルゲームテストの難しさ
    ゲームテストの難易度を高めている3つの要因
    約40機能/60人日

    View full-size slide

  12. ©Akatsuki Games Inc. 12
    「ゲーム」構成要素の
    組み合わせ = ∞
    ● ロマサガRSのバトルの組み合わせだけでも、
    編成 x アクション x 状態 x … = ∞
    ● 簡単に組み合わせ爆発が起こる
    2 運営型モバイルゲームテストの難しさ
    ゲームテストの難易度を高めている3つの要因

    View full-size slide

  13. ©Akatsuki Games Inc. 13
    2 運営型モバイルゲームテストの難しさ
    ゲームテストの難易度を高めている3つの要因 - まとめ
    1. 更新頻度 x 更新量 = テスト実行コスト
    運用的開発と新規的開発の更新頻度と量が多い
    2. 増え続ける機能 = 増え続けるコスト
    リグレッションテストの項目が雪だるま式に増える
    3. 「ゲーム」構成要素の組み合わせ = ∞
    簡単に組み合わせ爆発が起こる

    View full-size slide

  14. ©Akatsuki Games Inc. 14
    2 運営型モバイルゲームテストの難しさ
    ゲームテストの難易度を高めている3つの要因 - まとめ
    1. 更新頻度 x 更新量 = テスト実行コスト
    運用的開発と新規的開発の更新頻度と量が多い
    2. 増え続ける機能 = 増え続けるコスト
    リグレッションテストの項目が雪だるま式に増える
    3. 「ゲーム」構成要素の組み合わせ = ∞
    簡単に組み合わせ爆発が起こる
    これらのテストを
    自動化すれば難易度
    は下げられそう?

    View full-size slide

  15. ©Akatsuki Games Inc.
    モバイルゲーム自動テスト
    における課題
    3
    15

    View full-size slide

  16. ©Akatsuki Games Inc.
    3 モバイルゲーム自動テストにおける課題
    Web 業界とゲーム業界の自動テストの違い
    16
    Web 業界 ゲーム業界
    ● Selenium*1, Playwright*2 などの
    テスト自動化ツール
    ● Autify*3, mabl*4 などの
    テスト自動化プラットフォーム
    ● 自社タイトルに最適化された
    自動テストツール
    ○ キャプチャリプレイツール*5*6 や
    マップ負荷可視化ツール*7 など
    ツール
    *1 Selenium, *2 Playwright
    *3 Autify, *4 mabl
    *5 CEDEC2020 | 株式会社セガ | 「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
    *6 CEDEC2020 | 株式会社スクウェア・エニックス | “FINAL FANTASY VII REMAKE”における自動QAシステムの構築と運用
    *7 CEDEC2022 | 株式会社テックフラッグ | 受託型開発会社が始める3Dアクションゲーム開発効率化のためのQA自動化への道のり~千里の道も一歩から~
    Web 業界と違い、共通で使えるツールが少ない

    View full-size slide

  17. ©Akatsuki Games Inc. 17
    モバイルゲームの自動テストが
    浸透しない3つの原因

    View full-size slide

  18. ©Akatsuki Games Inc.
    1. コンテンツの変化が激しく、自動テストが持続できない
    2. 画面情報のみだと、UI 要素の取得が難しい
    3. 多種多様なデバイスの管理にコストがかかる
    18
    3 モバイルゲーム自動テストにおける課題
    モバイルゲームの自動テストが浸透しない3つの原因

    View full-size slide

  19. ©Akatsuki Games Inc.
    1. 変化に強い自動テストスクリプトを設計する
    2. 変化を受け入れ、最速で自動テストスクリプトを修正可能なシステムを設計する
    3. 変化しづらいテストを自動化する
    19
    3 モバイルゲーム自動テストにおける課題
    コンテンツの変化が激しく、自動テストが持続できない
    ゲームテストの難易度を高めている3つの要因
    自動テストが
    テスト対象の変化に耐えられない



    「ゲーム」構成要素の組み合わせ = ∞
    増え続ける機能 = 増え続けるコスト
    更新頻度 x 更新量 = テスト実行コスト
    激しい
    変化

    View full-size slide

  20. ©Akatsuki Games Inc.
    ● モバイルゲームは画面からだと、ピクセル化された情報しか参照できない
    ○ 画像認識によって UI 要素を特定するしかない
    ● ゲームは動的な UI デザインが多く、画像認識の精度を下げている
    20
    3 モバイルゲーム自動テストにおける課題
    画面情報のみだと、UI 要素の取得が難しい
    画像認識だけを用いると、テスト結果に偽陽性が生じる
    解決策 画像認識以外で UI 要素を取得できる自動テストフレームワークを採用する

    View full-size slide

  21. ©Akatsuki Games Inc.
    ● デバイスの用意・維持コスト
    ○ OS、画面比率、処理性能ごとにデバイスを購入するコスト
    ○ 電源がつかないなどのトラブル対応コスト
    ○ バッテリー膨張によるデバイス買い替えコスト
    ● デバイス管理システムの構築・運用コスト
    ○ Device Farmer(OpenSTF)* などの導入コスト
    21
    3 モバイルゲーム自動テストにおける課題
    多種多様なデバイスの管理にコストがかかる
    * CEDEC2020 | 株式会社サムザップ | AirtestとPocoとOpenSTFによるUnity製
    スマートフォン向けゲームの実機自動テスト環境構築とその利用方法
    解決策 管理が不要なクラウド上のデバイスで、自動テストを実行する

    View full-size slide

  22. ©Akatsuki Games Inc.
    1. コンテンツの変化が激しく、自動テストが持続できない
    変化を受け入れ、最速で自動テストスクリプトを修正可能なシステムを設計する
    変化しづらいテストを自動化する
    2. 画面情報のみだと、UI 要素の取得が難しい
    画像認識以外で UI 要素を取得できる自動テストフレームワークを採用する
    3. 多種多様なデバイスの管理にコストがかかる
    管理が不要なクラウド上のデバイスで、自動テストを実行する
    22
    3 モバイルゲーム自動テストにおける課題
    モバイルゲームの自動テストが浸透しない3つの原因と、そのアプローチ - まとめ

    View full-size slide

  23. ©Akatsuki Games Inc.
    運営型モバイルゲームの
    自動テスト導入目的
    4
    23

    View full-size slide

  24. ©Akatsuki Games Inc. 24
    4 運営型モバイルゲームの自動テスト導入目的
    品質コストとは
    適合
    コスト
    不具合混入を予防するためのコスト
    予防コスト
    評価コスト
    内部失敗
    コスト
    外部失敗
    コスト
    不適合
    コスト
    不具合を発見しやすくするためのコスト、
    仕様書レビューのコスト
    リリース前の、テストまたはレビュー時に発見した
    不具合の修正コスト
    リリース後の、本番不具合修正などにかかるコスト
    品質
    コスト
    不適合コストを減らし、適合コストを増やすことが
    できれば自動テストの成功


    ISTQBテスト技術者資格制度 Advanced Level シラバス 日本語版
    テストマネージャ Version2012.J04, p43

    View full-size slide

  25. ©Akatsuki Games Inc. 25
    4 運営型モバイルゲームの自動テスト導入目的
    不適合コストとテスト実行コストの関係
    JASPIC SPIJapan2009 奈良隆正 ソフトウェア品質保証の方法論、技法、その変遷
    テスト実行コストを最小化する
    ことで、フェーズ内阻止でき、
    不適合コストが下がる
    フェーズごとの不具合修正(不適合)コスト
    フェーズ内阻止
    不具合が混入したフェーズの中で
    不具合を発見し、修正まで行うこと

    View full-size slide

  26. ©Akatsuki Games Inc. 26
    4 運営型モバイルゲームの自動テスト導入目的
    自動テスト導入目的 - まとめ
    自動テスト導入前
    自動テスト導入後
    テスト実行
    コスト
    フェーズ内
    阻止
    不適合
    コスト
    自動テストによってテスト実行コストを下げ、
    より早期にテスト可能にすること
    導入目的

    View full-size slide

  27. ©Akatsuki Games Inc. 27
    4 運営型モバイルゲームの自動テスト導入目的
    それぞれのテストの得意領域とは
    得意領域
    「ゲーム」構成要素のロジックや組み合わせを機械的に比較するテスト
    ● スキル効果説明文の生成ロジック
    ● バトルでのスキル効果の発動有無
    ● and more…
    ● テストが変化しづらく、繰り返し行われるテスト
    ● IP(ドメイン)に関連した面白さのチェック
    ● ユーザビリティやアクセシビリティなどの非機能テスト
    テストレベル
    ユニット
    テスト
    Small
    Large
    手法
    自動
    自動
    手動
    E2E
    テスト
    テスト規模

    View full-size slide

  28. ©Akatsuki Games Inc. 28
    4 運営型モバイルゲームの自動テスト導入目的
    テストをもっと頻繁に、たくさん行うために
    リグレッション
    テスト
    スモーク
    テスト
    ● デグレード(リグレッション)がないことを
    確認するテスト
    ○ 同じテストを繰り返すことで効果を発揮する
    ● 基本的な動作に問題がないかどうかを確認
    するテスト
    コストがかかる繰り返しのテストや、
    基本動作のテストを自動化の対象とすると良さそう
    変化しづらいテストを自動化する

    View full-size slide

  29. ©Akatsuki Games Inc.
    持続可能な自動テスト
    システムのための技術紹介
    5
    29

    View full-size slide

  30. ©Akatsuki Games Inc.
    5
    ● ゲームにフォーカスした自動テスト用のフレームワーク及びそのツール類
    ○ NetEase 社から提供されている(オープンソース)
    ● Python によるテストスクリプトの記述
    ○ hoge.air/hoge.py というディレクトリ構成のスクリプト
    ● パターンマッチングでの画像認識で UI を検知
    ● テストスクリプトの実装を手助けする IDE の提供あり
    ● CLI でテスト実行可能
    持続可能な自動テストシステムのための技術紹介
    Airtest - ゲームのテスト自動化に特化したフレームワーク
    30
    https://airtest.netease.com/
    https://github.com/AirtestProject/Airtest
    Airtest

    View full-size slide

  31. ©Akatsuki Games Inc.
    5
    ● ゲームにフォーカスした自動テスト用のフレームワーク及びそのツール類
    ○ NetEase 社から提供されている(オープンソース)
    ● Python によるテストスクリプトの記述
    ○ hoge.air/hoge.py というディレクトリ構成のスクリプト
    ● パターンマッチングでの画像認識で UI を検知
    ● テストスクリプトの実装を手助けする IDE の提供あり
    ● CLI でテスト実行可能
    持続可能な自動テストシステムのための技術紹介
    Airtest - ゲームのテスト自動化に特化したフレームワーク
    31
    https://airtest.netease.com/
    https://github.com/AirtestProject/Airtest
    Airtest
    実用性(保守のしやすさ、スクリプト作成の手軽さ)を考慮すると、
    Airtest だけでは自動化を支えきれない

    View full-size slide

  32. ©Akatsuki Games Inc.
    5
    ● アプリ内のメタ情報を Airtest で利用可能にするための自動テストツール
    ○ Airtest 同様 NetEase 社から提供されている(オープンソース)
    ● UI オブジェクトの位置やツリー構造などの情報を解析し、テストスクリプト側で操作可能
    ● Airtest IDE の Inspector を使って UI 操作コードが自動生成可能
    ● RPC(Remote Procedure Call) を介してアプリ内の任意処理をコール可能
    ● 各ゲームエンジン用の SDK が提供されている
    持続可能な自動テストシステムのための技術紹介
    Poco - アプリ内のメタ情報を Airtest で利用可能にするツール
    32
    https://github.com/AirtestProject/Poco
    Poco

    View full-size slide

  33. ©Akatsuki Games Inc. 33
    5 持続可能な自動テストシステムのための技術紹介
    AWS Device Farm - クラウドのモバイルデバイスでテストできるサービス
    AWS Device Farm
    ※ これ以降、 Device Farm とする
    ● AWS クラウドでホストされている物理モバイルデバイスでテストできるサービス
    ○ テストスクリプトの実行ログ
    ○ デバイスのスクリーンショット、動画
    ○ デバイスの性能メトリクス
    ● デバイスの管理が AWS マネージドなので、テストに集中できる
    ● オンデマンド利用することも可能なので、デバイスの準備コストがかからない

    View full-size slide

  34. ©Akatsuki Games Inc. 34
    5 持続可能な自動テストシステムのための技術紹介
    Device Farm の概念図

    View full-size slide

  35. ©Akatsuki Games Inc.
    プライベートデバイス
    ● デバイスは専有する
    ● テスト中 VPC エンドポイントで
    AWS Virtual Private Cloud に接続できる
    パブリックデバイス
    ● デバイスは専有しない
    ● テストごとに OS クリーンアップされる
    ● iOS/Android、OS バージョン、デバイス
    を自由に選択できる
    35
    5 持続可能な自動テストシステムのための技術紹介
    Device Farm デバイスの特徴とオンプレとの比較
    デバイス管理コスト
    スケールのしやすさ
    操作の自由度
    開発環境への接続
    オンプレ
    デバイス
    Device Farm
    プライベート
    デバイス
    Device Farm
    パブリック
    デバイス

    View full-size slide

  36. ©Akatsuki Games Inc.
    プライベートデバイス
    ● デバイスは専有する
    ● テスト中 VPC エンドポイントで
    AWS Virtual Private Cloud に接続できる
    パブリックデバイス
    ● デバイスは専有しない
    ● テストごとに OS クリーンアップされる
    ● iOS/Android、OS バージョン、デバイス
    を自由に選択できる
    36
    5 持続可能な自動テストシステムのための技術紹介
    Device Farm デバイスの特徴とオンプレとの比較
    デバイス管理コスト
    スケールのしやすさ
    操作の自由度
    開発環境への接続
    オンプレ
    デバイス
    Device Farm
    プライベート
    デバイス
    Device Farm
    パブリック
    デバイス
    採用

    View full-size slide

  37. ©Akatsuki Games Inc.
    1. テストスクリプトなどをまとめた zip
    2. 実行の手順を記述した YAML
    3. テスト対象のアプリケーション
    37
    5 持続可能な自動テストシステムのための技術紹介
    テスト実行に必要なファイル
    testspec.yaml


    View full-size slide

  38. ©Akatsuki Games Inc. 38
    5 持続可能な自動テストシステムのための技術紹介
    実行の手順を記述した YAML
    インストール
    テスト前処理
    テスト実行
    テスト後処理
    成果物保存

    View full-size slide

  39. ©Akatsuki Games Inc.
    1. Device Farm のホストマシンに zip が展開
    2. デバイスにアプリをインストール
    3. YAML に沿ってテストスクリプトの実行
    4. 各種アーティファクトを保存
    39
    5 持続可能な自動テストシステムのための技術紹介
    Device Farm 上でのテスト実行フロー
    Device Farm の機能で足りないものは
    ホストマシンやアプリで独自に実装することで
    必要なログ・レポートなどの情報を取得している
    ① ②


    View full-size slide

  40. ©Akatsuki Games Inc.
    クラウド完結型の自動
    テストシステム完成までの軌跡
    6
    40

    View full-size slide

  41. ©Akatsuki Games Inc.
    6 クラウド完結型の自動テストシステム完成までの軌跡
    完成までに行ったこと
    41
    テスト結果通知編
    クラウド環境のテスト結果を
    自動で受け取る
    テスト実行編
    クラウド環境で
    自動テスト実行する
    テスト実行環境編
    開発しやすい環境を作る

    View full-size slide

  42. ©Akatsuki Games Inc.
    6 クラウド完結型の自動テストシステム完成までの軌跡
    テスト実行環境編
    42
    テスト結果通知編
    クラウド環境のテスト結果を
    自動で受け取る
    テスト実行編
    クラウド環境で
    自動テスト実行する
    テスト実行環境編
    開発しやすい環境を作る

    View full-size slide

  43. ©Akatsuki Games Inc.
    6
    変化を受け入れ、最速で自動テストスクリプトを修正可能なシステム
    クラウド完結型の自動テストシステム完成までの軌跡
    開発しやすい環境とは
    43
    どの実行環境においても、
    同一のテストスクリプトで、
    同様のテスト結果になる、こと
    持続可能な自動
    テストシステム
    要件のひとつ

    View full-size slide

  44. ©Akatsuki Games Inc. 44
    AWS CLI

    Airtest CLI
    Airtest CLI
    Airtest IDE
    実行方法
    実行環境 実行トリガー
    6 クラウド完結型の自動テストシステム完成までの軌跡
    自動テストが動作する環境とは
    Device
    Farm
    ローカル
    マシン
    Jenkins
    ローカル
    マシン
    ローカル
    マシン
    ※ Device Farm ホストマシン: Ubuntu(14.04)、 ローカルマシン: Mac(13.x) で動作している
    ユースケース
    エンジニア以外が自動テスト実行する
    エンジニアが手元のマシンから手軽に実行する
    テストスクリプトのデバッグを行う
    Poco の Inspector で UI 操作コードを生成する
    用途
    本番実行
    開発

    View full-size slide

  45. ©Akatsuki Games Inc.
    ※ Device Farm ホストマシン: Ubuntu(14.04)、 ローカルマシン: Mac(13.x) で動作している
    45
    AWS CLI

    Airtest CLI
    Airtest CLI
    Airtest IDE
    実行方法
    実行環境 実行トリガー
    6 クラウド完結型の自動テストシステム完成までの軌跡
    自動テストが動作する環境とは
    Device
    Farm
    ローカル
    マシン
    Jenkins
    ローカル
    マシン
    ローカル
    マシン
    ユースケース
    エンジニア以外が自動テスト実行する
    エンジニアが手元のマシンから手軽に実行する
    テストスクリプトのデバッグを行う
    Poco の Inspector で UI 操作コードを生成する
    用途
    本番実行
    開発
    全環境で、同一のテストスクリプトを動作させることを目指します

    View full-size slide

  46. ©Akatsuki Games Inc. 46
    実行環境の
    Python バージョンを統一する

    View full-size slide

  47. ©Akatsuki Games Inc.
    ● Device Farm ホストマシンでは Python 2系、3系が標準で使用可能
    ○ 3系を使用したい場合、YAML で以下の環境変数を指定する
    export PYTHON_VERSION=3
    ● Python 2系: 2.7.9
    ● Python 3系: 3.7.4
    47
    6 クラウド完結型の自動テストシステム完成までの軌跡
    Device Farm の Python 環境について

    View full-size slide

  48. ©Akatsuki Games Inc.
    ● pipenv(+ pyenv) を導入し、Python バージョンを固定する
    ○ pipenv install で開発環境を統一することができる
    ● Python: 3.9 を採用
    ○ Airtestが保証しているバージョンの上限が 3.9 *1
    48
    6 クラウド完結型の自動テストシステム完成までの軌跡
    Python バージョンを固定し、テスト結果を保証する
    ● 実行環境の Python バージョンが統一されていない
    ○ 同一のスクリプトで同様のテスト結果になる保証ができない
    課題
    解決策
    *1 https://airtest.doc.io.netease.com/IDEdocs/3.4run_script/0_run_script/#1-python
    実行環境
    Device
    Farm
    ローカル
    マシン
    Python
    (2.7, 3.7)
    Python
    (3.11など)

    View full-size slide

  49. ©Akatsuki Games Inc. 49
    6 クラウド完結型の自動テストシステム完成までの軌跡
    pipenv でローカルの Python バージョンを統一する
    実行環境
    Device
    Farm
    ローカル
    マシン
    Python
    (2.7, 3.7)
    pipenv
    (3.9)
    pipenv で統一可能
    ※ Airtest IDE は Settings で指定する

    View full-size slide

  50. ©Akatsuki Games Inc. 50
    6 クラウド完結型の自動テストシステム完成までの軌跡
    pipenv でローカルの Python バージョンを統一する
    実行環境
    Device
    Farm
    ローカル
    マシン
    Python
    (2.7, 3.7)
    pipenv
    (3.9)
    ローカルマシン同様、pipenv で
    Python をインストールしたい
    pipenv で統一可能
    ※ Airtest IDE は Settings で指定する

    View full-size slide

  51. ©Akatsuki Games Inc. 51
    6 クラウド完結型の自動テストシステム完成までの軌跡
    Device Farm で同一の Python バージョンを利用する
    ● ローカルでビルドした Python を Device Farm にアップロードする
    ○ ホストマシンの OpenSSL が古い(1.0.2o)ため、OpenSSL(1.1.1q) もアップロード
    ● テストスクリプトと同じ zip ファイルにまとめ、 YAML でパスを通す
    課題
    解決策
    ● Device Farm は実行ユーザ(device-farm)の権限が弱くインストールできない
    ○ インストール(apt)コマンドや sudo コマンドが使用不可

    View full-size slide

  52. ©Akatsuki Games Inc. 52
    6 クラウド完結型の自動テストシステム完成までの軌跡
    実行環境の Python バージョンを統一する - まとめ
    AWS CLI

    Airtest CLI
    Airtest CLI
    Airtest IDE
    実行方法
    実行環境 実行トリガー
    Device
    Farm
    ローカル
    マシン
    Jenkins
    ローカル
    マシン
    ローカル
    マシン
    実行環境
    Device
    Farm
    ローカル
    マシン
    セルフ
    ビルド
    (3.9)
    pipenv
    (3.9)
    実行環境の Python バージョンを 3.9 に統一した

    View full-size slide

  53. ©Akatsuki Games Inc. 53
    共通処理を
    ランチャースクリプトに記述する

    View full-size slide

  54. ©Akatsuki Games Inc. 54
    6 クラウド完結型の自動テストシステム完成までの軌跡
    テストフレームワークを導入し、ランチャースクリプトを作成する
    ランチャースクリプトのイメージ
    ● テストフレームワークを導入し、
    ランチャースクリプトを作成する
    ● 共通処理は、テスト前後処理や実際に
    テスト処理を行う関数内に記述する
    ● テスト実行時の共通処理が多く、
    テストスクリプトに書くコード量が多くなる
    ○ Airtest の初期設定
    ○ テスト対象のアプリケーションの起動
    ○ テストレポートの出力
    課題
    解決策

    View full-size slide

  55. ©Akatsuki Games Inc.
    ● Airtest CLI で実行すると、最終的に unittest で実行されている
    ● これは、Python 実行に置き換え可能
    $ airtest run smoke.air → $ python smoke.air/smoke.py
    55
    6 クラウド完結型の自動テストシステム完成までの軌跡
    Airtest は何を使ってテスト実行しているのか
    airtest.cli.runner

    View full-size slide

  56. ©Akatsuki Games Inc. 56
    6 クラウド完結型の自動テストシステム完成までの軌跡
    CLI 実行にはテストフレームワーク pytest を導入する
    導入理由
    ● fixture 機能を利用したい
    ○ 外からのパラメータをオプションを使って
    テストスクリプトに渡したい
    pytest --scenario smoke
    ● 自動テストシステム自体のテストも同じ仕組みで書ける
    https://docs.pytest.org/en/latest/
    CLI 実行時は、pytest の記法で記述したランチャースクリプトを使用する

    View full-size slide

  57. ©Akatsuki Games Inc.
    ● Airtest IDE には任意のランチャーを
    設定できる(カスタムランチャー)
    ● IDE のテスト前後処理は
    custom_launcher.py で記述する
    ● IDE メニューの Options > Settings
    で設定する
    57
    6 クラウド完結型の自動テストシステム完成までの軌跡
    Airtest IDE 実行にはカスタムランチャーを定義する
    Airtest launcher (trial)
    custom_launcher.py

    View full-size slide

  58. ©Akatsuki Games Inc. 58
    6 クラウド完結型の自動テストシステム完成までの軌跡
    共通処理をランチャースクリプトに記述する - まとめ
    AWS CLI

    pytest
    pytest
    Airtest IDE
    実行方法
    実行環境 実行トリガー
    Device
    Farm
    ローカル
    マシン
    Jenkins
    ローカル
    マシン
    ローカル
    マシン
    実行環境
    Device
    Farm
    ローカル
    マシン
    セルフ
    ビルド
    (3.9)
    pipenv
    (3.9)
    CLI の実行方法を
    pytest に置き換え
    ランチャーを追加
    CLI用
    ランチャー
    IDE用
    ランチャー

    View full-size slide

  59. ©Akatsuki Games Inc. 59
    タスクランナーを用いて
    パラメータを入力する

    View full-size slide

  60. ©Akatsuki Games Inc.
    60
    6 クラウド完結型の自動テストシステム完成までの軌跡
    実行方法で、パラメータの入力方法を改善する
    ● Device Farm
    ○ 実行デバイス
    ○ タイムアウト
    ○ テスト対象のアプリバージョン
    ○ and more…
    ● テストスクリプト
    ○ テストシナリオ
    ○ 接続サーバ
    ○ and more…
    ※ テストごとに変更するパラメータもある
    増え続けるパラメータ
    ● タスクランナー Invoke を導入する
    ● テスト実行のために必要なパラメータの増加
    ○ 環境変数で指定する方法では、実行時の指定に苦労する
    $ TEST_SCENARIO=smoke TIMEOUT=10 ./run_device_farm.sh
    課題
    解決策

    View full-size slide

  61. ©Akatsuki Games Inc. 61
    6 クラウド完結型の自動テストシステム完成までの軌跡
    Invoke を用いて、パラメータを入力する
    導入理由
    ● 一連の作業をまとめることで、
    パラメータを楽に指定することができる
    invoke test --scenario smoke --timeout 10
    ● テストスクリプトと同じ、Python で言語統一できる
    https://www.pyinvoke.org/

    View full-size slide

  62. ©Akatsuki Games Inc. 62
    6 クラウド完結型の自動テストシステム完成までの軌跡
    タスクランナーを用いてパラメータを入力する - まとめ
    Invoke
    ▶ AWS CLI
    ▶ pytest
    Invoke
    ▶ pytest
    Airtest IDE
    実行環境 実行トリガー
    Device
    Farm
    ローカル
    マシン
    Jenkins
    ローカル
    マシン
    ローカル
    マシン
    実行環境
    Device
    Farm
    ローカル
    マシン
    セルフ
    ビルド
    (3.9)
    pipenv
    (3.9)
    CLI用
    ランチャー
    IDE用
    ランチャー
    CLI の実行方法を
    Invoke に変更し、
    パラメータを入力し
    やすくした
    実行方法

    View full-size slide

  63. ©Akatsuki Games Inc.
    6 クラウド完結型の自動テストシステム完成までの軌跡
    テスト実行環境編 - まとめ
    63
    テスト結果通知編
    クラウド環境のテスト結果を
    自動で受け取る
    テスト実行編
    クラウド環境で
    自動テスト実行する
    テスト実行環境編
    開発しやすい環境を作る
    変化を受け入れ、最速で自動テストスクリプトを修正可能なシステム
    ● 同一の Python バージョン
    ● pytest とカスタムランチャー
    でランチャー作成
    ● Invoke によるパラメータ入力

    View full-size slide

  64. ©Akatsuki Games Inc.
    6 クラウド完結型の自動テストシステム完成までの軌跡
    テスト実行編
    64
    テスト結果通知編
    クラウド環境のテスト結果を
    自動で受け取る
    テスト実行編
    クラウド環境で
    自動テスト実行する
    テスト実行環境編
    開発しやすい環境を作る
    変化を受け入れ、最速で自動テストスクリプトを修正可能なシステム
    ● 同一の Python バージョン
    ● pytest とカスタムランチャー
    でランチャー作成
    ● Invoke によるパラメータ入力

    View full-size slide

  65. ©Akatsuki Games Inc. 65
    Airtest を
    Device Farm で動作させる

    View full-size slide

  66. ©Akatsuki Games Inc.
    ● Appium
    ● Calabash
    ● Instrumentation(Android)
    ● UI Automator(Android)
    ● UI Automation(iOS)
    ● XCTest(iOS)
    66
    6 クラウド完結型の自動テストシステム完成までの軌跡
    Airtest を Device Farm で動作させる
    Airtest は Device Farm で公式にサポートされていない
    サポートされているフレームワーク
    ● Appium だと認識させて、
    Airtest の実行を試みた際の課題
    ○ サポートされているフレームワークの
    形式に沿っていないと実行不可
    ○ Airtest と Device Farm の adb が
    衝突する

    View full-size slide

  67. ©Akatsuki Games Inc. 67
    6 クラウド完結型の自動テストシステム完成までの軌跡
    サポートされているフレームワークの形式に沿っていないと実行不可
    Appium フレームワークに合わせ
    たディレクトリとファイル構成に
    する
    Airtest に必要なファイルのみ
    アップロードすると、Appium の
    形式に合わずエラーになる
    課題
    解決策
    AWS Device Farm での Appium Python
    例:
    APPIUM_PYTHON_TEST_PACKAGE_TEST_DIR_MISSING

    View full-size slide

  68. ©Akatsuki Games Inc. 68
    6 クラウド完結型の自動テストシステム完成までの軌跡
    Airtest 側の adb を Device Farm のものに差し替えて対応した
    Airtest と Device Farm の adb が衝突する
    テスト時は Airtest に付属している adb が起動するが、 Device Farm 上で
    バージョンが異なる adb が既に起動しているため、エラーになる
    課題
    解決策
    Android connection FAQ - Airtest Project Docs

    View full-size slide

  69. ©Akatsuki Games Inc. 69
    アプリの任意のバージョンを
    テスト対象に指定する

    View full-size slide

  70. ©Akatsuki Games Inc.
    ● アプリのビルドフローに Device Farm への
    アップロードフローを追加
    ● Amazon Simple Storage Service(S3) で
    アプリバージョンと
    ARN(Amazon リソースネーム) を管理
    ● Device Farm 起動時に、
    S3 から ARN を取得して指定する
    ○ Invoke のオプションではバージョン番号を
    渡すだけで OK
    70
    6 クラウド完結型の自動テストシステム完成までの軌跡
    アプリの任意のバージョンをテスト対象に指定する

    View full-size slide

  71. ©Akatsuki Games Inc. 71
    パブリックデバイスから
    ゲームサーバに接続する

    View full-size slide

  72. ©Akatsuki Games Inc. 72
    6 クラウド完結型の自動テストシステム完成までの軌跡
    Device Farm を含めたモバイルゲームの簡易的なインフラ構成図

    View full-size slide

  73. ©Akatsuki Games Inc.
    ● VPC エンドポイントを許可する
    ○ パブリックデバイスには無い
    ● Device Farm の公開 IP レンジを全て許可
    ○ Device Farm の全てのデバイスからアクセスできてしまう
    73
    IP 制限をしているため、固定 IP で接続する必要がある



    ● Device Farm のパブリックデバイスから VPN 接続を行う
    ○ AWS VPN に Client VPN があるので採用(VPN サーバの運用は不要)
    ○ クライアントアプリの OpenVPN を使用して Airtest で接続を自動化
    6 クラウド完結型の自動テストシステム完成までの軌跡
    ゲームサーバに接続する要件



    View full-size slide

  74. ©Akatsuki Games Inc.
    6 クラウド完結型の自動テストシステム完成までの軌跡
    テスト実行編 - まとめ
    74
    テスト結果通知編
    クラウド環境のテスト結果を
    自動で受け取る
    テスト実行編
    クラウド環境で
    自動テスト実行する
    テスト実行環境編
    開発しやすい環境を作る
    変化を受け入れ、最速で自動テストスクリプトを修正可能なシステム
    ● 同一の Python バージョン
    ● pytest とカスタムランチャー
    でランチャー作成
    ● Invoke によるパラメータ入力
    ● Appium で Airtest 動作
    ● 任意バージョンがテスト対象
    として指定可能
    ● デバイスを VPN 接続

    View full-size slide

  75. ©Akatsuki Games Inc.
    6 クラウド完結型の自動テストシステム完成までの軌跡
    テスト結果通知編
    75
    テスト結果通知編
    クラウド環境のテスト結果を
    自動で受け取る
    テスト実行編
    クラウド環境で
    自動テスト実行する
    テスト実行環境編
    開発しやすい環境を作る
    変化を受け入れ、最速で自動テストスクリプトを修正可能なシステム
    ● 同一の Python バージョン
    ● pytest とカスタムランチャー
    でランチャー作成
    ● Invoke によるパラメータ入力
    ● Appium で Airtest 動作
    ● 任意バージョンがテスト対象
    として指定可能
    ● デバイスを VPN 接続

    View full-size slide

  76. ©Akatsuki Games Inc. 76
    テスト実行結果を
    一元管理する

    View full-size slide

  77. ©Akatsuki Games Inc. 77
    6 クラウド完結型の自動テストシステム完成までの軌跡
    なぜ実行結果を一元管理すべきなのか
    ● 自動テストの結果は様々な視点から確認できたほうが良い
    ○ テストが失敗したときのトラブルシュートの速度が上がる
    ● 様々な視点とは?
    ○ 自動テストが最後まで流れたか
    ○ アプリ側で実行時エラーが起こっていないか
    ○ 実行中のリソースに問題がないか
    ○ and more…
    できるだけ見たい情報を一元管理したい

    View full-size slide

  78. ©Akatsuki Games Inc.
    ● 情報を S3 にまとめる
    ● Web ホスティング機能を使用して1つのページで閲覧可能にする
    78
    6 クラウド完結型の自動テストシステム完成までの軌跡
    テスト実行結果を一元管理する方法
    ● Airtest レポート
    ● Device Farm 実行動画
    ● デバイスログ
    ● デバイス性能メトリクス
    ● and more…
    必要な
    情報
    解決策

    View full-size slide

  79. ©Akatsuki Games Inc.
    ● Airtest 標準レポートの機能を利用
    ● Device Farm のホストマシン上に出力
    する
    ○ カスタムアーティファクトとして保存する
    ● テスト実行後に AWS CLI で取得
    79
    6 クラウド完結型の自動テストシステム完成までの軌跡
    Airtest 標準レポートの出力

    View full-size slide

  80. ©Akatsuki Games Inc.
    ● テスト実行後に自動で動画をアーカイブ
    ● レポートと同様に AWS CLI で取得
    80
    6 クラウド完結型の自動テストシステム完成までの軌跡
    Device Farm 実行動画ファイルの出力
    ● fps向上: 5 → 25 fps (実測値)
    ● フレームが飛ぶ現象が起きなくなった
    2023年06月のアップデートで性能向上

    View full-size slide

  81. ©Akatsuki Games Inc. 81
    テスト結果を通知する

    View full-size slide

  82. ©Akatsuki Games Inc. 82
    6 クラウド完結型の自動テストシステム完成までの軌跡
    テスト結果を Slack で通知するまでの自動テストパイプライン
    テスト実行!

    View full-size slide

  83. ©Akatsuki Games Inc.
    6 クラウド完結型の自動テストシステム完成までの軌跡
    テスト結果通知編 - まとめ
    83
    テスト結果通知編
    クラウド環境のテスト結果を
    自動で受け取る
    テスト実行編
    クラウド環境で
    自動テスト実行する
    テスト実行環境編
    開発しやすい環境を作る
    変化を受け入れ、最速で自動テストスクリプトを修正可能なシステム
    ● 同一の Python バージョン
    ● pytest とカスタムランチャー
    でランチャー作成
    ● Invoke によるパラメータ入力
    ● Appium で Airtest 動作
    ● 任意バージョンがテスト対象
    として指定可能
    ● デバイスを VPN 接続
    ● レポートは S3 で情報一元化
    ● Jenkins → Slack 通知までの
    パイプラインを作成

    View full-size slide

  84. ©Akatsuki Games Inc.
    『ロマンシング サガ リ・ユニバース』
    への適用事例
    7
    84

    View full-size slide

  85. ©Akatsuki Games Inc.
    7 『ロマンシング サガ リ・ユニバース』への適用事例
    自動テストシステムを安定化させるために選択したテスト
    85
    まずは、チュートリアルを突破するスモークテストに適用
    なぜリグレッションテストではなく、スモークテストなのか
    ● 膨大なリグレッションテストケースを
    自動テスト用に変換するコストが
    スモークテストよりも高かったため
    曖昧性を残したテストケース
    (ハイレベルテストケース)
    具体的にしたテストケース
    (ローレベルテストケース)
    変換
    コスト
    手動テスト
    自動テスト
    ISTQBテスト技術者資格制度 Advanced Level シラバス 日本語版
    テストアナリスト Version 3.1.1.J03, p17

    View full-size slide

  86. ©Akatsuki Games Inc. 86
    テストスクリプトを実装して
    理解した自動化の難しいところ
    ゲーム仕様編

    View full-size slide

  87. ©Akatsuki Games Inc. 87
    7 『ロマンシング サガ リ・ユニバース』への適用事例
    実装してわかった - 自動化に不向きな仕様 その1
    慣性が働くスクロールリストビュー
    ● 適切な強さでスワイプする汎用関数の実装
    ○ 調整するパラメータをあえて制限
    ● タップ可能であることを検知する関数の実装
    課題
    解決策
    ● スワイプの力加減の調整が難しい
    ● 対象の UI オブジェクトが画面上に
    表示されていることが検知できない
    ○ 画面外でタップするとエラー
    © SQUARE ENIX
    Powered by Akatsuki Inc.
    ILLUSTRATION: TOMOMI KOBAYASHI

    View full-size slide

  88. ©Akatsuki Games Inc. 88
    7 『ロマンシング サガ リ・ユニバース』への適用事例
    実装してわかった - 自動化に不向きな仕様 その2
    同クラス名の UI オブジェクト
    ● UI オブジェクト内の text で判定する
    poco(text="メロトセロイ").wait()
    課題
    解決策
    ● クラス名がユニークでない UI オブジェクトは
    クラス名で特定できない
    ○ 選択される UI オブジェクトはヒエラルキー情報の
    順番に依存する
    © SQUARE ENIX
    Powered by Akatsuki Inc.
    ILLUSTRATION: TOMOMI KOBAYASHI

    View full-size slide

  89. ©Akatsuki Games Inc. 89
    7 『ロマンシング サガ リ・ユニバース』への適用事例
    実装してわかった - 自動化に不向きな仕様 その3
    動的に位置が変化する UI オブジェクト
    ● UI オブジェクト位置の仕様を
    プランナーにヒアリングし、理解する
    ○ 無駄のない自動テストを書く
    課題
    解決策
    ● マスターデータなどによって
    位置が変化する UI オブジェクトを
    特定する汎用的な自動化手段がない
    © SQUARE ENIX
    Powered by Akatsuki Inc.
    ILLUSTRATION: TOMOMI KOBAYASHI

    View full-size slide

  90. ©Akatsuki Games Inc. 90
    テストスクリプトを実装して
    理解した自動化の難しいところ
    スキル編

    View full-size slide

  91. ©Akatsuki Games Inc.
    ● 自動テストを効率良く実行するために、
    SDK やデバッグ機能などをテスト対象に実装する活動が必要
    ○ Poco-SDK の導入
    ○ 管理ツールの機能追加、API コール
    ○ デバッグ機能の拡充や RPC 化
    ○ and more…
    91
    7 『ロマンシング サガ リ・ユニバース』への適用事例
    実装してわかった - 自動化の難易度を引き上げている要因 その1
    ゲーム開発スキルが求められる

    View full-size slide

  92. ©Akatsuki Games Inc.
    ● 開発エンジニアと議論し、実装の合意を得る必要がある
    ○ ゲームアプリケーションの技術的スキルの習得難易度が高い
    ■ クライアント、サーバなどのゲームを構成する要素の理解が必要
    ■ ゲームアプリケーションによってアーキテクチャが異なる
    92
    7 『ロマンシング サガ リ・ユニバース』への適用事例
    実装してわかった - 自動化の難易度を引き上げている要因 その1
    ゲーム開発スキルが求められる
    ゲーム開発経験が自然と求められる

    View full-size slide

  93. ©Akatsuki Games Inc.
    ● 横断組織が自動テストを推進する難易度は高い
    ○ 開発するために様々な権限を付与してもらう必要がある
    ■ プロダクトに直結する AWS や Jenkins の権限はためらわれる
    ○ プロダクトのリリースサイクルを理解する必要がある
    ■ ステークホルダーを集めたミーティング実施タイミング
    ■ コードのマージタイミング
    93
    7 『ロマンシング サガ リ・ユニバース』への適用事例
    実装してわかった - 自動化の難易度を引き上げている要因 その2
    コミュニケーションスキルが求められる

    View full-size slide

  94. ©Akatsuki Games Inc.
    ● 導入するために、信頼値をどう積み上げていくか?
    94
    7 『ロマンシング サガ リ・ユニバース』への適用事例
    実装してわかった - 自動化の難易度を引き上げている要因 その2
    コミュニケーションスキルが求められる
    品質に関心の高いプロジェクトメンバーとともに活動する

    View full-size slide

  95. ©Akatsuki Games Inc.
    ● 自動テストシステムを安定化させることを目的としたお試し適用
    ○ 自動テストシステムの完成度は高めることができたが、実運用には届かず
    ■ 自動テストしやすい形にテスト対象を変更する作業に苦戦
    ● 自動テストを実運用するために
    ○ スモークテストだけでなく、assert による結果比較を行う自動テストが必要
    ■ 手動テストを自動テストに置き換えていく
    ○ テスト実行コストを比較し、費用対効果が高いテストを自動化対象に選定する
    ■ テストを自動化するコストは決して低くはない
    95
    7 『ロマンシング サガ リ・ユニバース』への適用事例
    チュートリアル突破スモークテストを適用してみた結果

    View full-size slide

  96. ©Akatsuki Games Inc.
    まとめ
    8
    96

    View full-size slide

  97. ©Akatsuki Games Inc. 97
    8 まとめ
    運営型モバイルゲームの自動テスト導入目的
    自動テスト導入前
    自動テスト導入後
    テスト実行
    コスト
    フェーズ内
    阻止
    不適合
    コスト
    自動テストによってテスト実行コストを下げ、
    より早期にテスト可能にすること
    導入目的

    View full-size slide

  98. ©Akatsuki Games Inc.
    1. コンテンツの変化が激しく、自動テストシステムが持続できない
    2. 画面情報のみだと、UI 要素の取得が難しい
    3. 多種多様なデバイスの管理にコストがかかる
    98
    8 まとめ
    モバイルゲームの自動テストが浸透しない3つの原因

    View full-size slide

  99. ©Akatsuki Games Inc. 99
    ● 変化を受け入れ、最速で自動テストスクリプトを修正可能なシステムを設計する
    ○ どの実行環境においても、同一のテストスクリプトで、同様のテスト結果になる
    ■ Python バージョンをクラウドを含む全環境で統一
    ■ Invoke や pytest の採用
    ○ レポートを一元管理し、トラブルシュートの時間を短縮する
    ● 変化しづらいテストを自動化する
    ○ まずは、チュートリアル突破スモークテストを自動化
    コンテンツの変化が激しく、自動テストシステムが持続できない
    8 まとめ
    持続可能な自動テストシステムを作るために

    View full-size slide

  100. ©Akatsuki Games Inc. 100
    ● 画像認識以外で UI 要素を取得できる自動テストフレームワークを採用する
    ○ Airtest と Poco の採用
    画面情報のみだと、UI 要素の取得が難しい
    8 まとめ
    持続可能な自動テストシステムを作るために

    View full-size slide

  101. ©Akatsuki Games Inc. 101
    ● 管理が不要なクラウド上のデバイスで、自動テストを実行する
    ○ Device Farm パブリックデバイスを採用
    ○ Device Farm 上で Airtest を動作させる
    ○ デバイスを VPN 接続し、開発サーバにアクセスする
    多種多様なデバイスの管理にコストがかかる
    8 まとめ
    持続可能な自動テストシステムを作るために

    View full-size slide

  102. ©Akatsuki Games Inc.
    今後の展望
    9
    102

    View full-size slide

  103. ©Akatsuki Games Inc.
    9
    ● assert による結果比較を行う自動テストの実装
    ○ 費用対効果の高い自動テストの選定と実装
    ● iOS の自動テストサポート
    ● Production バイナリにおける自動テストの実施方法の検討
    ○ リリース直前で行うテストは、基本的な挙動の確認が多い
    今後の展望
    価値のある自動テストを効率よく増やしていけるかが課題
    103

    View full-size slide

  104. ©Akatsuki Games Inc. 104
    ゲーム自動テストの発展を願って。

    View full-size slide

  105. ©Akatsuki Games Inc.
    Appendix.
    ● 弊社技術ブログ
    ○ AWS Device Farm で Airtest を動かす方法
    ○ Airtest で CLI, IDE や AWS Device Farm, Local など様々なテスト実行手段
    ○ AWS Device Farm を使って Airtest を実行するときのフローとは
    105

    View full-size slide