IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ ソニー・インタラクティブエンタテインメント エルエルシーの特許一覧

特許7237157クラウドゲームのサービスとしてのテスト
<>
  • 特許-クラウドゲームのサービスとしてのテスト 図1
  • 特許-クラウドゲームのサービスとしてのテスト 図2
  • 特許-クラウドゲームのサービスとしてのテスト 図3
  • 特許-クラウドゲームのサービスとしてのテスト 図4
  • 特許-クラウドゲームのサービスとしてのテスト 図5
  • 特許-クラウドゲームのサービスとしてのテスト 図6
  • 特許-クラウドゲームのサービスとしてのテスト 図7
  • 特許-クラウドゲームのサービスとしてのテスト 図8
  • 特許-クラウドゲームのサービスとしてのテスト 図9
  • 特許-クラウドゲームのサービスとしてのテスト 図10
  • 特許-クラウドゲームのサービスとしてのテスト 図11
  • 特許-クラウドゲームのサービスとしてのテスト 図12
  • 特許-クラウドゲームのサービスとしてのテスト 図13
  • 特許-クラウドゲームのサービスとしてのテスト 図14
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-03-02
(45)【発行日】2023-03-10
(54)【発明の名称】クラウドゲームのサービスとしてのテスト
(51)【国際特許分類】
   A63F 13/67 20140101AFI20230303BHJP
   A63F 13/77 20140101ALI20230303BHJP
   A63F 13/35 20140101ALI20230303BHJP
   G06F 11/34 20060101ALI20230303BHJP
   G06F 11/36 20060101ALI20230303BHJP
