Slide 1

Slide 1 text

「龍が如く」も「スーパーモンキーボール」も自動化! クオリティエンジニアリングチームによる マルチゲームエンジン対応で進化した 「龍が如くスタジオ」のテスト自動化環境について 株式会社セガ 並木 勇人 桑原 和人 阪上 直樹

Slide 2

Slide 2 text

• 講演後の質疑応答・Ask the Speakerを予定 • 講演資料は、CEDiLと下記に公開予定 – https://speakerdeck.com/segadevtech 本セッションについて

Slide 3

Slide 3 text

Unity • 所属:株式会社セガ 第1事業部 • 職種:クオリティエンジニア • 経歴 2016年新卒入社 『龍が如く6 命の詩。』ゲームプログラマー 『龍が如く 極2』ゲームプログラマー 『北斗が如く』プログラムサポート 『JUDGE EYES:死神の遺言』ゲームプログラマー 『たべごろ!スーパーモンキーボール』ゲームプログラマー 『たべごろ!スーパーモンキーボール 1&2リメイク』ゲームプログラマー 『龍が如く 維新! 極』クオリティエンジニア 『スーパーモンキーボール バナナランブル』クオリティエンジニアリングチームリーダー 自己紹介・並木勇人(なみき ゆうと)

Slide 4

Slide 4 text

Dragon • 所属:株式会社セガ 第1事業部 • 職種:クオリティエンジニア • 経歴 『JUDGE EYES:死神の遺言』 ゲームプログラマー 『龍が如く7 光と闇の行方』 ゲームプログラマー 『LOST JUDGMENT:裁かれざる記憶』 ゲームプログラマー 『龍が如く 維新! 極』クオリティエンジニア 『龍が如く7外伝 名を消した男』クオリティエンジニア 『龍が如く8』 クオリティエンジニアリングチームリーダー 自己紹介・桑原和人(くわばら かずと)

Slide 5

Slide 5 text

UE • 所属:株式会社セガ 開発技術部 • 職種:シニアクオリティエンジニア • 経歴(過去の講演) – KYUSHU CEDEC 2015 「龍が如く」の高速デバッグ術 ~そびえ 立つバグの山を踏破するための弾丸ワークフロー~ – CEDEC2017 無料で始める!「龍が如く」を面白くするための高速 デバッグログ分析と自動化 – CEDEC2018 次世代QAとAI ~ゲーム開発におけるAI活用に正しく 向き合うために~ – GAME CREATORS CONFERENCE ‘20 「龍が如く7 光と闇の行 方」の自動テスト活用事例とテスト自動化チーム(仮)による若手 育成の取り組みについて – CEDEC2020 「龍が如くスタジオ」のQAエンジニアリング技術を 結集した全自動バグ取りシステム – CEDEC2022 開発もQAも自動テスト!「LOST JUDGMENT:裁か れざる記憶」のQAテスター参加で進化した「テスト自動化チーム (仮)」の取り組みについて 自己紹介・阪上 直樹(さかうえ なおき)

Slide 6

Slide 6 text

Unity テスト自動化の汎用化! 本セッションで目指すのは

Slide 7

Slide 7 text

Unity ドラゴンエンジン以外でテスト自動化できない… テスト自動化の汎用化を目指す前に マルチゲームエンジンに対応しよう!

Slide 8

Slide 8 text

Unity みなさん どのゲームエンジンが 好きですか?

Slide 9

Slide 9 text

Unity 私たちは全部好きです! すべてのゲームエンジンで テストを自動化したい!

Slide 10

Slide 10 text

Unity • 採用したゲームエンジンごとにテスト自動化の事例を紹介 – Unreal Engine 編:『龍が如く 維新! 極』 – Unity 編:『スーパーモンキーボール バナナランブル』 – ドラゴンエンジン編:『龍が如く7外伝 名を消した男』『龍が如く8』 本セッションの流れ ひとりではできない! クオリティエンジニアを育成して クオリティエンジニアリングチーム結成!

Slide 11

Slide 11 text

Unity • 品質に関わる問題を技術で解決するエンジニア • ビルドエンジニアとQAエンジニアの両方を担当 クオリティエンジニアとは クオリティエンジニアを 1タイトル1名ずつアサイン! 開発とQAを横断して自動化できるが 負担も大きい

Slide 12

Slide 12 text

Unity • はじめに • Unreal Engine編 • Unity編 • ドラゴンエンジン編 • まとめ 目次

Slide 13

Slide 13 text

UE • はじめに • Unreal Engine (UE) 編 • Unity編 • ドラゴンエンジン編 • まとめ 目次

Slide 14

Slide 14 text

UE • 使用ゲームエンジン – UE4.27 Plus • ジャンル – アクションアドベンチャー • 対応プラットフォーム – 6種類(PS4 / PS5 / Xbox One / Xbox Series X|S / Steam / Windows) • 対応言語 – 9言語(日本語 / 繁体字 / 簡体字 / ハングル / 英語 / フランス語 / イタリア語/ ドイツ語 / スペイン語) 『龍が如く 維新! 極』 全プラットフォーム・全言語もテスト自動化 CEDEC2022 開発もQAも自動テスト!「LOST JUDGMENT:裁かれざる記憶」のQAテスター参加で進化した「テスト自動化チーム(仮)」の取り組みについて https://speakerdeck.com/segadevtech/kai-fa-moqamozi-dong-tesuto-lost-judgment-cai-karezaruji-yi-falseqatesutacan-jia-dejin-hua-sita-tesutozi-dong-hua-timu- jia-falsequ-rizu-minituite Unreal Engine編のタイトル紹介

Slide 15

Slide 15 text

