第36回人工知能学会全国大会(JSAI2022)において優秀賞を受賞しました

 機械学習グループのGanbat Nyamkhuu(ガンバト ニャムフー)です。機械学習グループでは、モバイルゲームのユーザインターフェイス(UI)自動テストの研究開発を続けてきました。この度、その成果を『ゴリラテスト ~モバイルゲームのUIを自動的に検出・操作するモンキーテスト~』というタイトルで第36回人工知能学会全国大会にて発表し、優秀賞をいただきました。これまで支えていただいた方々および、議論を通してアドバイスをいただいた学会の皆様に感謝申し上げます。この記事では、全国大会の発表資料を交えて、私たちが開発したゴリラテストについてご紹介します。

モバイルゲームとUIテストの現状

 現在、モバイル端末の普及によってゲーム市場は急成長しています。世界50ヵ国以上で30億人以上のユーザーがAndroidやiOSをはじめとする様々な端末でモバイルゲームをプレイしています。KLabでは常に新しいゲーム体験をお届けするべく、新規コンテンツの配信を2週間に1度、アプリのアップデートを1ヶ月に1度のペースで行っているゲームタイトルもあります。このような短いリリースサイクルの中で、開発者は多種多様な端末やOS、言語などに渡ってアプリの品質を保証しなければなりません。

 ソフトウェア品質保証におけるUIテストの役割は、表示の崩れや動作の快適さといったアプリの「見た目」をユーザー体験にまで踏み込んで評価することです。同じアプリでも端末・OS・言語によってUIの見た目は異なっており、「体験」という数値化しにくい観点を評価する必要もあるため、手作業が多く残されています。しかしゲームを創る私たちの夢は、世界中のすべての人にゲームを遊んでもらい、ワクワクしてもらうことです。そのために、UIテストを自動化し、あらゆる端末・OS・言語で迅速にテストできるようにしたいと考えています。

ゴリラテストが目指す自動UIテスト

 一般にUIテストの自動化では、PCとモバイル端末を接続してPC上のテストツールからモバイル端末上のアプリを操作します。主な操作方法としては、スクリプトテストとモンキーテストがあります。スクリプトテストでは、アプリの操作手順をスクリプトとして記述します。スクリプトを使って何度でもテストを実施できる反面、端末・OS・言語ごとにスクリプトを書き換える必要があり、アプリのアップデートごとに修正も必要となるため、1つの環境で動作したテストコードをあらゆる環境へとスケールさせることが困難でした。一方でモンキーテストは、アプリの内容を考慮せず画面をただランダムにタップするだけなので、あらゆる環境ですぐに利用できます。反面、そのような単純な操作ではゲームのような複雑な画面遷移をともなうアプリを網羅的にテストすることは困難でした。そこで私たちは、モンキーテストのUI操作を機械学習の力で「進化」させることにより、手軽で賢い自動UIテストツール『ゴリラテスト』を開発しました。

 

ゴリラテストの仕組み

 ゴリラテストは以下のステップを1サイクルとして繰り返すことでテストを行います。

  1. UI検出:アプリの画面から操作可能なUIを自動的に検出します。
  2. シーン認識:現在の画面を過去の画面と比較して現在のシーンを特定します(ホーム画面、キャラ選択画面など)。
  3. UI操作:過去のUI操作結果からシーン遷移図を構築し、シーン遷移先を考慮して最適なUI操作を行います。
  4. 性能モニタリング:描画速度、通信遅延、CPU使用率、メモリ使用量、端末温度などの性能指標を計測します。
  5. 仕様ベースのテスト:テスト担当者が登録したテストコードを実行します。

 これらのステップは、デフォルトではアプリの内部情報を用いずに、端末OSが提供する汎用デバッグツール(Android Debug Bridgeなど)を経由して実行されます。そのため、アプリをテスト用に改修することなく、すぐにテストを始めることができます。さらに、どのステップも自由にカスタマイズできるようになっており、テストの目的にあわせてモジュールを切り替えたり、独自のモジュールを作成することでさらに賢くテストすることもできます。

1. UI検出

 デフォルトのUI検出モジュールでは、画像処理によって現在の画面上にあるUIを検出します。この手法はアプリのUIを人手でラベル付けすることなく利用でき、最新の深層学習に基づく物体検知モデルと同等の検出精度を有することが報告されています。ここで検出された画面領域が『3. UI操作』ステップでの操作候補となります。自動検出に失敗したUIを人手で修正するモジュールや、アプリと通信してUI位置とその操作方法(タップ、スワイプ、長押しなど)を取得するモジュールなどもあります。

 

2. シーン認識

 状況に応じた最適なUI操作を判断するために、ゴリラテストはUIを操作するたびに「どのシーンで、どのUIを操作したら、どのシーンに遷移したか」を記録したシーン遷移図を構築していきます。デフォルトでは人手によるラベル付けやアプリの内部情報を使わず、画面から自動的にシーン(ホーム画面、ゲーム設定画面、キャラ選択画面など)を認識します。具体的には、画像の類似度に基づいて画面スナップショットを分類し、現在の画面がどのシーンに属するか(あるいは新しいシーンか)を特定します。分類には類似画像検索でもよく使われるLocality Sensitive Hashingを用いています。このほかにも、各シーンの代表画像を人手で指定するモジュールや、アプリと通信して現在のシーンIDを取得するモジュールなどもあります。

 

