1 of 21

利用者目線で考える�ソーシャルゲームの�自動E2Eテスト設計

@dairappa

JaSST nano Vol.2

2 of 21

自己紹介

  • @dairappa
  • メーカー勤務のエンジニア
  • 二児の父
  • 好きな言語: TypeScript, Kotlin, Swift, C#, Java, F#
  • 最近: 🐴トレーナー業に勤しんでいます🐎

3 of 21

本日話すこと

  • E2Eテストの考え方を、みなさんがわかり易い事例に例えてお話したいと思います
  • わかり易い事例 = ソーシャルゲーム
  • 最近話題のソーシャルゲームといえば、、、

4 of 21

5 of 21

「ウマ娘」E2E ≒ システムテスト自動化設計

  • システムテスト自動化の技法
  • システムテスト自動化のポイント
  • ウマ娘における自動テスト優先シナリオ
  • 各シナリオの実装ポイント

6 of 21

システムテスト自動化の技法

  • リニアスクリプト: キャプチャ&リプレイに近いもの
  • 構造化スクリプト: 条件式などで構造化したもの
  • 共有スクリプト: 共通部分などを切り出し再利用性を高めたもの
  • データ駆動スクリプト:�スクリプトとデータを分離し、様々なパターンのテストを実行する
  • モデルベース:�テスト対象の外部仕様をモデル化し、そのモデルを用いてテストを記述する�

ギア本

TABOK

7 of 21

参考文献(一部絶版)

8 of 21

システムテスト自動化のポイント

  • ツールの進化により、自動化難易度はかなり低くなった
  • しかし実装としてはまだまだ煩雑になりがち
  • 実時間で動作することが殆どのため、時間がかかる
  • 壊れやすいテストになりがちで、メンテナンスコストが高い

⇒ 利用頻度の高い = 利用者にとって価値の高いシナリオを実装すべき

9 of 21

ユーザ視点からの典型的シナリオ

  1. デイリールーチン(スモークテスト)
  2. デイリーレース / チームレース
  3. 育成周回(稼ぎ)
  4. 育成周回(因子厳選)

10 of 21

デイリールーチンの実装方針

  • ログイン ⇒ ログインボーナス獲得、あたりまで
  • 基本的には一本道の実装で、分岐の必要性も少ない

⇒ リニアスクリプトで高速に実装する

11 of 21

デイリールーチンの自動テスト設計

12 of 21

デイリーレース / チームレースの実装方針

  • 定期的に実行が必要なレースで、ジュエルやマニーが獲得できる
  • 基本的には一本道なので、リニアスクリプトでも実装容易
  • ただし、イベントでデイリーレースの出走可能回数が変わったり、チームレースは残スタミナに応じた回数の出走が可能だったりと、�条件的な制御が必要

⇒ 構造化スクリプトで表現しコードをシンプルに保つ

13 of 21

デイリーレース/チームレースの自動テスト設計

14 of 21

育成周回(稼ぎ)

  • 特定の育成が簡単なキャラクターで、�育成を回しマニーを稼ぐ(バクシン稼ぎ)
  • 処理自体は半固定だが、それなりに複雑
    • スピード固定でトレーニングを実行
    • 悪影響が出ない範囲でレース出走

⇒ 共有スクリプトでファイルを分割し共通化することで保守性を上げる

15 of 21

バクシン稼ぎの自動テスト設計

16 of 21

育成周回(因子厳選)

  • ウマ娘では、育成においてすでに育成を終えたウマ娘からの能力継承(因子継承)を行う
  • 良い因子を持った両親を育成することが重要なポイント
  • 良い因子がでる確率は非常に辛く(最も重要な青☆3は1%程度)、因子厳選のために多くの育成を回すのが普通
  • 確率で最適選択肢が変わる訓練を適切に行い、適切なレースに出ることが必要

17 of 21

因子周回のポイント

  • 複数の能力値パラメータをB以上にする(青☆3因子獲得の条件、�能力不足によるリタイア阻止)
  • ファン数を一定以上集めるよう、レースに出走する(白☆3因子の確率向上、マニーとジュエル稼ぎ)
  • 適切なレースに勝利し、良いレース因子を得る
  • URAファイナルズ決勝まで勝ち進む

⇒ 現在の状態に応じて最適な行動を選ぶ = モデル化が必要

18 of 21

トレーニング画面�モデル化ポイント

  • 強化したいパラメータ
  • 今回のトレーニングでの各パラメータ上昇値
  • 故障率
  • トレーニングヒント
  • トレーニングレベル
  • 友情パラメータの値
  • 友情トレーニング

一緒にトレーニングするメンバー

トレーニングによる上昇値

トレーニングメニュー

19 of 21

レース選択画面�モデル化ポイント

  • 育成ウマ娘の適正
  • 獲得ファン数
  • レース勝利の獲得因子

レース適正

獲得ファン数

レース名�(獲得因子)

20 of 21

まとめ

  • 導入するテストのタイプによって、自動テストのタイプも変わる
    • 優劣ではなく、向き不向き
  • 簡単でまず安心できるところから攻め、すこしずつ本丸に向かっていく
  • 実際のゲームプレイに即したテストは、モデル駆動などのハイレベルアプローチが必要になる
  • データ駆動テストはあんまりソシャゲのテストには向かないかも(ユーザ登録やチャットには使えるかも?)

21 of 21