GameWith Developer Blog

GameWith のエンジニア、デザイナーが技術について日々発信していきます。

AIを利用したFirebase アプリ テスト エージェント(Android)を使ってみた #GameWith #TechWith #Android

はじめに

GameWithでAndroidエンジニアをしているgiです。 今回はFirebaseのアプリ テスト エージェント(Android)がプレビュー版として公開されたので、それを使ってアプリをテストしてみた感想を話します。

Firebase アプリ テスト エージェントとは

  • アプリ テスト エージェントは、自然言語でテストケースを定義するだけで、AI(Gemini in Firebase)が自動でテストして、結果を提供するツールです。通常AndroidアプリのテストはEspressoなどのフレームワークを使ってコードでテストケースを作成する、あるいはUI録画ベースの自動テストサービスを使うことになりますが、Firebase アプリ テスト エージェントはログインするホーム画面を読み込むなどの自然言語を書くだけでテストを作成できます。

  • 公式のドキュメント:

firebase.google.com

  • 現状はまだプレビュー段階です、正式のリリースではありません。

使い方

  • App Distributionを利用している前提です。
  • Firebase App Distribution画面のタブに、 テストケース というタブがあります、そこからテストケースの作成とテストの実行ができます。

テストケースの作成

  • 新しいテストケースボタンからテストの作成画面を開くことができます。
  • 最低限入力が必要なものはステップの 目標 です、 目標 さえあればテストの実行ができます。 ヒント成功基準 を入れるとテストの成功率を上げることができます。
  • 実際使ってみた感じ、各項目の重要度は 目標 > 成功基準 > ヒント目標 があやふやだと、他の項目の内容を細かく入力してもAIがコケます。逆に 目標 が明確であれば、他の項目を入力しなくてもAIがテストできます。 成功基準ヒント はあくまで参考程度ですので、テスト実行中にAIに無視される可能性もあります。
  • 複雑のテストの場合、ステップを追加して、操作を分けることもできます。

テストの実行

  • テストを実行ボタンからテスト実行できますが、アプリビルドの情報がバージョンしかないため、テストしたいビルドを間違えてしまう可能性があります。ビルドの詳細にもテストを実行ボタンがあるため、直接ビルド詳細から実行するほうがミスが防げておすすめです。

  • テストタイプ で実行したいテストケースを選択できます。複数テストケースの同時実行も可能です。
  • デバイス でテストで使うデバイスを選択することができます。デフォルトはemulatorですが、性能が微妙のため、実機に変更するのが良いです。こちらも複数デバイスで同時実行できます。
  • ログイン認証情報 でログイン必要な情報を入力できます。
  • 全部設定したら テストを実行 ボタンでテストを実行できます。

  • 実行するとビルドの アプリ テスト エージェント タブからテスト状況を確認できます。

  • 各テストの 詳細を表示 ボタンから、実行したテストの各ステップの結果、スクショ付きのAIの操作ログなどが確認できます。

制限

  • AIの操作が制限されています。公式のドキュメントによると、できるのは タップ、テキストの入力、上方向へのスクロール、下方向へのスクロール、待機のアクションのみ。
  • プレビュー段階のため、現状割り当て上限は1か月あたり 100 件のテストです。複数のテストケース、または同じテストケースを複数のデバイスで実行する場合、複数のテストとしてカウントされます。たとえば、2つのデバイスで2つのテストケースを実行した場合、合計4件のテストとしてカウントされます。
  • テスト全体と各ステップにタイムリミットが設定されています。具体的な制限は不明ですが、1つのステップで操作が多すぎると、勝手にタイムアウトしてテスト失敗になります。

使ってみた感想

良い点

  • テストの作成が非常に簡単。 目標ログインする ホームページを読み込む などを書くだけで、AIが画面の構成を分析し、自動でログイン操作を行います。
    • ヒント成功基準 を追加することで、ある程度AIの操作をコントロールすることができます。
  • 目標 に関係ないUI要素は勝手に消してくれます。
    • 例えばホーム画面が表示する前に、通知設定のDialogが出た場合、AIが勝手にボタンを押してDialogを閉じることができます。

要注意点

  • 成功基準 はちゃんとUIで表せるものを書く必要があります。
    • 例えばログインの場合、 成功基準ログインが成功した といったことを書くと、AIが成功の基準を理解できなくて、ログイン成功後も無限にログインボタンを探すことになります。例えば ログインが成功し、ホームページが画面に表示され、すべての画像が読み込まれ、エラーは表示されません。 という風に書くと、AIの判定精度を上げることができて、より成功しやすい結果になります。
  • 複雑の操作の場合、ステップで分ける必要があります。1つのステップの操作時間が長すぎるとタイムアウトが発生します。
  • アプリがログイン必須の場合、テストケース作成時に毎回ログインのステップを書く必要があります。各テストケースは独立した環境で実行されるため、 テストケースAが完了したらテストケースBを実行する のような複数のテストケースを繋ぐことはできません。

良くない点

  • webview関連のテストだと、AIが鈍くなります。
    • ページが読み込まれてないのに読み込みが成功と判定することがあります。
    • 画面が重くてスクロール操作をしたけど、画面が動いてないことがあります。
  • AIの動作を完全にコントロールすることができず、AIがテストを実行するたびに挙動が違います。テストがかなり失敗しやすく、同じテストケースを同じ端末で複数回実行しても、1回しか成功しないことはよくあります。そして毎回違う原因で失敗します。

下記は使ってみて遭遇した失敗のケースです:

  • AIの問題かデバイスの問題かはわからないですが、ログインする時、メールを入力したら勝手にログインボタンが押されます、メール入力 → ログインボタン → パスワード入力 の操作順番になってしまいます。当然ログインができなくて、テストが失敗します。
    • 解決方法としては、3つのステップを分けて、それぞれ パスワード入力、メール入力、ログインボタン の順番で先にパスワードを入れさせます。
  • 通常Dialogとかは勝手に閉じてくれますが、たまにAIがコケて、Dialogのタイトルをタップすることがあります。これによって、Dialogを閉じることができなくて、AIが無限にタイトルをタップするループに入ります。最終的にタイムアウトでテストが失敗します。
  • ヒント成功基準 に書いてるものが無視されて、AIが過剰な操作をして、テストが失敗します。
  • テストログやスクショなどが明らかにテスト成功の状態になっていても、何故かAIがテスト失敗という判断を出すことがあります。
  • 複数のステップがあるテストをする場合、たまに一部のステップがスキップされていきなり次のステップを操作することがあります、これによってテストが失敗します。

まとめ

自然言語でテストケースを定義し、AIで自動テストすることは非常に魅力的な点です。 現状はまだプレビュー段階で動作が不安定ですが、今後のアップデートを期待しています。

最後に

そしてGameWithではエンジニアを絶賛募集中です!
サーバーエンジニアやフロントエンジニアの方、AIに興味がある方もお気軽にカジュアル面談をお申し込みください!

github.com