3. UI操作

 構築したシーン遷移図に基づいて最適なUI操作を行います。なにをもって「最適」とするかはテストの目的に応じて様々です。典型的な用途のためにいくつかのモジュールが用意されています。デフォルトでは、できるだけ多くのUIをテストできるように、未操作のUIを優先的に操作します。そのほかにも、できるだけUI階層の深いシーンにたどり着くように操作するモジュールや、指定した手順でUIを操作するモジュール、アプリと通信してアプリ側からUI操作を指示するモジュールなどもあります。

4. 性能モニタリング

 描画速度、通信遅延、CPU使用率、メモリ使用量、端末温度などの性能指標もデフォルトでは端末OSの汎用デバッグツールを経由して取得します。それぞれの指標には閾値を設定してアラートを上げることができます。シーン遷移図と組み合わせることで、負荷の大きいシーンを見つけることができます。また、ユーザー体験において重要な指標である、シーン遷移時間を測る機能もあります。最近のアプリではしばしば、先読みなどによって見かけの遷移時間を短くする工夫がなされています。そういった効果も加味するために、アプリの内部情報を用いず、画面の録画データに基づいて見かけの遷移時間を計測しています。

5. 仕様ベースのテスト

 テストケースを登録することによって、モンキーテストの最中に仕様に基づいたテストを行うことができます。テストケースは「どんな条件下で、どんな操作をしたときに、どんな結果が期待されるか」をxUnit風の文法で宣言的に記述します。この宣言的記法では、テストの仕様がほぼそのままコードになり、テストしたいUI操作(ゲーム設定画面で変更ボタンを押す)とテストの事前条件を満たすためのUI操作(アプリを起動してゲーム設定画面まで遷移する)が分離されます。そのため、従来の手続き的なスクリプトテストよりも明瞭でテストコードが再利用しやすくなります。

テスト結果の確認と共有

 テスト結果は自動的にクラウドに集約され、Webのダッシュボードで可視化されます。アプリのデイリービルドとともにゴリラテストを実行することにより、アプリの変更による不具合の発生や性能指標の変化を常にモニタリングできるようになります。テスト担当者だけでなく開発チーム全員で結果を共有することで、開発者はUI周りの不具合を即座に発見・修正できるようになります。このようにしてゴリラテストは開発者自身でのUIテストを可能にし、UIテストをシフトレフト(工程の前倒し)します。

発表資料

 人工知能学会全国大会の発表では、上記のステップのうちUI検出、シーン認識、UI操作、性能モニタリングについて紹介し、UIの自動認識と操作判断について評価実験を行いました。その発表資料を公開します。評価実験の詳細については論文をご覧ください。

 以下の動画はインターン用のリズムゲームでの動作例です。この例では楽曲選択画面からスタートし、ゲーム設定画面、キャラ選択画面などに遷移し、最終的に「通信エラー」の不具合を見つけています。ゴリラテストはデフォルトの挙動、すなわち、アプリを改修したりシーンやUIを人手でラベル付けしたりすることなく、画面からシーンやUIを自動的に認識してテストを行っています。動画ではタップした位置のほとんどがUIであり、様々な画面に遷移できていることから、自動認識の精度と操作判断の適切さが見てとれます。

動作結果の可視化

 ゴリラテストには、シーン遷移図の可視化ツールが付属しています。可視化ツールは以下のような4つのパネルからなります。

 

 左上のパネルはシーン遷移図です。グラフのノードはゴリラテストが認識したシーンを表し、エッジはUI操作を表します。ノードをマウスホバーすると、他の3つのパネルにそのシーンの詳細な情報が表示されます。右上のパネルには、このシーンの代表スナップショット画像が表示されます。画像内の緑色の点は操作したUIを表します。右下のパネルには、このシーンに分類されたスナップショット一覧が表示されます。左下のパネルには、このシーンで検出されたUI操作とそれぞれの操作の試行回数などが表示されます。実際の動作イメージは以下の動画をご覧ください。

おわりに

 この記事では、KLabで開発している自動UIテストツール『ゴリラテスト』について、第36回人工知能学会全国大会での発表資料を交えて紹介しました。ゴリラテストに搭載されたUIの自動認識と操作判断のアルゴリズムは、インターン用リズムゲームにおいて一定の実用性をもって動作することを示しました。

 現在KLabでは、開発中のゲームタイトルにおいてゴリラテストを利用しはじめています。実用化にあたっては、いかに進行中の開発・運用を妨げることなくワークフローを改革し、定着させるかといったマネジメント的な課題にも直面します。この度、全国大会優秀賞をいただきましたことは、ゴリラテストの社内実践を進めるうえでも大きな励みになりました。世界中のすべての人が遊べるゲームを目指して、実用化を進めてまいります。

このブログについて

KLabのゲーム開発・運用で培われた技術や挑戦とそのノウハウを発信します。

おすすめ

合わせて読みたい

このブログについて

KLabのゲーム開発・運用で培われた技術や挑戦とそのノウハウを発信します。