Remote testKitを使ってノマド実機テスト(その1)

Remote testKitを使ってノマド実機テスト(その1)

1.はじめに

情報社会を支える社会インフラとも言えるスマホアプリは、開発と並行してテストしますよね? プログラマはコードを書く事と前後してユニットテストを書いて実行し、アプリがひと通りできると、すぐにエミュレータや手元にあるスマホ実機で動作させて確認しますよね?商品となるアプリでは最終的に実機を使い、相当なコストをかけて「システムテスト」などを行います。それは、アプリの引き起こす、もっと深刻な社会的な不具合を回避するためと言えるでしょう。 いわゆる「不具合」は「ユニットテスト」などの純粋なロジックに近い階層だけでは発見できません。 考えられる可能性をすべて列挙し、検証する必要があります。そのため商用アプリでは、利用される可能性のあるスマホなどの端末を、コストと手間の許すかぎり集め、場合によっては数百にもなる、信じられない様な台数の携帯端末を使ってテストしています。中には、今ではほとんど誰も利用しない様な携帯電話や市場にはほとんど登場しない入手困難な専用端末も対象となります。スマホの数をそろえるとなると、出費や手間は相当なものになります。  また、企業レベルでテスト用に管理する端末は、セキュリティなどの理由から、厳重に管理する必要があり、デモなどでも気軽に持ち出せません。新しい事の大好きな開発者はアジャイル的な開発・検証手法を導入したくても、これらの管理上の理由やコストからそれに十分に取り組めできまません。この事は、いわゆる日本の製造業で大成功した「ものつくり」に似る「アジャイル開発」つまりソフトの「カイゼン」活動が十分に試行できず、停滞する事になってしまうのでは、と危惧します。またリソースの限られたベンチャ企業は、高い技術力があっても調達コストの制限からテストに手間をかけられない事になってしまいます。  この様に、ソフトウエアのテストを行うためには、多大な人的・金銭的コストがかかり、管理上の制限もあり、さらには、技術的なブレークスルーを産み出し難い障壁として存在することが分かります。 ソフトウエアの開発にはいわゆる「銀の弾丸」はありません。しかし、この一連の記事では、クラウド上に実機をオンデマンドで調達する「Remote TestKit (Remote testKit)」を使うことで、競争力のある高品質なソフトウエアを低コストで開発する事を紹介したいと思います。 今回の記事では、まず、スマホアプリ動作確認の基本、スマホアプリの動作を実機で確認します。次にRemote testKitを使い、スマホ実機が手元にない環境でも、同じことができる事を示します。ここで書いた、テストそのもの:実施する時期、粒度、テスト全体、については前の記事にまとめたので、良かったら参照してください。

2.スマホアプリのテストに関するトレンド

前回の記事で述べた様に、商用ソフトの開発では、工程の多くの部分をテストに費やす事を解説しました。また最近では、JenkinsなどのCI(継続的インテグレーション)ツール、Silk Mobile、eggPlant、QC-Wingなどのテスト自動化ツールが注目を浴びています。これらのツールは、テスト作業の効率化(標準化による生産性の向上)はもちろん、テスト結果を均質化(属人化によるムラ・バラツキの排除)し、テスト品質を向上させることに有効です。

3.Remote testKitのメリット – 実機のオンデマンド調達

 Remote testKitを導入すると、コストと手間をかけて実機をたくさん調達しなくても、必要な時に必要な数だけのスマホを用意し、無駄なくテストできます。また、これはいわゆる仮想端末ではなく、クラウド上に用意された「実機」そのものです。そのため、仮想装置を使った場合には、すり抜けていた実機の細かな挙動までもがテストの対象となります。

4.Remote testKitのメリット – 実機環境とネットワークの融合

 前回の記事では、商用アプリの開発の基本となる「V字モデル」を示しました。一般に、コーディングなどV字の底の部分では、ユニットテストやCI ツールの導入など、テスト自動化が容易であり、V字の上の部分では、テスト自動化が難しい事を示しました。それは、V字の底の部分では、取り扱う対象はソフトウエアそのものであり、ソフトウエアによるシステム自動化が比較的容易であるのに対し、V字の上の部分では、1つは、ハードウエアの操作を伴う事から人の手による操作が不可欠だったからです。 Remote testKitは、実機をネットワークで操作する事によりこの領域にも大きな変化をもたらします。 つまり、Remote testKitを導入することで、ソフトウエア的な柔軟性を享受しながら、開発プロセスの中に実機テストを組み込むことができます。これは、従来型開発から実機テストの手間・工期・コストを圧縮するのはもちろん、品質の改善など、スマホなどの組み込み機器の開発手法に大きな一石を投じることにもなるでしょう。 今回の記事では、アプリ開発の基本として、簡単なアプリを標準的なAndroid 開発環境から動作確認を行い、次回以降の記事では、CIツールを使ってこれを自動化します。

