$30 off During Our Annual Pro Sale. View Details »

「龍が如く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 「龍が如く 7 光と闇の行方」の 自動テスト活用事例と テスト自動化チーム(仮)による 若手育成の取り組みについて 株式会社セガ 第1事業部 (龍が如くスタジオ・ドラゴンエンジンチーム)

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

    • 海外ではEmbedded QAと呼んでいる – SEGA TECH Blog : QAエンジニアってどんな仕事? ~ゲーム開発におけるテストの世界~ • http://techblog.sega.jp/entry/2018/08/27/100000 ※QAとはQuality Assuranceの略で品質保証のことを指します
  3. ©SEGA 本講演で得られる知見 • ゲームの開発におけるテスト自動化の手法 • 自動テストの成果やコストの実例 • 自動テストシステムを構築するための知識 • 自動テスト普及のための取り組み

    「自動テストを始めてみよう!」 というモチベーション
  4. ©SEGA 目次 • ゲーム開発における自動テスト • 自動テスト作成ツール • 自動テストのワークフロー • テスト自動化チーム(仮)の取り組み

    • まとめ
  5. ©SEGA 目次 • ゲーム開発における自動テスト • 自動テスト作成ツール • 自動テストのワークフロー • テスト自動化チーム(仮)の取り組み

    • まとめ
  6. ©SEGA • テスト – ゲームをプレイしてバグを見つける – バグを報告し、修正を確認する – QAテスターの仕事 •

    デバッグ – バグの原因を調査する – バグを修正する – 開発者(主にプログラマ)の仕事 「テスト」と「デバッグ」
  7. ©SEGA 「自動テスト」と「テスト自動化」 テスト自動化 テストケース 設計の自動化 自動テスト テスト実行 の自動化 テスト環境 構築・運用

    の自動化 テストレポート 作成・分析 の自動化
  8. ©SEGA テストピラミッド(システム開発) 単体 結合 UI コ ス ト 高 低

  9. ©SEGA テストピラミッド(ゲーム開発) 単体 結合 Play コ ス ト 高 低

    • 通しプレイ • ミッションクリア • コリジョン抜けチェック • 起動チェック • ステージ描画テスト • イベントシーン単体再生 • ゲームオブジェクト・エンティティの連携動作 • 関数・モジュール単位の単体テスト • ライブラリ・エンジンのテスト • データのレギュレーションチェック • ゲームオブジェクト・エンティティの単体動作 ※本講演でのテストピラミッドの定義
  10. ©SEGA 目次 • ゲーム開発における自動テスト • 自動テスト作成ツール • 自動テストのワークフロー • テスト自動化チーム(仮)の取り組み

    • まとめ
  11. ©SEGA 本講演のタイトル紹介 龍が如く7 光と闇の行方 PS4Ⓡ/2020年1月16日発売

  12. ©SEGA 自動テスト導入のきっかけ • カバーすべきテストケースが膨大 – メインストーリーをクリアするだけでも数十時間 – 手動テストが賄えない範囲をサポートするため • 自動プレイテストを導入

    – 単体テストはゲームのアプリ層だと難しい • 結果が画像出力しかない場合が多く、成否が不安定 – 信頼性の確保 • 自動テストを通常のゲームに限りなく近い状態で実行するこ とで開発チームに信頼してもらう
  13. ©SEGA 龍が如く7での自動テストのデモ どこでもリプレイシステム 手動プレイ中にどこでも記録・リプレイが可能! 手動プレイを記録中 リプレイ再生中

  14. ©SEGA 外部ツール ゲーム内 どこでもリプレイエディタ GUI(C#) WebSocketサーバ どこでもリプレイシステム(記録) ゲーム動作を アクション単位で スクリプト化

    ゲームを手動で プレイ
  15. ©SEGA Pythonを採用した理由 • 人気があって使える人が多い • これから学習する人にとっても有益な言語 – ほかの自動化にも使える • ゲーム外のモジュールとの連携のしやすさ

    – 画像認識(OpenCV、PyOCRなど) – データ分析(Pandasなど) – 機械学習(TensorFlow、Keras、OpenAIなど)
  16. ©SEGA 条件分岐・ループ • while文で同じ動作を繰り返す例

  17. ©SEGA 外部ツール ゲーム内 どこでもリプレイシステム(再生) アクションを指定 どこでもリプレイ CUI(Python) 結果通知 結 果

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

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

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

    JSONで 受け渡し WebSocketサーバ どこでもリプレイエディタ GUI(C#) 行 ご と の 結 果 p y フ ァ イ ル path(x,y,z)を アクション(JSON)に変換 AutoAI AutoPad Pad情報
  21. ©SEGA AutoPadとゲームの入出力 AutoPad ゲームステート 疑似Pad情報のみ 手動プレイとほぼ同じ動作であることを保証 ゲーム内実装 (C++)

  22. ©SEGA AutoPadの種類 • 指定座標に移動 – path(100, 0, 200) • 指定半径内をランダム

    – target_pos_zone_radius • 指定アイテムを選択 – select_item_name(“gyudon_tokumori”) • 各ミニゲーム用 • バトル用
  23. ©SEGA 正確にUIを選択する • select_item_name(“gyudon_tokumori”)

  24. ©SEGA AutoAIでAutoPadを選択 • AutoAI(シナリオクリア用)の優先度 1. ロード・画面遷移中 • 何もしない、ランダム 2. イベント・会話中

    • 何もしない、スキップ、連打 3. バトル・ミニゲーム中 • バトル用AutoPad、ランダム • 各ミニゲーム用AutoPad、ランダム 4. アドベンチャー・UI操作中 • Pythonで制御
  25. ©SEGA AutoAI(ミニゲーム中) • 各ミニゲームのAutoPadで動作

  26. ©SEGA 自動テスト作成ツール • どこでもリプレイエディタ – プログラミング知識なしで自動テストが書ける – Pythonでも書ける – プラットフォームに依存しない

    自動テスト作成ツールがあればOKなのか?
  27. ©SEGA 目次 • ゲーム開発における自動テスト • 自動テスト作成ツール • 自動テストのワークフロー • テスト自動化チーム(仮)の取り組み

    • まとめ
  28. ©SEGA 自動テスト 準備 自動テストのワークフロー テスト設計 自動テスト 環境の構築 自動テスト 作成と保守 ランダム

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

    サーバ QA チーム 開発 チーム エラー送信 壊れたテスト テ ス ト 結 果 の 見 え る 化 自 動 テ ス ト 実 行 自動テスト 準備 テスト設計 自動テスト 環境の構築
  30. ©SEGA 自動テストの実行環境 • オートテスト – 専用クライアント – Jenkins

  31. ©SEGA オートテストの仕組み(Jenkins含む) 帰宅前に各PCで オートテストクライアントを実行 設定ファイル(Excel)から iniを生成 最新ビルドを取得 ゲームを自動起動 (iniファイルのシナリオ/条件) ログ送信

    エラー送信
  32. ©SEGA 自動テスト 準備 自動テストのエラー検知 テスト設計 自動テスト 環境の構築 自動テスト 作成と保守 ランダム

    シナリオクリア ミニゲーム アイテム コンプリート QA チーム 開発 チーム 壊れたテスト 自 動 テ ス ト 実 行 ログ サーバ エラー送信 テ ス ト 結 果 の 見 え る 化
  33. ©SEGA エラー検知の必要性と仕組み • テストしただけでは品質は上がらない – 結果を開発チームに伝えて修正してもらう必要がある • エラー検知の種類 – エラー送信

    • クラッシュレポート – どこでもログ分析 • テスト結果を見える化してエラーを見つける
  34. ©SEGA エラー検知(エラー送信) 龍が如くスタジオのクラッシュレポート機能 ゲームやツール 実行中に 例外発生! ネットワークドライブ • ダンプ •

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

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

    集計結果を確認 修 正 手動テスト Jenkinsで 1日1回 オートテスト 開発者 日ごと or リアルタイムで修正&確認 QA
  37. ©SEGA テスト結果の見える化 (スジモン図鑑) • スジモン図鑑とは スジモン図鑑のコンプリートを 確認する必要がある

  38. ©SEGA テスト結果の見える化 (スジモン図鑑) • スジモン修正ワークフロー 1. オートテストでスジモンを探索し見つけたらログ送信 • メインシナリオやサブシナリオをクリア •

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

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

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

    157人がエラーに 遭遇してしまう! 54,304回試行 0回再現 再現率:0.000% 修正確認! 謎バグが本当に修正されたことを確認可能!
  42. ©SEGA 自動テストは壊れやすい? 修正 開発中は自動テストの修正が頻発する

  43. ©SEGA 自動テストのカバー範囲が拡大 自動テスト作成と保守 テスト自動化チームが必要! メインシナリオ クリア サブシナリオ クリア 2周目クリア ミニゲーム

    パフォーマンス 計測 アイテム ドロップ率 再現・修正確認 壊れたテスト の修正
  44. ©SEGA 目次 • ゲーム開発における自動テスト • 自動テスト作成ツール • 自動テストのワークフロー • テスト自動化チーム(仮)の取り組み

    • まとめ
  45. ©SEGA テスト自動化チーム(仮)の役割 • 自動テストのスクリプト作成と保守 • 自動テスト結果の見える化 • 自動テスト環境の整備 • 手動テスト環境の自動化

    – パッケージの自動インストール – エラー発生時の即時デバッグ環境の構築 自動テストの普及が目的
  46. ©SEGA 自動テスト 準備 テスト自動化チーム(仮)のワークフロー テスト 設計 自動テスト 環境の構築 自動テスト 作成と保守

    ランダム シナリオクリア アイテム コンプリート ログ サーバ テ ス ト 結 果 の 見 え る 化 QA チーム 開発 チーム エラー送信 壊れたテスト テ ス ト 実 行 開発内の 手動テスト 環境の構築 パッケージ の自動更新
  47. ©SEGA テスト自動化チーム(仮)とは • なぜ(仮)なのか? – 組織上認められたチームではない – プロジェクト終盤に手が空いてる人を集めて結成 • プロジェクト開始時に必要な作業量を正確に予測できない

    • 新人を含めた若手中心のチームになる
  48. ©SEGA 新人プログラマがテスト自動化に参加する意味 • 自動化技術の習得と実践 – 自動テストの書き方やJenkinsのジョブの運用を学ぶ • デバッグ手法を学習 – ペアデバッギング

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

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

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

    (ランダム+パス) 龍が如く7 光と闇の行方 (ランダム+Python) オートテスト 手動テスト JUDGE EYES:死神の遺言 (ランダム+Lua) オートテスト 16,930件 33.4% ※2020年3月に集計
  52. ©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月に集計
  53. ©SEGA 自動テストの効果 • 品質向上に寄与 – 新規バグとデグレ(エンバグ)の検出 – パフォーマンス計測に活用 – ゲームバランス調整に活用

    • コストは削減できる? – 手動テストのコスト増大を抑える効果がある – デバッグ期間の短縮が可能 – コスト削減はアピールしていない
  54. ©SEGA ある若手の成長(1年目) • JUDGE EYES:死神の遺言 – ドローンレースの自動テスト • エラー検知 •

    コリジョン抜け • VRAM使用率の計測
  55. ©SEGA ある若手の成長(2年目) • 龍が如く7では缶拾いのミニゲームを担当 • 自分で実装し、自分で自動テストも作成 – チュートリアルや上級レベルもクリアできる自動テス ト環境を構築 •

    どこでもログ分析も使いこなす – 敵キャラのはまりを検出 – 手動テストの結果を分析
  56. ©SEGA 缶拾いミニゲームの自動テスト

  57. ©SEGA 敵のコリジョン引っ掛かりを可視化 街灯に引っ掛かっているので コリジョンの修正が必要

  58. ©SEGA 自動テストは誰が書くのが効率的? • 開発者が書く – プログラマ、プランナー、アーティストが、自分で実装した ものに対して自動テストを作成する – 自分がテストしてほしいところを重点的にテストできる •

    QAテスターが書く – バグが出やすい場所を経験上知っているので、効率的なテス トが書けるはず – 再現率が低いバグの自動テストを書いて、手動で不可能な回 数のテストを自動テストで補う みんなで自動テストを書いたら最強!
  59. ©SEGA (仮)のもう一つの意味 テスト自動化チーム(仮)のゴールは 「自動テストの普及」 みんなが自動テストを 書けるようになったら解散! ※あくまで龍が如くスタジオ内での話です。 ※組織を横断しているテスト自動化チームなど、継続的に必要な場合も当然あります。

  60. ©SEGA 目次 • ゲーム開発における自動テスト • 自動テスト作成ツール • 自動テストのワークフロー • テスト自動化チーム(仮)の取り組み

    • まとめ
  61. ©SEGA まとめ • 自動テスト作成ツール – 誰でも気軽に作れるツールを目指す • 自動テストのワークフロー – 開発チームに合わせた適切な環境を用意する

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

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

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