Lock in $30 Savings on PRO—Offer Ends Soon! ⏳

「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り...

「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて

GAME CREATORS CONFERENCE '20の講演資料です。
動画のURL:https://youtu.be/jTIIeKKM68Q

『「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて』
株式会社セガ 第1事業部 阪上直樹

SEGADevTech

July 15, 2022
Tweet

More Decks by SEGADevTech

Other Decks in Programming

Transcript

  1. ©SEGA 自己紹介 • 龍が如くスタジオ専属のQAエンジニア* – 開発環境とQAの自動化が主な仕事 – ゲーム内のコードもバリバリ書く • 書いたコードは、製品には1行も入らない

    • 海外ではEmbedded QAと呼んでいる – SEGA TECH Blog : QAエンジニアってどんな仕事? ~ゲーム開発におけるテストの世界~ • http://techblog.sega.jp/entry/2018/08/27/100000 ※QAとはQuality Assuranceの略で品質保証のことを指します
  2. ©SEGA • テスト – ゲームをプレイしてバグを見つける – バグを報告し、修正を確認する – QAテスターの仕事 •

    デバッグ – バグの原因を調査する – バグを修正する – 開発者(主にプログラマ)の仕事 「テスト」と「デバッグ」
  3. ©SEGA テストピラミッド(ゲーム開発) 単体 結合 Play コ ス ト 高 低

    • 通しプレイ • ミッションクリア • コリジョン抜けチェック • 起動チェック • ステージ描画テスト • イベントシーン単体再生 • ゲームオブジェクト・エンティティの連携動作 • 関数・モジュール単位の単体テスト • ライブラリ・エンジンのテスト • データのレギュレーションチェック • ゲームオブジェクト・エンティティの単体動作 ※本講演でのテストピラミッドの定義
  4. ©SEGA 自動テスト導入のきっかけ • カバーすべきテストケースが膨大 – メインストーリーをクリアするだけでも数十時間 – 手動テストが賄えない範囲をサポートするため • 自動プレイテストを導入

    – 単体テストはゲームのアプリ層だと難しい • 結果が画像出力しかない場合が多く、成否が不安定 – 信頼性の確保 • 自動テストを通常のゲームに限りなく近い状態で実行するこ とで開発チームに信頼してもらう
  5. ©SEGA 外部ツール ゲーム内 どこでもリプレイシステム(再生) アクションを指定 どこでもリプレイ CUI(Python) 結果通知 結 果

    JSONで 受け渡し AutoAI WebSocketサーバ AutoPad Pad情報 どこでもリプレイエディタ GUI(C#) 行 ご と の 結 果 p y フ ァ イ ル path(x,y,z)を アクション(JSON)に変換
  6. ©SEGA 外部ツール ゲーム内 WebSocketサーバ アクションを指定 どこでもリプレイ CUI(Python) 結果通知 結 果

    JSONで 受け渡し どこでもリプレイエディタ GUI(C#) 行 ご と の 結 果 p y フ ァ イ ル path(x,y,z)を アクション(JSON)に変換 AutoAI AutoPad Pad情報 WebSocketサーバ
  7. ©SEGA WebSocketを採用した理由 • 汎用性 – ゲーム内の依存度を下げる – 各プラットフォーム対応の手間を省力化 • 応答の即時性

    – スクリプトの実行結果をすぐに受け取って次を実行し たい – HTTP/1.1で直接通信する場合は、一定時間でポーリ ングしないといけない上に、無駄に通信量も増える – HTTP/2.0だとgRPCなどもある
  8. ©SEGA 外部ツール ゲーム内 AutoPadとAutoAI アクションを指定 どこでもリプレイ CUI(Python) 結果通知 結 果

    JSONで 受け渡し WebSocketサーバ どこでもリプレイエディタ GUI(C#) 行 ご と の 結 果 p y フ ァ イ ル path(x,y,z)を アクション(JSON)に変換 AutoAI AutoPad Pad情報
  9. ©SEGA AutoPadの種類 • 指定座標に移動 – path(100, 0, 200) • 指定半径内をランダム

    – target_pos_zone_radius • 指定アイテムを選択 – select_item_name(“gyudon_tokumori”) • 各ミニゲーム用 • バトル用
  10. ©SEGA AutoAIでAutoPadを選択 • AutoAI(シナリオクリア用)の優先度 1. ロード・画面遷移中 • 何もしない、ランダム 2. イベント・会話中

    • 何もしない、スキップ、連打 3. バトル・ミニゲーム中 • バトル用AutoPad、ランダム • 各ミニゲーム用AutoPad、ランダム 4. アドベンチャー・UI操作中 • Pythonで制御
  11. ©SEGA 自動テスト 準備 自動テストのワークフロー テスト設計 自動テスト 環境の構築 自動テスト 作成と保守 ランダム

    シナリオクリア ミニゲーム アイテム コンプリート ログ サーバ QA チーム 開発 チーム エラー送信 壊れたテスト 自 動 テ ス ト 実 行 テ ス ト 結 果 の 見 え る 化
  12. ©SEGA 自動テストの実行環境 自動テスト 作成と保守 ランダム シナリオクリア ミニゲーム アイテム コンプリート ログ

    サーバ QA チーム 開発 チーム エラー送信 壊れたテスト テ ス ト 結 果 の 見 え る 化 自 動 テ ス ト 実 行 自動テスト 準備 テスト設計 自動テスト 環境の構築
  13. ©SEGA 自動テスト 準備 自動テストのエラー検知 テスト設計 自動テスト 環境の構築 自動テスト 作成と保守 ランダム

    シナリオクリア ミニゲーム アイテム コンプリート QA チーム 開発 チーム 壊れたテスト 自 動 テ ス ト 実 行 ログ サーバ エラー送信 テ ス ト 結 果 の 見 え る 化
  14. ©SEGA エラー検知(エラー送信) 龍が如くスタジオのクラッシュレポート機能 ゲームやツール 実行中に 例外発生! ネットワークドライブ • ダンプ •

    ログ • コールスタック • スクリーンショット メール送信 • ダンプ表示batのURL • コールスタック • リビジョン チケット管理システム (Redmine) ログサーバ 1エラー数百MB~数GB
  15. ©SEGA エラー検知(テスト結果の見える化) • どこでもログ分析 – Fluentd – Elasticsearch – Kibana

    – 独自分析ツール • RedmineのWikiに自動更新 • ヒートマップ・分析結果 詳しくはJaSST’18 Tokyoの講演資料を見てね!! http://jasst.jp/symposium/jasst18tokyo/pdf/D4.pdf
  16. ©SEGA テスト結果の見える化のワークフロー ログ送信 Elasticsearch Redmine内の Wikiに公開 自 動 集 計

    集計結果を確認 修 正 手動テスト Jenkinsで 1日1回 オートテスト 開発者 日ごと or リアルタイムで修正&確認 QA
  17. ©SEGA テスト結果の見える化 (スジモン図鑑) • スジモン修正ワークフロー 1. オートテストでスジモンを探索し見つけたらログ送信 • メインシナリオやサブシナリオをクリア •

    各マップを巡回 • 各ダンジョンを攻略 2. スジモンごとの出現数をログ集計 3. 遭遇しないスジモンを修正 • 実装ミスは即時修正 • 出現率が低すぎる場合はパラメータを調整
  18. ©SEGA テスト結果の見える化 (スジモン図鑑) スジモン ID 詳細ログ のリンク スジモン の名前 PC名

    RedmineのWikiを自動更新 遭遇していないスジモンは Kibana上で詳細ログを確認 各スジモンの遭遇頻度の バランス調整にも活用
  19. ©SEGA 自動テスト 準備 自動テスト作成と保守 テスト設計 自動テスト 環境の構築 ログ サーバ QA

    チーム 開発 チーム エラー送信 壊れたテスト 自 動 テ ス ト 実 行 テ ス ト 結 果 の 見 え る 化 自動テスト 作成と保守 ランダム シナリオクリア ミニゲーム アイテム コンプリート
  20. ©SEGA 再現率の低いバグの修正確認に活用 再現率の低い バグが発生 再現用スクリプト を作成・実行 12,773回試行 20回再現 再現率:0.157% 10万人がプレイすると

    157人がエラーに 遭遇してしまう! 54,304回試行 0回再現 再現率:0.000% 修正確認! 謎バグが本当に修正されたことを確認可能!
  21. ©SEGA 自動テスト 準備 テスト自動化チーム(仮)のワークフロー テスト 設計 自動テスト 環境の構築 自動テスト 作成と保守

    ランダム シナリオクリア アイテム コンプリート ログ サーバ テ ス ト 結 果 の 見 え る 化 QA チーム 開発 チーム エラー送信 壊れたテスト テ ス ト 実 行 開発内の 手動テスト 環境の構築 パッケージ の自動更新
  22. ©SEGA 新人プログラマがテスト自動化に参加する意味 • 自動化技術の習得と実践 – 自動テストの書き方やJenkinsのジョブの運用を学ぶ • デバッグ手法を学習 – ペアデバッギング

    • 自分でデバッグ→先輩を呼んで一緒にデバッグ – メモリ周りやマルチスレッドのデバッグ • バグから使用エンジンへの理解を深める – 実装で気を付けるポイント – エンジンのバグを踏まないコツ
  23. ©SEGA テスト自動化チーム(仮)規模の推移 0 1 2 3 4 5 6 7

    8 9 10 龍が如く6 命の詩。 JUDGE EYES:死神の遺言 龍が如く 7 光と闇の行方 自動テスト担当 自動テスト 1名で開始 自動テスト 6名に拡大
  24. ©SEGA プロジェクトごとに振り返りと改善 • 龍が如く6 命の詩。(2016年発売) – パス(JSON)によるメインシナリオのクリア • JUDGE EYES:死神の遺言(2018年発売)

    – 自動テストをLuaで制御 – UI選択の精度向上 • 龍が如く7 光と闇の行方(2020年発売) – 自動テストをPythonで制御 – 自動テストの作成・再生を外部ツール化 – PythonのエラーをTeamsに通知
  25. ©SEGA オートテストのエラー検出数と割合 オートテスト 8,102件 18.6% オートテスト 27,319件 67.4% 龍が如く6 命の詩。

    (ランダム+パス) 龍が如く7 光と闇の行方 (ランダム+Python) オートテスト 手動テスト JUDGE EYES:死神の遺言 (ランダム+Lua) オートテスト 16,930件 33.4% ※2020年3月に集計
  26. ©SEGA 龍が如く0 誓いの場所 龍が如く6 命の詩。 JUDGE EYES:死神の遺言 龍が如く7 光と闇の行方 規

    模 オートテスト稼動数 100台 150台 200台 219台 24時間稼働数 0台 41台 40~80台 79台 エ ラ ー 総数 9,664件 43,369件 50,671件 40,506件 オートテスト 621件 8,102件 16,930件 27,319件 オートテスト率 6.4% 18.6% 33.4% 67.4% コリジョン抜け - 1,910件 126件 2,321件 価 値 のべ稼働時間※ - 82,104 h 244,040 h 305,456 h 時給1000円換算 - 8210万円 2億4404万円 3億0546万円 オートテストの実績 ※1日8時間換算 オートテストのポテンシャル(潜在価値) ※2020年3月に集計
  27. ©SEGA 自動テストの効果 • 品質向上に寄与 – 新規バグとデグレ(エンバグ)の検出 – パフォーマンス計測に活用 – ゲームバランス調整に活用

    • コストは削減できる? – 手動テストのコスト増大を抑える効果がある – デバッグ期間の短縮が可能 – コスト削減はアピールしていない
  28. ©SEGA 自動テストは誰が書くのが効率的? • 開発者が書く – プログラマ、プランナー、アーティストが、自分で実装した ものに対して自動テストを作成する – 自分がテストしてほしいところを重点的にテストできる •

    QAテスターが書く – バグが出やすい場所を経験上知っているので、効率的なテス トが書けるはず – 再現率が低いバグの自動テストを書いて、手動で不可能な回 数のテストを自動テストで補う みんなで自動テストを書いたら最強!
  29. ©SEGA まとめ • 自動テスト作成ツール – 誰でも気軽に作れるツールを目指す • 自動テストのワークフロー – 開発チームに合わせた適切な環境を用意する

    – テスト単体では品質は上がらない • テスト結果の伝え方(見える化)が大事 • テスト自動化チーム(仮) – 実績を示して活動を継続する – 若手を育成し、自動テストの普及に努める
  30. ©SEGA 自動テストを10年やって気付いたこと • 自動テストは資産 – パッチやDLC、バージョンアップ、移植、シリーズ次回作の回帰テスト として使い続けることが可能 • 自動テストは信頼 –

    チームにエラーをエラーとして受け入れてもらうことが大事 – 手動プレイに限りなく近づける、自動テストの仕組みの説明に取り組む • 自動テストは継続 – 継続しないとノウハウが蓄積されない – 組織やチームの文化にしていくことが大事
  31. ©SEGA 運用 環境 自動テスト テスト自動化の始め方ガイド ランダム入力 パス入力 ルールベースAI プレイヤーAI スクリプト

    画像認識 機械学習 テストケース の設定 ログやキャプチャ の自動収集 クラウド実行 環境 汎用化 テストケース の自動生成 ここから開始 ~龍3 龍4,5,0,極 龍6,極2,7 クラッシュ レポート 最新ビルドに 更新して実行 テスト結果の 見える化 自動テストの 協力者を増やす 成果を示して 規模拡大 テスト自動化 チームの結成 みんなで 自動テスト