うどんてっくメモ

技術的なメモをまったりと

【Unity】アプリケーションの検証を自動化しQAを効率化する新機能「Unity Automated QA」の紹介

はじめに

つい先日、Unity公式が開発中であるAutomated QAという機能が紹介されました。

blogs.unity3d.com

QA効率化のためにUI操作を記録し、それを再生できるという機能っぽいです。この記事では機能の概要と使い方の説明、および触ってみての所感について話していきます。

※ 本記事で使用するUnityおよびAuromated QAのバージョンは以下の通りです。バージョンによっては挙動および機能が異なる場合がございますので、ご了承ください。特にAutomated QAはかなりpreviewの機能なので、大きく内容が変わる可能性もあります。

  • Unity 2021.1.0f1
  • Automated QA 0.2.0-preview.3 - April 08, 2021

Automated QAとは

公式でAutomated QAについて機能の概要がこう書かれています。

The Automated QA package enables users to record and playback touch or drag interactions with the UI of a Unity Project and optionally use recordings to drive Unity Tests – in the editor, on an iOS or Android device.

ユーザーのUI操作を記録し、リプレイとして実行できるという機能です。どのように活用できるかというと、

  • QAが検証でルーチン化できる部分を記録し、自動で検証
  • QA側が確認した問題の発生手順を記録し、エンジニア側で再現(逆も然り)

といったように、アプリケーションの検証、いわばQAのフローを効率化できる機能になっています。実際に簡単なUIを配置して、使ってみた動画がこちらになります。ボタンの押下を記録し、再生しています。

f:id:myudon:20210418162345g:plain

この機能はタップとドラッグの2つの操作を記録できるのですが、特徴的なのが対象のGameObjectの名前とタグも記録されるというところです。たとえば「Button」という名前のUIのGameObjectをタップした場合はその「Button」という名前とそのタグも一緒に記録されます。たとえばリプレイした時にちゃんと想定する画面になっているかといったように、一連の操作に対するオブジェクトの有無の検証に活用できる機能です。

Automated QAの導入

Automated QAはPackage ManagerのAdd package from git URLから追加します。「com.unity.automated-testing」と入力してください。

f:id:myudon:20210417222440p:plain

正常に導入が完了するとWindowのメニューに表示されるようになります。

f:id:myudon:20210418181958p:plain

Recorded Playback

UIの操作の記録と再生はRecorded PlaybackのWindowから実行します。メニューで選択するとWindowが開きます。

f:id:myudon:20210417222804p:plain

f:id:myudon:20210417222850p:plain

Recordを押すとWindowが閉じ、シーンがPlayされます。Play中のUI操作は記録され、終了すると記録した情報がjson形式で保存されます。保存される場所はWindow上で指定できるRecording assets pathになり、デフォルトだとAssets/Recordingsに指定されています。jsonの中身は主にUI操作の位置や対応するGameObjectの情報の配列になっています。

f:id:myudon:20210417223336p:plain

保存されたデータはRecorded PlaybackのWindowに表示されています。Playを押すとシーンのPlayと共に記録されているUI操作が順に実行されます。

f:id:myudon:20210417223512p:plain

実行中に前述した操作の対象となるGameObjectがなかった場合(記録では「Button」を押しているはずがなかった場合)はとりあえず座標に基づいて操作の実行はしながらもwarningを出すというのが現状っぽいです。

f:id:myudon:20210418015603p:plain

この辺は何か別の結果レポートだったり、独自のログを含むエラーだったり、検証結果として出力する仕組みが欲しいところです。ただ、自動で操作して意図したヒエラルキーになっているかどうか検証するには十分便利かなと思います。

Composite Recordings

ゲームをPlayして終了するまでの一連の操作の記録だけではなく、部分的な記録だったり、記録同士の組み合わせるComposite Recordingsという機能も用意されています。メニューからAutomated QA→Advanced→Composite Recordingsを選択するとWindowが開きます。

f:id:myudon:20210418015935p:plain f:id:myudon:20210418015846p:plain

前述したRecorded Playbackと同様に記録の開始と停止、実行ができます。違う点としては部分的な記録であるSegment Recordingが記録できることです。SAVE SEGMENTを押すとその時点までの操作を断片的に出力してくれます。

f:id:myudon:20210418162940g:plain