5.準備:テストプロジェクトの用意

 この連載では、Android で動作する簡単な電卓アプリを使い、スマホアプリのテスト自動化環境を構築して行きます。 Androidアプリの開発ツールとして「Android Studio」を使います。 このツールを使い、上記の電卓アプリが仮想/実機Androidで動作する事を確認します。最後にRemote testKitを使い、ネットワーク上のAndroidで動作する事を確認します。

6.インストール:実機を用意してアプリの確認

 開発環境を構築するために、開発用PCに「Android Studio」をインストールし、開発プロジェクトを開きます。そしてその開発プロジェクトをビルドし、コンパイルされたアプリをターゲットとなるマシンにインストールし、それを実行します。

7.Android Studioのインストール

Android Studioの公式ページからパッケージをダウンロードし、それをインストールします。今回はバージョン1.1.0 を使用しました。 パッケージは Windows、Mac OS X、Linux に対応します。アプリ開発に使用するPC(以下、開発PCと呼ぶ)に合わせてインストールを実行します。 Mac の場合、ダウンロードした .dmg ファイルを開き、Application フォルダへコピーします。このapp ファイルをクリックすると、Android Studioが起動します。起動すると、以下のような画面が表示されます。 column2-1

8.テストプロジェクトを開く

上記で AndroidStudio が無事インストールできたら、Androidで動作する電卓アプリのプロジェクトを下記のURLから開発PCにダウンロードし、AndroidStudio でこれを開きます。 電卓アプリは以下からダウンロードしてください。 電卓アプリプロジェクト

9.エミュレータで動作を確認

最初にAndroidStudio 搭載のエミュレータを使い、作成したプログラムの動作を確認します。AndroidStudio には、実機のエミュレータが標準で添付されています。これを使い、開発PCだけで作成したプログラムの動作をソフトウエア的に確認します。 メニューから、「Run」>「Run ‘app’」を選択すると、デバイス選択画面が表示されます。 column2-2 「Launch emulator」 を選択し、「OK」 ボタンをクリックすると、表示したデバイスのエミュレータが起動します。しばらくして、画面の左側にAndroidスマホのエミュレーション画面が表示されます。 column2-3 このエミュレータ画面をスワイプすると、待ち受け画面から次の様な電卓アプリの初期画面が表示されます。 column2-4 この状態でアプリを操作する事ができます。キーをクリックしてみてください。 以下の様に数値が表示され、電卓として操作できます。 column2-5

10.実機で動作を確認

次にAndroidStudioからAndroid端末に作成したプログラムをインストールし、動作させてみます。前述の「エミュレータで動作を確認」では、AndroidStudioに標準添付されたソフトウエアであるエミュエータで動作を確認しました。これを、開発PCから実機の Android端末にインストールして動作を確認します。 Android端末をUSB ケーブルで、AndroidStudioを実行させている開発PCと接続します。 接続の際、Android端末に「USBデバッグを許可しますか?」という確認ダイアログが表示されますので、「OK」をクリックしてください。 メニューから、「Run」>「Run ‘app’」を選択すると、デバイス選択画面が表示されます。 column2-6 今度は、「Device」欄にUSB ケーブルで接続済みのAndroid端末が表示されます。これを確認し、「choose a running device」を選択し、「OK」ボタンをクリックすると、Android端末の画面に電卓アプリが表示されます。 画面上のボタンをクリックし、電卓として操作できる事が確認できます。

11.インストール:(Remote testKit編) クラウド上の実機でアプリの確認

それでは今度はRemote testKitを使い、前述の「実機で動作を確認」と同様の事を行います。 具体的には、AndroidStudioからRemote testKitで用意した Android端末に作成したプログラムをインストールし、動作させてみます。前述の「実機で動作を確認」では、開発PCに実機の Android端末をUSBで接続してテストを行いました。このAndroid端末実機をRemote testKitでレンタルして同じ様にテストしてみます。 開発PCのRemote TestKit アイコンをクリックし、Remote testKitを起動します。 column2-7 登録したユーザ名・パスワードを入力して「ログイン」をクリックします。ログインできると、以下の様なスマホ端末一覧が表示されます。 column2-8 表示されるスマホ端末一覧から、レンタルする端末を選択します。 レンタルする端末を選択し、「レンタル」をクリックすると、内容を確認するダイアログが表示されます。内容を確認し、「レンタル」をクリックします。 column2-9 しばらくして、レンタルできると、開発PC画面に端末の画面が表示されます。 column2-10

12. Androidアプリのインストール(Remote testKitから)

