MCUデバイスのQt Quick UltraliteアプリケーションのUIテストを自動化する方法

このブログは「How to Automate UI Testing for Qt Quick Ultralite Applications on MCU Devices」を翻訳・一部加筆したものです。

マイクロコントローラー(MCU)ベースのデバイスにおけるユーザーインターフェース(UI)のテストは、従来から手作業が中心でエラーが発生しやすいプロセスでした。計算リソースの不足、ディスプレイの抽象化、および従来のデバッグツールの欠如により、デスクトップやモバイル開発で一般的に使用される自動テストワークフローを実装することが困難でした。しかし、軽量UIフレームワークであるQt Quick Ultralite (Qt QUL)や、MCU専用のテストツールであるSquish for MCUsなどの最近の技術革新により、リソース制約のある環境でも自動UIテストが実現可能になりつつあります。

この記事では、Squish for MCUsQt Quick Ultralite アプリケーションの自動テストをどのようにサポートしているか、それが解決する技術的な課題、および組み込み UI テストの自動化に今後どのような発展がもたらされるかについてご説明します。

なぜMCUにおけるUIテストは困難なのか

マイクロコントローラは、効率と低消費電力のために設計されています。家電製品、ウェアラブルデバイス、自動車用ダッシュボードなどの組み込みアプリケーションには理想的ですが、UI テストの自動化に通常必要なインフラストラクチャが欠けています。具体的には、MCU には多くの場合、以下の特徴があります:

  • 非常に限られたCPUサイクル(例:200MHz未満)

  • 低容量のRAMとフラッシュメモリ(通常、RAMは1MB未満、フラッシュメモリは2MB未満)

  • オペレーティングシステムなし、または最小限のRTOSのみ

  • ネットワークスタックなし、または動的オブジェクトの検査機能なし

これらの制約により、実行時のリフレクション、アクセス可能なウィジェット階層、およびリモート通信プロトコルに依存する従来のオブジェクトベースの UI テストを使用することは不可能になります。

Qt Quick Ultralite は、MCU に最適化された Qt Quick のサブセットを提供することで、これらの制限に対処しています。メモリおよびストレージの使用量を削減するため、ネットワークやマルチメディアなどの必須ではない API を削除しています。ただし、これにより、自動テストのオプションも制限されます。

Qt Quick Ultralite: MCU向けに最適化されたUIフレームワーク

Qt Quick Ultralite は、MCU クラスのデバイス向けに特別に設計されたランタイムです。メモリおよび処理能力に制約のあるデバイス向けに最適化された、Qt Quick/QML フレームワークの簡略化されたサブセットを提供します。主なトレードオフは次のとおりです。

  • 重たいコンポーネントの削除(例:ネットワーク、マルチメディア、スクリプトエンジンなど)

  • メモリ使用量を削減するための事前コンパイル済みQMLコード

  • 静的レイアウトと最小限のランタイム割り当て

これらの最適化により、Qt QUL はパフォーマンスに最適ですが、実行時の自己分析機能が低下し、専用のツールを使用しない限り UI テストが大幅に困難になります。

MCU image

SquishによるMCUにおける自動テストの仕組み

Squish for MCUs は、組み込み環境での UI テストの自動化を実現するために特別に設計されています。そのアーキテクチャは、Device Link ランタイムモジュールを使用することで、オブジェクトレベルへのアクセスやネットワークスタックを必要としません。このモジュールはターゲットアプリケーションにコンパイルされ、2 つのコアとなるテスト機能を実現します:

  • 入力インジェクションの合成: 低レベルのタッチ、タップ、またはクリックイベントをUIスタックに直接送信し、実際のユーザー操作をシミュレートします。

  • 画面データのキャプチャ: 分析用にフレームバッファのスナップショットを取得し、画像比較や光学文字認識(OCR)を含む処理が可能です。

このアプローチにより、オブジェクトレベルのアクセスや完全なネットワークスタックを必要とせずに、画像ベースのテストおよびOCR(光学式文字認識)が可能になります。

Squish for MCUsでテストできる機能

  • シミュレートされたユーザー操作(例:ボタンをタップする)
  • 特定のイメージの有無をチェック(例:UI要素)
  • テキスト認識(OCR
  • ビジュアルとスクリーンショットの比較

オブジェクト認識機能はまだ利用できませんが、今後のリリースで実装される予定です。

実際の例

デモでは、Squish を使用して、家庭用の温度制御を行うシンプルな Qt Quick Ultralite アプリケーションをテストしました。テストスクリプト:

  1. MCUデバイスに接続します
  2. 画像認識を使用して緑のボタンを検出し、クリックします
  3. OCRで「OFF」という文字を検出することで、システム状態が変更されたことを確認しました

このテストは、Squish IDE 内で完全に記録および再生されており、基本的な画像ベースのテストでも組み込みデバイスの UI 動作を検証できることを示しています。

Squish for MCU demo

Click to Watch Demo

サポート済みのハードウェアとツール

Squish for QUL は現在、STM および NXP の Tier 1 MCU ボード、つまり Qt for MCUs チームによる最高レベルのサポートを受けるデバイスに対応しています。テストワークフローは、以下のものと統合されています:

  • Squish IDE(Python、Perl を含むスクリプト言語に対応)
  • フラッシュとデバッグのためのベンダーツール
  • Tesseract OCR(Squish に付属)または他の OCR エンジン

テストは Squish IDE から直接記録、編集、再生することができ、CI/CD パイプラインに統合して自動回帰テストに利用できます。

Squish と MCUテストの次なるステップは?

MCU 向け Squish の今後のアップデートには、以下の内容が含まれます:

  • オブジェクト認識: オブジェクトの完全なツリー構造とプロパティへのアクセスにより、より精密なテストが可能
  • 追加のボード対応、EspressifのESP32を含む
  • 他のGUIツールキットのテスト、例えばLVGLなど

これらの機能強化により、組み込み UI の自動テストの範囲と深さが拡大されます。

結論

MCU での自動 UI テストはもはや夢物語ではありません。Qt Quick Ultralite および Squish for MCU を使用すると、開発者は以下のことが可能になります:

  • 手動テストを信頼性の高い自動化に置き換えます
  • 画像および OCR ベースの手法を使用して UI の動作を検証します
  • テストを最新の CI/CD ワークフローに統合します

組み込みシステムが複雑化するにつれて、Squish のようなツールは品質の維持と開発の迅速化に不可欠となっています。

 

MCU_Squish

 

こちらもご覧ください

GUI 自動テストのための Squish

Squish for MCU

Qt Group のシニアソフトウェアエンジニア、カタリーナ・ベレンスによる基調講演「MCU デバイスでの Qt Quick Ultralite アプリケーションのテスト」をご覧ください。

 


Blog Topics:

Comments