生成したSegment Recordingは好きに組み合わせて一連の操作にするComposite Recordingの生成が可能です。CREATE COMPOSITE RECORDINGを押すとComposite Recordingを生成する画面になります。

f:id:myudon:20210418173422p:plain

+と-で追加と削除をして、SAVE COMPOSITE RECORDINGを押すとひとつの記録となったデータが生成されます。ちなみに組み合わせるのは前述したRecording Playbackでも可能です。
この機能は似たような操作の自動化を量産するのに役立ちます。たとえばあるUIの遷移フローの検証をしたいと考えてみます。画面の種類をアルファベットとして、A-B-C、A-D-B-Cといった部分的に一致しつつも分岐するフロー全てを自動で操作したいと考えた時に、何回も同じ部分を記録するのはやや手間です。そこでComposite Recordingsを活用することでそれぞれのA-B、B-Cといった単体の遷移操作を記録し、組み合わせで実現することが可能になります。網羅的な検証を自動化する際に活躍する機能ですね。

Automated QAの展望

手元で操作のリプレイ検証ができるだけでも一定の効率化は達成できますが、さらなる機能改善として公式のブログでは次の2つが書かれています。

Coming Soon: Composite Agents

We are adding support for the creation of game playing agents composed of recordings, C# scripts, and ML-Agents.

リプレイだけではなく、C#スクリプトおよびML-Agentsを用いたAIでも自動操作を可能にする予定っぽいですね。UI操作をスクリプトで書けるようになるのは必要になりそうだなと思います。たとえば適当にUIを押すようなモンキーテストだったり、条件によって分岐するようなちょっと複雑なテストだったりと、ある程度ロジックを挟み込みたいケースは需要があり、それを普段の実装と同じC#で実現できるのは便利そうです。そして、ML-AgentsによるAI操作ですが、これはかなり期待したい内容ですね。やはり自動テストの理想型はリプレイのテストやエンジニアが実装するテストではなく「自動でよしなにチェックするテスト」です。Unityの提供するML-Agentsによってテストを学習し、検証が必要な部分を自動で判定して処理する仕組みができたら最強だなと思っています。また、これはComposite Recordingsの機能の一環として実装されるそうなので、ここまではリプレイでここからはAIで最後はC#、みたいな合わせ技も可能そうです。

Coming Soon: Run tests on real devices in the cloud from the Unity Editor or CI

We’ll handle the infrastructure so that cloud on-device testing is even easier than local on-device testing. And we’ll make the resulting pass/fail status, logs, and screenshots available directly from both the Unity Editor and via API.

クラウド上の端末で動くような仕組みも検討しているっぽいです。エディタ上および手元の端末で動くだけでも有用ですが、クラウド上で動く仕組みができると自動化できる規模感が大きく変わります。物理的な制約を外れてスケールできるため、それこそ1000台の端末で全てのインゲームのステージをテストするなんてことも可能になるわけです。まぁお値段もそれなりにかかってしまうことが想定されるので法人向けかなと思いますが、個人的には注目したい機能です。公式ドキュメントではAWS Device Farmとの連携が可能になるという感じでした。

[Early Access] Running Recorded Tests on a Cloud Device Farm This package includes support for running Recorded Tests (and other Unity Tests) on Android Phones hosted on AWS Device Farm - no AWS account needed.

Through June 2021, we’re offering 100 hours of cloud testing free to every organization with a Unity Pro license. After the free trial, cloud testing will cost $10 per device hour. Please email us at a >AutomatedQA@unity3d.com for access!

おわりに

Automated QA、熱いですね。特に昨今のモバイルのゲームのクオリティや規模感はどんどん上がっており、それに伴うQAのコストもどんどん上がっています。いろいろな企業がCEDECなどのカンファレンスで自動テストのノウハウでこういった課題を解決するという発表も最近はよく見る気がしていますが、そういった中で公式からQAの効率化機能を提供してくれるのはありがたいなと思います。まだ開発も始まったばかりっぽい機能で今後どうなるかは未知数ですが、引き続きチェックしていきたいですね。

参考資料

この記事を書くにあたって、公式のマニュアルを大きく参考にさせていただきました。ここでは紹介できなかった機能もあるので参考にしてみてください。

docs.unity3d.com