早期のソフトウェアテストは、設計の妥当性を検証します
「早期に、そして頻繁にテストを行う」という考え方は、アジャイルソフトウェア開発の戦略として生まれ、現在ではあらゆる分野のソフトウェア開発者にとって不可欠な原則となっています。特に、クロスプラットフォームのアプリケーションを開発する開発者にとって、早期のテストは重要です。なぜなら、彼らは様々な物理的特徴やオペレーティングシステムの機能を備えたモバイルデバイスに対応する必要があるからです。
MobileTogetherには、各モバイルプラットフォームごとに時間のかかるコンパイル、デプロイ、デバッグのサイクルを繰り返すことなく、開発プロセスに早期のソフトウェアテストを組み込むための機能が備わっています。Altovaのウェブサイトでは、[automated-testing-for-mobile-apps|MobileTogetherシミュレーターによる早期ソフトウェアテスト機能について説明されており、また、[テストケース]]において、特定の操作のセットを記録し、再実行できる機能についてもブログで紹介しています。
この投稿では、クライアント環境でのテスト実行について説明します。MobileTogether Designerに組み込まれているこの機能により、開発者は、Android、iOS、Windowsデスクトップ、またはWindows Phoneなど、サポートされているあらゆるモバイルデバイスやプラットフォーム上で、アプリのデザインを瞬時に確認し、ロジックや機能を検証することができます。

クライアント環境でのテスト実行は、特に以下の種類のアプリケーションの初期段階でのソフトウェアテストにおいて非常に有効です
- Windowsプラットフォーム上のデザイナーでは利用できない、モバイル機能(例えば、SMSメッセージの送受信など)をご利用いただけます
- オペレーティングシステムによって動作がわずかに異なる機能を使用します。例えば、「Geolocationを表示」という機能は、クライアントのデフォルトの地図アプリケーションを開く動作を行います
- 新しいモバイルモデルでテストを行う必要があります。そのモデルの画面サイズが、デザイナーが使用するプレビューデバイスと一致しない可能性があるためです
テスト実行に必要な条件は非常にシンプルです。テストに使用するモバイルデバイスには、MobileTogether Client アプリがインストールされている必要があります。また、モバイルデバイスと MobileTogether Designer ワークステーションが同じネットワークに接続されており、Designer ワークステーションのネットワークアドレスが、モバイルデバイス上で MobileTogether サーバーとして設定されている必要があります。
クライアントデバイスが準備完了すると、開発者は、デザイナープロジェクトのメニューまたは便利なツールバーから、「クライアントでのテスト実行」を開始できます

GPS機能を活用した、現在開発中のアプリケーションについて見ていきましょう。このアプリケーションの開発者は、動作確認用のデバイスとしてiPhone 6 Plusを選択しています。
アプリケーションをテストする最初の機会は、MobileTogether Designerに搭載されている機能であるMobileTogetherシミュレーターを使用することです。このシミュレーターは、開発のあらゆる段階で利用できます。
シミュレーターのメイン画面には、選択されたプレビューデバイス上にアプリがどのように表示されるかを確認できます。開発者は、デバイスの選択を変更することで、iOS、Android、Windowsなど、様々なデバイス上でのUI表示を確認したり、縦向きと横向きの表示をその場で切り替えたりすることができます。
このシミュレーターは、アプリケーションの実行中にページソースデータツリーで発生する変更をリアルタイムで反映します。デザイナーの「メッセージ」ウィンドウには、実行中の詳細なステップごとのレポートが表示され、クライアントアプリケーションとサーバー間のメッセージも含まれます。シミュレーション中は、ユーザーの操作が必要なコントロールはすべて有効になります。
以下に、シミュレーター上で動作しているアプリの画面を示します

