この資料は、SmartBear の Blog で公開されている「The How and Why of Interrupt Tests for Mobile Apps」の日本語参考訳です。
ユーザーの端末が突然シャットダウンしたら、アプリがどうなるか考えたことはありませんか? アプリを使用中に、ユーザーが電話やプッシュ通知を受け取ったらどうなるのでしょうか? これらの疑問に対する答えを見つける唯一の方法は、モバイル アプリの割り込みテストを実行することです。この記事では、割り込みテストについて説明し、ユーザーに一貫した楽しい体験を提供するため割り込みテストを行う方法を紹介します。
割り込みテストとは?
スマートフォンのアプリを使用中に、友人から電話がかかってくるとアプリは中断されます。電話が終わってアプリに戻ると、アプリは中断前の状態から動作を再開します。ユーザーにとってこれは当たり前であるため、ユーザーがこの動作について深く考えることはありません。しかし、モバイル アプリの開発者やテスターは、アプリが中断しても動作を再開できることを確認する必要があります。
割り込みテストを使用することで、フローを中断する特定のイベントの後のアプリの動作をチェックできます。多くの場合、Android や iOS が代わりに処理してくれるため、チームはこの種のテストを実施することを忘れがちです。しかし、ユーザーに好ましい体験を提供するには、アプリが常に期待通りに動作することを確認する必要があります。この期待値は、必ずしもすべてのモバイル アプリや機能で同じではないため、各自で定義してテストしなければなりません。
モバイル アプリの割り込みテストは、アプリの品質とユーザー体験を向上させるために必要な作業です。そのため、9 つの最も一般的なテスト タイプに関するブログ記事で詳しく説明したように、このテストをモバイル アプリのテスト戦略に統合すべきです。
一般的なテスト シナリオ
割り込みテストを行う方法を説明する前に、一般的なテスト シナリオを確認しておきましょう。
- 携帯電話のバッテリー残量が少なくなったときに警告を出す
- 電話や SMS を受信する
- 他のアプリなどからのプッシュ通知を受け取る
- 電源の接続や切断時に通知を受け取る
- インターネット接続の切断と回復など、さまざまなネットワーク接続条件
- スマートフォンのアラーム、ストップウォッチ、タイマーによる割り込み
上記のような割り込みが発生した際に、アプリがどのように振る舞うべきかは、すでにある程度決まっています。もちろん、アプリがクラッシュするようなことがあってはなりません。いくつかの選択肢を見てみましょう。
モバイル アプリは割り込みにどう対処すべきか?
前述の割り込みテスト シナリオをベースに適宜状況を追加して、独自のモバイル アプリ向けテスト戦略を構築できます。シナリオごとにアプリに期待される動作を定義する必要があります。
幸い、モバイル アプリに期待される動作の考察と定義にはあまり時間を要しません。一般に、ユーザーは一定の水準に慣れているため、モバイル アプリが特定の動作をすることを期待します。前述のように、モバイル OS はいくつかの割り込みに対処してくれます。たとえば、ユーザーが他のアプリからプッシュ通知を受け取り、それをタップしない場合、アプリは何もなかったかのように動作を再開します。
しかし、ユーザーが通知をタップすると、ユーザーの携帯電話は対応するアプリを開きます。その結果、あなたのアプリはバックグラウンドで動作することになります。ユーザーがアプリに切り替えたときに、アプリが期待通りに動作するかどうかを確認する必要があります。同じことが、電話や SMS の受信など、アプリをバックグラウンドで実行させる他の割り込みにも当てはまります。
また、携帯電話のバッテリー残量が少なくなったときに、すべてが正しく動作するかも確認したほうが良いでしょう。バッテリーが空になるなどして携帯電話が予期せずシャットダウンした場合、再起動後にアプリが意図した通りに動作するかどうかを確認します。
まとめると、チェックすべき重要な点は以下の通りです。
- アプリがクラッシュしないか
- アプリは期待通りに動作し続けるか
- アプリは小さな中断をうまく「無視」できるか
モバイル アプリの割り込みテストを効率良く実施する方法
モバイル アプリの割り込みテストは、理論上は手動で行うことができます。しかし、手動テストはアプリのタイムリーなリリースを妨げる深刻なボトルネックとなる可能性があります。割り込みテストも例外ではなく、できるだけ多くのテスト シナリオを自動化する必要があります。そのためには、適切なツールとフレームワークが必要です。
幸い、割り込みテストには、ほとんどすべての機能テスト フレームワークを使用できます。たとえば、XCTest を使って iOS アプリのテストを行う場合、テスト ケースに UI Interruption Monitors を追加できます。詳細は、Apple のドキュメントを参照してください。
Android では、UI/Application Exerciser Monkey という便利なコマンドライン ツールが提供されており、Android SDK に組み込まれています。このツールを使って、エミュレーターや実機で擬似的にランダムなイベント ストリームを生成できます。ストレス テストを行うツールを探している場合、Android の Monkey ツールも良い選択肢です。
複数のデバイスで同時に割り込みテストを実行する
どのツールやフレームワークを使用して割り込みテストを自動化しても、テストの実行時間とモバイル アプリのテスト効率を向上させることが可能です。たとえば、一度に 1 つのデバイスと 1 つの OS バージョンでテストを実行する場合、テストには非常に長い時間がかかります。この問題を解決するには、社内のデバイス ラボまたはクラウド ベースのソリューションで、複数のデバイスで同時にテストを実行します。
もちろん、割り込みテストに限らず、すべての自動テストを同時に実行することで、さらに時間を節約することが可能です。これにより、デバイスやオペレーティング システムのバージョンに関係なく、大多数のユーザーに対してアプリの動作を保証できます。
以下の記事は、パラレル (並列) テストがモバイル アプリにもたらす利点を評価するのに役立ちます。
まとめ
この記事をきっかけに、割り込みテストをテスト戦略に組み込むことを検討いただければ幸いです。まず、発生する可能性がある割り込みと、アプリに期待される動作を定義します。次に、任意のツールでテスト ケースを作成し、それを自動化し、できるだけ多くのデバイスで同時実行します。
SmartBear 社では、実機クラウドを無料でお試しいただけます。テストを同時実行することで、モバイル アプリのテストを大幅にスピードアップできることを実感してください。
BitBar 製品の詳細や無料評価版については、弊社の Web サイトをご覧ください。
画像の出典: Ivana Divišová [source link] (著作権フリー)