UE ドラゴンエンジンのテスト自動化サイクル テスト自動化のワークフローの詳細は、CEDEC2020 「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム https://speakerdeck.com/segadevtech/long-garu-kusutazio-falseqaenziniaringuji-shu-wojie-ji-sitaquan-zi-dong-baguqu-risisutemu 超高速 高品質 ビルド 環境構築 自動テスト エラー検知 バグ報告 テスト結果

Slide 16

Slide 16 text

UE 「龍が如く 維新! 極」の開発開始時点 超高速 高品質 ビルド 環境構築 自動テスト エラー検知 バグ報告 テスト結果 何もない状態からスタート

Slide 17

Slide 17 text

UE • 標準で用意されている機能の検証からスタート – Automation Test – Gauntlet Automation Framework – 疑似ゲームパッド操作のAPI • FSlateApplication::ProcessAnalogInputEvent • 先行事例の調査 – UE4における自動プレイのポストモーテム • https://www.docswell.com/s/EpicGamesJapan/5NLJPZ-UE4_LargeScaleDevSQEX_Autoplay – GDC 2019 Automated Testing of Gameplay Features in 'Sea of Thieves' • https://gdcvault.com/play/1026366/Automated-Testing-of-Gameplay-Features – CEDEC2022 受託型開発会社が始める3Dアクションゲーム開発効率化のためのQA自動化への道のり~千里の道も一歩から~ • https://cedil.cesa.or.jp/cedil_sessions/view/2591 Unreal Engineでのテスト自動化

Slide 18

Slide 18 text

UE • スケジュールがタイト – 導入・サポート・学習のコストをかけられない • 開発チーム – ドラゴンエンジン経験者が一定数いる • ゲーム内の実装 – ドラゴンエンジンと同じC++で移植が可能 「龍が如く 維新! 極」での実装方針 ドラゴンエンジンのテスト自動化と 見た目(GUI部分)を共通化しよう!

Slide 19

Slide 19 text

UE Unreal Engineのテスト自動化サイクル 超高速 高品質 ビルド 環境構築 自動テスト エラー検知 バグ報告 テスト結果

Slide 20

Slide 20 text

UE 帰宅前に各PCで オートテストクライアントを実行 設定ファイル(Excel)から iniを生成 最新パッケージを取得 ゲームを自動起動 (iniファイルの設定) エラー検知 環境構築「オートテスト」 オートテストの詳細は、CEDEC 2010 10ヵ月でHDゲームを開発する方法 ~龍が如くを支えたテクノロジ~ https://cedil.cesa.or.jp/cedil_sessions/view/324 300台が 稼働!

Slide 21

Slide 21 text

UE Unreal Engineのテスト自動化サイクル 超高速 高品質 ビルド 環境構築 自動テスト エラー検知 バグ報告 テスト結果

Slide 22

Slide 22 text

UE リプレイデータ(python)を記録・再生する仕組み 自動テスト「どこでもリプレイシステム」 「どこでもリプレイシステム」の詳細は、『「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて』 https://speakerdeck.com/segadevtech/long-garu-ku7-guang-toan-falsexing-fang-falsezi-dong-tesutohuo-yong-shi-li-totesutozi-dong-hua-timu-jia-niyoruruo-shou-yu-cheng-falsequ-rizu-minituite WebSocket Server FSocketベースで ドラゴンエンジン から移植

Slide 23

Slide 23 text

UE リプレイデータ(python)を記録・再生する仕組み 自動テスト「どこでもリプレイシステム」 「どこでもリプレイシステム」の詳細は、『「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて』 https://speakerdeck.com/segadevtech/long-garu-ku7-guang-toan-falsexing-fang-falsezi-dong-tesutohuo-yong-shi-li-totesutozi-dong-hua-timu-jia-niyoruruo-shou-yu-cheng-falsequ-rizu-minituite ルールベースAIの 疑似Pad操作 JSON どこでもリプレイ CUI(Python) WebSocket Server FSocketベースで ドラゴンエンジン から移植

Slide 24

Slide 24 text

UE Unreal Engineのテスト自動化サイクル 超高速 高品質 ビルド 環境構築 自動テスト エラー検知 バグ報告 テスト結果

Slide 25

Slide 25 text

UE 開発時のみCrash Reporterを独自のものに置換 エラー検知「エラー送信」 ゲーム実行中に エラー発生! ネットワークドライブ • ダンプ • ログ • スタックトレース • スクリーンショット • 直前の動画 メール送信 • ダンプ表示batのURL • スタックトレース • リビジョン チケット管理システム (Redmine) ログサーバ 1エラー数百MB~数GB

Slide 26

Slide 26 text

UE • 置換した方が実装しやすい – 常にフルダンプ出力 – 全プラットフォームで、デバッグに必要な情報を統一 • 特にゲーム内情報(プレイヤーのステータス、フラグなど) – チケット管理システムとクラッシュ情報の関連付け • 置換しないと実現が難しい – QAテスターが、クラッシュ情報を紐づけた状態で、自身の状況 報告も追加したい – 使い慣れたドラゴンエンジンと共通の仕組みにして学習コスト を下げる UEのCrash Reporterを置換した理由

Slide 27

Slide 27 text

UE • エンジン内で構造化例外(try-except)している – エラー情報をCrash Reporterに伝達 – アプリ側で未処理例外をキャッチできない • ゲーム起動時のプログラム引数で回避 – UE 4.26から対応(Win版) • New: Added the -noexceptionhandler command line parameter. This allows the use of JIT debugging. – https://docs.unrealengine.com/4.26/ja/WhatsNew/Builds/ReleaseNotes/4_26/ • UE 5.xでも動作確認済 – ゲームの起動はランチャー経由に誘導 エラー送信のUE特有の実装 エンジンコードの変更なしで実現!

Slide 28

Slide 28 text

