Inside of LOVOT

GROOVE X 技術ブログ

LOVOT QA効率化の話:LOVOT QA App のアーキテクチャ

はじめに

こんにちは。junya です。昨日の LOVOTech Night での登壇を終え、肩の荷がおりたところです。 さて、今日は QA 効率化の話の第2弾、LOVOT QA App のアーキテクチャおよび、主要機能についてご紹介したいと思います。

我ながら、なかなか良くできた仕組みだと思うので、よかったら読んでやってください。 前回ご紹介した「セミオートメーション」の詳細となります。

LOVOT QA App のアーキテクチャ

まずはじめに、LOVOT QA App のアーキテクチャについてご説明します。

LOVOT QA App は、Qase をバックエンドとして Qase API を利用し、Qase のテストラン機能*1だけを抽出した、セミオートメーションのQAツールです。

テストの実行画面を抽出しただけだと、そのまま Qase を利用するのと比べてなんのメリットがあるのかわからなそうですが、テスト実行ツールを LOVOT 本体やスマートフォンと接続することで、テスト項目の一部を自動化することができるのが利点です。

LOVOT QA App の3つの使い方

前節の図にもあるように、LOVOT QA App は以下の3種類の方法で利用できます。

  • デスクトップアプリ
  • デスクトップアプリ + Poco Agent
  • 実機内で動作するデーモン

デスクトップアプリ

作業者のPC上でデスクトップアプリ(Electron)として動かす方法です。 LOVOT に対してリモート接続してテストを実行したり、後述する Poco Agent との連携で便利です。

デスクトップアプリ + Poco Agent

LOVOT QA App の横で、スマートフォンへのアクセスをブリッジする Poco Agent*2 を動かすことで、LOVOT QA App からスマートフォンを制御できます。

手動試験のときと比べて、

  • 試験中のアプリのスクリーンショットをワンクリックで記録できる
  • 自動でアプリ要素の検証テストができる

などのメリットがあります。

実機内で動作するデーモン

debian パッケージを実機に転送して実行し、ブラウザからポートにアクセスすることで、テストを実行します。 LOVOT QA App の自動試験において、LOVOT QA App から直接機体を操作できるので、効率的・安定的に自動テストを実行することができます。

LOVOT QA App の自動テストの仕組みについて

LOVOT QA App では、Qase のテストステップ(テストケースを構成する要素)のタイトル名に、一定のルールで関数名を組み込むことで、テストステップに自動テストを紐付けることができます。 例えば、このような感じです。

関数名 テストステップ記述例
Clickbutton [AUTO:ClickButton(HomeButton)] ホームボタンをクリック
GetDatabaseValue [AUTO:GetDatabaseValue(identity)] identity 値を取得

内部的には TypeScript で AutoFunctionRegistry に関数を紐付けて管理しています。自動テスト関数には「モバイル用」「LOVOT本体用」「LOVOTリモート接続用」「クラウド操作用」の4種類のカテゴリを用意しています。

合わせて、LOVOT QA App の画面では、自動関数を利用しやすいように以下の機能や画面を提供しています。

  • テスト自動実行: テスト実行画面において、ボタン1つで関連する処理を自動実行する、メイン機能
  • 自動テストの一覧画面: 登録されている自動テスト関数の一覧を閲覧し、テスト実行できる画面
  • 設定画面: テスト実行対象のスマートフォンやLOVOTを設定・接続する画面

その他の便利な機能

以上に加え、以下のような便利機能を実装しました。

  • プレビュー画面: モバイルアプリの画面を表示し、UI要素を確認できます。
  • ファイル添付: 任意のファイルをテスト結果に添付できます。
  • スクショ: モバイルアプリのスクショをワンクリックでテスト結果に添付できます。
  • Slack連携: Slack のスレッドを設定することで、テスト結果をSlackスレに送信できます。
  • 整合性チェック: テストランに紐づくタグをもとに、接続デバイスの整合性を確認します。
    • 例: LOVOT 3.0 を対象とした試験を、LOVOT 3.0 に対して行っているかを確認

まとめと今後の展望

本記事では、LOVOT QA App の提供するセミオートメーション機能について説明しました。 セミオートメーションは、単なる中途半端な自動化ではなく、以下の様なメリットがあります。

  • 試験の効率化: 手動で行うと複雑な処理をワンクリックで効率的に実行できます。デバイスの識別子やバージョンを自動連携できるので、転記ミスが減り、工数も削減できます。
  • 段階的な自動化: 手動テストを段階的に自動化できます。
  • 粒度の小さな自動化: 1つ1つの自動化要素をメンテナンス・再利用しやすい小さな粒度に保つことができます。
  • 柔軟な運用: 接続が不安定な際のリトライ処理など、イレギュラー発生時にもユーザが柔軟に対応できます。
  • 様々なテスト対象への応用 : LOVOT やスマホなど、様々なテスト対象に対して、共通の枠組みでテストの自動化を進められます。
  • 手動実行のサポート: 困ったときは手動試験にフォールバックできます。

また、テストケース自体の管理を Qase のようなテスト管理サービスに委ねることで、「テスト実行」だけにフォーカスして機能を実装することができました。

このような仕組みは、LOVOTのような複雑な製品の試験における現実的な解ではないかと思います。

同じような課題に取り組んでいる方がいましたら、ぜひご意見ご感想をお聞かせください。 次回は、LOVOT QA App の開発において、どのようにAIを活用したか、ご紹介したいと思います。

*1:試験対象のテストケースを集めたテストセットに対して、テストを実行する機能

*2:pocoui を gRPC のサービスでラップして、TypeScript から呼び出せる仕組みを実装しました