テスト自動化ツール AppiumをUnifinityで使ってみる

テックポエム

本日はテストの自動化をテーマにしたいと思います。

Unifinityのアーキテクトからテストを考える


我々ユニフィニティーは、マルチOS向け開発のプラットフォームメーカーです。
アプリを開発するのではなく、アプリを開発するツールを提供しています。
従って、開発手段、ランタイム/エンジン、実行環境の3つを提供する必要があります。
また、Unifinity Studioで作成したアプリは、Windows/iOS/Android の3OS用の Unifinity Application Playerで動作するようになっています。


下図はUnifinityの仕組みを簡易に説明した図となりますが

  • 3OSとも、C/C++で動作する部分は、エンジン側のOS共通で吸収している
  • OS固有処理(ネイティブ処理)は、各OSで実装する

という性質を持っています。

pic1.png

【OS共通】
OS共通であるC/C++は、昔からある言語であり枯れた技術であること、オンリーワン実装で済むため、一度高品質なもの作りこめば、不具合は発生しにくいと言えます。
しかしながら、以下については注意が必要です

  • 描画はOpenGLを用いて行っているため、端末の解像度差異による意図せぬ不具合
    ※ネイティブアプリ開発フレームワークでは、自動で補完してくれるところを職人芸で実装している部分が多いです
  • 原始的なC言語で実装されているため、ネイティブのフレームワークが持っている高度なメモリ管理が使えないため、メモリの割り当てや解放などを厳密に行わないと

メモリリークが発生する

【ネイティブ処理】
ネイティブ処理は、OSのバージョンアップに伴う仕様変更による影響が出やすく、とにかくリグレッション試験を継続的に続け、デグレを防止することが重要です。
また、OS毎に作りこむ部分が多いため、コード数が多くなります。

  • PUSH通知の仕様が変わり、OSベンダーのAPIの仕様が変更され個別対応が増える
  • フォアグラウンドやバックグラウンドにおける挙動にOS差があり実装方法が異なる
  • BlueTooth通信やPUSH通知の仕様にOS差があり、実装方法も異なる

テストの自動化によるメリット


2つの観点から、テストを自動化することで、生産性の向上が見込めます。

 1.開発ツールで必要なテストは何か

どんなアプリが作られるかわからないため、アプリの機能ベースではなく
Unifinityが持っている開発機能ベースで試験をする
→全てのコントロール、全ての処理、境界プロパティ値の組み合わせを網羅
→膨大なテストケースになるが、上記が網羅されたテストアプリを作れば
  自動化によるメリットは計り知れない

 2.OSバージョンアップの頻度の多さや端末解像度のバリエーションの増大に備える

全網羅試験をOSバージョン/解像度種類に、バージョンアップリリースの度に行うことで、バージョンアップによるデグレを防止できる
→マンパワーのみで対応から自動化による対応で品質と生産性を向上できる
→テスト結果をデジタル化し、機械的に比較することでヒューマンエラーを
 防止することができる

テスト自動化の実現方法


テスト自動化にあたっては、以下の観点を重視します。
① Windows/Android/iOS実機で自動実行が可能であること
② 1台のホストPCから、複数台の試験が同時に可能であること
③ 自動化スクリプトは3OS共通で使えること
④ 座標を指定したタップ、スクロール、フリック等が可能であること
→Unifinityの内部オブジェクトはオブジェクトIDとして取得できないため
→異なる解像度の対応は、座標や幅に補正値をかけることで対処可能
⑤ オープンソースで提供され、公正かつ継続的な利用が可能であること

上記要件を満たしたものとして、Appiumを用いて自動化を実施します。
次回からは、Appiumの環境構築方法や、リグレッション試験の実演を紹介致します。