それでは、レンタルした端末に電卓アプリをインストールしてみましょう。 メニューの「機能」から「アプリをインストール」をクリックします。すると、ファイルダイアログが表示されます。 ダイアログが表示されたら、実行アプリ本体である、apkファイルを選択します。このファイルは、先ほどダウンロードしたzip ファイルを解凍したディレクトリの、calculator/app/app-release.apk ファイルとなります。これを選択してボタンをクリックすると、インストールがただちに開始されます。インストール終了後、アプリがすぐに起動されます。この時、以下の様な画面になるでしょう。 column2-11 この開発PCに表示されるAndroid端末画面は、実際はRemote testKitクラウド内に存在する実機の画面をそのまま転送したものです。また画面操作などに対応してプログラムが実機で動作します。これなら、出先でもどこでも、実機によるプログラムの動作確認やデモなどができますね。「実機を持ち出さずに実機でテスト」なんだか言葉遊びみたいですが、すごいことができますね。

13.Androidアプリのインストール(ADB接続)

Remote testKit は、ADB を介し、Android端末とAndroidStudioを接続する機能を持ちます。 この機能を使うと、AndroidStudioなどのIDEからRemote testKitでレンタルしたスマホ端末を、あたかもIDEと実機が接続されている様に取り扱う事ができます。つまり、レンタル端末に対して、IDE と連動させて、以下の様な事ができます。 • ファイルの送信/受信 • ログの取得 • リモートデバッグ • アプリの状態取得 • 端末画面のキャプチャ 前記の「Androidアプリのインストール(Remote testKitから)」では、レンタルした実機にアプリのインストールと動作の確認「だけ」をしています。それに対し、今度は、アプリを動作させ、それと同時に開発PC上で動作する IDE とレンタルした端末とを、ADB(Android Debug Bridge)で接続し、リアルタイムでレンタルした端末の内部情報をモニタしています。 メニューから「設定」内の「ADT・DDMS・adb」ボタンをクリックします。  ※この機能を有効にするためには、事前に「設定」内の「ADB設定」で、adb.exeへのPathを設定しておく必要があります。 この操作の後、AndroidStudioから前記「実機で動作を確認」と同様に開発したプログラムを実機にダウンロードして動作を確認できます。 AndroidStudioのメニューから、「Run」>「Run ‘app’」を選択すると、デバイス選択画面が表示されます。 column2-12 ここにRemote testKitでレンタルした端末が表示されますので、「choose a running device」を選択し、「OK」ボタンをクリックすると、Android端末の画面に電卓アプリが表示されます。 column2-11 画面上のボタンをクリックし、電卓として操作できる事が確認できます。 ここで開発PCに、Remote testKitクラウド内に存在する実機Android端末の画面を表示し、同時に、ログなどをAndroidStudio にリアルタイムで表示します。これなら、SOHO でも、出先でも、どんな場所でも、あたかも実機がすぐ隣にある様に、テストやデバッグ作業ができますね。しかも、遠くはなれたクラウド上の端末なのにあらゆる内部情報まで、バッチリ確認できます。なんだか不思議な気がしますね。 テストが終わったら、ログオフして下さい。レンタル終了時、インストールしたアプリは削除されます。

14.まとめ

今回の記事では、最初に、Android用IDEである「Android Studio」をインストールしました。 次に、簡単なアプリを使い、これがAndroid端末で動作する事を確認しました。確認するAndroid端末として「Android Studio」添付の仮想シミュレータとAndroid端末実機を使用しました。 最後に、Remote testKitを使い、クラウド上のレンタル端末でアプリの動作を確認しました。ここでは、はじめに、ビルド済みのapk ファイルを直接レンタル端末にインストールしました。つぎに、レンタル端末と開発PC上のIDE とを ADBで接続し、IDE の操作によってレンタル端末へのアプリのインストールと、アプリの操作を行いました。 次回以降、このマニュアルで行った操作を、各種のCI (継続的インテグレーション)ツールを使って、自動化するテクニックを数回に分けて紹介してゆきます。 今回、動作確認はすべて開発者による「マニュアル操作」で実行しました。当然の事ながら、これらの操作は開発の基本となります。これらの作業はアプリ開発においては、ほとんどの場合、定型業務となります。そのため、ツールを使った「自動化」を導入する事で、繰り返し発生する手間・コスト削減、テスト作業者のスキル差によるムラ・バラツキの影響を回避し、作業を大きく改善する事となるでしょう。 それでは、宜しくお願いします。

執筆者 丸地弘城

用語集

継続的インテグレーション(CI、Continuous Integration) ビルド、テスト、ドキュメント作成などを継続的に実施する事で、開発作業の各種品質をより良くする生産活動の事。 テスト自動化ツール ソフトウエアなどの試験対象物に対し、作業者による人的操作によらず、規定されたプログラムに従って、各種の閾値や動作パターンなどから、動作妥当性の合否判定を自律的に実施する装置。 Jenkins オープンソースの継続的インテグレーションツール。 Silk Mobile マイクロフォーカス社製の自動化検証ツール eggPlant TestPlant社製の自動化検証ツール QC-Wing 日本ノーベル社製の自動化検証ツール

参考文献

Jr.,フレデリック・P. ブルックス、「人月の神話」、ピアソンエデュケーション