$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事業部
    (龍が如くスタジオ・ドラゴンエンジンチーム)
    阪上 直樹

    View Slide

  2. ©SEGA
    自己紹介
    • 龍が如くスタジオ専属のQAエンジニア*
    – 開発環境とQAの自動化が主な仕事
    – ゲーム内のコードもバリバリ書く
    • 書いたコードは、製品には1行も入らない
    • 海外ではEmbedded QAと呼んでいる
    – SEGA TECH Blog : QAエンジニアってどんな仕事?
    ~ゲーム開発におけるテストの世界~
    • http://techblog.sega.jp/entry/2018/08/27/100000
    ※QAとはQuality Assuranceの略で品質保証のことを指します

    View Slide

  3. ©SEGA
    本講演で得られる知見
    • ゲームの開発におけるテスト自動化の手法
    • 自動テストの成果やコストの実例
    • 自動テストシステムを構築するための知識
    • 自動テスト普及のための取り組み
    「自動テストを始めてみよう!」
    というモチベーション

    View Slide

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

    View Slide

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

    View Slide

  6. ©SEGA
    • テスト
    – ゲームをプレイしてバグを見つける
    – バグを報告し、修正を確認する
    – QAテスターの仕事
    • デバッグ
    – バグの原因を調査する
    – バグを修正する
    – 開発者(主にプログラマ)の仕事
    「テスト」と「デバッグ」

    View Slide

  7. ©SEGA
    「自動テスト」と「テスト自動化」
    テスト自動化
    テストケース
    設計の自動化
    自動テスト
    テスト実行
    の自動化
    テスト環境
    構築・運用
    の自動化
    テストレポート
    作成・分析
    の自動化

    View Slide

  8. ©SEGA
    テストピラミッド(システム開発)
    単体
    結合
    UI





    View Slide

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





    • 通しプレイ
    • ミッションクリア
    • コリジョン抜けチェック
    • 起動チェック
    • ステージ描画テスト
    • イベントシーン単体再生
    • ゲームオブジェクト・エンティティの連携動作
    • 関数・モジュール単位の単体テスト
    • ライブラリ・エンジンのテスト
    • データのレギュレーションチェック
    • ゲームオブジェクト・エンティティの単体動作
    ※本講演でのテストピラミッドの定義

    View Slide

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

    View Slide

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

    View Slide

  12. ©SEGA
    自動テスト導入のきっかけ
    • カバーすべきテストケースが膨大
    – メインストーリーをクリアするだけでも数十時間
    – 手動テストが賄えない範囲をサポートするため
    • 自動プレイテストを導入
    – 単体テストはゲームのアプリ層だと難しい
    • 結果が画像出力しかない場合が多く、成否が不安定
    – 信頼性の確保
    • 自動テストを通常のゲームに限りなく近い状態で実行するこ
    とで開発チームに信頼してもらう

    View Slide

  13. ©SEGA
    龍が如く7での自動テストのデモ
    どこでもリプレイシステム
    手動プレイ中にどこでも記録・リプレイが可能!
    手動プレイを記録中 リプレイ再生中

    View Slide

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

    View Slide

  15. ©SEGA
    Pythonを採用した理由
    • 人気があって使える人が多い
    • これから学習する人にとっても有益な言語
    – ほかの自動化にも使える
    • ゲーム外のモジュールとの連携のしやすさ
    – 画像認識(OpenCV、PyOCRなど)
    – データ分析(Pandasなど)
    – 機械学習(TensorFlow、Keras、OpenAIなど)

    View Slide

  16. ©SEGA
    条件分岐・ループ
    • while文で同じ動作を繰り返す例

    View Slide

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


    JSONで
    受け渡し
    AutoAI
    WebSocketサーバ
    AutoPad
    Pad情報
    どこでもリプレイエディタ
    GUI(C#)






    p
    y



    ル path(x,y,z)を
    アクション(JSON)に変換

    View Slide

  18. ©SEGA
    外部ツール
    ゲーム内
    WebSocketサーバ
    アクションを指定 どこでもリプレイ
    CUI(Python)
    結果通知


    JSONで
    受け渡し
    どこでもリプレイエディタ
    GUI(C#)






    p
    y



    ル path(x,y,z)を
    アクション(JSON)に変換
    AutoAI
    AutoPad
    Pad情報
    WebSocketサーバ

    View Slide

  19. ©SEGA
    WebSocketを採用した理由
    • 汎用性
    – ゲーム内の依存度を下げる
    – 各プラットフォーム対応の手間を省力化
    • 応答の即時性
    – スクリプトの実行結果をすぐに受け取って次を実行し
    たい
    – HTTP/1.1で直接通信する場合は、一定時間でポーリ
    ングしないといけない上に、無駄に通信量も増える
    – HTTP/2.0だとgRPCなどもある

    View Slide

  20. ©SEGA
    外部ツール
    ゲーム内
    AutoPadとAutoAI
    アクションを指定 どこでもリプレイ
    CUI(Python)
    結果通知


    JSONで
    受け渡し
    WebSocketサーバ
    どこでもリプレイエディタ
    GUI(C#)






    p
    y



    ル path(x,y,z)を
    アクション(JSON)に変換
    AutoAI
    AutoPad
    Pad情報

    View Slide

  21. ©SEGA
    AutoPadとゲームの入出力
    AutoPad
    ゲームステート
    疑似Pad情報のみ
    手動プレイとほぼ同じ動作であることを保証
    ゲーム内実装
    (C++)

    View Slide

  22. ©SEGA
    AutoPadの種類
    • 指定座標に移動
    – path(100, 0, 200)
    • 指定半径内をランダム
    – target_pos_zone_radius
    • 指定アイテムを選択
    – select_item_name(“gyudon_tokumori”)
    • 各ミニゲーム用
    • バトル用

    View Slide

  23. ©SEGA
    正確にUIを選択する
    • select_item_name(“gyudon_tokumori”)

    View Slide

  24. ©SEGA
    AutoAIでAutoPadを選択
    • AutoAI(シナリオクリア用)の優先度
    1. ロード・画面遷移中
    • 何もしない、ランダム
    2. イベント・会話中
    • 何もしない、スキップ、連打
    3. バトル・ミニゲーム中
    • バトル用AutoPad、ランダム
    • 各ミニゲーム用AutoPad、ランダム
    4. アドベンチャー・UI操作中
    • Pythonで制御

    View Slide

  25. ©SEGA
    AutoAI(ミニゲーム中)
    • 各ミニゲームのAutoPadで動作

    View Slide

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

    View Slide

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

    View Slide

  28. ©SEGA
    自動テスト
    準備
    自動テストのワークフロー
    テスト設計
    自動テスト
    環境の構築
    自動テスト
    作成と保守
    ランダム
    シナリオクリア
    ミニゲーム
    アイテム
    コンプリート
    ログ
    サーバ
    QA
    チーム
    開発
    チーム
    エラー送信
    壊れたテスト

















    View Slide

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
















    自動テスト
    準備
    テスト設計
    自動テスト
    環境の構築

    View Slide

  30. ©SEGA
    自動テストの実行環境
    • オートテスト
    – 専用クライアント
    – Jenkins

    View Slide

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

    View Slide

  32. ©SEGA
    自動テスト
    準備
    自動テストのエラー検知
    テスト設計
    自動テスト
    環境の構築
    自動テスト
    作成と保守
    ランダム
    シナリオクリア
    ミニゲーム
    アイテム
    コンプリート
    QA
    チーム
    開発
    チーム
    壊れたテスト







    ログ
    サーバ
    エラー送信










    View Slide

  33. ©SEGA
    エラー検知の必要性と仕組み
    • テストしただけでは品質は上がらない
    – 結果を開発チームに伝えて修正してもらう必要がある
    • エラー検知の種類
    – エラー送信
    • クラッシュレポート
    – どこでもログ分析
    • テスト結果を見える化してエラーを見つける

    View Slide

  34. ©SEGA
    エラー検知(エラー送信)
    龍が如くスタジオのクラッシュレポート機能
    ゲームやツール
    実行中に
    例外発生! ネットワークドライブ
    • ダンプ
    • ログ
    • コールスタック
    • スクリーンショット
    メール送信
    • ダンプ表示batのURL
    • コールスタック
    • リビジョン
    チケット管理システム
    (Redmine)
    ログサーバ
    1エラー数百MB~数GB

    View Slide

  35. ©SEGA
    エラー検知(テスト結果の見える化)
    • どこでもログ分析
    – Fluentd
    – Elasticsearch
    – Kibana
    – 独自分析ツール
    • RedmineのWikiに自動更新
    • ヒートマップ・分析結果
    詳しくはJaSST’18 Tokyoの講演資料を見てね!!
    http://jasst.jp/symposium/jasst18tokyo/pdf/D4.pdf

    View Slide

  36. ©SEGA
    テスト結果の見える化のワークフロー
    ログ送信 Elasticsearch
    Redmine内の
    Wikiに公開




    集計結果を確認


    手動テスト Jenkinsで
    1日1回
    オートテスト
    開発者
    日ごと or リアルタイムで修正&確認
    QA

    View Slide

  37. ©SEGA
    テスト結果の見える化 (スジモン図鑑)
    • スジモン図鑑とは
    スジモン図鑑のコンプリートを
    確認する必要がある

    View Slide

  38. ©SEGA
    テスト結果の見える化 (スジモン図鑑)
    • スジモン修正ワークフロー
    1. オートテストでスジモンを探索し見つけたらログ送信
    • メインシナリオやサブシナリオをクリア
    • 各マップを巡回
    • 各ダンジョンを攻略
    2. スジモンごとの出現数をログ集計
    3. 遭遇しないスジモンを修正
    • 実装ミスは即時修正
    • 出現率が低すぎる場合はパラメータを調整

    View Slide

  39. ©SEGA
    テスト結果の見える化 (スジモン図鑑)
    スジモン
    ID
    詳細ログ
    のリンク
    スジモン
    の名前
    PC名
    RedmineのWikiを自動更新
    遭遇していないスジモンは
    Kibana上で詳細ログを確認
    各スジモンの遭遇頻度の
    バランス調整にも活用

    View Slide

  40. ©SEGA
    自動テスト
    準備
    自動テスト作成と保守
    テスト設計
    自動テスト
    環境の構築
    ログ
    サーバ
    QA
    チーム
    開発
    チーム
    エラー送信
    壊れたテスト

















    自動テスト
    作成と保守
    ランダム
    シナリオクリア
    ミニゲーム
    アイテム
    コンプリート

    View Slide

  41. ©SEGA
    再現率の低いバグの修正確認に活用
    再現率の低い
    バグが発生
    再現用スクリプト
    を作成・実行
    12,773回試行
    20回再現
    再現率:0.157%
    10万人がプレイすると
    157人がエラーに
    遭遇してしまう!
    54,304回試行
    0回再現
    再現率:0.000%
    修正確認!
    謎バグが本当に修正されたことを確認可能!

    View Slide

  42. ©SEGA
    自動テストは壊れやすい?
    修正
    開発中は自動テストの修正が頻発する

    View Slide

  43. ©SEGA
    自動テストのカバー範囲が拡大
    自動テスト作成と保守
    テスト自動化チームが必要!
    メインシナリオ
    クリア
    サブシナリオ
    クリア
    2周目クリア
    ミニゲーム
    パフォーマンス
    計測
    アイテム
    ドロップ率
    再現・修正確認
    壊れたテスト
    の修正

    View Slide

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

    View Slide

  45. ©SEGA
    テスト自動化チーム(仮)の役割
    • 自動テストのスクリプト作成と保守
    • 自動テスト結果の見える化
    • 自動テスト環境の整備
    • 手動テスト環境の自動化
    – パッケージの自動インストール
    – エラー発生時の即時デバッグ環境の構築
    自動テストの普及が目的

    View Slide

  46. ©SEGA
    自動テスト
    準備
    テスト自動化チーム(仮)のワークフロー
    テスト
    設計
    自動テスト
    環境の構築
    自動テスト
    作成と保守
    ランダム
    シナリオクリア
    アイテム
    コンプリート
    ログ
    サーバ










    QA
    チーム
    開発
    チーム
    エラー送信
    壊れたテスト





    開発内の
    手動テスト
    環境の構築
    パッケージ
    の自動更新

    View Slide

  47. ©SEGA
    テスト自動化チーム(仮)とは
    • なぜ(仮)なのか?
    – 組織上認められたチームではない
    – プロジェクト終盤に手が空いてる人を集めて結成
    • プロジェクト開始時に必要な作業量を正確に予測できない
    • 新人を含めた若手中心のチームになる

    View Slide

  48. ©SEGA
    新人プログラマがテスト自動化に参加する意味
    • 自動化技術の習得と実践
    – 自動テストの書き方やJenkinsのジョブの運用を学ぶ
    • デバッグ手法を学習
    – ペアデバッギング
    • 自分でデバッグ→先輩を呼んで一緒にデバッグ
    – メモリ周りやマルチスレッドのデバッグ
    • バグから使用エンジンへの理解を深める
    – 実装で気を付けるポイント
    – エンジンのバグを踏まないコツ

    View Slide

  49. ©SEGA
    テスト自動化チーム(仮)規模の推移
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    龍が如く6 命の詩。 JUDGE EYES:死神の遺言 龍が如く 7 光と闇の行方
    自動テスト担当
    自動テスト
    1名で開始
    自動テスト
    6名に拡大

    View Slide

  50. ©SEGA
    プロジェクトごとに振り返りと改善
    • 龍が如く6 命の詩。(2016年発売)
    – パス(JSON)によるメインシナリオのクリア
    • JUDGE EYES:死神の遺言(2018年発売)
    – 自動テストをLuaで制御
    – UI選択の精度向上
    • 龍が如く7 光と闇の行方(2020年発売)
    – 自動テストをPythonで制御
    – 自動テストの作成・再生を外部ツール化
    – PythonのエラーをTeamsに通知

    View Slide

  51. ©SEGA
    オートテストのエラー検出数と割合
    オートテスト
    8,102件
    18.6%
    オートテスト
    27,319件
    67.4%
    龍が如く6 命の詩。
    (ランダム+パス)
    龍が如く7 光と闇の行方
    (ランダム+Python)
    オートテスト
    手動テスト
    JUDGE EYES:死神の遺言
    (ランダム+Lua)
    オートテスト
    16,930件
    33.4%
    ※2020年3月に集計

    View Slide

  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月に集計

    View Slide

  53. ©SEGA
    自動テストの効果
    • 品質向上に寄与
    – 新規バグとデグレ(エンバグ)の検出
    – パフォーマンス計測に活用
    – ゲームバランス調整に活用
    • コストは削減できる?
    – 手動テストのコスト増大を抑える効果がある
    – デバッグ期間の短縮が可能
    – コスト削減はアピールしていない

    View Slide

  54. ©SEGA
    ある若手の成長(1年目)
    • JUDGE EYES:死神の遺言
    – ドローンレースの自動テスト
    • エラー検知
    • コリジョン抜け
    • VRAM使用率の計測

    View Slide

  55. ©SEGA
    ある若手の成長(2年目)
    • 龍が如く7では缶拾いのミニゲームを担当
    • 自分で実装し、自分で自動テストも作成
    – チュートリアルや上級レベルもクリアできる自動テス
    ト環境を構築
    • どこでもログ分析も使いこなす
    – 敵キャラのはまりを検出
    – 手動テストの結果を分析

    View Slide

  56. ©SEGA
    缶拾いミニゲームの自動テスト

    View Slide

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

    View Slide

  58. ©SEGA
    自動テストは誰が書くのが効率的?
    • 開発者が書く
    – プログラマ、プランナー、アーティストが、自分で実装した
    ものに対して自動テストを作成する
    – 自分がテストしてほしいところを重点的にテストできる
    • QAテスターが書く
    – バグが出やすい場所を経験上知っているので、効率的なテス
    トが書けるはず
    – 再現率が低いバグの自動テストを書いて、手動で不可能な回
    数のテストを自動テストで補う
    みんなで自動テストを書いたら最強!

    View Slide

  59. ©SEGA
    (仮)のもう一つの意味
    テスト自動化チーム(仮)のゴールは
    「自動テストの普及」
    みんなが自動テストを
    書けるようになったら解散!
    ※あくまで龍が如くスタジオ内での話です。
    ※組織を横断しているテスト自動化チームなど、継続的に必要な場合も当然あります。

    View Slide

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

    View Slide

  61. ©SEGA
    まとめ
    • 自動テスト作成ツール
    – 誰でも気軽に作れるツールを目指す
    • 自動テストのワークフロー
    – 開発チームに合わせた適切な環境を用意する
    – テスト単体では品質は上がらない
    • テスト結果の伝え方(見える化)が大事
    • テスト自動化チーム(仮)
    – 実績を示して活動を継続する
    – 若手を育成し、自動テストの普及に努める

    View Slide

  62. ©SEGA
    自動テストを10年やって気付いたこと
    • 自動テストは資産
    – パッチやDLC、バージョンアップ、移植、シリーズ次回作の回帰テスト
    として使い続けることが可能
    • 自動テストは信頼
    – チームにエラーをエラーとして受け入れてもらうことが大事
    – 手動プレイに限りなく近づける、自動テストの仕組みの説明に取り組む
    • 自動テストは継続
    – 継続しないとノウハウが蓄積されない
    – 組織やチームの文化にしていくことが大事

    View Slide

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

    View Slide

  64. ©SEGA
    最後に
    自動テストをみんなで作って
    開発をより楽しくしたい!

    View Slide