VRアプリテストガイド - 自動化とパフォーマンス テスト、自動化、パフォーマンスはどれも、反復処理時間を最小限に抑え、開発者の効率を向上させる可能性のある重要な分野です。この3つのコンセプトは、開発ライフサイクル全体を通して、さまざまな方法で組み合わされます。以下のガイドでは、各コンセプトの概要と、VR開発プロセスの改善機会となる具体的な分野を説明します。
パフォーマンステストとテストの自動化に関するベストプラクティスと考慮事項を示す前に、以下のシナリオに関する基本的な知識があることを確認します。
ユニットテスト: コードの最小個別ユニット。例えば、独立したゲームオブジェクト、特定の関数、メソッドなどがあります。ユニットテストはコードベースの特定の部分のみを対象にしており、一般にテストスクリプトの最も単純な形式であるため、これまでずっと開発者はまずここから自動化が可能か検討を始めてきました。
統合テスト: システムの2つ以上のモジュールが組み合わされ、完全な環境、シーン、特定のインタラクションなどをテストします。これらはビルドしてエンジンに統合する必要があり、複数のシステムが関係します。そのため、これらのテストを自動化するには、ユニットテストよりも高度なスキルと多くのリソースが必要とされます。
エンドツーエンド/QAテスト: 通常は手動で実施します。これは従来、アプリケーションを最後まで、またはエンドツーエンド の特定のレベル/インタラクションをプレイすることを指します。QAは通常、社内またはサードパーティのQAチームによって管理され、完全なテスト計画の文書化も含まれます。これらのテストを自動化する方法はいくつかありますが、QAプロセスの一部を自動化するには、他の部分に優先的に使いたい高度なスキルとリソースが求められる場合があります。
Linkを使用したQuestアプリの反復処理時間の短縮 Questのゲームプレイとビジュアルスタイルをテストするには、USB 3.0の
推奨仕様を満たすLinkケーブル を使ってQuestアプリをデプロイしてください。Questアプリの特定のエレメントをテストする際には、ローカルのWi-Fi速度に頼ってPCからビルドをデプロイするよりも、PCに接続するほうが大幅に時間を節約できます。
とはいえ、Questアプリをスタンドアロンモードでもテストすることも忘れずに 前述の注記にあるように、PCモードでは実際のスタンドアロンエクスペリエンスが反映されません。CPU/GPUの影響を受けるパフォーマンスやアプリのエレメントはテストしないでください 。このようなテストは、深刻な課題、バグの見落とし、広範なパフォーマンスの問題につながる恐れがあります。Questでのデプロイとテストは、通常のテストプロセスの一環として実施する必要があります。
テストプロセスを自動化することは、特に長期的に見て有用ではありますが、自動化スクリプトの作成にとりかかる前に考慮すべきことや自動化に伴って必要となる技術要件があります。テストおよび自動化の戦略を設計する際に留意すべきいくつかの重要なポイントを以下に示します。
時間とスキルを考慮する: 緻密なテストスクリプトを作成した場合と手動テストを実施した場合とを比較した費用対効果を分析できるようにしておきましょう。テストが複雑になるほど、スクリプトの作成と保守にかかる時間と労力は多くなります。
すべてが検討済みなら、自動化を推奨: 上記の点を念頭に置き、ブートテストのように小規模なものでも、複雑なインタラクションや完全な環境でも、テストを自動化する技術力があるなら、自動化することによってチームは反復処理時間を大幅に短縮し、アプリで発生するバグや問題の数を最小限に抑えられるようになっていきます。
反復可能で、フォーカスしたいエレメントを自動化する: アプリの中の反復可能で、比較的複雑ではないセクションを自動化します。こうすることで、効率を最大にし、スクリプトが意図した結果を正確に出せるようになります。
エッジケースの機会をターゲットにする: 単一の手動テストに大量のロジスティクス作業が必要となる珍しいインスタンスや「異常」と見なされる可能性のあるユーザーフローに自動化を採用します。
自動化するテストの種類とリソースをフォーカスさせる場所が決まったら、以下のベストプラクティスを使用して、テスト自動化プロセスを進めます。
テストスクリプトから着想を得て自動化する: チームがすでにテストスクリプトを使用してQAプロセスを進めているのであれば、それを利用して反復可能なビルド領域を簡単に見つけることができ、最小限の労力で自動化できます。ソース管理と継続的統合を使う: 十分に開発がなされたMeta Quest VRアプリの公開を予定している場合は、ソース管理と継続的統合のシステムを活用することをおすすめします。こうしたシステムにはさまざまな種類やサイズがあり、チームの規模や作成するアプリの種類に合わせてシステムの規模を決めることをおすすめします。ソース管理システムについては、まずはGitとMercurialを、より複雑なアプリにはPerforceを見てみることをおすすめします。継続的統合システムについては、Jenkins、TeamCity、またはGitLabをご覧ください。アプリの2Dバージョンを推奨: テストの自動化を使用しているかどうかに関係なく、2D画面で簡単に実行できるアプリのバージョンを含めるようにします。こうすることで、特定の機能、変数、プロパティをテストする時間を大幅に節約でき、デバッグプロセスの速度を上げることができます。可能な場合はテレメトリを活用する: 特定のエラーの原因を分析する場合、テレメトリデータは長期的には極めて強力なものになります。どのテレメトリデータをログに記録するか計画するときは、アプリを使用したユーザーの一連の行動とうまくプレイし終えるまでに完了する必要があるユーザーフローについて考えてください。ビルドエラーの早期検出: CIシステム上でコードをコンパイルしてアセットビルドを実行すれば、新しい変更がコミットされ次第すぐに問題を検出できます。これらのエラーについてプロアクティブにチームに警告することで、競合を回避し、これらの問題によって引き起こされる可能性のある潜在的な致命的バグを防ぐことができます。パフォーマンステストに強く推奨: オンデバイス自動化はパフォーマンスのモニタリングに特に有効です。新しい変更は意図せずパフォーマンスに悪影響を及ぼす可能性がありますが、できるだけ早くこれを検出しておけば、原因が判明したときに非常に修正しやすくなります。パフォーマンスを長期的に監視することで、パフォーマンスを最適化するためのアップデートが有効であることを見届けることもできます。アプリのパフォーマンステストの詳細については、以下を参照してください。デバイス上でイベントをトリガーする: VRヘッドセットで特定のイベント(「キャラクターにX界に移動するよう指示し、キャラクターをYの位置に移動する」など)をトリガーします。ADBでパフォーマンス特性を調べ、イベント中に特定のチェックを実行します。ジャンルによらず、Meta QuestやQuest 2など、スタンドアロンのMeta Questヘッドセットをターゲットとするアプリの成功には、パフォーマンスの最適化が不可欠です。パフォーマンスの最適化を意識して開発プロセスを計画する際の、重要な考慮事項を以下に示します。
パフォーマンス予算: VRアプリがフレームレートを満たしていることを確認する際には、システムのさまざまな部分と割り当てるパフォーマンス予算を文書化することを検討するようおすすめします。こうすることで、意思疎通が明瞭になり、開発ライフサイクル全体を通じた優先順位付けに役立ちます。
パフォーマンスKPI: 予算に加えて、アプリのパフォーマンスにKPIを設定することもできます。これには、起動時間、特定のインタラクションに必要な時間、UIの応答、シーン間のナビゲーションなどの特定のベンチマークを含めることができます。
スレッド管理: これはアーキテクチャに関する決定と見なされてはいますが、重要なエレメントを前景に配置し、重要性の低いエレメントがメインスレッドをブロックせずに実行されるように注意します。
当社では、アプリのパフォーマンスのモニタリング、分析、最適化のための開発者ツールスイートの作成および改良を継続的に実施しています。これらのツールの主な特長を以下に示しますが、詳細については
「モバイル最適化ツール」ページ もご覧ください。
OVRメトリックツール : フレームレート、熱、GPU/CPUスロットリング値といったアプリとデバイスに関するデータを提供するリアルタイムグラフィックオーバーレイを使用して、モバイルアプリを分析します。このツールの各統計機能の詳細については、「OVRメトリックツール統計定義ガイド 」を参照してください。Logcatを使用したVrApiログの収集 : このコマンドラインのAndroid SDKツールを使用して、システムログを収集します。Logcatを活用してMeta Quest VrApiログを取得して、アプリのパフォーマンスとデバイスの設定を見直します。このツールの各統計機能の詳細については、VrApi統計定義ガイド を参照してください。ovrgpuprofiler : この下位レベルのCLIツールにより、リアルタイムGPUパイプライン指標とレンダリングステージのトレースにアクセスします。ovrgpuprofilerはMeta QuestとQuest 2のランタイムに含まれており、各デバイス上で実行されます。Perfetto : エンジンに依存しないパフォーマンストレースツールで、ビルトインのエンジンプロファイラーをはるかに超えるメリットがあります。例えば、アプリのパフォーマンスプロファイルと同じタイムラインに、システムプロセスの幅広い表示や追加の指標を含められます。OVRPluginの関数呼び出しをOSに直接マッピングし、GPUのさまざまなカウンターや指標に関して概要レベルのインサイトを得て、パフォーマンス問題の切り分け精度を向上させることができます。また、GPUレンダリングステージのトレースを生成することもできます。RenderDoc : 複数のグラフィックAPIと開発プラットフォームをサポートするグラフィックデバッガツールで、フレームキャプチャと分析に理想的なソリューションです。OculusのRenderDoc : Meta Questで保守されているRenderDocの、Questプラットフォーム用派生バージョン。RenderDocの通常のグラフィックスデバッグ機能に加えて、このバージョンでは、下位レベルのGPUプロファイリング、特にMeta Questからのタイルレンダラーデータにアクセスできます。Unityプロファイラー : Meta Quest上でこのツールをビルドして実行すると、Unity環境からさらに多くのパフォーマンス情報を直接収集できます。詳細については、Unityプロファイラー公式ドキュメント を参照してください。連続自動テストに使用できるヘッドセットが複数ある場合でも、予備のヘッドセットを活用しながら工夫して夜通しテストを実行する場合でも、任意のサイズのデバイスラボを開始するなら、開発プロセスの早い段階でバグやパフォーマンスの問題を発見することができます。自動テストに予備のデバイスを使用する場合の考慮事項とベストプラクティスを以下に示します。
すべては開発リソースによって決まる: ハードウェアを動作させることが必要であるとしても、第一に、どのようなデバイスラボを管理できるかは、結局のところエンジニアリングチーム、および反復処理を利用してチームの時間と労力を節約する自動テストスクリプトを作成するチームの能力に左右されることを理解する必要があります。自動化を増やす = デバイスが増える: 自動化スクリプトを数個作成できたなら、ダウンタイム中や夜間などに使用可能なデバイスを使ってテストを始めます。これはすべて反復処理プロセスなので、十分な数の自動化スクリプトが作成できたら、専用のテストユニットとして使用するハードウェアを増やすことが適切であると考えることができるかもしれません。テスト後に必要となる人的労力を忘れずに検討する: 専用テストユニットを増やすことが適切と思えるなら、テスト結果を分析して報告するチームメンバーが必要になることも忘れずに検討します。この作業に割く余力がない場合は、専用ハードウェアを設置するかどうかを再検討する必要があります。2Dテスト: Meta Questヘッドセットより、使用できるPCやノートパソコンのほうが多い場合は、2Dデバイスでの自動化から開始することができます。ゲームプレイのロジック、ルックアンドフィール(初期テクスチャー)、スクリプトによるゲームプレイなどをテストするには、2Dで十分です。テスト、自動化、パフォーマンスの最適化、およびこれらすべての作業を効率よく実行するためのツールに関して役立つリソースはたくさんありますが、入門編として優れた資料をいくつか紹介します。