UE • Play In Editor(PIE)にも対応したが… – Unreal Editorのすべてのメモリをダンプ • PIE上でのエラー発生で30GB… – ダンプ保管サーバがすぐに枯渇 • 解決策 – PIE実行時はミニダンプに変更 • メモリダンプを除外 エラー送信のトラブル

Slide 29

Slide 29 text

UE Unreal Engineのテスト自動化サイクル 超高速 高品質 ビルド 環境構築 自動テスト エラー検知 バグ報告 テスト結果

Slide 30

Slide 30 text

UE バグ報告「どこでもバグ報告システム」 自動入力 バグ報告に必要な項目の自動入力機能(GUI/CUI) 自動入力 自動撮影&自動添付 エラー発生! どこでもバグ報告の詳細は、KYUSHU CEDEC 2015 「龍が如く」の高速デバッグ術 ~そびえ立つバグの山を踏破するための弾丸ワークフロー~ https://cedil.cesa.or.jp/cedil_sessions/view/1398

Slide 31

Slide 31 text

UE Unreal Engineのテスト自動化サイクル 超高速 高品質 ビルド 環境構築 自動テスト エラー検知 バグ報告 テスト結果

Slide 32

Slide 32 text

UE • OSSで構成 – Fluentd – Elasticsearch – Kibana • 自動テストの結果分析 • パフォーマンス分析 • ゲームバランス調整 テスト結果「どこでもログ分析」 ログ分析環境の詳細は、CEDEC 2017 無料で始める!「龍が如く」を面白くするための高速デバッグログ分析と自動化 https://cedil.cesa.or.jp/cedil_sessions/view/1621

Slide 33

Slide 33 text

UE Unreal Engineのテスト自動化サイクル 超高速 高品質 ビルド 環境構築 自動テスト エラー検知 バグ報告 テスト結果 ドラゴンエンジンと同等のテスト自動化を実現!

Slide 34

Slide 34 text

UE • 実装 – ゲーム外ツールはそのまま流用可能 – ゲーム内もC++同士で移植が可能 – エンジンの標準機能との共存を目指す • 課題 – アセットの直接コミットによるエラーが頻発 • アセット単体の静的・動的テストを充実させ たい Unreal Engine編のまとめ

Slide 35

Slide 35 text

Unity • はじめに • Unreal Engine編 • Unity編 • ドラゴンエンジン編 • まとめ 目次

Slide 36

Slide 36 text

Unity Unity編のタイトル紹介 使用ゲームエンジン: Unity 2022.3.30f1 (Unity 2020.3.11f1 から開発開始) 開発言語: C# 『スーパーモンキーボール バナナランブル』 対応プラットフォーム:Nintendo Switch ジャンル:アクション/パーティ プレイ人数:1~4人 (オンライン対戦時:最大16人) 対応言語:11言語 日本語/繁体字/簡体字/ハングル/英語/ フランス語/イタリア語/ドイツ語/スペイン語/ 中南米スペイン語/ブラジルポルトガル語

Slide 37

Slide 37 text

Unity 多彩なゲーム要素によってプレイ状況の組み合わせが膨大に テスト自動化環境の需要大! ゲームモード:アドベンチャー / バトル オフラインプレイ / オンラインプレイ プレイアブルキャラクター コーデ × × etc.

Slide 38

Slide 38 text

Unity プロジェクト開始時点での状況 超高速 高品質 ビルド 環境構築 自動テスト エラー検知 バグ報告 テスト結果

Slide 39

Slide 39 text

Unity Unityのテスト自動化サイクル 超高速 高品質 ビルド 環境構築 自動テスト エラー検知 バグ報告 テスト結果

Slide 40

Slide 40 text

Unity 帰宅前に各PCで オートテストクライアントを実行 設定ファイル(Excel)から iniを生成 最新パッケージを取得 ゲームを自動起動 (iniファイルの設定) エラー検知 環境構築「オートテスト」 Nintendo Switch 設定を追加 Nintendo Switch 機能を追加実装

Slide 41

Slide 41 text

Unity Unityのテスト自動化サイクル 超高速 高品質 ビルド 環境構築 自動テスト エラー検知 バグ報告 テスト結果

Slide 42

Slide 42 text

Unity ゲーム機と開発PCをHTTP通信でやりとり 開発機 開発PC 開発機監視ツール どこでもリプレイ ログ送信 エラー送信 どこでもバグ報告 Unityアプリケーション デバッグ機能実装 Unium(OSS) Unium (github) : https://github.com/gwaredd/unium HTTP通信でJSONデータを送受信 開発サーバへ送信

Slide 43

Slide 43 text