すぐに2つの問題点が明らかになります。まず、シミュレーターは実際のGPS座標を報告しません。代わりに、モバイルデバイスの動作とGPS座標の更新をシミュレートするために、データファイルを使用しています。次に、アプリ内の「地図表示」ボタンをクリックすると、Windowsのワークステーション上で動作しているデザイナー上でBingマップが起動されますが、本来は実際のiPhoneではデフォルトの地図アプリとしてApple Mapsが起動されるべきです。
クライアント環境でのテスト実行機能を使用することで、実際のモバイルデバイス上でアプリケーションを実行し、正確なGPS機能を確認し、地図表示ボタンの動作を検証することができます。最初のテストでは、Androidスマートフォンを使用します。「クライアントでのテスト実行」ボタンをクリックすると、デザイナー内に新しいウィンドウが開きます

この時点では、DesignerアプリケーションがMobileTogetherサーバーとしても機能しています。クライアントデバイスがアプリケーションを起動すると、内部のメッセージウィンドウが開きます。
開発者は、デザイナーのダイアログで「はい」をクリックして続行し、アプリケーションがクライアントデバイス上で実行されます。しかし、すぐに予期せぬ問題が発生しました。デフォルトのテキストサイズが非常に小さいのです

テキストサイズを大きくするために「Abc+」ボタンを単純にクリックし、最終的なユーザーにも同じように操作してもらうこともできますが、それはあまり洗練された、ユーザーフレンドリーな解決策とは言えません。さらに調査した結果、デザイナーにある「クライアントでのテスト実行」ウィンドウを使用することで、アプリケーションが動作している際のデータ構造を確認できます

永続データツリー内の textSize 要素には、テキストラベルやボタンのフォントサイズを絶対ピクセル単位で設定する値が格納されています。デフォルト値として20が設定されましたが、これはデザイン段階でiPhone 6 Plusでは問題ありませんでしたが、現在のデバイスでは適切に機能しません。
各クライアントデバイスごとに、デフォルトのテキストサイズを固定値から、ピクセルサイズに基づいて動的に変化する関数に簡単に変更できます。その後、すぐに新しいテストを実施できます。
MobileTogetherは、アプリケーションが実行中に、開発者があらゆるエンドユーザーデバイスの様々な特性にアクセスできるように、グローバル変数を提供します。デザイナーの「グローバル変数」ウィンドウでは、選択されたプレビューデバイスの値が表示されます。以下に、iPhone 6 Plusの値をキャプチャしたスクリーンショットを示します

textSize要素にデフォルト値として20ピクセルを設定する代わりに、グローバル変数MT_DeviceHeightに基づいて関数を作成できます。20を736で割ると約2.7%になるため、この値を活用して、どのクライアントデバイスでも初期のtextSizeを設定するためのXPath関数を作成します

これで、Androidスマートフォンを使って、クライアント環境での動作を再度テストし、結果を確認することができます。

上記の「試運転」画面では、新たに計算されたデフォルトのtextSizeの値が表示されています。以下に、スマートフォンからの新しいスクリーンショットを示します

デバイスの画面の高さに基づいて自動的に計算されるテキストのサイズは、以前よりもずっと適切で、ユーザーにとって使いやすくなっています。また、"Abc-"ボタンと"Abc+"ボタンを使用することで、テキストサイズをさらに細かく調整できます。これらのボタンは、それぞれtextSize要素から値を減算したり、加算したりするだけです。
さて、元の課題である、アプリ内の「マップ表示」ボタンの動作検証に戻りましょう。以下に、アプリの画面と、Androidスマートフォンでの対応するマップ表示のスクリーンショットを示します

以下に、同じ写真がiPhoneで撮影されたものを紹介します

上記の4つのスクリーンショットはすべて、クライアント環境でのテスト実行中に撮影されたものです。各プラットフォームで表示される地図の正確な内容は、それぞれの地図アプリケーションの機能やユーザー設定によって異なります。例えば、Androidスマートフォンで使用できるGoogleマップにはストリートビュー機能がありますが、Appleのマップアプリにはその機能がありません。
洗練されたアプリケーションを開発するために、MobileTogetherの様々な機能を活用し、クライアント環境での初期段階のテストを「トライアルラン」で確認することができます。これには、統合されたヘルプ、チュートリアル、そして多くのサンプルが付属した、無料で利用できるMobileTogether Designerをダウンロードすることで実現できます。