Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
©SEGA
「龍が如く 7 光と闇の行方」の
自動テスト活用事例と
テスト自動化チーム(仮)による
若手育成の取り組みについて
株式会社セガ 第1事業部
(龍が如くスタジオ・ドラゴンエンジンチーム)
阪上 直樹
©SEGA
自己紹介
• 龍が如くスタジオ専属のQAエンジニア*
– 開発環境とQAの自動化が主な仕事
– ゲーム内のコードもバリバリ書く
• 書いたコードは、製品には1行も入らない
• 海外ではEmbedded QAと呼んでいる
– SEGA...
©SEGA
本講演で得られる知見
• ゲームの開発におけるテスト自動化の手法
• 自動テストの成果やコストの実例
• 自動テストシステムを構築するための知識
• 自動テスト普及のための取り組み
「自動テストを始めてみよう!」
というモチベーション
©SEGA
目次
• ゲーム開発における自動テスト
• 自動テスト作成ツール
• 自動テストのワークフロー
• テスト自動化チーム(仮)の取り組み
• まとめ
©SEGA
目次
• ゲーム開発における自動テスト
• 自動テスト作成ツール
• 自動テストのワークフロー
• テスト自動化チーム(仮)の取り組み
• まとめ
©SEGA
• テスト
– ゲームをプレイしてバグを見つける
– バグを報告し、修正を確認する
– QAテスターの仕事
• デバッグ
– バグの原因を調査する
– バグを修正する
– 開発者(主にプログラマ)の仕事
「テスト」と「デバッグ」
©SEGA
「自動テスト」と「テスト自動化」
テスト自動化
テストケース
設計の自動化
自動テスト
テスト実行
の自動化
テスト環境
構築・運用
の自動化
テストレポート
作成・分析
の自動化
©SEGA
テストピラミッド(システム開発)
単体
結合
UI
コ
ス
ト
高
低
©SEGA
テストピラミッド(ゲーム開発)
単体
結合
Play
コ
ス
ト
高
低
• 通しプレイ
• ミッションクリア
• コリジョン抜けチェック
• 起動チェック
• ステージ描画テスト
• イベントシーン単体再生
• ゲームオブジェクト...
©SEGA
目次
• ゲーム開発における自動テスト
• 自動テスト作成ツール
• 自動テストのワークフロー
• テスト自動化チーム(仮)の取り組み
• まとめ
©SEGA
本講演のタイトル紹介
龍が如く7 光と闇の行方
PS4Ⓡ/2020年1月16日発売
©SEGA
自動テスト導入のきっかけ
• カバーすべきテストケースが膨大
– メインストーリーをクリアするだけでも数十時間
– 手動テストが賄えない範囲をサポートするため
• 自動プレイテストを導入
– 単体テストはゲームのアプリ層だと難しい
...
©SEGA
龍が如く7での自動テストのデモ
どこでもリプレイシステム
手動プレイ中にどこでも記録・リプレイが可能!
手動プレイを記録中 リプレイ再生中
©SEGA
外部ツールゲーム内
どこでもリプレイエディタ
GUI(C#)
WebSocketサーバ
どこでもリプレイシステム(記録)
ゲーム動作を
アクション単位で
スクリプト化
ゲームを手動で
プレイ
©SEGA
Pythonを採用した理由
• 人気があって使える人が多い
• これから学習する人にとっても有益な言語
– ほかの自動化にも使える
• ゲーム外のモジュールとの連携のしやすさ
– 画像認識(OpenCV、PyOCRなど)
– データ...
©SEGA
条件分岐・ループ
• while文で同じ動作を繰り返す例
©SEGA
外部ツールゲーム内
どこでもリプレイシステム(再生)
アクションを指定 どこでもリプレイ
CUI(Python)結果通知
結
果
JSONで
受け渡しAutoAI
WebSocketサーバ
AutoPad
Pad情報
どこでもリプレ...
©SEGA
外部ツールゲーム内
WebSocketサーバ
アクションを指定 どこでもリプレイ
CUI(Python)結果通知
結
果
JSONで
受け渡し
どこでもリプレイエディタ
GUI(C#)
行
ご
と
の
結
果
p
y
フ
ァ
イ
ル...
©SEGA
WebSocketを採用した理由
• 汎用性
– ゲーム内の依存度を下げる
– 各プラットフォーム対応の手間を省力化
• 応答の即時性
– スクリプトの実行結果をすぐに受け取って次を実行し
たい
– HTTP/1.1で直接通信する場...
©SEGA
外部ツールゲーム内
AutoPadとAutoAI
アクションを指定 どこでもリプレイ
CUI(Python)結果通知
結
果
JSONで
受け渡し
WebSocketサーバ
どこでもリプレイエディタ
GUI(C#)
行
ご
と
の
...
©SEGA
AutoPadとゲームの入出力
AutoPad
ゲームステート
疑似Pad情報のみ
手動プレイとほぼ同じ動作であることを保証
ゲーム内実装
(C++)
©SEGA
AutoPadの種類
• 指定座標に移動
– path(100, 0, 200)
• 指定半径内をランダム
– target_pos_zone_radius
• 指定アイテムを選択
– select_item_name(“gyudo...
©SEGA
正確にUIを選択する
• select_item_name(“gyudon_tokumori”)
©SEGA
AutoAIでAutoPadを選択
• AutoAI(シナリオクリア用)の優先度
1. ロード・画面遷移中
• 何もしない、ランダム
2. イベント・会話中
• 何もしない、スキップ、連打
3. バトル・ミニゲーム中
• バトル用A...
©SEGA
AutoAI(ミニゲーム中)
• 各ミニゲームのAutoPadで動作
©SEGA
自動テスト作成ツール
• どこでもリプレイエディタ
– プログラミング知識なしで自動テストが書ける
– Pythonでも書ける
– プラットフォームに依存しない
自動テスト作成ツールがあればOKなのか?
©SEGA
目次
• ゲーム開発における自動テスト
• 自動テスト作成ツール
• 自動テストのワークフロー
• テスト自動化チーム(仮)の取り組み
• まとめ
©SEGA
自動テスト
準備
自動テストのワークフロー
テスト設計
自動テスト
環境の構築
自動テスト
作成と保守
ランダム
シナリオクリア
ミニゲーム
アイテム
コンプリート
ログ
サーバ
QA
チーム
開発
チーム
エラー送信
壊れたテスト...
©SEGA
自動テストの実行環境
自動テスト
作成と保守
ランダム
シナリオクリア
ミニゲーム
アイテム
コンプリート
ログ
サーバ
QA
チーム
開発
チーム
エラー送信
壊れたテスト テ
ス
ト
結
果
の
見
え
る
化
自
動
テ
ス
...
©SEGA
自動テストの実行環境
• オートテスト
– 専用クライアント
– Jenkins
©SEGA
オートテストの仕組み(Jenkins含む)
帰宅前に各PCで
オートテストクライアントを実行
設定ファイル(Excel)から
iniを生成
最新ビルドを取得
ゲームを自動起動
(iniファイルのシナリオ/条件) ログ送信
エラー送信
©SEGA
自動テスト
準備
自動テストのエラー検知
テスト設計
自動テスト
環境の構築
自動テスト
作成と保守
ランダム
シナリオクリア
ミニゲーム
アイテム
コンプリート
QA
チーム
開発
チーム
壊れたテスト
自
動
テ
ス
ト
実
行...
©SEGA
エラー検知の必要性と仕組み
• テストしただけでは品質は上がらない
– 結果を開発チームに伝えて修正してもらう必要がある
• エラー検知の種類
– エラー送信
• クラッシュレポート
– どこでもログ分析
• テスト結果を見える化し...
©SEGA
エラー検知(エラー送信)
龍が如くスタジオのクラッシュレポート機能
ゲームやツール
実行中に
例外発生! ネットワークドライブ
• ダンプ
• ログ
• コールスタック
• スクリーンショット
メール送信
• ダンプ表示batのUR...
©SEGA
エラー検知(テスト結果の見える化)
• どこでもログ分析
– Fluentd
– Elasticsearch
– Kibana
– 独自分析ツール
• RedmineのWikiに自動更新
• ヒートマップ・分析結果
詳しくはJaSS...
©SEGA
テスト結果の見える化のワークフロー
ログ送信 Elasticsearch
Redmine内の
Wikiに公開
自
動
集
計
集計結果を確認
修
正
手動テスト Jenkinsで
1日1回
オートテスト
開発者
日ごと or リアル...
©SEGA
テスト結果の見える化 (スジモン図鑑)
• スジモン図鑑とは
スジモン図鑑のコンプリートを
確認する必要がある
©SEGA
テスト結果の見える化 (スジモン図鑑)
• スジモン修正ワークフロー
1. オートテストでスジモンを探索し見つけたらログ送信
• メインシナリオやサブシナリオをクリア
• 各マップを巡回
• 各ダンジョンを攻略
2. スジモンごとの...
©SEGA
テスト結果の見える化 (スジモン図鑑)
スジモン
ID
詳細ログ
のリンク
スジモン
の名前
PC名
RedmineのWikiを自動更新
遭遇していないスジモンは
Kibana上で詳細ログを確認
各スジモンの遭遇頻度の
バランス調整...
©SEGA
自動テスト
準備
自動テスト作成と保守
テスト設計
自動テスト
環境の構築
ログ
サーバ
QA
チーム
開発
チーム
エラー送信
壊れたテスト
自
動
テ
ス
ト
実
行
テ
ス
ト
結
果
の
見
え
る
化
自動テスト
作成と保...
©SEGA
再現率の低いバグの修正確認に活用
再現率の低い
バグが発生
再現用スクリプト
を作成・実行
12,773回試行
20回再現
再現率:0.157%
10万人がプレイすると
157人がエラーに
遭遇してしまう!
54,304回試行
0回...
©SEGA
自動テストは壊れやすい?
修正
開発中は自動テストの修正が頻発する
©SEGA
自動テストのカバー範囲が拡大
自動テスト作成と保守
テスト自動化チームが必要!
メインシナリオ
クリア
サブシナリオ
クリア
2周目クリア
ミニゲーム
パフォーマンス
計測
アイテム
ドロップ率
再現・修正確認
壊れたテスト
の修正
©SEGA
目次
• ゲーム開発における自動テスト
• 自動テスト作成ツール
• 自動テストのワークフロー
• テスト自動化チーム(仮)の取り組み
• まとめ
©SEGA
テスト自動化チーム(仮)の役割
• 自動テストのスクリプト作成と保守
• 自動テスト結果の見える化
• 自動テスト環境の整備
• 手動テスト環境の自動化
– パッケージの自動インストール
– エラー発生時の即時デバッグ環境の構築
自...
©SEGA
自動テスト
準備
テスト自動化チーム(仮)のワークフロー
テスト
設計
自動テスト
環境の構築
自動テスト
作成と保守
ランダム
シナリオクリア
アイテム
コンプリート
ログ
サーバ
テ
ス
ト
結
果
の
見
え
る
化
QA
チ...
©SEGA
テスト自動化チーム(仮)とは
• なぜ(仮)なのか?
– 組織上認められたチームではない
– プロジェクト終盤に手が空いてる人を集めて結成
• プロジェクト開始時に必要な作業量を正確に予測できない
• 新人を含めた若手中心のチームに...
©SEGA
新人プログラマがテスト自動化に参加する意味
• 自動化技術の習得と実践
– 自動テストの書き方やJenkinsのジョブの運用を学ぶ
• デバッグ手法を学習
– ペアデバッギング
• 自分でデバッグ→先輩を呼んで一緒にデバッグ
– メ...
©SEGA
テスト自動化チーム(仮)規模の推移
0
1
2
3
4
5
6
7
8
9
10
龍が如く6 命の詩。 JUDGE EYES:死神の遺言 龍が如く 7 光と闇の行方
自動テスト担当
自動テスト
1名で開始
自動テスト
6名に拡大
©SEGA
プロジェクトごとに振り返りと改善
• 龍が如く6 命の詩。(2016年発売)
– パス(JSON)によるメインシナリオのクリア
• JUDGE EYES:死神の遺言(2018年発売)
– 自動テストをLuaで制御
– UI選択の精度...
©SEGA
オートテストのエラー検出数と割合
オートテスト
8,102件
18.6%
オートテスト
27,319件
67.4%
龍が如く6 命の詩。
(ランダム+パス)
龍が如く7 光と闇の行方
(ランダム+Python)
オートテスト
手動テ...
©SEGA
龍が如く0 誓いの場所 龍が如く6 命の詩。 JUDGE EYES:死神の遺言 龍が如く7 光と闇の行方
規
模
オートテスト稼動数 100台 150台 200台 219台
24時間稼働数 0台 41台 40~80台 79台
エ
ラ...
©SEGA
自動テストの効果
• 品質向上に寄与
– 新規バグとデグレ(エンバグ)の検出
– パフォーマンス計測に活用
– ゲームバランス調整に活用
• コストは削減できる?
– 手動テストのコスト増大を抑える効果がある
– デバッグ期間の短縮...
©SEGA
ある若手の成長(1年目)
• JUDGE EYES:死神の遺言
– ドローンレースの自動テスト
• エラー検知
• コリジョン抜け
• VRAM使用率の計測
©SEGA
ある若手の成長(2年目)
• 龍が如く7では缶拾いのミニゲームを担当
• 自分で実装し、自分で自動テストも作成
– チュートリアルや上級レベルもクリアできる自動テス
ト環境を構築
• どこでもログ分析も使いこなす
– 敵キャラのはま...
©SEGA
缶拾いミニゲームの自動テスト
©SEGA
敵のコリジョン引っ掛かりを可視化
街灯に引っ掛かっているので
コリジョンの修正が必要
©SEGA
自動テストは誰が書くのが効率的?
• 開発者が書く
– プログラマ、プランナー、アーティストが、自分で実装した
ものに対して自動テストを作成する
– 自分がテストしてほしいところを重点的にテストできる
• QAテスターが書く
– バ...
©SEGA
(仮)のもう一つの意味
テスト自動化チーム(仮)のゴールは
「自動テストの普及」
みんなが自動テストを
書けるようになったら解散!
※あくまで龍が如くスタジオ内での話です。
※組織を横断しているテスト自動化チームなど、継続的に必要な...
©SEGA
目次
• ゲーム開発における自動テスト
• 自動テスト作成ツール
• 自動テストのワークフロー
• テスト自動化チーム(仮)の取り組み
• まとめ
©SEGA
まとめ
• 自動テスト作成ツール
– 誰でも気軽に作れるツールを目指す
• 自動テストのワークフロー
– 開発チームに合わせた適切な環境を用意する
– テスト単体では品質は上がらない
• テスト結果の伝え方(見える化)が大事
• テ...
©SEGA
自動テストを10年やって気付いたこと
• 自動テストは資産
– パッチやDLC、バージョンアップ、移植、シリーズ次回作の回帰テスト
として使い続けることが可能
• 自動テストは信頼
– チームにエラーをエラーとして受け入れてもらうこ...
©SEGA
運用
環境
自動テスト
テスト自動化の始め方ガイド
ランダム入力
パス入力ルールベースAI
プレイヤーAI スクリプト
画像認識
機械学習
テストケース
の設定
ログやキャプチャ
の自動収集
クラウド実行
環境
汎用化
テストケース...
©SEGA
最後に
自動テストをみんなで作って
開発をより楽しくしたい!
Upcoming SlideShare
Loading in …5
×

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

8,348 views

Published on

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

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


Published in: Engineering
  • Login to see the comments

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

  1. 1. ©SEGA 「龍が如く 7 光と闇の行方」の 自動テスト活用事例と テスト自動化チーム(仮)による 若手育成の取り組みについて 株式会社セガ 第1事業部 (龍が如くスタジオ・ドラゴンエンジンチーム) 阪上 直樹
  2. 2. ©SEGA 自己紹介 • 龍が如くスタジオ専属のQAエンジニア* – 開発環境とQAの自動化が主な仕事 – ゲーム内のコードもバリバリ書く • 書いたコードは、製品には1行も入らない • 海外ではEmbedded QAと呼んでいる – SEGA TECH Blog : QAエンジニアってどんな仕事? ~ゲーム開発におけるテストの世界~ • http://techblog.sega.jp/entry/2018/08/27/100000 ※QAとはQuality Assuranceの略で品質保証のことを指します
  3. 3. ©SEGA 本講演で得られる知見 • ゲームの開発におけるテスト自動化の手法 • 自動テストの成果やコストの実例 • 自動テストシステムを構築するための知識 • 自動テスト普及のための取り組み 「自動テストを始めてみよう!」 というモチベーション
  4. 4. ©SEGA 目次 • ゲーム開発における自動テスト • 自動テスト作成ツール • 自動テストのワークフロー • テスト自動化チーム(仮)の取り組み • まとめ
  5. 5. ©SEGA 目次 • ゲーム開発における自動テスト • 自動テスト作成ツール • 自動テストのワークフロー • テスト自動化チーム(仮)の取り組み • まとめ
  6. 6. ©SEGA • テスト – ゲームをプレイしてバグを見つける – バグを報告し、修正を確認する – QAテスターの仕事 • デバッグ – バグの原因を調査する – バグを修正する – 開発者(主にプログラマ)の仕事 「テスト」と「デバッグ」
  7. 7. ©SEGA 「自動テスト」と「テスト自動化」 テスト自動化 テストケース 設計の自動化 自動テスト テスト実行 の自動化 テスト環境 構築・運用 の自動化 テストレポート 作成・分析 の自動化
  8. 8. ©SEGA テストピラミッド(システム開発) 単体 結合 UI コ ス ト 高 低
  9. 9. ©SEGA テストピラミッド(ゲーム開発) 単体 結合 Play コ ス ト 高 低 • 通しプレイ • ミッションクリア • コリジョン抜けチェック • 起動チェック • ステージ描画テスト • イベントシーン単体再生 • ゲームオブジェクト・エンティティの連携動作 • 関数・モジュール単位の単体テスト • ライブラリ・エンジンのテスト • データのレギュレーションチェック • ゲームオブジェクト・エンティティの単体動作 ※本講演でのテストピラミッドの定義
  10. 10. ©SEGA 目次 • ゲーム開発における自動テスト • 自動テスト作成ツール • 自動テストのワークフロー • テスト自動化チーム(仮)の取り組み • まとめ
  11. 11. ©SEGA 本講演のタイトル紹介 龍が如く7 光と闇の行方 PS4Ⓡ/2020年1月16日発売
  12. 12. ©SEGA 自動テスト導入のきっかけ • カバーすべきテストケースが膨大 – メインストーリーをクリアするだけでも数十時間 – 手動テストが賄えない範囲をサポートするため • 自動プレイテストを導入 – 単体テストはゲームのアプリ層だと難しい • 結果が画像出力しかない場合が多く、成否が不安定 – 信頼性の確保 • 自動テストを通常のゲームに限りなく近い状態で実行するこ とで開発チームに信頼してもらう
  13. 13. ©SEGA 龍が如く7での自動テストのデモ どこでもリプレイシステム 手動プレイ中にどこでも記録・リプレイが可能! 手動プレイを記録中 リプレイ再生中
  14. 14. ©SEGA 外部ツールゲーム内 どこでもリプレイエディタ GUI(C#) WebSocketサーバ どこでもリプレイシステム(記録) ゲーム動作を アクション単位で スクリプト化 ゲームを手動で プレイ
  15. 15. ©SEGA Pythonを採用した理由 • 人気があって使える人が多い • これから学習する人にとっても有益な言語 – ほかの自動化にも使える • ゲーム外のモジュールとの連携のしやすさ – 画像認識(OpenCV、PyOCRなど) – データ分析(Pandasなど) – 機械学習(TensorFlow、Keras、OpenAIなど)
  16. 16. ©SEGA 条件分岐・ループ • while文で同じ動作を繰り返す例
  17. 17. ©SEGA 外部ツールゲーム内 どこでもリプレイシステム(再生) アクションを指定 どこでもリプレイ CUI(Python)結果通知 結 果 JSONで 受け渡しAutoAI WebSocketサーバ AutoPad Pad情報 どこでもリプレイエディタ GUI(C#) 行 ご と の 結 果 p y フ ァ イ ル path(x,y,z)を アクション(JSON)に変換
  18. 18. ©SEGA 外部ツールゲーム内 WebSocketサーバ アクションを指定 どこでもリプレイ CUI(Python)結果通知 結 果 JSONで 受け渡し どこでもリプレイエディタ GUI(C#) 行 ご と の 結 果 p y フ ァ イ ル path(x,y,z)を アクション(JSON)に変換AutoAI AutoPad Pad情報 WebSocketサーバ
  19. 19. ©SEGA WebSocketを採用した理由 • 汎用性 – ゲーム内の依存度を下げる – 各プラットフォーム対応の手間を省力化 • 応答の即時性 – スクリプトの実行結果をすぐに受け取って次を実行し たい – HTTP/1.1で直接通信する場合は、一定時間でポーリ ングしないといけない上に、無駄に通信量も増える – HTTP/2.0だとgRPCなどもある
  20. 20. ©SEGA 外部ツールゲーム内 AutoPadとAutoAI アクションを指定 どこでもリプレイ CUI(Python)結果通知 結 果 JSONで 受け渡し WebSocketサーバ どこでもリプレイエディタ GUI(C#) 行 ご と の 結 果 p y フ ァ イ ル path(x,y,z)を アクション(JSON)に変換AutoAI AutoPad Pad情報
  21. 21. ©SEGA AutoPadとゲームの入出力 AutoPad ゲームステート 疑似Pad情報のみ 手動プレイとほぼ同じ動作であることを保証 ゲーム内実装 (C++)
  22. 22. ©SEGA AutoPadの種類 • 指定座標に移動 – path(100, 0, 200) • 指定半径内をランダム – target_pos_zone_radius • 指定アイテムを選択 – select_item_name(“gyudon_tokumori”) • 各ミニゲーム用 • バトル用
  23. 23. ©SEGA 正確にUIを選択する • select_item_name(“gyudon_tokumori”)
  24. 24. ©SEGA AutoAIでAutoPadを選択 • AutoAI(シナリオクリア用)の優先度 1. ロード・画面遷移中 • 何もしない、ランダム 2. イベント・会話中 • 何もしない、スキップ、連打 3. バトル・ミニゲーム中 • バトル用AutoPad、ランダム • 各ミニゲーム用AutoPad、ランダム 4. アドベンチャー・UI操作中 • Pythonで制御
  25. 25. ©SEGA AutoAI(ミニゲーム中) • 各ミニゲームのAutoPadで動作
  26. 26. ©SEGA 自動テスト作成ツール • どこでもリプレイエディタ – プログラミング知識なしで自動テストが書ける – Pythonでも書ける – プラットフォームに依存しない 自動テスト作成ツールがあればOKなのか?
  27. 27. ©SEGA 目次 • ゲーム開発における自動テスト • 自動テスト作成ツール • 自動テストのワークフロー • テスト自動化チーム(仮)の取り組み • まとめ
  28. 28. ©SEGA 自動テスト 準備 自動テストのワークフロー テスト設計 自動テスト 環境の構築 自動テスト 作成と保守 ランダム シナリオクリア ミニゲーム アイテム コンプリート ログ サーバ QA チーム 開発 チーム エラー送信 壊れたテスト 自 動 テ ス ト 実 行 テ ス ト 結 果 の 見 え る 化
  29. 29. ©SEGA 自動テストの実行環境 自動テスト 作成と保守 ランダム シナリオクリア ミニゲーム アイテム コンプリート ログ サーバ QA チーム 開発 チーム エラー送信 壊れたテスト テ ス ト 結 果 の 見 え る 化 自 動 テ ス ト 実 行 自動テスト 準備 テスト設計 自動テスト 環境の構築
  30. 30. ©SEGA 自動テストの実行環境 • オートテスト – 専用クライアント – Jenkins
  31. 31. ©SEGA オートテストの仕組み(Jenkins含む) 帰宅前に各PCで オートテストクライアントを実行 設定ファイル(Excel)から iniを生成 最新ビルドを取得 ゲームを自動起動 (iniファイルのシナリオ/条件) ログ送信 エラー送信
  32. 32. ©SEGA 自動テスト 準備 自動テストのエラー検知 テスト設計 自動テスト 環境の構築 自動テスト 作成と保守 ランダム シナリオクリア ミニゲーム アイテム コンプリート QA チーム 開発 チーム 壊れたテスト 自 動 テ ス ト 実 行 ログ サーバ エラー送信 テ ス ト 結 果 の 見 え る 化
  33. 33. ©SEGA エラー検知の必要性と仕組み • テストしただけでは品質は上がらない – 結果を開発チームに伝えて修正してもらう必要がある • エラー検知の種類 – エラー送信 • クラッシュレポート – どこでもログ分析 • テスト結果を見える化してエラーを見つける
  34. 34. ©SEGA エラー検知(エラー送信) 龍が如くスタジオのクラッシュレポート機能 ゲームやツール 実行中に 例外発生! ネットワークドライブ • ダンプ • ログ • コールスタック • スクリーンショット メール送信 • ダンプ表示batのURL • コールスタック • リビジョン チケット管理システム (Redmine) ログサーバ 1エラー数百MB~数GB
  35. 35. ©SEGA エラー検知(テスト結果の見える化) • どこでもログ分析 – Fluentd – Elasticsearch – Kibana – 独自分析ツール • RedmineのWikiに自動更新 • ヒートマップ・分析結果 詳しくはJaSST’18 Tokyoの講演資料を見てね!! http://jasst.jp/symposium/jasst18tokyo/pdf/D4.pdf
  36. 36. ©SEGA テスト結果の見える化のワークフロー ログ送信 Elasticsearch Redmine内の Wikiに公開 自 動 集 計 集計結果を確認 修 正 手動テスト Jenkinsで 1日1回 オートテスト 開発者 日ごと or リアルタイムで修正&確認 QA
  37. 37. ©SEGA テスト結果の見える化 (スジモン図鑑) • スジモン図鑑とは スジモン図鑑のコンプリートを 確認する必要がある
  38. 38. ©SEGA テスト結果の見える化 (スジモン図鑑) • スジモン修正ワークフロー 1. オートテストでスジモンを探索し見つけたらログ送信 • メインシナリオやサブシナリオをクリア • 各マップを巡回 • 各ダンジョンを攻略 2. スジモンごとの出現数をログ集計 3. 遭遇しないスジモンを修正 • 実装ミスは即時修正 • 出現率が低すぎる場合はパラメータを調整
  39. 39. ©SEGA テスト結果の見える化 (スジモン図鑑) スジモン ID 詳細ログ のリンク スジモン の名前 PC名 RedmineのWikiを自動更新 遭遇していないスジモンは Kibana上で詳細ログを確認 各スジモンの遭遇頻度の バランス調整にも活用
  40. 40. ©SEGA 自動テスト 準備 自動テスト作成と保守 テスト設計 自動テスト 環境の構築 ログ サーバ QA チーム 開発 チーム エラー送信 壊れたテスト 自 動 テ ス ト 実 行 テ ス ト 結 果 の 見 え る 化 自動テスト 作成と保守 ランダム シナリオクリア ミニゲーム アイテム コンプリート
  41. 41. ©SEGA 再現率の低いバグの修正確認に活用 再現率の低い バグが発生 再現用スクリプト を作成・実行 12,773回試行 20回再現 再現率:0.157% 10万人がプレイすると 157人がエラーに 遭遇してしまう! 54,304回試行 0回再現 再現率:0.000% 修正確認! 謎バグが本当に修正されたことを確認可能!
  42. 42. ©SEGA 自動テストは壊れやすい? 修正 開発中は自動テストの修正が頻発する
  43. 43. ©SEGA 自動テストのカバー範囲が拡大 自動テスト作成と保守 テスト自動化チームが必要! メインシナリオ クリア サブシナリオ クリア 2周目クリア ミニゲーム パフォーマンス 計測 アイテム ドロップ率 再現・修正確認 壊れたテスト の修正
  44. 44. ©SEGA 目次 • ゲーム開発における自動テスト • 自動テスト作成ツール • 自動テストのワークフロー • テスト自動化チーム(仮)の取り組み • まとめ
  45. 45. ©SEGA テスト自動化チーム(仮)の役割 • 自動テストのスクリプト作成と保守 • 自動テスト結果の見える化 • 自動テスト環境の整備 • 手動テスト環境の自動化 – パッケージの自動インストール – エラー発生時の即時デバッグ環境の構築 自動テストの普及が目的
  46. 46. ©SEGA 自動テスト 準備 テスト自動化チーム(仮)のワークフロー テスト 設計 自動テスト 環境の構築 自動テスト 作成と保守 ランダム シナリオクリア アイテム コンプリート ログ サーバ テ ス ト 結 果 の 見 え る 化 QA チーム 開発 チーム エラー送信 壊れたテスト テ ス ト 実 行 開発内の 手動テスト 環境の構築 パッケージ の自動更新
  47. 47. ©SEGA テスト自動化チーム(仮)とは • なぜ(仮)なのか? – 組織上認められたチームではない – プロジェクト終盤に手が空いてる人を集めて結成 • プロジェクト開始時に必要な作業量を正確に予測できない • 新人を含めた若手中心のチームになる
  48. 48. ©SEGA 新人プログラマがテスト自動化に参加する意味 • 自動化技術の習得と実践 – 自動テストの書き方やJenkinsのジョブの運用を学ぶ • デバッグ手法を学習 – ペアデバッギング • 自分でデバッグ→先輩を呼んで一緒にデバッグ – メモリ周りやマルチスレッドのデバッグ • バグから使用エンジンへの理解を深める – 実装で気を付けるポイント – エンジンのバグを踏まないコツ
  49. 49. ©SEGA テスト自動化チーム(仮)規模の推移 0 1 2 3 4 5 6 7 8 9 10 龍が如く6 命の詩。 JUDGE EYES:死神の遺言 龍が如く 7 光と闇の行方 自動テスト担当 自動テスト 1名で開始 自動テスト 6名に拡大
  50. 50. ©SEGA プロジェクトごとに振り返りと改善 • 龍が如く6 命の詩。(2016年発売) – パス(JSON)によるメインシナリオのクリア • JUDGE EYES:死神の遺言(2018年発売) – 自動テストをLuaで制御 – UI選択の精度向上 • 龍が如く7 光と闇の行方(2020年発売) – 自動テストをPythonで制御 – 自動テストの作成・再生を外部ツール化 – PythonのエラーをTeamsに通知
  51. 51. ©SEGA オートテストのエラー検出数と割合 オートテスト 8,102件 18.6% オートテスト 27,319件 67.4% 龍が如く6 命の詩。 (ランダム+パス) 龍が如く7 光と闇の行方 (ランダム+Python) オートテスト 手動テスト JUDGE EYES:死神の遺言 (ランダム+Lua) オートテスト 16,930件 33.4% ※2020年3月に集計
  52. 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. 53. ©SEGA 自動テストの効果 • 品質向上に寄与 – 新規バグとデグレ(エンバグ)の検出 – パフォーマンス計測に活用 – ゲームバランス調整に活用 • コストは削減できる? – 手動テストのコスト増大を抑える効果がある – デバッグ期間の短縮が可能 – コスト削減はアピールしていない
  54. 54. ©SEGA ある若手の成長(1年目) • JUDGE EYES:死神の遺言 – ドローンレースの自動テスト • エラー検知 • コリジョン抜け • VRAM使用率の計測
  55. 55. ©SEGA ある若手の成長(2年目) • 龍が如く7では缶拾いのミニゲームを担当 • 自分で実装し、自分で自動テストも作成 – チュートリアルや上級レベルもクリアできる自動テス ト環境を構築 • どこでもログ分析も使いこなす – 敵キャラのはまりを検出 – 手動テストの結果を分析
  56. 56. ©SEGA 缶拾いミニゲームの自動テスト
  57. 57. ©SEGA 敵のコリジョン引っ掛かりを可視化 街灯に引っ掛かっているので コリジョンの修正が必要
  58. 58. ©SEGA 自動テストは誰が書くのが効率的? • 開発者が書く – プログラマ、プランナー、アーティストが、自分で実装した ものに対して自動テストを作成する – 自分がテストしてほしいところを重点的にテストできる • QAテスターが書く – バグが出やすい場所を経験上知っているので、効率的なテス トが書けるはず – 再現率が低いバグの自動テストを書いて、手動で不可能な回 数のテストを自動テストで補う みんなで自動テストを書いたら最強!
  59. 59. ©SEGA (仮)のもう一つの意味 テスト自動化チーム(仮)のゴールは 「自動テストの普及」 みんなが自動テストを 書けるようになったら解散! ※あくまで龍が如くスタジオ内での話です。 ※組織を横断しているテスト自動化チームなど、継続的に必要な場合も当然あります。
  60. 60. ©SEGA 目次 • ゲーム開発における自動テスト • 自動テスト作成ツール • 自動テストのワークフロー • テスト自動化チーム(仮)の取り組み • まとめ
  61. 61. ©SEGA まとめ • 自動テスト作成ツール – 誰でも気軽に作れるツールを目指す • 自動テストのワークフロー – 開発チームに合わせた適切な環境を用意する – テスト単体では品質は上がらない • テスト結果の伝え方(見える化)が大事 • テスト自動化チーム(仮) – 実績を示して活動を継続する – 若手を育成し、自動テストの普及に努める
  62. 62. ©SEGA 自動テストを10年やって気付いたこと • 自動テストは資産 – パッチやDLC、バージョンアップ、移植、シリーズ次回作の回帰テスト として使い続けることが可能 • 自動テストは信頼 – チームにエラーをエラーとして受け入れてもらうことが大事 – 手動プレイに限りなく近づける、自動テストの仕組みの説明に取り組む • 自動テストは継続 – 継続しないとノウハウが蓄積されない – 組織やチームの文化にしていくことが大事
  63. 63. ©SEGA 運用 環境 自動テスト テスト自動化の始め方ガイド ランダム入力 パス入力ルールベースAI プレイヤーAI スクリプト 画像認識 機械学習 テストケース の設定 ログやキャプチャ の自動収集 クラウド実行 環境 汎用化 テストケース の自動生成 ここから開始 ~龍3 龍4,5,0,極 龍6,極2,7 クラッシュ レポート 最新ビルドに 更新して実行 テスト結果の 見える化 自動テストの 協力者を増やす 成果を示して 規模拡大 テスト自動化 チームの結成 みんなで 自動テスト
  64. 64. ©SEGA 最後に 自動テストをみんなで作って 開発をより楽しくしたい!

×