Unity 外部ツール ゲーム内 自動テスト「どこでもリプレイシステム」 アクションを指定 どこでもリプレイ CUI(Python) 結果通知 結 果 JSONで 受け渡し AutoAI WebSocketサーバ (Unium) AutoPad Pad情報 どこでもリプレイエディタ GUI(C#) 行 ご と の 結 果 p y フ ァ イ ル バナナランブル向けの アクションを追加して 拡張! ゲーム内機能を Unity C# で新規実装!

Slide 44

Slide 44 text

Unity • 本タイトル特有の問題 – 物理エンジン下での繊細な入力操作が要求される。 – ステージやオブジェクトがアニメーションによってダイナミックに変化! – 物理挙動するお邪魔オブジェクトも! – 検証:試験的にパス移動を実装 → 高確率でタイムオーバーかフォールアウト 自動テスト「どこでもリプレイシステム」 「龍が如く」と同じやり方では厳しそう

Slide 45

Slide 45 text

Unity • BOT プレイヤー制御 バトルモードの BOT 制御のビヘイビアツリーをプレイヤーキャラクターに割 り当てて動かすキャラクター制御形式。 自動テスト「どこでもリプレイシステム」 ビヘイビアツリー制御には 「Arbor 3: FSM & BT Graph Editor」を 使用。 独自物理エンジン・独自プレイヤー制御の ため、大半は自作ノードで動作。 Arbor 3: FSM & BT Graph Editor : https://arbor.caitsithware.com/

Slide 46

Slide 46 text

Dragon オブジェクトの自動グリッド配置操作 どこでもリプレイシステムの制御を駆使して シナリオシーケンスをオートテストで突破! # ドンドコ島のシナリオをクリアするスクリプト ︙ # 家具を配置する # 配置場所にグリッド移動 dondoko_move_cursor(grid_x, grid_z) button_push(Pad.L1()) # オブジェクトを90度回転 button_push_decide() # 置く ︙ dondoko_scenario_clear.py

Slide 47

Slide 47 text

Unity Unityのテスト自動化サイクル 超高速 高品質 ビルド 環境構築 自動テスト エラー検知 バグ報告 テスト結果

Slide 48

Slide 48 text

Unity エラー検知「エラー送信」 エラー発生! アプリケーション 開発PC エラー送信起動 エラー情報を回収 ・ログタイプ ・メッセージ ・スタックトレース ・リビジョン ・スクリーンショット ・ヒエラルキーダンプ 開発サーバへ アサート・エラー・例外はイベントでキャッチ UnityEngine.Application.logMessageRecieved エラーを通知! エラー情報を送信!

Slide 49

Slide 49 text

Unity • 「ヒエラルキーダンプ」とは Unityのヒエラルキー情報をまとめたJSONデータ。 SceneをルートにGameObjectの階層とComponent(SerializeField)の 値が格納されている。 エラー検知「エラー送信」 UniDumpJson Viewer Unity Hierarchy Viewer

Slide 50

Slide 50 text

Unity エラー検知「エラー送信」 ネイティブクラッシュ検知機能 • 開発後半、C#上でエラーハンドリングされずに アプリケーションがクラッシュする現象が発生! • 対策として出力されるダンプファイルを監視・回収・解析する機能を実装。 • ダンプファイルがネットワークドライブに転送され、 解析内容が通知される仕組み。 ・ホストPC情報 ・リビジョン ・ビルド構成 ・開発機のIPアドレス ・ネットワークドライブ上の配置ディレクトリ ・コールスタック

Slide 51

Slide 51 text

Unity Unityのテスト自動化サイクル 超高速 高品質 ビルド 環境構築 自動テスト エラー検知 バグ報告 テスト結果

Slide 52

Slide 52 text

Unity テスト結果「どこでもログ分析」 ログサーバ 開発PC 開発機 Fluentd Elasticsearch Kibana ログ送信ツール Unityアプリケーション デバッグ機能実装 デバッグ機能実装層でライブラリ層でUnityアプリケーションから 収集情報をJSON形式にログ化 1. StringBuilder で JSON データ作成 2. Serializable なオブジェクトを UnityEngine.JsonUtility で JSON 化 開発機監視ツール Unium(OSS)

Slide 53

Slide 53 text

Unity • パフォーマンスプロファイリング利用事例 テスト結果「どこでもログ分析」 1. Profiler Recorder API 2. Player Loop System 3. Profiler Sampler • ProfilerMarker / ProfilerCounter を 使用して計測。 • ProfilerRecorder から 取得した値を送信。 • Unity Profiler で取り扱っ ているパラメータの大半 をログサーバで蓄積。 • 独自実装へもマーカーを 仕込むことで計測可能。 • 各 Player Loop System の前後に経過時間取得の カスタム処理を挿入して 計測。 • 計測値から処理負荷を 計算してログ送信。 • 「Update」や 「Fixed Update」等の単位で 処理負荷を計測可能。 • UniversalRenderPipeline Asset 内のデータから ProfilerSampler を取得。 • ScriptableRenderPass / ScriptableRendererFeat ure 毎のCPU/GPU 処理負荷を取得。 • 取得した値をログ送信。 Unity ProfilerRecorder : https://docs.unity3d.com/ScriptReference/Unity. Profiling.ProfilerRecorder.html Unity PlayerLoopSystem : https://docs.unity3d.com/ScriptReference/LowL evel.PlayerLoopSystem.html Unity Learning Materials 『URPでGPU負荷を画面上に出してみました』 : https://learning.unity3d.jp/8338/

Slide 54

Slide 54 text

Unity • パフォーマンスプロファイリング利用事例 Kibana のダッシュボードでプロファイリング結果を閲覧できるように。 テスト結果「どこでもログ分析」 各種プロファイラとデバッグ 用アプリを都度アタッチする 作業回数を削減!

Slide 55

Slide 55 text

Unity • ゲームバランス調整活用事例 キャラクター性能調査 BOT 挙動調査 テスト結果「どこでもログ分析」

Slide 56

Slide 56 text

Unity Unityのテスト自動化サイクル 超高速 高品質 ビルド 環境構築 自動テスト エラー検知 バグ報告 テスト結果

Slide 57

Slide 57 text

Unity Unity編のまとめ • 実装 – ゲーム外ツールはそのまま流用可能 – Unity C# で実装(ツールと HTTP 通信で連携) – エンジン標準機能との連携 • 課題 – マルチスレッド対応 – C++ 資産と C# 資産の2重管理

Slide 58

Slide 58 text

Dragon • はじめに • Unreal Engine編 • Unity編 • ドラゴンエンジン編 • まとめ 目次

Slide 59

Slide 59 text

Dragon 龍が如く7外伝 名を消した男 ジャンル:アクションアドベンチャー 龍が如く8 ジャンル:ドラマティックRPG • 使用ゲームエンジン ドラゴンエンジン • 対応プラットフォーム 6種類(PS4 / PS5 / Xbox One / Xbox Series X|S / Steam / Windows) • 対応言語 11言語(日本語 / 繁体字 / 簡体字 / ハングル / 英語 / フランス語 / イタリア語/ ドイツ語 / スペイン語 / ポルトガル語 / ロシア語) ドラゴンエンジン編のタイトル紹介

Slide 60

Slide 60 text

Dragon スクリプトなしの シナリオ自動クリア実験 ログのマップ可視化 オートテストのログを用いた バランス調整 テスト結果確認の効率化 「龍が如く8」のコンテンツ の自動テスト 製品版の自動プレイ実験 ドラゴンエンジンのテスト自動化サイクル ビルド 環境構築 自動テスト エラー検知 バグ報告 テスト結果 実装済! さらなる効率化へ

Slide 61

Slide 61 text

Dragon 「龍が如く8」のコンテンツ の自動テスト スクリプトなしの シナリオ自動クリア実験 製品版の自動プレイ実験 ログのマップ可視化 オートテストのログを用いた バランス調整 テスト結果確認の効率化 ドラゴンエンジンのテスト自動化サイクル ビルド 環境構築 自動テスト エラー検知 バグ報告 テスト結果 実装済! さらなる効率化へ

Slide 62

Slide 62 text

Dragon 龍が如く8の新コンテンツで改善 自動テスト「どこでもリプレイシステム」 ダンジョン ドンドコ島

Slide 63

Slide 63 text

Dragon アドベンチャー制御(パス移動) アクション制御(ボタン操作) UI操作 オブジェクトのグリッド配置操作 ドンドコ島の自動テスト 新規実装! 実装済! 実装済! 実装済!

Slide 64

Slide 64 text

Dragon オブジェクトの自動グリッド配置操作 どこでもリプレイシステムの制御を駆使して シナリオシーケンスをオートテストで突破! # ドンドコ島のシナリオをクリアするスクリプト ︙ # 家具を配置する # 配置場所にグリッド移動 dondoko_move_cursor(grid_x, grid_z) button_push(Pad.L1()) # オブジェクトを90度回転 button_push_decide() # 置く ︙ dondoko_scenario_clear.py

Slide 65

Slide 65 text

Dragon フロアクリア時にフロア番号をログ送信 ⇒ 全パターンクリアできていることを確認 ダンジョンの自動テスト フロア構造は300パターンありスクリプト作成が困難 ⇒ 経路探索でフロアを自動攻略

Slide 66

Slide 66 text

Dragon 「龍が如く8」のコンテンツ の自動テスト スクリプトなしの シナリオ自動クリア実験 製品版の自動プレイ実験 ログのマップ可視化 オートテストのログを用いた バランス調整 テスト結果確認の効率化 ドラゴンエンジンのテスト自動化サイクル ビルド 環境構築 自動テスト エラー検知 バグ報告 テスト結果 実装済! さらなる効率化へ

Slide 67

Slide 67 text

Dragon • 開発初期の自動テストはランダム操作がメイン – シーケンス修正が頻繁に行われるため、 自動テストスクリプト作成は保守コストが高い • シナリオに沿ったテストを行いたい – スクリプトなしのメインシナリオ自動クリアに挑戦 スクリプトなしのシナリオ自動クリア実験

Slide 68

Slide 68 text

Dragon 自動で目的地に移動するBOT作成を目指す • 経路探索をどこでもリプレイ側で行わせるため、 専用フォーマットのナビゲーション用ファイルを コリジョンから生成 o ゲーム内の動作への影響を最小限に抑える o 開発初期段階ではゲーム内のナビゲーション システムが完全には整っていないため シナリオクリアBOT作成

Slide 69

Slide 69 text

Dragon クリア率 • β-ROM時点:93% • Final-ROM時点:50% 以降は手動作成スクリプトによるオートテストに切り替え ⇒ 最終的にクリア率100%を達成 シナリオクリアBOT導入結果 開発初期における スクリプトなしのシナリオ自動クリアをおおむね達成

Slide 70

Slide 70 text

Dragon • 自動クリアできなかった箇所の修正メンテナンスコスト高 • 開発終盤で本格的に配置作業が進むにつれて、 サブシナリオに引っかかる問題が多発 • シナリオによっては移動が制限され最短ルートが塞がれる ⇒ 動的な経路検索が必要 シナリオ自動クリアの課題

Slide 71

Slide 71 text

Dragon 「龍が如く8」のコンテンツ の自動テスト スクリプトなしの シナリオ自動クリア実験 製品版の自動プレイ実験 ログのマップ可視化 オートテストのログを用いた バランス調整 テスト結果確認の効率化 ドラゴンエンジンのテスト自動化サイクル ビルド 環境構築 自動テスト エラー検知 バグ報告 テスト結果 実装済! さらなる効率化へ

Slide 72

Slide 72 text

Dragon 目的 • デバッグ情報を使用できない製品版でのテスト自動化 – 複雑な操作を要する不具合の再現、エージング 手法 • 手動プレイ動画からの模倣学習を実施 – ゲーム画面を入力、コントローラー操作を出力とする 畳み込みニューラルネットワークで学習 製品版の自動プレイ実験

Slide 73

Slide 73 text

Dragon • 数分間の手動プレイ動画から単純な操作の学習に成功 学習結果 • メニューUI選択操作 • タブ切り替え操作 • プレイヤーの移動 • NPCに話しかける

Slide 74

Slide 74 text

Dragon 「龍が如く8」のコンテンツ の自動テスト スクリプトなしの シナリオ自動クリア実験 製品版の自動プレイ実験 オートテストのログを用いた バランス調整 ログのマップ可視化 テスト結果確認の効率化 ドラゴンエンジンのテスト自動化サイクル ビルド 環境構築 自動テスト エラー検知 バグ報告 テスト結果 実装済! さらなる効率化へ

Slide 75

Slide 75 text

Dragon • 自動テストのスクリプト作成対象 o メインシナリオ、サブシナリオ、ミニゲームなど • 全プラットフォーム 計約270台で実行 • 課題 – クラッシュが発生せずにテストが止まったときの確認 • ゲームシーケンスの変更で頻繁に発生 オートテストの体制

Slide 76

Slide 76 text

Dragon テスト結果「どこでもログ分析」 成功率 クリア回数 実行回数 自動テストのシナリオクリア結果ページ(毎日更新) 成功率が低いので 原因を動画で調査したい ※「W64」は、デバッグ用Windows版の結果 Kibana:クリアに失敗したシナリオのログ 動画ビューア マシン情報 時刻 該当時刻にジャンプ シナリオ名

Slide 77

Slide 77 text

Dragon オートテストモニタページ 動画ジャンプ機能 マシン名と時刻を指定 オートテストの稼働状況を一元管理 オートテスト動画Gif 一覧表示の負荷軽減のためGif化 画面の変化具合 Gifの画面変化が少ないと赤く表示 → テストが進んでいない可能性大

Slide 78

Slide 78 text

Dragon 「龍が如く8」のコンテンツ の自動テスト スクリプトなしの シナリオ自動クリア実験 製品版の自動プレイ実験 テスト結果確認の効率化 オートテストのログを用いた バランス調整 ログのマップ可視化 ドラゴンエンジンのテスト自動化サイクル ビルド 環境構築 自動テスト エラー検知 バグ報告 テスト結果 実装済! さらなる効率化へ

Slide 79

Slide 79 text

Dragon • バトルリザルト集計 o 経験値 o お金 o 獲得アイテム オートテストのログを用いたバランス調整(1) オートテストでのログをKibanaで集計、可視化し、 バランス調整や動作確認に活用

Slide 80

Slide 80 text

Dragon • バトルのスキル スキル名 異常なダメージ検出 当たり判定の正常系テスト 動画での確認 オートテストでのログをKibanaで集計、可視化し、 バランス調整や動作確認に活用 オートテストのログを用いたバランス調整(2)

Slide 81

Slide 81 text

Dragon 「龍が如く8」のコンテンツ の自動テスト スクリプトなしの シナリオ自動クリア実験 製品版の自動プレイ実験 オートテストのログを用いた バランス調整 テスト結果確認の効率化 ログのマップ可視化 ドラゴンエンジンのテスト自動化サイクル ビルド 環境構築 自動テスト エラー検知 バグ報告 テスト結果 実装済! さらなる効率化へ

Slide 82

Slide 82 text

Dragon Folium o Leaflet (JavaScriptのマップ可視化ライブラリ)を バインディングしたPythonライブラリ o 静的ファイル(HTML)保存可能 o ElasticsearchのREST APIでログを取得して可視化 手法1 Foliumによる可視化 Folium : https://python-visualization.github.io/folium

Slide 83

Slide 83 text

Dragon GeoServer • 地図画像データをweb経由で利用できるサーバーソフトウェア 手法2 GeoServer+Kibanaマップによる可視化 画像の形式を変換 .jpeg/.png → .geotiff レイヤ設定 疑似的な世界地図 として利用 龍が如く8のハワイのマップ GeoServer : https://geoserver.org

Slide 84

Slide 84 text

Dragon Kibanaマップ • マーカー、ポップアップ表示、レイヤ分け機能を持つマップをGUI上で作成 ログのマップ可視化(GeoServer+Kibanaマップ) GeoServerのマップレイヤ geo_pointフィールドを持つ ログのデータレイヤ

Slide 85

Slide 85 text

Dragon Folium • 静的なHTMLファイルとして保存でき高速に表示可能 • 定期更新して複数人で共有する場合に向いている Kibanaマップ • リアルタイム性が高く、フィルタリングが容易 • 即時性が求められる分析やフィルタを細かく変更したい 場合に向いている FoliumとKibanaマップの使い分け

Slide 86

Slide 86 text

Dragon • ゲームの配置オブジェクトのデータをElasticsearchに 保存し、配置分布図をKibanaマップで作成可能に o 収集アイテムマップ o NPCキャラクターマップ など • Kibanaマップの作成手順をマニュアル化 o 配置担当のプランナー自身でマップを作成 o 攻略本作成の資料作りにも活用! ゲーム配置オブジェクトのマップ可視化

Slide 87

Slide 87 text

Dragon 作成マップ例 NPC(配置情報) イベント開始位置 (配置情報) アクセス成功 (オートテストのログ) 敵配置 イベント終了位置 (オートテストのログ) エラー&警告マップ (Kibana) VRAM使用率ヒートマップ (Folium) NPCアクセスオートテスト (Kibana) 配置バッティング検出 (Kibana)

Slide 88

Slide 88 text

Dragon • パッケージ化時の未使用アセット検知 • ビルドジョブのスケジュール自動調整 • テストケースの自動作成 • 自動テストの 実行スケジュール自動調整 • 製品版の自動プレイ • スクリプトの自動作成 • ゲーム映像からエラー検知 • 複雑なログの解析によるエラー判定 • エラー内容の説明 • 担当者の自動アサイン • 修正方法の提案 • テスト結果サマリー作成 • 自然言語で可視化 ドラゴンエンジン編の未来 ビルド 環境構築 自動テスト エラー検知 バグ報告 テスト結果 LLM活用 アイデア

Slide 89

Slide 89 text

Unity • はじめに • Unreal Engine編 • Unity編 • ドラゴンエンジン編 • まとめ 目次

Slide 90

Slide 90 text

Unity • テスト自動化のマルチゲームエンジン対応 – 実装結果 – 成果と分析 – 振り返りと今後の展望 まとめ

Slide 91

Slide 91 text

Unity • テスト自動化のマルチゲームエンジン対応 – 実装結果 – 成果と分析 – 振り返りと今後の展望 まとめ

Slide 92

Slide 92 text

Unity 各タイトルの開発スタート時点 龍が如く 維新! 極 (Unreal Engine) スーパーモンキーボール バナナランブル (Unity) どこでもバグ報告 どこでもバグ報告 エラー送信 オートテスト ログ分析 点線が前シリーズ作で対応済みの機能 どこでもリプレイ 龍が如く8/龍が如く7外伝 (ドラゴンエンジン)

Slide 93

Slide 93 text

Unity ログ分析 各タイトルのβ時点 どこでもバグ報告 どこでもバグ報告 どこでもバグ報告 エラー送信 エラー送信 エラー送信 オートテスト オートテスト ログ分析 ログ分析 βまでに全ゲームエンジンで実装&運用を達成! 実 装 実 装 実 装 実 装 オートテスト どこでもリプレイ どこでもリプレイ どこでもリプレイ 実 装 龍が如く 維新! 極 (Unreal Engine) スーパーモンキーボール バナナランブル (Unity) 龍が如く8/龍が如く7外伝 (ドラゴンエンジン) 実 装 実 装 実 装 実 装 実 装 実 装 実 装 実 装 実 装 実 装

Slide 94

Slide 94 text

Unity • テスト自動化のマルチゲームエンジン対応 – 実装結果 – 成果と分析 – 振り返りと今後の展望 まとめ

Slide 95

Slide 95 text

Unity テスト自動化の成果 エラー検知 規模 品質価値 タイトル名(発売日順) 自動テスト 自動テスト率 稼働数 のべ稼働時間 龍が如く6 命の詩。 8,102件 18.7%​ 150​ 82,104 h​ JUDGE EYES:死神の遺言 16,930件 33.4%​ 200​ 244,040 h​ 龍が如く7 光と闇の行方 32,315件 70.4%​ 219​ 593,560 h​ LOST JUDGMENT:裁かれざる記憶 19,007件 63.7%​ 212​ 566,976 h​ 龍が如く 維新! 極 45,548件 89.7% 316 450,176 h 龍が如く7外伝 名を消した男 10,330件 81.1% 160 164,624 h 龍が如く8 65,662件 84.3% 270 721,064 h スーパーモンキーボール バナナランブル 4,350件 83.1% 64 46,520 h ※2024年3月末時点

Slide 96

Slide 96 text

Unity テスト自動化の成果 エラー検知 規模 品質価値 タイトル名(発売日順) 自動テスト 自動テスト率 稼働数 のべ稼働時間 龍が如く6 命の詩。 8,102件 18.7%​ 150​ 82,104 h​ JUDGE EYES:死神の遺言 16,930件 33.4%​ 200​ 244,040 h​ 龍が如く7 光と闇の行方 32,315件 70.4%​ 219​ 593,560 h​ LOST JUDGMENT:裁かれざる記憶 19,007件 63.7%​ 212​ 566,976 h​ 龍が如く 維新! 極 45,548件 89.7% 316 450,176 h 龍が如く7外伝 名を消した男 10,330件 81.1% 160 164,624 h 龍が如く8 65,662件 84.3% 270 721,064 h スーパーモンキーボール バナナランブル 4,350件 83.1% 64 46,520 h ※2024年3月末時点

Slide 97

Slide 97 text

Unity 自動テストのエラー検知率 エラー検知率が全ゲームエンジンで80~90%に到達! 18.7% 33.4% 70.4% 63.7% 89.70% 81.10% 84.30% 83.10% 0.0% 10.0% 20.0% 30.0% 40.0% 50.0% 60.0% 70.0% 80.0% 90.0% 100.0% 龍6 JUDGE EYES 龍7 LOST JUDGMENT 龍 維新! 極 龍7外伝 龍8 バナナランブル

Slide 98

Slide 98 text

Unity • ツール・サービスの共通化 – ゲームエンジン差を意識せず、今までの知見を活用して自動テスト作成・運用が可能 • クオリティエンジニアの早期アサイン – ゲームエンジンの特徴を分析して適切な機能実装をする時間を捻出 – 開発・QAチームへのテスト自動化の浸透 • チケット管理システムのワークフローの統一と微調整 – ゲームエンジン差を意識せず、すぐにチケットの処理に取り掛かれる体制 – UEのDLL更新をステータスの自動遷移で通知して、修正をいち早くPIEで確認できるように • シフトレフト – 早い段階で不具合を修正する方が、バグ修正が早く、コストが安くなる開発手法 – 龍が如く8は、αの段階でテスト自動化を開始したことで、より大きな成果を上げた エラー検知率向上に貢献した要素

Slide 99

Slide 99 text

Unity テスト自動化の成果 エラー検知 規模 品質価値 タイトル名(発売日順) 自動テスト 自動テスト率 稼働数 のべ稼働時間 龍が如く6 命の詩。 8,102件 18.7%​ 150​ 82,104 h​ JUDGE EYES:死神の遺言 16,930件 33.4%​ 200​ 244,040 h​ 龍が如く7 光と闇の行方 32,315件 70.4%​ 219​ 593,560 h​ LOST JUDGMENT:裁かれざる記憶 19,007件 63.7%​ 212​ 566,976 h​ 龍が如く 維新! 極 45,548件 89.7% 316 450,176 h 龍が如く7外伝 名を消した男 10,330件 81.1% 160 164,624 h 龍が如く8 65,662件 84.3% 270 721,064 h スーパーモンキーボール バナナランブル 4,350件 83.1% 64 46,520 h ※2024年3月末時点

Slide 100

Slide 100 text

Unity • 龍が如く 維新! 極 – 発売日:2023年2月22日 • 龍が如く7外伝 名を消した男 – 発売日:2023年11月9日 • 龍が如く8 – 発売日:2024年1月26日 • スーパーモンキーボール バナナランブル – 発売日:2024年6月25日 各タイトルで自動テストの稼働時期が競合 設定ファイルだけで各タイトルの稼働数を調節可能に!

Slide 101

Slide 101 text

Unity 自動テストの稼働数(タイトル別/月平均) 各タイトルのクオリティエンジニア間で稼働台数を調整 0 50 100 150 200 250 300 350 龍 維新! 極 龍7外伝 龍8 バナナランブル

Slide 102

Slide 102 text

Unity • テスト自動化のマルチゲームエンジン対応 – 実装結果 – 成果と分析 – 振り返りと今後の展望 まとめ

Slide 103

Slide 103 text

Unity • プロジェクト全体の自動化・効率化ができる – 各プロジェクトの開発・QAの進捗や問題点を 把握しているため • 最終的なゲームの品質向上に寄与 クオリティエンジニアは必要? クオリティエンジニアはプロジェクトごとに必要! クオリティエンジニアリングチームも必要!

Slide 104

Slide 104 text

Unity • マルチゲームエンジンに対応 • ツール・サービスの共通化 • 「龍が如く」以外のタイトルで成果 • しかし、各タイトル固有のカスタマイズが多数 テスト自動化の汎用化はできたのか? 「汎用化」の一歩手前である「共通化」を達成!

Slide 105

Slide 105 text

Unity 運用 環境 自動テスト ランダム入力 パス入力 ルールベース AI プレイヤーAI スクリプト 画像比較 スクリプト 自動生成 テスト ケース設定 ログやキャプ チャの収集 クラウド 実行環境 汎用化 テストケース の自動調整 CEDEC 2010 KYUSHU CEDEC 2015 CEDEC 2017 CEDEC 2020 クラッシュ レポート 最新ビルド 更新&実行 テスト結果の 見える化 自動テストの 協力者を増やす 成果を出し 規模拡大 テスト自動化 チームの結成 みんなで 自動テスト 将来 多拠点運用 開発・QA 複数タイトル 並行実行 マルチプラッ トフォーム 共通化 画像アサート LLM活用 テスト自動化のロードマップ(2024年版) CEDEC 2024 CEDEC 2022 現時点

Slide 106

Slide 106 text

• CEDEC 2010 10ヵ月でHDゲームを開発する方法 ~龍が如くを支えたテクノロジ~ – https://cedil.cesa.or.jp/cedil_sessions/view/324 • KYUSHU CEDEC 2015 「龍が如く」の高速デバッグ術 ~そびえ立つバグの山を踏破するための弾丸ワークフロー~ – https://cedil.cesa.or.jp/cedil_sessions/view/1398 • CEDEC 2017 無料で始める!「龍が如く」を面白くするための高速デバッグログ分析と自動化 – https://cedil.cesa.or.jp/cedil_sessions/view/1621 • 「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて』 – https://speakerdeck.com/segadevtech/long-garu-ku7-guang-toan-falsexing-fang-falsezi-dong-tesutohuo-yong-shi-li- totesutozi-dong-hua-timu-jia-niyoruruo-shou-yu-cheng-falsequ-rizu-minituite • CEDEC2020 「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム – https://speakerdeck.com/segadevtech/long-garu-kusutazio-falseqaenziniaringuji-shu-wojie-ji-sitaquan-zi-dong- baguqu-risisutemu • CEDEC2022 開発もQAも自動テスト!「LOST JUDGMENT:裁かれざる記憶」のQAテスター参加で進化した「テスト自動 化チーム(仮)」の取り組みについて – https://speakerdeck.com/segadevtech/kai-fa-moqamozi-dong-tesuto-lost-judgment-cai-karezaruji-yi- falseqatesutacan-jia-dejin-hua-sita-tesutozi-dong-hua-timu-jia-falsequ-rizu-minituite 参考文献(龍が如くスタジオの自動化関連)

Slide 107

Slide 107 text

• UE4における自動プレイのポストモーテム – https://www.docswell.com/s/EpicGamesJapan/5NLJPZ- UE4_LargeScaleDevSQEX_Autoplay • GDC 2019 Automated Testing of Gameplay Features in 'Sea of Thieves' – https://gdcvault.com/play/1026366/Automated-Testing-of-Gameplay- Features • CEDEC2022 受託型開発会社が始める3Dアクションゲーム開発効率化のためのQA自動化 への道のり~千里の道も一歩から~ – https://cedil.cesa.or.jp/cedil_sessions/view/2591 • New: Added the -noexceptionhandler command line parameter. This allows the use of JIT debugging. – https://docs.unrealengine.com/4.26/ja/WhatsNew/Builds/ReleaseNotes/4_26/ 参考文献(Unreal Engine編)

Slide 108

Slide 108 text

• Unium (github) – https://github.com/gwaredd/unium • Arbor 3: FSM & BT Graph Editor – https://arbor.caitsithware.com/ • Unity ProfilerRecorder – https://docs.unity3d.com/ScriptReference/Unity.Profiling.ProfilerRecorder.html • Unity PlayerLoopSystem – https://docs.unity3d.com/ScriptReference/LowLevel.PlayerLoopSystem.html • Unity Learning Materials『URPでGPU負荷を画面上に出してみました』 – https://learning.unity3d.jp/8338/ 参考文献(Unity編)

Slide 109

Slide 109 text

• Folium – https://python-visualization.github.io/folium • Folium: ImageOverlay – https://python-visualization.github.io/folium/latest/user_guide/raster_layers/image_overlay.html • GeoServer – https://geoserver.org • Kibana: Tile layer – https://www.elastic.co/guide/en/kibana/current/tile-layer.html • Elasticsearch: Geopoint field type – https://www.elastic.co/guide/en/elasticsearch/reference/current/geo-point.html 参考文献(ドラゴンエンジン編)