【FI】
A63F13/67
A63F13/77
A63F13/35
G06F11/34 176
G06F11/36 184
G06F11/36 192
【請求項の数】 13
(21)【出願番号】P 2021528466
(86)(22)【出願日】2019-11-19
(65)【公表番号】
(43)【公表日】2022-01-27
(86)【国際出願番号】 US2019062301
(87)【国際公開番号】W WO2020106779
(87)【国際公開日】2020-05-28
【審査請求日】2021-07-08
(31)【優先権主張番号】16/198,682
(32)【優先日】2018-11-21
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】518187455
【氏名又は名称】ソニー・インタラクティブエンタテインメント エルエルシー
(74)【代理人】
【識別番号】100099324
【弁理士】
【氏名又は名称】鈴木 正剛
(72)【発明者】
【氏名】ジャスティン ベルトラン
(72)【発明者】
【氏名】カイル カノン
(72)【発明者】
【氏名】ナタン グロス
(72)【発明者】
【氏名】ディラン バトラー
【審査官】宇佐田 健二
(56)【参考文献】
【文献】特表2016-524730(JP,A)
【文献】国際公開第2017/094262(WO,A1)
【文献】特開2009-295082(JP,A)
【文献】加藤康記、外2名,“クラウド型テスト自動化サービスによるWebアプリケーションの生産性と品質向上への取り組み”,「INTEC TECHNICAL JOURNAL 2013.2 第13号」,日本,株式会社インテック,2013年02月21日,第13号,pp.30-37,[ISSN]1348-2491
(58)【調査した分野】(Int.Cl.,DB名)
A63F 13/00-13/98,9/24
G06F 11/34,11/36
(57)【特許請求の範囲】
【請求項1】
コンピュータによって実行される方法であって、
クラウドテストシステムのサーバ上で、プレーヤがプレイするビデオゲームを実行し、前記ビデオゲームの実行では、ビデオ出力が生成され、
前記プレーヤのクライアントデバイスから、前記ビデオゲームとインタラクションを行うための制御入力シーケンスを受信し、前記制御入力シーケンスの一部は、前記ビデオゲームとの前記インタラクション中にバグの出現を引き起こすものであり、
前記バグを引き起こした前記制御入力シーケンスの一部を、前記ビデオゲームが生成した前記ビデオ出力及びゲーム状態データと共に、プレーヤ生成スナップショットファイルに記録し、
機械学習モジュールを使用して前記プレーヤ生成スナップショットファイルを処理し、前記機械学習モジュールは、前記制御入力シーケンス、前記ビデオ出力、及び前記ゲーム状態から特徴を抽出して、バグ分類モデルを生成するものであり、
前記バグ分類モデルを使用して、前記ビデオゲームが前記バグを再現する可能性のあるテスト制御入力の集合を特定し、
前記バグを再現する前記テスト制御入力の集合をそれぞれ入力しながら、複数の自動ビデオゲームセッションを実行し、前記複数の自動ビデオゲームセッションの実行では、いずれも、それぞれのゲーム状態データ及びそれぞれのビデオ構成要素が生成され、
前記テスト制御入力、前記ゲーム状態データ、及び前記ビデオ構成要素のそれぞれは、前記クラウドテストシステムのスナップショットデータベース内のそれぞれの機械生成スナップショットファイルに記録され、
前記機械学習モジュールを使用して、前記バグが再現されたか否かに基づいて前記それぞれのスナップショットファイルの分類を実行し、前記分類に基づいて前記バグ分類モデルを更新し、
前記バグ分類モデルから、バグ実現条件を抽出し、前記バグ実現条件は、前記バグの原因となる追加の制御入力を特定するために使用可能なものであり、前記バグ実現条件は、前記バグに関連する1つ以上のルールを含み、前記1つ以上のルールを使用して、前記バグの原因となる制御入力シーケンスのカテゴリを特定することが可能であり、前記制御入力シーケンスの前記カテゴリには、前記制御入力シーケンス及び追加の制御入力シーケンスが含まれる、方法。
【請求項2】
前記バグ実現条件は、前記バグに関連するゲームシナリオを含み、前記ゲームシナリオを使用して、前記バグの発生に関連付けられた前記プレーヤ生成スナップショットファイル及び前記機械生成スナップショットファイルにより共有されるゲーム状態の1つ以上のカテゴリを特定することができる、請求項に記載の方法。
【請求項3】
前記ゲーム状態の1つ以上のカテゴリは、レベル、ステージ、タスク、ミッション、ゲーム内アクション、マップ領域、キャラクタ、アイテム、能力、ゲーム内オブジェクト、ゲーム内オブジェクト間の相互作用、人工知能(AI)キャラクタ、またはプレーヤ制御のキャラクタのうちの1つ以上を指定する、請求項に記載の方法。
【請求項4】
前記バグ実現条件は、前記バグに関連するシステムシナリオを含み、前記システムシナリオを使用して、前記バグの発生に関連付けられた前記プレーヤ生成スナップショットファイル及び前記機械生成スナップショットファイルにより共有されるシステムパラメータの1つ以上のカテゴリを特定することができる、請求項に記載の方法。
【請求項5】
前記システムパラメータの前記カテゴリは、中央処理装置(CPU)のクロックレート、グラフィックス処理装置(GPU)のクロックレート、通信リンクのデータレート容量、前記通信リンクのレイテンシ、前記通信リンクに関連するジッタ、または圧縮率のうちの1つ以上を指定する、請求項に記載の方法。
【請求項6】
前記複数の自動ビデオゲームセッションのそれぞれは、分散型ゲームエンジンで実行され、前記分散型ゲームエンジンは、複数の計算ノードのそれぞれに動作を実行させる複数の機能ユニットを含み、前記分散型ゲームエンジン用の前記複数の計算ノードのそれぞれが実行する前記動作は、分散型ゲームエンジンマネージャにより管理される、請求項に記載の方法。
【請求項7】
前記自動ビデオゲームセッションは、それぞれの分散型ゲームエンジンで実行され、各分散型ゲームエンジンは、それぞれの機能を実行する複数のゲームエンジンノードを含み、前記ゲームエンジンノードのそれぞれは、前記それぞれの機能を実行する動作を処理するために、それぞれの計算ノードと通信する、請求項に記載の方法。
【請求項8】
ビデオゲームの1人以上のプレーヤのゲームプレイからプレーヤ生成スナップショットファイルを生成し、前記プレーヤ生成スナップショットファイルのそれぞれには、バグが発生した前記ビデオゲームの前記ゲームプレイの一部に関連する制御入力シーケンス、ゲーム状態データ、及びビデオ構成要素が含まれ、
複数の機械学習制御入力を生成するように、機械学習モジュールを使用した前記プレーヤ生成スナップショットファイルの処理を行い、前記複数の機械学習制御入力は、前記バグを再現するための前記プレーヤ生成スナップショットファイルの前記制御入力シーケンスに追加されるものであり、
それぞれの機械学習制御入力を入力しながら複数の自動ビデオゲームセッションを実行し、前記複数の自動ビデオゲームセッションの実行では、それぞれのゲーム状態データ及びそれぞれのビデオ構成要素を生成し、前記それぞれの機械学習制御入力、前記それぞれのゲーム状態データ、及び前記それぞれのビデオ構成要素は、それぞれの機械生成スナップショットファイルに記録されるものであり、
前記機械学習モジュールを使用して、バグ実現条件を特定するように前記機械生成スナップショットファイルを処理し、前記バグ実現条件は、前記バグの原因となる制御入力シーケンスのカテゴリを特定するために使用可能であり、
前記バグ実現条件は、前記バグに関連する1つ以上のルールを含み、前記1つ以上のルールを使用して、前記バグの原因となる制御入力シーケンスのカテゴリを特定することが可能であり、前記制御入力シーケンスの前記カテゴリには、前記制御入力シーケンス及び前記プレーヤ生成スナップショットファイルの追加の制御入力シーケンスが含まれ、
前記複数の自動ビデオゲームセッションの実行では、さらに、
前記自動ビデオゲームセッションの前記実行または前記機械学習制御入力の前記入力に関連するパラメータへの変動の導入を行い、前記パラメータの変動は、前記機械学習モジュールにより処理されるように、前記機械生成スナップショットファイルにも記録され、前記バグの原因となるパラメータの特定の変動を特定するために、前記バグ実現条件をさらに使用することができるものであり、
前記機械学習モジュールを使用した前記プレーヤ生成スナップショットファイルの処理では、さらに、
前記それぞれの制御入力シーケンス、前記それぞれのゲーム状態データ、及び前記それぞれのビデオ構成要素に基づいて、前記プレーヤ生成スナップショットファイルから特徴を抽出し、
前記それぞれの制御入力シーケンスの特性と前記バグの発生との相関関係を生成するために、バグ分類モデルを使用して、前記特徴に基づいて、前記プレーヤ生成スナップショットファイルを分類し、
前記バグ分類モデルに基づいて、前記機械学習制御入力を構築する、方法。
【請求項9】
前記自動ビデオゲームセッションの前記実行に関連するパラメータへの前記変動の導入には、中央処理ユニット(CPU)のオーバークロックまたはアンダークロック、グラフィックス処理ユニット(GPU)のオーバークロックまたはアンダークロック、システムメモリのサイズまたは速度の変更、グラフィックスメモリのサイズまたは速度の変更、システムストレージのサイズまたは速度の変更、フレームバッファのサイズまたは速度の変更、及び前記それぞれのビデオ構成要素の解像度またはフレームレートの変更のうちの1つ以上が含まれる、
請求項に記載のコンピュータにより実行される方法。
【請求項10】
前記複数の自動ビデオゲームセッションは、それぞれの分散型ゲームエンジンで実行され、各分散型ゲームエンジンは、それぞれの機能を実行する複数のゲームエンジンノードを含み、前記ゲームエンジンノードのそれぞれは、前記それぞれの機能を実行する動作を処理するために、それぞれの計算ノードと通信する、
請求項に記載のコンピュータにより実行される方法。
【請求項11】
コンピュータによって実行される、サービスとしてのテスト(TaaS)を実行するための方法であって、
クライアントから、1つ以上のバグのテストを行うゲームアプリケーションを、サーバで受信し、
自動ゲームテストモジュールにより、前記ゲームアプリケーションの第1の複数の自動セッションを、前記第1の複数の自動セッションにそれぞれのテスト入力を実施しながら実行し、前記それぞれのテスト入力には、制御入力、ゲーム状態データ、システムパラメータ、及びネットワークパラメータが含まれるものであり、
前記複数の自動ゲームセッションを実行している間に、バグの発生を検出し、
前記バグの前記発生に関連する前記制御入力の一部、前記ゲーム状態データ、及びビデオ構成要素を含むスナップショットファイルを生成し、
更に、バグ再現モジュールで、前記バグを再現するために、前記バグの前記発生に関連する前記制御入力の前記一部、前記ゲーム状態データ、及び前記ビデオ構成要素を処理し、前記バグの前記再現は、前記クライアントのディスプレイに送信されるように構成され、
前記バグを再現するための前記制御入力の前記一部に加えて、複数の機械学習制御入力を生成するように、機械学習モジュールを使用して前記スナップショットファイルを処理し、
前記それぞれのゲーム状態データ及び前記それぞれのビデオ構成要素を生成するために、前記自動ゲームテストモジュールを使用して、前記機械学習制御入力を入力しながら第2の複数の自動セッションを実行し、前記それぞれの機械学習制御入力、前記それぞれのゲーム状態データ、及び前記それぞれのビデオ構成要素は、それぞれの機械生成スナップショットファイルに記録されるものであり、
前記機械学習モジュールを使用して、バグ実現条件を特定するように前記機械生成スナップショットファイルを処理し、前記バグ実現条件を使用して、前記バグの原因となる追加の制御入力を特定することができ、前記バグ実現条件は、前記クライアントに配信されるように構成され、
前記バグ実現条件は、前記バグに関連する1つ以上のルールを含み、前記1つ以上のルールを使用して、前記バグの原因となる制御入力シーケンスのカテゴリを特定することが可能であり、前記制御入力シーケンスの前記カテゴリには、前記制御入力シーケンス及び追加の制御入力シーケンスが含まれる、方法。
【請求項12】
前記ゲームアプリケーションの前記第1の複数の自動セッションの前記テスト入力には、カオステストモジュールにより、または負荷テストモジュールにより、または前記クライアントにより、または前記ゲームアプリケーションの前のバージョンをテストした時、もしくは別のゲームアプリケーションをテストした時に特定された前記バグの前の発生に関連付けられた前のスナップショットファイルにより、定義された制御入力シーケンスが含まれる、
請求項11に記載の方法。
【請求項13】
更に、前記第1の複数の自動ゲームセッションの実行では、前記バグを再現するために、システムパラメータ及びネットワークパラメータに変動を導入する、
請求項11に記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、概して、ビデオゲーム開発に関し、より具体的には、サービスとしてのビデオゲームのクラウドテストを提供するための方法及びシステムに関する。
【背景技術】
【0002】
ビデオゲームのテストは、ビデオゲームの品質管理を維持するゲーム開発プロセスの一部である。ゲームテストの機能のうちの1つは、例えばバグなどの、ビデオゲームの使用を損なうソフトウェア欠陥を発見し文書化することである。以前は、ビデオゲームの規模が小さく複雑さが低かったため、ゲームテストに必要な人員は比較的少なかった。今日、ビデオゲームテストは、ゲームアプリケーションがスムーズに実行されることを保証するために、開発者及びゲーム販売会社が従事する大規模で費用のかかる労作である。これは、今日のビデオゲームは範囲が広く複雑さが高く、消費者はほぼ完璧なゲームアクションを求めているためである。その結果、リリースされるゲームがスムーズに機能し、バグ、グリッチ、または他の欠陥がないことを保証する上で、ゲームテストが大きな役割を果たす。いくつかの販売会社では、数十人の品質保証テスターに所与の時間、特定のゲームタイトルに取り組んでもらう場合があるが、費用が高くかかり得る。さらに、たとえゲームテスターがバグを特定しても、ゲームテスターのゲームセッション及び他の要因に関連する変動の原因により、開発者は、特定されたバグを再現できない場合もある。
【0003】
本実施形態はこのような背景の下になされたものである。
【発明の概要】
【0004】
本開示の実施形態は、ゲームテストのリプレイ、自動化されたゲームテスト、及びサービスとしてのテスト(TaaS:Testing As A Service)を行うための方法及びシステムに関する。
【0005】
一実施形態では、方法が提供される。方法は、クラウドテストシステムのサーバ上で、プレーヤがプレイするビデオゲームを実行する動作を含み、当該ビデオゲームを実行することは、ビデオ出力を生成する。方法はまた、プレーヤのクライアントデバイスから、ビデオゲームとインタラクションを行うための制御入力シーケンスを受信する動作を含み、制御入力シーケンスの一部は、当該ビデオゲームとのインタラクション中にバグの出現を引き起こす。さらに、方法は、バグを引き起こした制御入力シーケンスの一部を、ビデオゲームが生成したビデオ出力及びゲーム状態データと共に、プレーヤ生成スナップショットファイルに記録する動作を含む。さらに、方法は、機械学習モジュールを使用してプレーヤ生成スナップショットファイルを処理する動作を含み、機械学習モジュールは、制御入力シーケンス、ビデオ出力、及びゲーム状態から特徴を抽出して、バグ検出モデルに分類する。さらに、方法は、バグ検出モデルを使用して、ビデオゲームがバグを再現する可能性のあるテスト制御入力の集合を特定する動作を含む。
【0006】
別の実施形態では、方法が提供される。方法は、ビデオゲームの1人以上のプレーヤのゲームプレイからプレーヤ生成スナップショットファイルを生成する動作を含み、プレーヤ生成スナップショットファイルのそれぞれは、バグが発生したビデオゲームのゲームプレイの一部に関連する制御入力シーケンス、ゲーム状態データ、及びビデオ構成要素を含む。方法はまた、バグを再現するためのプレーヤ生成スナップショットファイルの制御入力シーケンスに加えて、複数の機械学習制御入力を生成するように、機械学習モジュールを使用してプレーヤ生成スナップショットファイルを処理する動作を含む。さらに、方法は、それぞれの機械学習制御入力を入力しながら複数の自動ビデオゲームセッションを実行する動作を含み、当該複数の自動ビデオゲームセッションを実行することはそれぞれ、それぞれのゲーム状態データ及びそれぞれのビデオ構成要素を生成し、それぞれの機械学習制御入力、それぞれのゲーム状態データ、及びそれぞれのビデオ構成要素は、それぞれの機械生成スナップショットファイルに記録される。さらに、方法は、機械学習モジュールを使用して、バグ実現条件を特定するように機械生成スナップショットファイルを処理する動作を含み、バグ実現条件を使用して、プレーヤ生成スナップショットファイルの制御入力シーケンスに加えて、バグの原因となる制御入力シーケンスのカテゴリを特定することができる。
【0007】
別の実施形態では、方法が提供される。方法は、1つ以上のバグのテストを行うゲームアプリケーションをサーバで受信する動作を含む。方法はさらに、自動ゲームテストモジュールにより、ゲームアプリケーションの自動セッションを、自動セッションにテスト入力を実施しながら実行する動作を含み、テスト入力には、制御入力、ゲーム状態データ、システムパラメータ、及びネットワークパラメータが含まれる。さらに、方法は、バグレポータにより、当該自動ゲームセッションの実行中にバグの発生を検出することを提供する。さらに、方法は、バグの発生に関連する制御入力の一部、ゲーム状態データ、及びビデオ構成要素を含むスナップショットファイルを生成することを提供する。
【0008】
本開示の他の態様は、本開示の原理の実施例として示される添付図面と併せて、下記の発明を実施するための形態から、明らかになるであろう。
【0009】
本開示は、添付図面と併せて、以下の説明を参照することにより、最もよく理解されるであろう。
【図面の簡単な説明】
【0010】
図1】一実施形態による、バグの報告及び再現の概念図を示す。
図2】一実施形態による、ゲームテスターにより発見されたバグを忠実に再現するための改良された方法及びシステムの概念図を示す。
図3】一実施形態による、ゲームテスターが特定したバグを、バグをキャプチャするスナップショットファイルを処理することで再現するために使用されるバグ再現モジュールの概念図を示す。
図4】一実施形態による、複数のスナップショットファイルを含むスナップショットログの概念図を示す。
図5】一実施形態による、クラウドベーステストサーバシステムが機械学習を実施して、以前特定されたバグまたは新たに特定されたバグの発生に統計的に関連する新たな制御入力を生成する方法を示す。
図6】一実施形態による、自動ゲームテストモジュールで自動ゲームセッションと並行して実行される変動パッケージを、変動実施モジュールが作成する方法の概念図を示す。
図7】一実施形態による、複数の自動ゲームセッションを実行している自動ゲームテストモジュールの概念図を示す。
図8】一実施形態による、複数の自動ゲームセッションを実行するために分散型ゲームエンジンを利用する自動ゲームテストモジュールのアーキテクチャの図を示す。
図9】A及びBは、様々な実施形態による、機械学習モジュール、自動ゲームテストモジュール、及びバグ実現モジュールが連携して、以前または新たに特定されたバグが実現され得る条件の集合を特定する方法を概念的に示す。
図10】一実施形態による、カオステストまたはショットガンテストを介して新たなバグを発見する方法を示す。
図11】一実施形態による、新たなビルドまたはバージョンのゲームでの、以前特定されたバグの自動テストの概念図を示す。
図12】一実施形態による、サービスとしてのテスト(TaaS)の一部として、第1のゲームで判明したバグ実現条件を、第2のゲームに適用し得る方法を示す。
図13】一実施形態による、サービスとしてのテスト(TaaS)に使用可能なプラットフォームの概念図である。
図14】TaaSサーバなど、本開示の様々な実施形態の態様を実行するために使用され得る例示的なデバイスの構成要素を示す。
【発明を実施するための形態】
【0011】
本開示の実施形態は、ゲームテスターが特定したバグをゲーム開発者が再現することを可能にするための方法及びシステムに関する。本開示の実施形態はまた、機械学習アルゴリズムを使用して、以前特定されたバグまたは未特定のバグの原因となる付加的な機械学習制御入力を提供する方法に関する。さらに、本開示の実施形態は、様々なシステム関連条件下でゲームをテストするテストプロセスの一部を自動化するための方法及びシステムに関する。さらに、本開示の実施形態は、ゲームテストの態様をサービスとして実行可能にすることに関する。しかしながら、本開示は、これらの具体的な詳細の一部または全てがなくとも実施できることは、当業者には明らかであろう。他の例では、本開示を不必要に曖昧にしないために、周知のプロセス動作は詳細に記載されない。
【0012】
ゲームテストは、費用と時間のかかるプロセスである。実際に市販段階に至る全てのゲームタイトルは、機能的及び芸術的な品質レベルを保証するために、数多くのテストラウンドを経ている。リリース用のビデオゲームアプリケーションの開発において、テストは様々な役割を担う。これらのうちのいくつかには、機能テスト、コンプライアンステスト、互換性テスト、負荷テスト、ベータテスト、及びマルチプレーヤテストなどが含まれる。全体として、ゲームテストの目標は、様々なハードウェアプラットフォームにわたり、ビデオゲームが、例えば期待どおりに、スムーズに実行されることを保証することである。従って、ゲームテストの目標のうちの1つは、ゲームのスムーズな実行を妨げるビデオゲームのバグを特定することである。バグは、多数の方法で現れ得る。通常、バグとは、望まれる、予期される、または期待される結果以外の予期しない結果が発生したゲームの一部及びその関連コードを指し、予期しない結果が、ゲームロジック、ゲーム力学、グリッチ、アートワーク、システム不具合、または他のゲーム応答もしくはシステム応答に関連するか否かには関係ない。
【0013】
図1は、一実施形態による、バグの報告及び再現の概念図を示す。ゲームテスター101は、開発キットなどのテストデバイス100を使用して、ビデオゲームのセグメント112を通してプレイすることが示される。ゲームテスター101は、ビデオゲームのセグメント112のプレイを通して、3つのバグ106、108、及び110を発見する。次に、ゲームテスター101は、開発者104に配信されるバグレポート102を提供することが示される。バグレポート102は、欠陥追跡システムを介して提供され得、バグが生成された状況(例えばレベルまたはマップ座標)及びバグを再現するための特定のステップ(例えば制御入力の集合)を指定し得る。開発者104は、バグレポート102を使用してバグ106、108、及び110を再現した後に、これらの修正を試みる。
【0014】
開発者104は、例えばアーティスト、プログラマー、ゲームデザイナーなどであり、3回の試行で毎回バグ106’の再現に成功し、3回の試行の2回目でバグ108’の再現に成功している。開発者104は、バグ110を再現することができない。バグ110などの特定のバグを再現できないこと、及びバグ108などのバグは断続的に再現できるという状況は、ゲームテスター101のゲームプレイに関連するいくつかの要因から生じ得る。例えば、ゲームテスター101及び開発者104は、異なるシードデータまたは他のゲーム状態データを有する場合がある、または制御入力シーケンスの入力の手法が時間的あるいは時系列的に同一ではない場合がある。さらに、ゲームテスター101のテストデバイス100に関連するシステム変動(例えばレイテンシ、ジッタ、CPUクロック、GPUクロック、メモリ使用量など)の存在が、バグ108及び110の生成の要因となり得る。バグ108及び110を再現するために、開発者104が現在の方法論を使用して、これらのシステム変動を追跡及び模倣することは、困難である。さらに、何人かのゲームテスターはバグ110を報告し、その他のテスターからは報告がない場合もあり、バグ110は存在するか否か、及びバグ110に対処する必要はあるか否かの認識論的対立が生じる。バグを忠実に再現するための改良された方法論及びシステムが検討される。
【0015】
図2は、一実施形態による、ゲームテスター101により発見されたバグを忠実に再現するための改良された方法及びシステムの概念図を示す。図1と同様に、図2のゲームテスター101は、ビデオゲームのセグメント112とのインタラクション中に、バグ106、108、110を生成したことが示される。セグメント112は、サーバシステム200上で実行されるビデオゲームセッション201の一部であってもよい。すなわち、例えば、ビデオゲームセッション201は、サーバシステム200のテストハードウェア206を有するシステム204によりホストされ得る。テストハードウェア206は、いくつかの実施形態では独自のものであってもよい。
【0016】
システム204は、テスト用のビデオゲームアプリケーション210が実行されているオペレーティングシステム208を実行する。ゲームテスター101は、ネットワーク202を介してビデオゲームセッション201とインタラクトする。例えば、ビデオゲームアプリケーション210は、ゲームテスター101への配信及び提示のために、サーバシステム200でオーディオ構成要素及びビデオ構成要素を生成することが意図されたものである。次に、サーバシステム200は、ゲームテスター101がビデオゲームセッション201とインタラクトするための制御入力を、ネットワーク202を介してゲームテスター101から受信する。別の実施形態では、ビデオゲームセッション201は、ゲームテスター101のローカルであるテストデバイス100上で実行され得る。しかし、いずれの場合でも、生テストデータ212の集合は、ゲームテスター101がビデオゲームセッション201中にビデオゲームアプリケーション210とインタラクトした結果、生成される。
【0017】
生テストデータ(raw test data:rtd)212は、制御入力シーケンス214を含むことが示され、これは、制御入力を時間に応じたデータ要素として含む任意の好適なデータ構造であってもよい。例えば、制御入力シーケンス214は、ボタン押下、キーストローク、マウスクリック、カーソル移動、コントローラの動き、ジョイスティックの動き、音声コマンド、体の動き、及びゲームテスター101が行う他の入力を含む、ゲームテスター101のいくつかの入力デバイスに入力される様々な制御入力のそれぞれを記録するものとし得る。制御入力シーケンス214のデータ要素のそれぞれには、制御入力がビデオゲームアプリケーション201により登録された時点、並びに制御入力が実世界のコントローラに入力された時点に応じて、タイムスタンプが付与され得る。生テストデータ212はまた、ゲーム状態データ216を含むことが示され、これは、保存データ、ゲーム値、マップデータ、資産データ、及びその他を含む、ゲーム環境をキャプチャするための任意の好適なデータ構造であってもよい。バグに関してゲーム状態データ216が時間参照され得るように、ゲーム状態データ216にもタイムスタンプが付与され得る。
【0018】
バグ106、108、及び110を発見するためにゲームテスター101がビデオゲームアプリケーション201とインタラクトすると、ビデオゲームアプリケーション210の指示に従ってシステム204によりビデオ構成要素218が生成される。ビデオ構成要素218には、オーディオ構成要素及びビデオ構成要素の両方が、ビデオフレームシーケンスの形態で含まれ得る。さらに、ゲームテスター101がビデオゲームアプリケーション210とインタラクトすると、ビデオゲームセッション201に関連する様々なネットワークプロパティ及びシステムプロパティが、リアルタイムまたはほぼリアルタイムで、生テストデータ212の一部であるネットワークデータ220及びシステムデータ222にそれぞれキャプチャされる。ネットワークデータ220には、例えばレイテンシ、ジッタ、データレート容量、パケット損失、サービス品質(QoS)、スループット、及び他のネットワークプロパティを含む、サーバシステム200とゲームテスター101との通信リンクに関連する様々なパラメータが含まれ得る。システムデータ222には、CPUクロック、GPUクロック、メモリ使用量、フレームレート、解像度、及び他のシステムプロパティを含む、ビデオゲームアプリケーション210を実行するシステム204またはテストデバイス100に関連する様々なパラメータが含まれ得る。バグに関してネットワークデータ220及び/またはシステムデータ222内の特定の時間が時間参照され得るように、ネットワークデータ220及びシステムデータ222の両方にタイムスタンプが付与され得る。
【0019】
また、シードデータ224及びバグログ226が、生テストデータ212に含まれることが示される。シードデータ224は、ビデオゲームにある変動またはランダム性を導入するためにビデオゲームアプリケーション210が使用する初期データ集合を指す。シードデータ224は、いくつかの実施形態では、乱数発生器を利用し得る。さらに、バグログ226は、バグの存在を示すために、ゲームテスター101の入力にマーカまたはフラグを記録する。例えば、ゲームテスター101がバグ106、108、及び110のそれぞれに遭遇した場合、バグログ226にはこれらのバグに関して非常に多くのことが示され得る。バグ106、108、及び110のそれぞれが発生した時間に関して、制御入力シーケンス214、ゲーム状態データ216、ビデオ構成要素218、ネットワークデータ220、及びシステムデータ222のそれぞれにおける特定のウィンドウが参照され得るように、バグログ226もタイムスタンプが付与され得る。
【0020】
スナップショット生成器228は、スナップショットログ230に格納されるスナップショットファイル232を生成するように構成される。各スナップショットファイル232は、特定のバグに関連付けられ、バグに関連する制御入力シーケンス214の一部、ゲーム状態データ216、ビデオ構成要素218、ネットワークデータ220、システムデータ222、シードデータ224、及びバグログ226の一部を含むものとし得る。例えば、バグ106、108、及び110のそれぞれは、スナップショット生成器228が生成するスナップショットファイル232内に含まれ得る。例えば、ゲームテスター101がバグ106の存在を示す場合、スナップショット生成器228は、バグ106のスナップショットファイル232を生成するために、制御入力シーケンス214、ゲーム状態データ216、ビデオ構成要素218、ネットワークデータ220、システムデータ222、及びシードデータ224のそれぞれに関して、バグログ226内のバグ106のタイムスタンプに対応するウィンドウにアクセスされ得る。ウィンドウは、バグ106の発生の前後約1分~10分の間であってもよい。スナップショット生成器228は、スナップショットログ230に格納されるバグ108及び110のスナップショットファイル232も生成し得る。ゲームテスター101が発見または生成したバグ106、108、及び110のスナップショットファイル232に加えて、スナップショットログ230は、他のゲームテスターまたは自動ゲームテストエージェントが発見または生成した様々な追加バグに関連付けられたスナップショットファイル232のデータベースであってもよい。
【0021】
サーバシステム200はまた、ネットワーク202を介して開発者104のデバイスとインターフェースしてバグ106’、108’、及び110’を再現するバグ再現モジュール234をホストし得る。バグ再現モジュール234が開発者104がバグを再現することを可能にするための手法が多数存在する。3つの非限定的な実施形態には、再生モード、自動再現モード、及び手動再現モードが含まれる。再生モードでは、バグ106’、108’、及び110’がゲームテスター101に現れたとおりに、バグ106’、108’、及び110’が開発者104に再生されるように、スナップショットファイル232が開発者104に再生される。結果として、バグ106、108、及び110は、それらがゲームテスター101に現れた方法と同じように表示される。
【0022】
自動再現モードでは、バグ再現モジュール234は、ビデオゲームアプリケーション210を実行するために、スナップショットファイル232に関連付けられたゲーム状態データ216をロードし得る。バグ再現モジュール234は、自動再現モードでスナップショットファイル232を実行するために、システム204、テストハードウェア206、オペレーティングシステム208、及びビデオゲームアプリケーション210にアクセスし得る。例えば、システム204は、ゲーム状態データ216をロードして、バグ106、108、110のそれぞれが発生する前の約5秒~約10分の間、または約10秒~5分の間、または約15秒~約60秒の間に、ビデオゲームセッション201を開始あるいはスピンアップ(Spin Up: SU)し得る。ビデオゲームセッション201が開始されると、制御入力シーケンス214の制御入力それぞれのタイムスタンプに基づいて、制御入力シーケンス214は、ビデオゲームアプリケーション210に自動的に入力される。その結果、制御入力シーケンス214は、ゲーム状態データ216と同期化され、これにより、ビデオゲームセッション201が開発者104のためにリアルタイムで再現される。別の実施形態では、バグ再現モジュール234には、専用の再生システムハードウェア、オペレーティングシステム、及び開発バージョンのビデオゲームアプリケーションが提供され得る。ビデオゲームアプリケーション210の実行中に制御入力シーケンス214を複製することに加えて、ネットワークデータ220、システムデータ222、及びシードデータ224も複製、ミラーリング、またはシミュレートされ、バグ106、108、及び110が発生したウィンドウ中の動作条件が再現され得る。このようにして、開発者のためにバグ106’、108’、及び110’が新たに生成されるが、これらは、ゲームテスター101が観察したバグ106、108、及び110と理論的に同一であってもよい。
【0023】
手動再現モードでは、バグ106、108、110のそれぞれが発生する前の約5秒~約10分の間、または約10秒~5分の間、または約15秒~約60秒の間のビデオゲームセッション201内の状態で、ビデオゲームアプリケーション210を実行するために、バグ再現モジュール234により、スナップショットファイル232のゲーム状態データ216がロードされる。しかし、制御入力シーケンス214を自動入力する代わりに、バグ106’、108’、及び110’を手動で再現できるように、開発者104には、制御入力シーケンス214のテキスト表現または視覚的表現が提供される。このようにして、開発者104は、バグ106’、108’、110’の発現を発生あるいはトリガーさせ、かつ、同一のバグをトリガーする他の制御入力構成やトリガーしない他の制御入力構成を体験あるいは実験することができる。その結果、開発者104は、バグを引き起こしているパラメータをよりよく理解することができる。いずれの事例でも、バグ再現モジュールは、ゲームテスター101が特定したバグ106’、108’、及び110’を、開発者104が再現することを可能とし、開発者104がこれらを修正できるようにする。
【0024】
図3は、一実施形態による、ゲームテスターが特定したバグ106をバグ106をキャプチャするスナップショットファイル232を処理することで再現するために使用されるバグ再現モジュール234の概念図を示す。スナップショットファイル232aは、バグ106’の発生に時間的に関連するバグログ226aの一部、制御入力シーケンス214aの一部、ゲーム状態データ216aの一部、及びビデオ構成要素218aの一部を含むことで、バグ106を「キャプチャ」する。図示されてはいないが、システムデータ、ネットワークデータ、及びシードデータも、バグ106’に関連付けられたスナップショットファイル232a内に含まれるものである。特定の実施形態では、各スナップショットファイル232aは、バグの1つのインスタンスに関連付けられる。例えば、バグ106がスナップショットファイル232aによってキャプチャされる場合、バグ108及び110は、それぞれのスナップショットファイルによりキャプチャされ得る。しかし、第1のバグが第2のバグを引き起こす場合、または第1のバグと第2のバグが互いに非常に近い時間に発生する場合など、バグが互いに密接に関連している場合は、第1と第2のバグの両方が1つのスナップショットファイルにキャプチャされ得る。
【0025】
ここに示される実施形態では、バグ再現モジュール234は、単にバグを再生するバグ再生モード302、バグの同一のインスタンスを自動的に再現する自動再現モード304、またはバグを手動で再現するように開発者に指示する手動再現モード306を、実行し得る。前述のモードのいずれにおいても、バグ再現モジュール234は、開発者がインタラクションを行うためのバグ再現GUI300を生成する。バグ再現GUI300には、ソースコード308パネル、ゲーム状態310パネル、ビデオ構成要素312パネル、及び制御入力314パネルを含む表示用の複数のパネルが含まれることが示される。ビデオ構成要素312は、バグ108が、フィールドを抜け落ちるサッカーボールを含むことを示す。バグ再現モジュール234がバグ再生モード302である場合、ビデオ構成要素312に示されるビデオフレームは、ゲームテスターに表示されたビデオ構成要素218aから直接取得される。代わりに、自動再現モード304または手動再現モード306が使用される場合、制御入力シーケンス214aを入力しながらゲームアプリケーションを実行することにより新たに生成されたビデオフレームが、ビデオ構成要素312には含まれ得る。しかし、自動再現モード304または手動再現モード306でも、バグ再現GUI300は、ゲームテスターに表示するために生成されたビデオフレーム(例えば元のフレーム)も表示でき、これにより、開発者は、元のフレームと新たに生成されたフレームとを並べて見ることができる。
【0026】
ソースコード308には、ゲーム力学、ゲームロジック、資産管理、ゲーム物理学、マルチプレーヤ力学、及びメタデータ管理のためのコードを含む、ビデオゲームの動作のための命令を含むビデオゲームプログラミングコードが含まれ得る。ソースコード308パネルは、バグ108の発生中に実行されているコードを表示するように想定される。例えば、ソースコード308は、サッカーボールを5ユニットの高さから落とすためのゲームエンジンへの命令を含み得る。ソースコード308パネルは、バグが再現されている時に、ゲームコードの関連部分にスクロールし得る。
【0027】
ゲーム状態310は、サッカーボールに関連する様々なゲーム状態値を含むことが示される。ここで、ゲーム状態310は、「ボール跳ね返り係数」が「0」に設定され、「ボール半径」が「6」に設定されていることを示す。ゲーム状態310パネルにより、開発者は、バグの再現中に変化する様々なゲーム状態値及びゲームエンジンパラメータを見ることができる。
【0028】
さらに、制御入力314パネルにより、開発者は、バグを引き起こした可能性のある制御入力シーケンス214aを見ることができる。ここで、ゲームテスターが入力した制御入力シーケンス214aを提示するために、ゲームテスターが使用したコントローラの仮想表現が提供される。例えば、制御入力シーケンス214aは、ゲームテスターが、「X-down-down-triangle-left_joystick_down」というシーケンスを入力したことを示す。制御入力シーケンス214aと同じシーケンス及びタイミングで、仮想コントローラ上に同じシーケンスが仮想的に表され得る。例えば、仮想コントローラは、順番に、「X」ボタンが押され、下ボタンが2回押され、三角形ボタンが押され、左のジョイスティックが下に向けられ得る。
【0029】
図4は、一実施形態による、複数のスナップショットファイル232を含むスナップショットログ230の概念図を示す。スナップショットログ230は、1人のゲームテスターまたは複数のゲームテスターにより生成されたスナップショットファイル232を含み得る。スナップショットログ230内の各スナップショットファイル232は、スナップショットファイル識別子401、バグ識別子400、ラベル402、ゲーム関連データ404、システムデータ406、及びネットワークデータ408を含む。同じトークンのバグに同じバグ識別子400が提供されるように、バグ識別子400は、欠陥追跡システムと同期化され得る。ラベル402は、ゲームテスターまたは開発者により注釈が付けられ得、バグの種類の説明、バグの重大度、及びスナップショットログ230全体でバグを分類するのに有用な記述子を含み得る。ゲーム関連データ404は、制御入力、ビデオ出力、オーディオ出力、及びゲーム状態データに応じて、多次元空間で表され得る。ゲーム状態データ自体は、様々なゲーム状態値、オブジェクトの座標値、時間座標、レベル、資産、能力、及びシードデータなどに応じて、多次元空間で表され得る。
【0030】
さらに、システムデータ406は、関連するバグが特定されたゲームアプリケーションを実行するシステムの時間依存状態データを含む。システムデータには、CPUクロックと使用量、GPUクロックと使用量、メモリ速度と使用量、フレームレート、解像度、ビデオ圧縮コーデックと圧縮比、温度インジケータ、及びシステム性能の他のインジケータなど、システム性能データが含まれ得る。ネットワークデータ408は、ゲームテスターと、ビデオゲームアプリケーションをホストするサーバシステムとの通信チャネルの時間依存インジケータを含み得る。これらのインジケータは、レイテンシ、データレート容量、ジッタ、及び他の通信プロパティを特定し得る。
【0031】
図5は、一実施形態による、クラウドベーステストサーバシステム500が機械学習を実施して、以前特定されたバグまたは新たに特定されたバグの発生に統計的に関連する新たな制御入力を生成する方法を示す。サーバシステム500は、スナップショットデータベース502と、自動ゲームテストモジュール504と、機械学習モジュール506と、バグ実現モジュール508とを含む。複数のゲームテスター501が、バグを特定するためにビデオゲームとインタラクトすることが示される。バグが特定されると、これらのプレーヤ生成バグに関連するプレーヤ生成スナップショットファイル514が、スナップショットデータベース502に記録される。制御入力516を含むプレーヤ生成スナップショットファイル514は、アプリケーションインターフェース522を介して機械学習モジュール506に入力される。いくつかの実施形態では、プレーヤ生成スナップショットファイル514は、トレーニングデータセット528またはグラウンドトゥルースとして使用され得る。特徴抽出器524は、プレーヤ生成スナップショットファイル514を分析して、特定のバグの生成に関連する特徴空間内の値を決定する。特徴抽出器524は、制御入力シーケンス、制御入力のタイミング、これまでの制御入力の履歴などに関連する特徴を分析するように定義され得る。さらに、特徴抽出器524は、ゲーム状態値、シード値、システムパラメータ、及びネットワークパラメータに関連する特徴を分析し得る。
【0032】
機械学習モジュール506は、機械学習アルゴリズム526、トレーニングデータセット528、プレーヤ生成スナップショットファイル514を使用して、バグ分類モデル532を生成する。バグ分類モデル532を使用して、プレーヤ生成制御入力516に加えて、機械学習制御入力530を特定することができる。機械学習制御入力530は、バグの原因であると統計的に予測される。バグ分類モデル532を生成するために、任意の好適な機械学習アルゴリズム526が実施され得、これには、ベイジアンネットワーク、線形回帰、決定木、ニューラルネットワーク、及びk平均法クラスタリングなどが含まれるが、これらに限定されない。バグ分類モデル532は、プレーヤ生成バグまたは新たに特定されたバグの原因であると予測される、統計的に関連する制御入力の組み合わせ、順列、及び時間依存シーケンスを提供する。トレーニングデータセット528及びプレーヤ生成スナップショットファイル514を使用して、受信された制御入力516の各集合にラベルを割り当てることができる。ラベルには、「バグ」または「バグではない」が含まれ得る。
【0033】
様々な実施形態では、機械学習制御入力530の各集合は、自動ゲームテストモジュール504により実施される。自動ゲームテストモジュール504は、複数のゲームセッションを開始して、バグの発生の有無に関して機械学習制御入力530の集合をテストするように構成される。自動ゲームテストモジュール504は、GUIモジュール534と、変動実施モジュール536と、ビデオゲームアプリケーション538と、ゲームエンジン540と、オペレーティングシステム542と、ゲームエンジン分散モジュール544と、バグレポータ546とを含む。GUIモジュール534により、開発者は、自動ゲームテストモジュール504とインターフェースし、自動ゲームセッションが実行される条件を指定することが可能となる。例えば、開発者は、自動ゲームセッションを実行する間に、変動実施モジュール536を介してシステムパラメータまたはネットワークパラメータの変動(以下「変動」)を導入することを決定し得る。いくつかの実施形態では、機械学習モジュール506はまた、自動ゲームセッション中に変動実施モジュール536に変動を導入する方法を指示する機械学習変動の集合を提供し得る。別の実施形態では、開発者は、変動実施モジュールを介して変動を導入することにより、ビデオゲームアプリケーションの負荷テストを行うことを選択し得る。例えば、開発者は、自動ビデオゲームセッションの実行中にシミュレートされるフレームレート、解像度、CPUクロックと使用量、GPUクロックと使用量、及びメモリ使用量のパラメータを指定できることが想定される。さらに、開発者は、自動ビデオゲームセッション中にシミュレートされるレイテンシ、ジッタ、データレート容量、及び他のネットワークプロパティなどのネットワーク変動を指定できる。
【0034】
実施される機械学習制御入力530の数、導入が求められる変動、及び実行間のパラメータの変化または差異の粒度に応じて、任意の好適な数のビデオゲームセッションが並行して開始され得る。いずれの事例でも、自動ゲームセッションが自動ゲームテストモジュール504により実行される場合、ビデオゲームアプリケーション538には、予想されるバグの発生の直前、例えば約5秒~約10分前、または約10秒~約5分前、または約30秒~約1分前の特定のゲーム状態がロードされ得る。ビデオゲームアプリケーション538が実行されると、機械学習制御入力530は、時間に依存した方法で入力される。さらに、自動ゲームセッションは、変動実施モジュール536を介して変動を同時に実施しながら、実行され得る。このようにして、複数の自動ゲームセッションは、機械学習制御入力530の1つの集合を使用して実施され得、各セッションは、異なる変動でテストを行う。例えば、第1の自動ゲームセッションは、低レベルのジッタを実施し得、一方第2の自動ゲームセッションは、より高いレベルのジッタを実施し得る。第3の自動ゲームセッションは、GPUをオーバークロックし得、一方第4の自動ゲームセッションは、同様のGPUをアンダークロックし得ることなどが挙げられる。
【0035】
さらに、自動ゲームセッションが実行されると、バグの発生を検出するために、バグレポータ546が各ゲームセッションの上に階層化され得る。バグレポータ546は、バグを示す自動ゲームセッションにより生成されたゲーム状態で、バグを自動的に検出するように事前定義され得る。さらに、バグレポータ546は、画像分析を使用してバグを示す画像または画像部分を特定することにより、ゲームメカニズムまたはレンダリングに関連するバグを検出する。
【0036】
自動セッションの結果は、バグを再現したか否かにかかわらず、機械生成スナップショットファイル518として記録される。機械生成スナップショットファイル518は、バグレポータ546の結果に基づいて、「バグ」または「バグではない」にラベル付けされる。しかし、バグレポータ546の結果が不確定または不完全である場合、あるいは開発者がラベルに同意しない場合、開発者はラベルに注釈を付けてもよく、またはラベルを変更してもよい。次に、バグ分類モデル532を訓練するまたは更新するために、ラベル付けされた機械生成スナップショットファイル518は、機械学習モジュール506に供給される。
【0037】
バグ分類モデル532が更新されると、機械学習制御入力530の新たな集合が生成され、自動ゲームテストモジュール504を使用してテストされ得る。制御入力がバグの原因になると予測されるか否かについてバグ分類モデル532が行う分類に、ある許容レベルの信頼性が得られるまで、機械学習モジュール506を介した学習、自動ゲームテストモジュール504を介した検証(例えば監督)、及びバグ分類モデル532の改良のプロセスが繰り返され得る。すなわち、例えば、新たな制御入力がバグの原因となるか否かをバグ分類モデル532が約99%の信頼区間で分類できるようになるまで、学習、検証、及びモデル改良のプロセスが繰り返され得る。さらに、学習、検証、及び改良の各反復により、機械学習モジュール506は、バグの原因であるとより統計的に予測される機械学習制御入力530の集合を生成することができると想定される。反対に、機械学習モジュール506は、バグの原因になると予測されない制御入力の集合を特定することにおいても向上する。
【0038】
機械学習モジュール506は、プレーヤ生成スナップショットファイル514からの制御入力などの制御入力に関して学習することまで説明されたが、機械学習モジュール506は、システム変動及びネットワーク変動に基づいて学習することも想定される。例えば、バグ分類モデル532に基づいて機械学習制御入力530を生成するのと同様に、機械学習モジュール506は、バグの原因になると予測される機械学習変動503も生成し得る。よって、機械学習モジュール506は、バグの発生に付随するシステムパラメータ及びネットワークパラメータのパターンを検出でき、自動ゲームテストモジュール504を介してテストを行うために、システムパラメータ及びネットワークパラメータに対する機械学習変動503を生成できる。機械学習変動503により指定されたシステム条件及びネットワーク条件が、自動ゲームセッションの実行中にシミュレート、模倣、または再現されるように、変動実施モジュール536を介して自動ゲームテストモジュール504が実施され得る。バグの発生の有無に関するバグレポータの結果は、機械学習制御入力530とともに、機械生成スナップショットファイル518に記録され得る。例えば、バグレポータ546は、各実行に「バグ」、「バグではない」、または「不確定」のラベルを付けるように機能し得る。「不確定」とラベル付けされた自動ゲームセッションは、人間のラベラーが「バグ」または「バグではない」に後で決定できる。
【0039】
次に、機械学習制御入力530と同様に、機械学習変動503の結果は、機械学習モジュール506にフィードバックされ得、機械学習モジュール506は、バグ分類モデル532を更新するように機能する。バグ分類モデル532の学習、テスト、及び更新のサイクルは、1つの能力として、特定のバグを引き起こすまたはほぼ引き起こすシステムパラメータ及びネットワークパラメータの集合、あるいはバグの集合を引き起こすまたはほぼ引き起こす共通のシステムパラメータ及びネットワークパラメータの集合を、特定するように機能する。
【0040】
様々な実施形態では、機械学習モジュール506は、1つの能力として、経験を通して特定のバグまたはバグの集合を引き起こす制御入力、システムパラメータ、及びネットワークパラメータの種類の一般則を学習するように機能する。一般則は、バグ分類モデル532で表され、バグ実現モジュール508により推定され得る。バグ実現モジュール508は、バグ分類モデル532内の一般則を、ルール548、カテゴリ550、ゲームシナリオ552、及びシステムシナリオ554を含むバグ実現条件510に形式化または表現するように機能する。バグ実現モジュール508はまた、バグ実現制御入力556及びバグ実現システムパラメータ520を有するバグ実現ライブラリ512を含むことが示される。バグ実現モジュール508は、ある意味、所与のバグをトリガーすなわち実現するように機能するプラットフォームである。
【0041】
図2のバグ再現モジュール234と同様に、バグ実現モジュール508は、所与のバグを、開発者が見られるように、再生または再現できる。しかしながら、さらに、バグ実現モジュール508は、機械学習モジュール506、スナップショットデータベース502、バグ実現条件510、及びバグ実現ライブラリ512にアクセスするので、バグ実現モジュール508は、同じバグを引き起こす複数の他の方法、及びバグを引き起こす条件に対する特定の制約または境界も、開発者に示すことができる。バグ実現モジュール508はさらに、新たに発見されたバグを特定してユーザに提示し得る。例えば、機械学習モジュール506が機械学習制御入力530及び機械学習変動503を生成する場合、機械学習制御入力530及び機械学習変動503は、自動ゲームテストモジュール504により実施されると、これまで特定されていなかったバグを発見できる。
【0042】
バグ分類モデル532は、バグの発生に関連する一般則を、モデルまたは機械学習アルゴリズム526に応じて様々な様式で表す。例えば、一般則は、重み、グラフ連結性、クラスタリング、分布、確率、及び他の関係性により表され得る。これらを基に、ルール548、カテゴリ550、ゲームシナリオ552、及びシステムシナリオ554が構築され得る。ルール548は、特定のバグを引き起こす条件の集合を定義する。例えば、「キャラクタAがマップ上の(x、y、z)にいる時に、X-下-下-三角が入力されると、バグが発生する」といったルールが、ルール548内に含まれ得る。カテゴリ550は、特定のバグを引き起こす条件のカテゴリを定義する。例えば、カテゴリは、バグを引き起こすと判明した制御入力の領域の線引きを行い得る。
【0043】
ゲームシナリオ552及びシステムシナリオ554はさらに、バグの原因となるビデオゲームまたはシステムまたはネットワークのいずれかのシナリオに関連するルールまたはカテゴリを特定する。例えば、AIキャラクタがジャンプしようとすると、AIキャラクタが世界を通り抜けるゲームシナリオ552が存在可能である。ゲームシナリオ552は、必ずしもプレーヤの入力により生成されるとは限らないバグを特定するのに役立ち得る。さらに、システムシナリオ554は、いくつかのバグの原因となるシステムパラメータ及びネットワークパラメータの状態を説明する。例えば、システムシナリオ554は、70ミリ秒を超えるレイテンシ、オーバークロックされたCPU、及び60FPSのレンダリングを伴うゲームセッションにより、プレーヤが仮想世界を通り抜けることが引き起こされると、特定できる。当然ながら、ルール548、カテゴリ550、ゲームシナリオ552、システムシナリオ554のそれぞれの間には、一方が他方に関連するまたは依存するように、遅延が存在し得る。
【0044】
バグ実現モジュール508は、バグ実現制御入力556及びバグ実現システムパラメータ520を含むバグ実現ライブラリ512を含むようにもでき、バグ実現制御入力556及びバグ実現システムパラメータ520は、実行されると様々なバグを再現する。ビデオゲームアプリケーション538の新たなビルドがテストされる場合、以前テスターまたは機械により特定されたバグの存在に関して新たなビルドをテストするために、バグ実現モジュール508が使用され得る。このようにして、ゲームテスター501が以前のビルドからバグの再作成を試みる必要なく、開発者は、以前特定されたバグを自動的にテストすることが可能となった。
【0045】
図6は、自動ゲームテストモジュール504で自動ゲームセッションと並行して実行される変動パッケージ606を、変動実施モジュール536が作成する方法の概念図を示す。入力変動600は、自動ゲームセッションのために、自動ゲームテストモジュール504へ送信され、自動ゲームテストモジュール504により実行される制御入力のシーケンス及びタイミングの変動を含む。例えば、シーケンス600aは、ゲームテスターが特定したプレーヤ生成制御入力シーケンスと同一であってもよい。従って、シーケンス600aは、バグを引き起こすと予想される制御として機能し得る。シーケンス600bは、三角の入力がより早い時間に時間的にシフトされるという点で、シーケンス600aとは異なる。入力変動600は、バグ実現条件510の確立に役立ち得る。例えば、シーケンス600bがシーケンス600aと同じバグを返す場合、シーケンス600aとシーケンス600bとのタイミングの差は、バグの原因として決定的ではないと判断され得る。その一方で、シーケンス600bがシーケンス600aのようなバグを返さない場合、シーケンス600aと600bとの間で他の全てが等しく保たれているならば、三角を入力するタイミングが決定的にバグの原因となり得る。
【0046】
さらに、シードデータ変動602は、自動ゲームセッションを初期化するシードデータを変化させることが示される。例えば、シードデータ602aとシードデータ602bは、それらの第1のシードと第2のシードが異なる。シードデータに変動を導入することは、シードデータがバグの発生に影響を与えるか否か、及びどのように影響するかを特定することにおいて、バグ実現モジュール508を支援し得る。例えば、シードデータ602aとシードデータ602bが異なるバグの結果を返す場合、第1のシードまたは第2のシード、あるいはその両方が、バグの発生原因として関係があると推測され得る。変動実施モジュール536の第2の反復では、シードデータ変動を導入して、バグに因果関係のあるシードが分離され得る。
【0047】
さらに、変動実施モジュール536は、自動テストセッション中にシミュレートされるシステム変動604において、システムパラメータ及びネットワークパラメータに変動を導入するように構成される。システム変動604では、第1の列はレイテンシ、第2の列はジッタ、第3の列はCPUクロック、及び第4の列はGPUクロックを表し得る。様々なレイテンシ特性、ジッタ特性、CPU及びGPU構成、並びに他のハードウェア変動及びネットワーク変動を有するビデオゲームをプレーヤがプレイする様々な実世界のゲーム条件を模倣するために、システム変動604は使用され得る。システム変動604は、実世界のゲーム条件をエミュレートするだけでなく、そのような条件がバグの発生原因として関係があるか否かを特定するのにも役立つ。変動実施モジュール536は、入力変動600、シードデータ変動602、及びシステム変動604を組み合わせて、複数の変動パッケージを生成する。自動ゲームセッションが自動ゲームテストモジュール504により開始される場合、オペレーティングシステム542は、自動ゲームセッションの実行中に、変動パッケージ606により指定された条件の集合を実施できる。
【0048】
図7は、一実施形態による、複数の自動ゲームセッション700を実行している自動ゲームテストモジュール504の概念図を示す。自動ゲームセッション700のそれぞれは、ゲームエンジン540を作動させるオペレーティングシステム542と通信するシステム708上で実行される。次に、ゲームエンジン540は、ビデオゲームセッション700のためにビデオゲームアプリケーション538を実行する。ビデオゲームセッション700が実行される間、制御入力702、ゲーム状態704、及びシステムパラメータ706が、ビデオゲームアプリケーション538と同期して実施される。例えば、制御入力702は、ゲームエンジン540の入力ソケットを介してビデオゲームアプリケーション538の実行中に実施され得る。制御入力702は、変動実施モジュール536により変更された、機械学習制御入力530またはプレーヤ生成制御入力516であってもよい。さらに、制御入力702には、マルチプレーヤゲームの複数の仮想プレーヤからの制御入力が含まれ得る。例えば、プレーヤ生成スナップショットファイル514は、テスト中の各プレーヤの制御入力シーケンス516を含み得る。機械学習モジュール506は、ただ1人のプレーヤまたは複数のプレーヤの制御入力を変化させる機械学習制御入力530を生成するように動作可能である。その結果、自動ゲームテストモジュール504は、ある種のプレーヤインタラクションがバグを引き起こすマルチプレーヤゲーム及びシナリオに関連するバグをテストし得る。
【0049】
シードデータなどのゲーム状態704はまた、ビデオゲームアプリケーションが事前定義されたシードデータで初期化されるように、ゲームエンジンを介して実施され得る。変動実施モジュール536により変更された機械学習変動503などのシステムパラメータ706は、オペレーティングシステム542レベルまたはシステム708レベルで実施され得る。
【0050】
自動ゲームセッション700の各実行中に、バグレポータ546は、オペレーティングシステム542レベルまたはゲームエンジン540レベルで実行される。バグレポータ546は、事前定義されたバグまたはまだ特定されていないバグの発生を自動的に監視し検出するように構成される。自動ゲームセッション700の各実行は、対応する自動ゲームセッションレポート710を生成し、これは、バグの発生の有無に関連する機械生成スナップショットファイルを含む。このようにして、バグを引き起こす原因の条件及び境界をよりよく理解するために、任意の数の自動ゲームセッション700が開始され得る。条件及びその境界を理解することで、開発者はより効率的なやり方でバグに対処することができる。
【0051】
ビデオゲームアプリケーション538などのゲームアプリケーションは、一般的に、複数の多様な機能を提供するゲームエンジンを必要とする。通常のゲームエンジンは、ゲーム環境の様々な態様または特徴に対処し、例えばプレーヤ入力に応じてどのように動作するかを定義するためのサブ構成要素を多数有する。これらのサブ構成要素のうちのいくつか、すなわち「ゲームエンジンノード」と称されるものには、タイミングノード、物理ノード、人工知能(AI)ノード、ゲームロジックノード、ゲーム力学ノード、レンダリングノード(これ自体はいくつかのノードに細分され得る)、マップノード、アニメーションノード、資産管理ノード、ネットワークノード、通信ノード、制御入力ノード、及びチャットノードなどが含まれる。レンダリングノードは、様々なレンダリング機能(例えばDirectX(登録商標)またはOpenGL(登録商標)のような典型的なグラフィックスAPIなど)を指し得、これには、カメラ変換、投影、クリッピング、照明、陰影、スムージングなどが含まれる。さらに、ゲームエンジンは、ソーシャルネットワークインタラクティビティノード、ゲームヘルプノード、ゲーム内リソースサーフェシングノード、ゲームプレイ共有またはブロードキャストノードなど、ゲームプレイに役立つ追加のサービスを提供し得る。
【0052】
いくつかのゲームエンジンの実施形態では、ゲームエンジンは、コンピュータ、サーバ、コンソール、または他のデバイスなどの単一の計算ノードにより提供され得る。別の実施形態では、計算ノードは、ゲームエンジンのためにサーバにより展開される仮想マシンであり得、他のゲームエンジン及びそこで実行されるゲームアプリケーションにサービスを提供するために展開される他の仮想マシンと共に展開される。その結果、ゲームエンジンのサブ構成要素のそれぞれは、1つの計算ノード、例えば1つのサーバ、仮想マシン、デスクトップコンピュータ、またはコンソールにより実行されます。ゲームエンジンと計算ノードとのこの1対1または多対1のアーキテクチャは、ゲームエンジンの計算要求が固定ではなくむしろ融通が効き得るため、ゲームエンジンに望ましいパフォーマンスも、計算ノードの使用に望ましい効率も、提供することができない。つまり、ゲームエンジンは、任意の所与の時点で、同じゲーム内の他の任意の所与の時点とは異なる処理、グラフィックス、メモリ、及びネットワークの要求を有し得る。
【0053】
例えば、大規模マルチプレイヤーオンラインロールプレイングゲーム(MMORPG)では、関連するゲームエンジンのコンピューティングニーズは、数ある要因の中でも、ゲーム内で発生するアクションの種類(例えばプレーヤが互いに関わり合うか否か)、プレーヤの数(例えば現在10人のプレーヤがいるが、近い将来100人のプレーヤになるか否か)に依存し得る。ゲームエンジンが、例えばサーバ内など、1つのコンピューティングノードでリソースを供給されている場合、関連するハードウェアが、望ましいパフォーマンスを維持しながら、所望されるだけ効率的に実行できるウィンドウは、狭い可能性がある。例えば、MMORPGにおいて、プレーヤが少なく、インタラクションがない場合、関連する計算ノードはフルに活用され得ないが、プレーヤが多数で、相互に関与する場合、関連する計算ノードのパフォーマンスは低下し得、これにより、サービス品質の低下、ラグ、レンダリング品質問題、グリッチが生じる。
【0054】
これらの考慮事項は、まさに、数百または数千以上のゲームセッション及び関連するゲームエンジンが一度にインスタンス化され得る自動ゲームテストのコンテキストに関連する。例えば、複数の自動ゲームセッションをインスタンス化するゲームエンジンの計算要求は、例えばある時は資源を耕作し、別の時はAIキャラクタと戦うなど、ゲーム環境及びその中のオブジェクトの動作に応じて、時間依存的に変化する。さらに、コンピューティング要求の種類は、時間またはゲーム状態に応じて変化し得る。例えば、ゲームエンジンの処理、グラフィックス、メモリ、及びネットワークの要求は、プレーヤがフリースローを打っているシーンと、フリースローをミスした後に、相手チームがボールをリバウンドして、ボールを伴ってコートの反対側へ移動するシーンとでは、異なり得る。さらに、実行中に複数のプレーヤの制御入力を同時に実施することでマルチプレーヤゲームプレイを自動化するように、自動ゲームセッションが使用される。マルチプレーヤ入力の存在により、対応するゲームエンジンのコンピューティング要求は、例えばプレーヤの数及びそれらのインタラクションのレベルに応じて、さらに融通性が高くなる。従って、改良されたゲームエンジンアーキテクチャは、自動ゲームテストモジュール504の自動ゲームセッションを実行し得る。
【0055】
図8は、一実施形態による、複数の自動ゲームセッション700を実行するために分散型ゲームエンジン800を利用する自動ゲームテストモジュール504のアーキテクチャの図を示す。ビデオゲームアプリケーション538は、複数のゲームエンジンノード800a及びゲームエンジンマネージャ800bを有する分散型ゲームエンジン800上で実行される。ゲームエンジンノード800aのそれぞれは、概して、分散型ゲームエンジン800のサブ構成要素またはサブ構成要素の一部を提供するものである。いくつかの実施形態では、ゲームエンジンノード800aは、それが分散型ゲームエンジン800に提供する機能に基づいて、事前定義され得る。例えば、ゲームロジック、ゲームメカニズム、ゲームタイミング、AI、物理学、入力マッピング、スクリプティング、ネットワーク、オーディオ、グラフィックス、アニメーション、資産管理、並びにゲーム内サービスのそれぞれに関連する機能を実行するように定義または特化されたゲームエンジンノード800aが存在し得る。例えば、自動ゲームセッション700aの場合、ゲームエンジンノード1(GEN1)は、例えば、グラフィックスまたは資産管理に関連するいずれの機能でもなく、ゲームロジックサブ構成要素/機能の処理に特化され得る。一方、ゲームエンジンノード2(GEN2)はAIを独占的に処理するように定義され得、GEN3は物理学用、GEN4はスクリプティング用、GEN5はグラフィックス用、GEN6はスクリプティング用、GENnはリアルタイムゲームブロードキャスティングなどのサービス用に、定義され得る。
【0056】
ゲームエンジンノード800aのそれぞれは、ゲームエンジンマネージャ800bにより、各ゲームエンジンノード800aの計算要求に応じて、ラック804のサーバ802内の計算ノードとマッチングされる。ゲームエンジンノード800aは、UDPまたはTCPまたはある他のプロトコルを介して計算ノードと通信できる。サーバ802及びラック804は、データセンターなどにローカライズされ得る。ゲームエンジンマネージャ800bは、ゲームエンジンノード800aと割り当てられた計算ノードとの間のバスとして機能する。ゲームエンジンマネージャ800bは、データの送受信、バッファリング、ルーティング、スレッディング、キューイング、中継、スティッチングなどに関連する様々なタスクを実行する。このようにして、ゲームエンジンマネージャ800bは、ゲームエンジンノード800aそれぞれの動作が所望の計算ノードにより実行され、結果の戻り値または他の結果が、ビデオゲームアプリケーション538で実施されるように適切なゲームエンジンノード800aに返信されることを、確実にする。さらに、ゲームエンジンマネージャ800bは、ゲームエンジンノード800a間の通信を管理して、ビデオゲームアプリケーション全体の適切な機能を確実にする。
【0057】
図8に示されるように、ゲームエンジンノード1すなわちGEN1は、ラック1のサーバ1上に配置されたハードウェアCPUに関連付けられた計算ノード806に割り当てられる。ゲームエンジンマネージャは、例えば、ゲームロジックの計算ニーズに対処する適合性を計算ノード806が有することから、計算ノード806を供給し得た。
【0058】
一方、自動ゲームセッション700bも同様に、複数のゲームエンジンノードGEN1~nを有する分散型ゲームエンジン800で実行され、GEN1~nのそれぞれは、分散型ゲームエンジン800の特定の機能またはサブ構成要素を処理するように割り当てられる。同じことがゲームセッション700nにも当てはまる。例えば、自動ゲームセッション700bのGEN1の動作と自動ゲームセッション700nのGEN1の動作は両方とも、自動ゲームセッショ700aのGEN1と同様に、ラック1のサーバ1の計算ノード806に割り当てられる。従って、計算ノード806は、GEN1、GEN2、及びGEN3のそれぞれが計算ノード806に要求するプロセスを実行する。自動ゲームセッション700a、700b、及び700nそれぞれのGEN2は、CPU2、GPU1、及び16ギガバイトのRAMでプロビジョニングされた仮想マシンVM1である計算ノード808に割り当てられる。ゲームエンジンマネージャ800bは、例えば AIを実行するように機能するGEN2の予想されるニーズに基づいて、VM1を特定し得た。いくつかの実施形態では、ゲームエンジンマネージャ800b自体がVM1の配備を要求し得た、または自動ゲームテストモジュール504が要求し得た。いくつかの実施形態では、計算ノードに割り当てられたゲームエンジンノードのそれぞれに関して、計算ノードにより実行されるように要求された動作が実質的に類似する場合、計算ノードは、ゲームエンジンノードごとに要求された動作を毎回実行するのではなく、要求された動作を1回実行して、ゲームエンジンノードのそれぞれに結果を返す可能性がある。
【0059】
自動ゲームセッション700それぞれのGEN3は、GPU1に関連付けられた計算ノード812に関連付けられることが示され、一方、GEN4は、GPU2に関連付けられた計算ノード814に関連付けられる。GPU1とGPU2は、異なる構成から成り得る。例えば、GPU1は、GPU2と比べて、コア数が多くあり得、クロック数が高くあり得、メモリ数が多くあり得、またはメモリ帯域幅が広くあってもよい。この事例では、GEN3がより多数の計算またはより複雑な計算を要求する場合、GEN3の動作は、GPU1に割り当てられ得た。GEN4は、より少ない計算またはより複雑ではない計算を要求し得るため、GEN4の動作は、GPU2に割り当てられ得た。
【0060】
GEN5は、CPU3、GPU2、及び8ギガバイトのRAMでプロビジョニングされた仮想マシンVM2である計算ノード810に割り当てられたことが示される。GEN5は、ゲームエンジンマネージャ800bにより、GEN5のコンピューティングニーズに一致するように計算ノード810に割り当てられ得た。自動ゲームセッション700のGEN6は、ラック3のサーバ3上のホストオペレーティングシステムとインターフェースするコンテナ1~Nを含むコンテナ型計算ノード816に割り当てられることが示される。具体的には、自動ゲームセッション700aのGEN6はコンテナ1に割り当てられ、自動ゲームセッション700bのGEN6はコンテナ2に割り当てられ、自動ゲームセッション700nのGEN6はコンテナNに割り当てられる。コンテナ1~Nのそれぞれは、ソフトウェア及び従属物のコンテナ型ユニットであり、例えば関連するゲームエンジンノードの動作を処理するソフトウェアを含む。各コンテナは、コンテナランタイムで実行され、これは、サーバのオペレーティングシステムとインターフェースする。こうした意味で、コンテナのそれぞれに関して、オペレーティングシステムが仮想化されるが、仮想マシンの場合は、ハードウェアが仮想化される。
【0061】
図9A及び図9Bは、様々な実施形態による、機械学習モジュール506、自動ゲームテストモジュール504、及びバグ実現モジュール508が連携して、以前または新たに特定されたバグが実現され得る条件の集合を特定する方法を概念的に示す。バグ実現条件は、所与のバグの発生に因果関係のある条件の範囲または領域を指す。条件は、制御入力、システムパラメータ、ネットワークパラメータ、及びゲーム状態を指し、これらは、ゲームアプリケーションの実行中に存在または共存させられると、個別にまたは集合的に、所与のバグの原因となる。従って、バグ実現条件は、バグを引き起こす、または引き起こす可能性のある条件の全ての組み合わせの集合として、多次元空間で概念化され得る。ここで、バグ1実現条件900は、特定のシステムパラメータ及びネットワークパラメータ、並びに特定のゲーム状態で制御入力が実行された場合に、バグ1を引き起こす、または引き起こす可能性がある制御入力の組み合わせの集合を指す。機械学習モジュール506、自動ゲームテストモジュール504、及びバグ実現モジュール508は、バグ1の実現条件を特定、線引き、または概算するように連携して作動し、開発者がバグの根本原因を理解してより高品質でより効果的な修正を行うのを支援する。開発者と通信するために、バグ1実現条件900は、バグ実現モジュール508内のルール、カテゴリ、及びシナリオに関して形式化され得る。下記は、明確にするために、バグ1実現条件900を埋める機械学習制御入力に関して説明される。ただし、機械学習されたシステムパラメータ及びネットワークパラメータ、並びにゲーム状態データを使用して、残りのバグ1実現条件を囲い込むことを、同様に施行する原理が適用される。
【0062】
1人または複数のゲームテスターがバグを特定すると、プレーヤ生成制御入力902が、スナップショットファイルに記録され、機械学習モジュール506により処理される。機械学習モジュール506は、バグ分類モデルを使用して機械学習制御入力904を生成し、次に、バグ1が発生するか否かを検出するために、自動ゲームテストモジュール504により機械学習制御入力904が実施される。ここで、機械学習制御入力904の一部がバグ1を引き起こす。結果は、機械学習モジュール506にフィードバックされ、バグ分類モデルが更新され、新たな機械学習制御入力906の集合が生成される。ここで、予想され得るように、第2の機械学習制御入力906の集合の大部分は、第1の機械学習制御入力904の集合よりもバグ1を引き起こす。学習及びテストのプロセスは、例えばバグを引き起こす新たな制御入力の集合が見つからなくなるまで、機械学習制御入力908などに対して繰り返される。次に、バグ1実現条件900に起因し得るルール、カテゴリ、またはシナリオを抽出するように、バグ1実現条件900は、バグ実現モジュール508により処理される。
【0063】
図9Bでは、バグ1実現条件900の分析中に、学習及びテストプロセスにより新たなバグ2が発見される。例えば、機械学習制御入力904は、自動ゲームテストモジュール504によりテストされ、バグ1とバグ2の両方をトリガーすることが判明する。この場合、機械学習モジュール506、自動ゲームテストモジュール504、及びバグ実現モジュール508は、バグ1実現条件900の囲い込みに加えて、またはそれと並行して、バグ2実現条件901に関して同じ囲い込みを行い得る。機械学習制御入力906~914は、機械学習モジュール506により生成され、自動ゲームテストモジュール504によりテストされる。次に、結果得られるバグ2実現条件901の範囲は、バグ実現モジュール508によりルール、カテゴリ、及びシナリオに形式化され、これには、バグ1とバグ2の両方のルール、カテゴリ、及びシナリオが含まれる。
【0064】
図10は、一実施形態による、カオステストまたはショットガンテストを介して新たなバグを発見する方法を示す。既知のバグまたはプレーヤが特定したバグのバグ実現条件を定義することに加えて、ここに提示されるシステム及び方法は、未特定のバグを自動的に検出し得る。いくつかの実施形態では、未発見のバグを発見するために、カオステストまたはショットガンテストが提供される。ここで、カオステストモジュール1001は、カオス入力1002a~gの集合を生成する。カオス入力1002a~gのそれぞれには、ランダムに、確率的に、またはカオス的に定義された入力の集合が含まれ得る。別の実施形態では、カオス入力1002a~gは、ゲームアプリケーションにストレスを与えるように設計された既知の入力シーケンスまたは認知可能な入力シーケンスから成り得る。いずれにせよ、カオス入力1002a~gのうちのカオス入力1002cは、自動ゲームテストモジュール504により検出されたように、バグ3を引き起こすことが示される。自動ゲームテストモジュール504は、結果を機械学習モジュール506に中継し、機械学習モジュール506は、よりターゲットを絞った機械学習入力1004a及び1004bを生成する。学習及びテストプロセスは、バグ3実現条件1000の範囲が定義され得るまで続く。いくつかの実施形態では、カオステストモジュール1001は、バグ3または他のバグを誘発する他の方法を見つけるために、カオス入力を生成し続け得る。その結果、ここで提示されるシステムの方法は、これまで判明していなかったバグを自動的に特定することがさらに可能となる。カオステストモジュール1001、機械学習モジュール506、自動ゲームテストモジュール504、及びバグ実現モジュール508を使用して、これまで判明していなかったバグを特定するプロセスは、サービス(例えばサービスとしてのテスト、TaaS)として、開発者に提供され得、これについては下記でさらに詳しく論述される。
【0065】
図11は、新たなビルドまたはバージョンのゲームでの、以前特定されたバグの自動テストの概念図を示す。バグ実現条件1100の円は、第1のビルドの制御入力、ゲーム状態、システムパラメータ、及びネットワークパラメータの空間におけるバグ実現条件1100を表すと仮定する。さらに、バグ実現条件1100の大部分と効果的に重複し、かつ第1のビルドでバグをトリガーする制御入力1101a~dの4つのカテゴリを、バグ実現モジュールが定義したと仮定する。制御入力1101a~dのそれぞれが再び第2のビルドでバグを引き起こす場合、バグが修正されていなかった可能性がある。代わりに、制御入力1101a~dの一部のみがバグを引き起こす場合、バグが部分的に修正された可能性がある。あるいは、制御入力1101a~dのいずれも、それらが第2のビルドで実施された時にバグを引き起こさない場合、バグは修正された可能性がある。従って、第2のビルドが構築されると、前のビルドの以前のバグは、迅速かつ効率的に自動テストされ得る。
【0066】
図12は、一実施形態による、サービスとしてのテスト(TaaS)の一部として、第1のゲームで判明したバグ実現条件を、第2のゲームに適用し得る方法を示す。図12では、第1のゲームのバグ実現条件1100は判明しており、制御入力1101a~dを使用して再現可能である。サービスとしてのテストプロセスの一部として、第1のゲームタイトルの開発者とは異なる開発者により作成され得る第2のゲームタイトルに、制御入力1101a~dが適用され得る。図12では、制御入力1101a~cが部分的または全体的にバグを引き起こすことが示されるが、制御入力1101dは、ゲームタイトル2のバグ実現条件の範囲外であり、よってバグの原因ではないことが示される。
【0067】
図13は、一実施形態による、サービスとしてのテスト(TaaS)に使用可能なプラットフォームの概念図である。TaaSは、ゲーム開発者が、人間のゲームテスターのチームを必要とせずに、ビデオゲームのバグをテストし、バグ修正を有効化することを可能にすることを意図したものである。ここで、開発者1300は、第1のビルドのゲームタイトル1302を含むゲームを、TaaSサーバ1303に単に投入する。ゲームタイトル1302は、好適なゲームエンジン540で実行されるビデオゲームアプリケーション538として実行される。ゲームエンジン540は、図8に示される方法で実施される分散型ゲームエンジンであってもよい。好適なオペレーティングシステム542が、ゲームエンジン540に供給される。ゲームタイトル1302が、様々なゲームエンジン、様々なオペレーティングシステム、またはこれらの組み合わせで実行されることが意図される場合、自動ゲームテストモジュール504は、各種類のゲームエンジン540、各種類のオペレーティングシステム542、及びこれらの所望の組み合わせに応じて、ビデオゲームアプリケーション538の自動ビデオゲームセッションを開始し得る。自動ゲームセッションは、並行して実行されてもよく、そうでなくてもよい。
【0068】
ゲームタイトル1302は、自動ゲームテストモジュール504により数多くの方法でテストされ得る。例えば、TaaSは、カオステストモジュール1001を介して、ビデオゲームアプリケーション538のカオステストを提供し得る。カオステストを介して特定されたいずれのバグも、スナップショットデータベース502に記録される。さらに、開発者1300が以前にバグを特定してり、バグを引き起こしている状況を理解したい場合、開発者1300は、ビデオゲームアプリケーション538がTaaS上で実行されている間にビデオゲームアプリケーション538とインタラクトして、手動でバグを引き起こし得る。このようなインタラクションの結果としてスナップショットファイルが生成され、バグの原因となった制御入力がスナップショットデータベース502に記録される。次に、機械学習モジュール506は、同様にバグの原因となる新たな機械学習制御入力530及び機械学習変動503を生成し得る。
【0069】
さらに、ビデオゲームアプリケーションは、バグ実現モジュール508のバグ実現条件510、バグ実現制御入力556、及びバグ実現システムパラメータ520に対して、テストされ得る。バグ実現モジュール508は、このビデオゲームの前のビルドで、ゲームタイトル1302と同様の特徴を有する異なるビデオゲームで、または共通のゲームエンジンを有する異なるゲームで、バグを引き起こすことが判明している様々な制御入力、システムパラメータ、及びネットワークパラメータを提供し得る。さらに、TaaSサーバ1303は、スナップショットデータベース502のスナップショットファイルに生テストデータが生成されたバグの発見に関して、1人以上の人間のゲームテスターと通信し得る。
【0070】
上記の方法で特定されたいずれのバグも、バグを引き起こした制御入力1301(並びにシステムパラメータ及びネットワークパラメータ)と共に、スナップショットデータベースに記録される。これらは、開発者1300と共有される。さらに、これらのバグは、再生モード302、自動再現モード304、または手動再現モード306のいずれかで、バグ再現モジュール234を介して開発者1300のために再現され得る。このようにして、開発者は、バグ再現GUI300などのGUIで、いずれの発見されたバグも、バグに関連するソースコード、ゲーム状態、制御入力、及びビデオ構成要素と見ることができる。
【0071】
スナップショットデータベース502は、機械学習モジュール506によりアクセスされ、以前特定されたバグまたは新たなバグの原因になると予測される機械学習制御入力530及び機械学習変動503が生成される。次に、これらの機械学習制御入力530及び機械学習変動503は、自動ゲームテストモジュール504でテストされ、バグレポータ546は、以前特定されたバグまたはこれまで未特定のバグが発生したか否かを検出する。自動ゲームテストモジュール504の結果は、スナップショットデータベース502に再び記録される。ここでもまた、機械学習制御入力530及び機械学習変動503は開発者1300に提供され得、これにより、開発者は、バグの原因となるさらなる制御入力、システムパラメータ、及びネットワークパラメータを知ることができる。さらに、開発者は、新たなバグと、新たなバグを引き起こした制御入力、システムパラメータ、及びネットワークパラメータを知ることができる。
【0072】
学習及びテストのプロセスを繰り返して、バグ分類モデル532は改良され得、これにより、ルール548、カテゴリ550、ゲームシナリオ552、及びシステムシナリオ554を介して、バグの原因に関連する一般則あるいは通則がバグ実現モジュール508により抽出され得る。次に、バグ実現条件510は、開発者1300に提供され、これは、バグを引き起こす条件を特定するのに有用である。これにより、開発者1300は、バグの根本的な原因をよりよく理解することが可能となり、よって、より高品質の修正を適用することができる。開発者1300がゲームタイトル1304の第2のビルドでバグの修正を試みた後、ゲームタイトル1304は、検証及びテストのために、再びTaaSサーバ1303に投入され得る。バグが修正されたか否かを確認するために、前のビルドである第1のビルドでバグを引き起こしたことが判明している特定の制御入力1301が、自動ゲームテストモジュール504でテストされ得る。必ずしも前のビルドでバグを引き起こすものとしてテストされていないが、ルール548、カテゴリ550、ゲームシナリオ552、及びシステムシナリオ554を使用すると予想される追加の制御入力及びシステムパラメータが、バグ実現モジュール508から生成され得る。このようにして、開発者1300は、バグが修正された新たなビルドの動作を、迅速にテストすることが可能となる。
【0073】
図14は、サーバシステム200、サーバシステム500、サーバ802のうちの1つ、またはTaaSサーバ1303など、本開示の様々な実施形態の態様を実行するために使用され得る例示的なデバイス1400の構成要素を示す。このブロック図は、デバイス1400を示し、デバイス1400は、本開示の実施形態を実施するのに好適なパーソナルコンピュータ、ビデオゲームコンソール、パーソナルデジタルアシスタント、サーバ、または他のデジタルデバイスを組み込むことができる、またはこれらであってもよい。デバイス1400は、ソフトウェアアプリケーションと任意でオペレーティングシステムとを作動させる中央処理装置(CPU)1402を含む。CPU1402は、1つ以上の同種または異種の処理コアで構成され得る。例えば、CPU1402は、1つ以上の処理コアを有する1つ以上の汎用マイクロプロセッサである。自動ゲームテスト、機械学習動作、及びバグ実現プロセスなどの高度並列及び計算集約的アプリケーションに特に適合したマイクロプロセッサアーキテクチャを有する1つ以上のCPUを使用して、さらなる実施形態を実施することができる。デバイス1400は、ゲームセグメントをプレイするプレーヤのローカル(例えばゲームコンソール)に設置され得る、またはプレーヤから遠隔に存在し得る(例えばバックエンドサーバプロセッサ)。
【0074】
メモリ1404は、CPU1402が使用するアプリケーション及びデータを格納する。ストレージ1406は、アプリケーション及びデータ用の不揮発性ストレージ及び他のコンピュータ可読媒体を提供し、ストレージ1406には、固定ディスクドライブ、取り外し可能ディスクドライブ、フラッシュメモリデバイス、及びCD‐ROM、DVD‐ROM、Blu‐ray(登録商標)、HD‐DVD、もしくは他の光学記憶デバイス、並びに信号伝送及び記憶媒体が含まれ得る。ユーザ入力デバイス1408は、1人以上のユーザからのユーザ入力をデバイス1400へ通信し、ユーザ入力デバイス1408の例には、キーボード、マウス、ジョイスティック、タッチパッド、タッチスクリーン、スチルレコーダ/カメラもしくはビデオレコーダ/カメラ、ジェスチャを認識する追跡デバイス、及び/またはマイクロフォンが挙げられ得る。ネットワークインターフェース1410は、デバイス1400が電子通信ネットワークを介して他のコンピュータシステムと通信することを可能にし、ローカルエリアネットワーク、及びインターネットなどの広域ネットワークにわたる有線通信または無線通信を含み得る。オーディオプロセッサ1412は、CPU1402、メモリ1404、及び/またはストレージ1406により提供される命令及び/またはデータから、アナログまたはデジタルのオーディオ出力を生成するように適合される。CPU1402、メモリ1404、データストレージ1406、ユーザ入力デバイス1408、ネットワークインターフェース1410、及びオーディオプロセッサ1412を含むデバイス1400の構成要素は、1つ以上のデータバス1422を介して接続される。
【0075】
グラフィックスサブシステム1420はさらに、データバス1422及びデバイス1400の構成要素と接続される。グラフィックスサブシステム1420は、グラフィックス処理装置(GPU)1416と、グラフィックスメモリ1418とを含む。グラフィックスメモリ1418は、出力画像の各ピクセルのピクセルデータを格納するために使用される表示メモリ(例えばフレームバッファ)を含む。グラフィックスメモリ1418は、GPU1416と同じデバイスに統合されてもよく、別個のデバイスとしてGPU1416と接続されてもよく、及び/またはメモリ1404内に実装されてもよい。ピクセルデータは、直接CPU1402からグラフィックスメモリ1418へ提供され得る。あるいは、CPU1402は、所望の出力画像を定義するデータ及び/または命令をGPU1416に提供し、これを基に、GPU1416は、1つ以上の出力画像のピクセルデータを生成する。所望の出力画像を定義するデータ及び/または命令は、メモリ1404及び/またはグラフィックスメモリ1418に格納され得る。実施形態では、GPU1416は、シーンの幾何学的構造、照明、陰影、質感、動き、及び/またはカメラのパラメータを定義する命令及びデータから、出力画像のピクセルデータを生成する3Dレンダリング機能を含む。GPU1416はさらに、シェーダプログラムを実行することができる1つ以上のプログラム可能実行ユニットを含み得る。
【0076】
グラフィックスサブシステム1420は、グラフィックスメモリ1418から画像のピクセルデータを定期的に出力して、ディスプレイデバイス1414に表示させる。ディスプレイデバイス1414は、デバイス1400からの信号に応じて視覚情報を表示することができる任意のデバイスであり得、これにはCRT、LCD、プラズマ、及びOLEDディスプレイが含まれる。デバイス1400は、ディスプレイデバイス1414に、例えばアナログ信号またはデジタル信号を提供することができる。
【0077】
現在の実施形態のゲームへのアクセス提供など、広範囲な地域にわたり配信されるアクセスサービスは、多くの場合、クラウドコンピューティングを使用することに留意されたい。クラウドコンピューティングとは、動的に拡張縮小可能で多くの場合仮想化されたリソースがインターネットを介したサービスとして提供される、コンピューティング様式である。ユーザは、ユーザをサポートする「クラウド」の技術的インフラストラクチャのエキスパートである必要はない。クラウドコンピューティングは、Infrastructure as a Service(IaaS)、Platform as a Service(PaaS)、及びSoftware as a Service(SaaS)などの異なるサービスに分類することができる。クラウドコンピューティングサービスは、多くの場合、ビデオゲームなどの共通のアプリケーションを、ウェブブラウザからアクセスするオンラインで提供するが、ソフトウェア及びデータは、クラウド内のサーバに格納される。クラウドという用語は、コンピュータネットワーク図におけるインターネットの描かれ方に基づいたインターネットの隠喩として使用され、複雑なインフラストラクチャを隠し持つことの抽象的概念である。
【0078】
インターネット上でプレイされるほとんどのビデオゲームは、ゲームサーバへの接続を介して作動する。通常、ゲームは、プレーヤからデータを収集し、収集したデータを他のプレーヤに配信する専用サーバアプリケーションを使用する。ユーザは、少なくともCPU、ディスプレイ、及びI/Oを含むクライアントデバイスにより、遠隔サービスにアクセスする。クライアントデバイスは、PC、携帯電話、ネットブック、PDAなどであってもよい。一実施形態では、ゲームサーバ上で実行されるネットワークは、クライアントが使用するデバイスの種類を認識し、採用する通信方法を調整する。別の事例では、クライアントデバイスは、HTMLなどの標準的な通信方法を使用して、インターネットを介してゲームサーバ上のアプリケーションにアクセスする。
【0079】
本開示の実施形態は、ハンドヘルドデバイス、マイクロプロセッサシステム、マイクロプロセッサベースまたはプログラム可能な一般消費者向け電気製品、小型コンピュータ、及びメインフレームコンピュータなどを含む様々なコンピュータシステム構成で実施され得る。本開示はまた、有線ベースネットワークまたは無線ネットワークを介してリンクされた遠隔処理デバイスによりタスクが行われる分散型コンピューティング環境においても、実施することができる。
【0080】
所与のビデオゲームまたはゲームアプリケーションは、特定のプラットフォーム及び特定の関連コントローラデバイス用に開発され得ることを、理解されたい。しかし、このようなゲームが、本明細書に提示されるようなゲームクラウドシステムを介して利用可能となる場合、ユーザは、別のコントローラデバイスでビデオゲームにアクセスすることができる。例えば、あるゲームは、ゲームコンソール及びその関連コントローラ用に開発された可能性があるが、ユーザは、キーボード及びマウスを利用して、パーソナルコンピュータからクラウドベースバージョンのゲームにアクセスすることができる。このようなシナリオでは、入力パラメータ設定により、ユーザが利用可能なコントローラデバイス(この事例ではキーボード及びマウス)により生成され得る入力から、ビデオゲームの実行で受け入れ可能な入力へ、マッピングが定義され得る。
【0081】
別の実施例では、ユーザは、タブレットコンピューティングデバイス、タッチスクリーンスマートフォン、または他のタッチスクリーン駆動デバイスを介して、クラウドゲームシステムにアクセスし得る。この場合、クライアントデバイス及びコントローラデバイスは、同じデバイス内に一緒に統合され、検出されたタッチスクリーン入力/ジェスチャにより入力が提供される。このようなデバイスでは、入力パラメータ設定により、ビデオゲームのゲーム入力に対応する特定のタッチスクリーン入力が定義され得る。例えば、ユーザがタッチしてゲーム入力を生成することができるタッチスクリーン上の位置を示すために、ビデオゲームの実行中に、ボタン、方向パッド、または他の種類の入力要素が、表示またはオーバーレイされ得る。特定の方向のスワイプまたは特定のタッチ動作などのジェスチャも、ゲーム入力として検出され得る。一実施形態では、タッチスクリーン上での制御操作にユーザを慣れさせるために、例えばビデオゲームのゲームプレイを始める前に、タッチスクリーンを介してゲームプレイに入力する方法を示すチュートリアルが、ユーザに提供され得る。
【0082】
いくつかの実施形態では、クライアントデバイスは、コントローラデバイスの接続ポイントとして機能する。すなわち、コントローラデバイスは、無線接続または有線接続を介してクライアントデバイスと通信し、コントローラデバイスからクライアントデバイスへ入力を送信する。次に、クライアントデバイスは、これらの入力を処理して、その後入力データを、ネットワーク(例えばルータなどのローカルネットワークデバイスを介してアクセスされるネットワーク)を介して、クラウドゲームサーバへ送信し得る。しかし、別の実施形態では、コントローラ自体が、このような入力をまずクライアントデバイスを通して通信する必要なく、ネットワークを介して入力を直接クラウドゲームサーバに通信する能力を有するネットワークデバイスであってもよい。例えば、コントローラは、ローカルネットワークデバイス(前述のルータなど)に接続して、クラウドゲームサーバとデータを送受信し得る。従って、クライアントデバイスは依然として、クラウドベースビデオゲームからビデオ出力を受信して、それをローカルディスプレイ上にレンダリングする必要はあるが、コントローラがクライアントデバイスを迂回して、ネットワークを介して直接クラウドゲームサーバに入力を送信することを可能にすることにより、入力レイテンシを短縮することができる。
【0083】
一実施形態では、ネットワーク化されたコントローラ及びクライアントデバイスは、特定の種類の入力を直接コントローラからクラウドゲームサーバへ、及び他の種類の入力をクライアントデバイスを介して送信するように構成され得る。例えば、コントローラ自体は別として、任意の追加のハードウェアまたは処理に依存しない検出による入力は、クライアントデバイスを迂回して、ネットワークを介して直接コントローラからクラウドゲームサーバへ送信することができる。このような入力には、ボタン入力、ジョイスティック入力、埋込型動作検出入力(例えば加速度計、磁力計、ジャイロスコープ)などが含まれ得る。しかし、追加のハードウェアを利用する、またはクライアントデバイスによる処理を要する入力は、クライアントデバイスによりクラウドゲームサーバへ送信され得る。これらは、ゲーム環境からキャプチャされたビデオまたはオーディオを含み得、クラウドゲームサーバへ送信する前にクライアントデバイスにより処理され得る。さらに、コントローラの動作検出ハードウェアからの入力は、キャプチャされたビデオと併せてクライアントデバイスにより処理されて、コントローラの位置及び動作が検出され得、これは次いでクライアントデバイスによりクラウドゲームサーバへ通信される。様々な実施形態によるコントローラデバイスはまた、クライアントデバイスから、または直接クラウドゲームサーバから、データ(例えばフィードバックデータ)を受信し得ることを理解されたい。
【0084】
本明細書で定義される様々な実施形態は、本明細書で開示される様々な特徴を使用する特定の実施態様に組み合わされ得る、または組み立てられ得ることを、理解されたい。従って、提供される実施例は、いくつかの可能な実施例にすぎず、様々な要素を組み合わせることでより多くの実施態様を定義することが可能な様々な実施態様に限定されない。いくつかの実施例では、いくつかの実施態様は、開示または同等の実施態様の趣旨から逸脱することなく、より少ない要素を含んでもよい。
【0085】
本開示の実施形態は、ハンドヘルドデバイス、マイクロプロセッサシステム、マイクロプロセッサベースまたはプログラム可能な一般消費者向け電気製品、小型コンピュータ、及びメインフレームコンピュータなどを含む様々なコンピュータシステム構成で実施され得る。本開示の実施形態はまた、有線ベースネットワークまたは無線ネットワークを介してリンクされる遠隔処理デバイスによりタスクが行われる分散コンピューティング環境においても、実施することができる。
【0086】
方法動作は特定の順序で説明されたが、修正されたゲーム状態を生成するための遠隔測定データ及びゲーム状態データの処理が所望の方法で実行される限り、動作間に他のハウスキーピング動作が実行されてもよく、または動作がわずかに異なる時間に起こるように調整されてもよく、またはシステム内に動作を分散することで、様々な処理関連間隔で処理動作が起こることを可能にしてもよいことを、理解されたい。
【0087】
1つ以上の実施形態はまた、コンピュータ可読媒体上のコンピュータ可読コードとして作ることもできる。コンピュータ可読媒体は、後でコンピュータシステムにより読み出され得るデータを格納できる任意のデータストレージデバイスである。コンピュータ可読媒体の例として、ハードドライブ、ネットクワーク接続ストレージ(NAS)、読み出し専用メモリ、ランダムアクセスメモリ、CD-ROM、CD-R、CD-RW、磁気テープ、並びに他の光学及び非光学データストレージデバイスが挙げられる。コンピュータ可読媒体には、コンピュータ可読コードが分散方式で格納され実行されるように、ネットワーク接続されたコンピュータシステムにわたり分散されたコンピュータ可読有形媒体が含まれ得る。
【0088】
前述の実施形態は、理解を明確にするためにある程度詳細に説明されたが、添付の特許請求の範囲内で特定の変更及び修正を実施できることは明らかであろう。従って、本実施形態は、限定ではなく例示としてみなされるべきであり、本実施形態は、本明細書に記載される詳細に限定されるべきではなく、添付の特許請求の範囲及び均等物の中で変更されてもよい。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14