優れたアプリを評価する簡単な方法は、アプリ内のワークフローを確認し、アプリ エクスペリエンスのスムーズさと安全性を評価することです。
このチェックリストでは、アプリの品質の評価に役立つ、一連の中核品質基準とそれに関連するテストを定めています。このような基準の一部は見落としやすいため、このテストを使用することでそのような基準を漏れなくテスト計画に取り入れられます。
このチェックリストは、すべてのアプリが満たすべき最低限の品質基準を確認するためのものです。実際のテストでは、こちらで説明している内容以上のチェックを行うことをおすすめします。
品質チェックリストの各項目には、チームとやり取りする際に便利な一意の ID が割り当てられています。こちらのガイドラインの以前のバージョンもご覧いただけます。
視覚的エクスペリエンス
アプリでは、一貫性のある直感的ユーザー エクスペリエンスを提供するために、標準的な Android 視覚デザインと操作パターンを適宜指定する必要があります。
分野 | ID | テスト | 説明 |
---|---|---|---|
ナビゲーション | VX-N1 | CR-3 | アプリは、標準システムの戻るボタンのナビゲーションをサポートするものとし、画面上のプロンプトとしてカスタムの「戻るボタン」は一切使用しない。 |
VX-N2 | CR-3 | アプリは、前の画面 / ホーム画面に戻るためのジェスチャー ナビゲーションをサポートしている。 | |
VX-N3 | CR-1 CR-3 CR-5 |
アプリでは、ユーザーやアプリの状態を適切に保存し、復元する。 アプリは、フォアグラウンドから離れる際にユーザーやアプリの状態を保存し、戻るボタンの使用や他の状態変化により誤ってデータが消失するのを防ぐ。 フォアグラウンドに戻る際、アプリは保持されている状態と、保留されていた重要なステートフル トランザクションを復元する必要があります。たとえば、編集可能な項目の変更、ゲームの進行状況、メニュー、動画、アプリやゲームのその他のセクションなどが該当します。
|
|
通知 | VX-S1 | CR-9 | 通知は、デザインのガイドラインを遵守している。具体的には、次のとおりです。
|
VX-S2 | CR-9 | メッセージ アプリ、ソーシャル アプリ、会話の場合:
| |
UI とグラフィックス | VX-U1 | CR-5 | 横向きと縦向きに加え、デバイスの折りたたみ状態と展開状態をサポートします。 向きと折りたたみ状態は、基本的に同じ機能と動作を提供し、同等の機能が維持されるようにします。 |
VX-U2 | CR-5 | アプリはどちらの向きでもアプリ ウィンドウ全体に表示され、デバイスの折りたたみと展開などの構成変更によりレターボックス表示されない。 画面の形状の若干の違いに対応するために、目立たない程度にレターボックスを使用することは可能。 |
|
VX-U3 | CR-5 | アプリは、ディスプレイのレンダリングの問題や状態が失われることなく、ディスプレイの向きやデバイスの折りたたみと展開の急な変化に適切に対応します。 | |
画質 | VX-V1 | CR(すべて) | アプリは、目立った歪み、ぼやけ、粗さなどを生じさせずに、グラフィックス、テキスト、画像、その他の UI 要素を表示する。
|
VX-V2 | CR(すべて) | アプリは、テキストとテキスト ブロックを、サポートされている各言語で問題のない状態で表示する。
|
|
VX-V3 | CR(すべて) | アプリのコンテンツ、アプリが参照するすべてのウェブ コンテンツは、ダークモードに対応している。 | |
ユーザー補助 | VX-A1 | CR(すべて) | タップ ターゲットのサイズは 48 dp 以上とする。詳細 |
VX-A2 | CR(すべて) | アプリのテキストとフォアグラウンドのコンテンツは、背景に対する色の一定以上のコントラスト比を確保する。
詳細については、色とコントラストをご覧ください。 |
|
VX-A3 | CR(すべて) | contentDescription を使用して、TextView 以外の各 UI 要素を記述する。 |
機能
アプリには、想定される機能の動作を実装する必要があります。
分野 | ID | テスト | 説明 |
---|---|---|---|
音声 | FN-A1 | CR-1 CR-8 |
音声は、アプリがフォアグラウンドに戻ると、再開するか、再生が一時停止状態であることをユーザーに知らせる。 |
FN-A2 | CR-1 CR-2 CR-8 |
音声再生が主要な機能である場合、アプリはバックグラウンド再生をサポートする。 | |
FN-A3 | CR-0 | ユーザーが音声の再生を開始したら、アプリは 1 秒以内に次のいずれかを行う。
|
|
FN-A4 | CR-0 | アプリは、音声の再生が開始された場合は音声フォーカスをリクエストし、再生が停止した場合は音声フォーカスを破棄する。 | |
FN-A5 | CR-0 | アプリは、他のアプリからの音声フォーカスのリクエストを処理する(例: 別のアプリで音声が再生されたときに再生音量を小さくする)。 | |
Media | FN-M1 | CR-0 CR-6 CR-8 |
アプリがバックグラウンドで音声を再生する場合は、MediaStyle でスタイル設定された通知を作成する。 |
FN-M2 | CR-0 | アプリが動画を再生する場合、ピクチャー イン ピクチャーの再生をサポートする。 | |
FN-M3 | CR-0 | アプリが動画をエンコードする場合は、HEVC 動画圧縮規格を使用する。 | |
共有 | FN-S1 | CR-0 | アプリがコンテンツを共有するときは、Android Sharesheet を使用する。Android Sharesheet では、カスタム ソリューションでは利用できないターゲットを提案できる。 |
バックグラウンド サービス | FN-B1 | CR-6 | バックグラウンドで必要以上に長時間にわたってサービスが実行されない。ユーザーのデバイスがスムーズに動作するように、システムによってバックグラウンド サービスに関するさまざまな制限が適用されている。次のようなバックグラウンド サービスの使用方法は推奨されません。
目的に合ったソリューションを選択する方法をご覧ください。 |
パフォーマンスと安定性
アプリは、ユーザーの期待するパフォーマンス、安定性、互換性、応答性を提供する必要があります。
分野 | ID | テスト | 説明 |
---|---|---|---|
安定性 | PS-S1 | CR(すべて) SD-1 |
アプリは、クラッシュせず、ANR(Android 応答なし)エラーを引き起こすUI スレッドをブロックしない。Google Play のリリース前レポートを利用して、安定性に関する潜在的な問題を特定します。デプロイ後は、Google Play Console の Android Vitals のページに注意を払ってください。 |
パフォーマンス | PS-P1 | CR(すべて) SD-1 |
アプリは、すぐに読み込まれるようにする。または、読み込みにかかる時間が 2 秒を超える場合は、画面上でユーザーに対するフィードバック(進行状況を示すインジケーターや、同様のシグナル)を提供する。 |
PS-P2 | CR(すべて) SD-1 |
アプリは、16 ms ごとにフレームをレンダリングし、60 フレーム/秒を達成する。デベロッパーは、テストの [HWUI レンダリングのプロファイル作成] オプションを使用できます。問題が発生した場合は、遅いレンダリングの診断に役立つツールが利用できます。 | |
PS-P3 | PM-1 | StrictMode を有効にしている場合(下記の StrictMode によるテストを参照)、アプリのテスト時に赤の点滅(StrictMode からのパフォーマンスの警告。ストレージ、ネットワーク アクセス、メモリリークに関する動作不良を示す)が表示されない。 | |
SDK | PS-T1 | CR-0 | アプリは、クラッシュしたり、コア機能に大きな影響を与えたりすることなく、最新公開版の Android プラットフォームで動作する。 |
PS-T2 | SP-1 | targetSdk 値を設定して、Google Play 要件を満たすために必要な最新の Android SDK をターゲットに設定する。 |
|
PS-T3 | SP-1 | アプリは compileSdk 値を設定して、最新の SDK で構築されている。 |
|
PS-T4 | SP-2 SP-3 |
使用されている Google またはサードパーティの SDK がすべて最新である。これらの SDK の改善(安定性、互換性、セキュリティなど)が、適切なタイミングでユーザーに提供される。 Google SDK では、利用できる場合には Google Play 開発者サービスの SDK の使用を検討する。これらの SDK には下位互換性があり、自動更新を受け取れ、アプリのパッケージ サイズを削減して、オンデバイスのリソースを効率的に使用できる。 デベロッパーは使用されているサードパーティの SDK を含み、アプリのコードベース全体について責任を負う。 |
|
PS-T5 | SP-3 | アプリは非 SDK インターフェースを使用していない。 | |
PS-T6 | SP-2 | 製品版アプリにはデバッグ ライブラリが含まれていない。デバッグ ライブラリはパフォーマンスやセキュリティの問題を引き起こす可能性がある。 | |
バッテリー | PS-B1 | BA-1 | アプリは、Android 6.0 で導入された電源管理機能(Doze とアプリ スタンバイ)を適切にサポートする。電源管理によってコア機能が妨げられる場合は、資格要件を満たすアプリのみ、免除を要求できる。Doze とアプリ スタンバイにおけるその他のユースケースのサポートをご覧ください。 デベロッパーは開発中にこれらの ADB コマンドを使用して、アプリ スタンバイと Doze の動作をテストできる。 バッテリー使用量に関して、デベロッパーは Android Studio Energy Profiler または Battery Historian ツールを使用し、計画済みのバックグラウンド作業と組み合わせて、想定外のバッテリー使用量について診断ができる。 |
プライバシーとセキュリティ
アプリは、ユーザーデータと個人情報を、適切な権限レベルで安全に処理する必要があります。
Google Play ストアで公開するアプリの場合、このチェックリストに加え、ユーザーデータに関するポリシーも遵守することで、ユーザーのプライバシーを保護できるようにします。
地域 | ID | テスト | 説明 |
---|---|---|---|
権限 | SC-P1 | SC-4 | アプリは、現在のユースケースのサポートに必要な最小限の権限のみをリクエストする。位置情報などの権限については、可能であれば、精細な位置情報ではなく、おおよその位置情報を使用してください。 |
SC-P2 |
アプリは主要なユースケースに直接関係がある場合にのみ、センシティブ データ(SMS、通話履歴、位置情報など)や料金がかかるサービス(電話アプリや SMS など)へのアクセス権限をリクエストする。これらの権限に伴う影響について、ユーザーに明確に開示する。 権限の使用方法によっては、機密情報にアクセスせずにアプリのユースケースに対応できる別の方法を使用できる(ユーザーの連絡先に関連する権限をリクエストする代わりに、暗黙的インテントを使用してアクセスをリクエストする方が適切な場合など)。 |
||
SC-P3 | CR-0 | アプリは、実行時の権限を、アプリの起動時にあらかじめリクエストするのではなく、機能がリクエストされたときにコンテキスト内でリクエストする。 | |
SC-P4 | CR-0 | アプリは特定の権限が必要な理由を明確に説明するか、推奨されるフローに沿ってアプリが権限を必要とする理由を説明する。 |
|
SC-P5 | CR-0 | ユーザーが権限を拒否または取り消すと、アプリはグレースフル デグラデーションを実行する。ユーザーがアプリの全体にアクセスできないようにしてはならない。 | |
データとファイル | SC-DF1 | SC-1 | 機密データがすべてアプリの内部ストレージに保存される。 |
SC-DF2 | SC-10 | ユーザーの個人データやセンシティブ データが、システムログまたはアプリ固有のログに記録されない。 | |
SC-DF3 | アプリでは、識別目的で IMEI などの再設定不可能なハードウェア ID を使用しない。 | ||
ID | SC-ID1 | CR-0 | アカウント認証情報やその他の機密情報(クレジット カード情報、住所、電話番号など)を自動入力するためのヒントを提供する。 |
SC-ID2 | CR-0 | Android 用認証情報マネージャーを統合して、パスキー、フェデレーション ID、従来のパスワードのサポートを統合したシームレスなログイン エクスペリエンスを実現します。 | |
SC-ID3 | CR-0 | 生体認証に対応し、支払いや機密情報(重要なユーザー ドキュメントなど)を保護する。 | |
アプリ コンポーネント | SC-AC1 | SC-5 |
すべてのアクティビティ、サービス、ブロードキャスト レシーバ、特にコンテンツ プロバイダ用に明示的に 他のアプリとデータを共有するアプリケーション コンポーネント、他のアプリから呼び出されるコンポーネントのみがエクスポートされる。 |
SC-AC2 | CR-0 SC-4 |
すべてのインテントとブロードキャストを、次のベスト プラクティスに沿って設定する。
|
|
SC-AC3 | SC-3 | アプリ間でコンテンツを共有するすべてのコンポーネントは、カスタム権限に android:protectionLevel="signature" を使用する。これには、アクティビティ、サービス、ブロードキャスト レシーバ、特にコンテンツ プロバイダが含まれる。アプリはインストール済みパッケージのリストにアクセスする必要がないようにする。Android 11 以降、アクセスは制限されている。 |
|
ネットワーク | SC-N1 | SC-9 | すべてのネットワーク トラフィックが SSL 経由で送信される。 |
SC-N2 | SC-6 | アプリがネットワーク セキュリティ構成を宣言している。 | |
SC-N3 | アプリが Google Play 開発者サービスを使用する場合、アプリの起動時にセキュリティ プロバイダが初期化される。 | ||
WebView | SC-W1 | SC-6 | ローカル コンテンツへのアクセスに setAllowUniversalAccessFromFileURLs() を使用しない。代わりに、WebViewAssetLoader を使用します。 |
SC-W2 | SC-7 | WebView では、信頼できないコンテンツに対して addJavaScriptInterface() を使用しない。 Android 6.0 以降では、代わりに HTML メッセージ チャネルを使用する。 |
|
実行 | SC-E1 | アプリの APK の外部からコードを動的にロードしない。デベロッパーは Android App Bundle(Play Feature Delivery と Play Asset Delivery を含む)を使用する。 2021 年 8 月から、Google Play ストアのすべての新しいアプリにおいて、Android App Bundle の使用が必須となっている。 |
|
暗号 | SC-C1 | アプリが、プラットフォームで提供される強力な暗号アルゴリズムと乱数生成ツールを使用する。また、アプリがカスタム アルゴリズムを実装していない。 |
Google Play
Google Play でアプリが公開できることを確認します。
分野 | ID | テスト | 説明 |
---|---|---|---|
ポリシー | GP-P1 | GP(すべて) | アプリが Google Play デベロッパー コンテンツ ポリシーの各条項を遵守している。不適切なコンテンツを提供したり、他者の知的財産やブランドを使用したりしていない。 |
GP-P2 | GP-1 | アプリの対象年齢が、コンテンツのレーティングに関するガイドラインに基づいて適切に設定されている。 | |
アプリの詳細ページ | GP-D1 | GP-1 GP-2 |
アプリのフィーチャー グラフィックが、こちらのサポート記事で概説されているガイドラインを遵守している。次の内容を確認すること。
|
GP-D2 | GP-1 | アプリのスクリーンショットや動画で、Android 以外のデバイスを表示したり、そうしたデバイスに言及したりしない。 | |
GP-D3 | GP-1 | アプリのスクリーンショットや動画で、アプリの内容や使用感を伝える際に、誤解を招くような表現を使わない。 | |
ユーザー サポート | GP-X1 | GP-1 | Google Play ページの [レビュー] タブに表示される、ユーザーにより報告された一般的なバグについては、そのバグが再現可能で多数の異なるデバイスで発生する場合に対処する。バグがごく一部のデバイスでのみ発生する場合でも、該当のデバイスが特に人気のあるものや新しいものであれば、そのバグに対処する必要があります。 |
テスト環境のセットアップ
このチェックリストのテスト環境を設定するにあたって、次のことをおすすめします。
- エミュレータのテストに重点を置く - Android Emulator は、さまざまな Android バージョンと画面解像度でのアプリのテストに最適なツールです。ターゲット ユーザーの最も一般的なフォーム ファクタとハードウェア / ソフトウェアの組み合わせを代表する、エミュレートされたデバイス(AVD)を設定する必要があります。スマートフォンのテストに加えて、少なくとも次のエミュレータを使用して、他のフォーム ファクタのテストを行うことをおすすめします。
- 折りたたみ式デバイス - 7.6 インチ、ディスプレイが外側を向くデバイス(AVD Manager のスマートフォンに掲載されています)
- タブレット - Pixel C 9.94 インチ(2,560 px x 1,800 px)
- モバイルアプリの通知をテストするために、モバイル デバイス / エミュレータを Wear OS エミュレータとペア設定する場合 - Wear OS Round 1.84 インチ
- ハードウェア デバイス - テスト環境では、主要なフォーム ファクタと、現在ユーザーが利用できるハードウェアとソフトウェアの典型的な組み合わせとして、実際のハードウェア デバイスをいくつか用意します。市販されているあらゆるデバイスでテストを実施する必要はありません。1 つのフォーム ファクタにつき 1~2 台のデバイスを使い、代表的ないくつかのデバイスでのみテストを行います。
- デバイスのテストラボ - Firebase Test Lab などのサードパーティのサービスを使用して、さまざまなデバイスでアプリをテストすることもできます。
- 最新バージョンの Android でテストする - ターゲット ユーザーの代表的な Android バージョンをテストするだけでなく、最新バージョンの Android(現在は Android 14)についてもテストする必要があります。これにより、最新の動作変更によってユーザー エクスペリエンスが低下しないようにすることができます。
単体テスト、統合テスト、UI テストなど、テストの総合的なガイダンスについては、Android テストの基礎をご覧ください。
テスト手順
次のテスト手順は、アプリの品質に関するさまざまな問題を発見するのに役立ちます。複数のテストを組み合わせたり、複数のテストグループを独自のテスト計画に統合したりできます。これらのテスト手順に各基準を関連付ける方法については、上記のセクションをご覧ください。
タイプ | テスト | 説明 |
---|---|---|
基本事項 | CR-0 | すべての画面、ダイアログ、設定、ユーザーフローといった、アプリのあらゆる部分について、ナビゲーションを確認します。
|
CR-1 | アプリの各画面で、デバイスのホームボタンを押すか、ジェスチャー ナビゲーションで上にスワイプした後、[すべてのアプリ] 画面からアプリを再起動します。 | |
CR-2 | アプリの各画面から、実行中の別のアプリに切り替えた後、最近使ったアプリのスイッチャーを使ってテスト対象のアプリに戻ります。 | |
CR-3 | アプリの各画面(とダイアログ)で、[戻る] ボタンを押すか、スワイプ操作で戻ります。 | |
CR-5 | アプリの各画面で、少なくとも 3 回、デバイスを横向きと縦向きに、折りたたんだ状態と展開した状態に回転させる。 | |
CR-6 | 別のアプリに切り替えて、テスト対象のアプリをバックグラウンドに移行します。[設定] に移動し、テスト対象のアプリがバックグラウンド中に実行しているサービスがあるかどうかをチェックします。Android 4.0 以降では、[アプリ] 画面に移動して、[実行中] タブで該当のアプリを見つけます。 | |
CR-7 | 電源ボタンを押してデバイスをスリープ状態にしてから、電源ボタンをもう一度押して画面を復帰させます。 | |
CR-8 | デバイスで画面ロックを設定します。電源ボタンを押してデバイスをスリープ状態にします(デバイスがロックされます)。電源ボタンをもう一度押して画面を復帰させ、デバイスのロックを解除します。 | |
CR-9 | 通知ドロワーで、アプリが表示できるあらゆるタイプの通知を表示させて確認します。展開できる通知については展開し(Android 4.1 以降)、利用可能なすべてのアクションをタップします。 | |
CR-10 | Doze とアプリ スタンバイの他のユースケースのサポートを確認します。 | |
SD カードへのインストール | SD-1 | デバイスの SD カードにインストールしたアプリについて、「基本事項」のテストを繰り返します(アプリがこのインストール方法をサポートしている場合)。 アプリを SD カードに移動するには、[設定] > [アプリ情報] > [SD カードに移動] を使用します。 |
パフォーマンスと安定性 | SP-1 | Android マニフェスト ファイルとビルド構成を見直し、アプリが最新の利用可能な SDK(targetSdk と compileSdk )に基づいてビルドされていることを確認します。
|
SP-2 | build.gradle ファイルに古い依存関係がないか確認します。 |
|
SP-3 | Android Studio の lint ツールを使用して、非 SDK インターフェースの使用を検出します。他のテスト方法もあります。 | |
パフォーマンスのモニタリング | PM-1 | StrictMode のプロファイリングを有効にした状態で、「基本事項」のテストを繰り返します。 ガベージ コレクションと、それがユーザー エクスペリエンスに及ぼす影響に注意してください。 |
電池 | BA-1 | Doze とアプリ スタンバイのサイクル全体で「基本事項」のテストを繰り返します。 アラーム、タイマー、通知、同期などに細心の注意を払います。要件とガイドラインについては、Doze モードとアプリ スタンバイ モードでテストするを参照してください。 |
セキュリティ | SC-1 | 外部ストレージに保存されているデータをすべて確認します。 |
SC-2 | 外部ストレージから読み込まれたデータがどのように処理されているかを確認します。 | |
SC-3 | Android マニフェスト ファイルで定義されているすべてのコンテンツ プロバイダを確認します。各プロバイダに適切な protectionLevel が指定されていることを確認します。
|
|
SC-4 | アプリが必要とするすべての権限を、マニフェスト ファイル、実行時、およびデバイス上のアプリ設定画面([設定] > [アプリ情報])で確認します。 | |
SC-5 | Android マニフェスト ファイルで定義されているすべてのアプリ コンポーネントが適切なエクスポート状態になっていることを確認します。エクスポートされたプロパティは、すべてのコンポーネントに対して明示的に設定する必要があります。 | |
SC-6 | アプリのネットワーク セキュリティ構成を見直して、構成に対する lint チェックが失敗しないことを確認します。 | |
SC-7 | 各 WebView で、JavaScript が必要なページに移動します。 | |
SC-8 | 各 WebView で、アプリによって直接読み込まれていないサイトとコンテンツに移動してみます。 | |
SC-9 | クリアテキスト トラフィックを無効にするネットワーク セキュリティ構成を宣言してから、アプリをテストします。 | |
SC-10 | アプリを実行し、すべてのコア機能を使用している状態で、デバイスログを監視します。ユーザーの個人情報は記録してはなりません。 | |
Google Play | GP-1 | Google Play Console にログインして、デベロッパー プロフィール、アプリの説明、スクリーンショット、フィーチャー グラフィック、コンテンツのレーティング、ユーザーのフィードバックを確認します。 |
GP-2 | フィーチャー グラフィックとスクリーンショットをダウンロードし、対象とするフォーム ファクタやデバイスのディスプレイ サイズに合わせて縮小します。 | |
GP-3 | すべての画像および映像、メディア、テキスト、コード ライブラリ、アプリや拡張ファイルのダウンロードに含まれるその他のパッケージ コンテンツを確認します。 |
StrictMode によるテスト
パフォーマンス テストでは、アプリで StrictMode
を有効にして、パフォーマンス、ネットワーク アクセス、ファイルの読み取り / 書き込みなどに影響を及ぼす可能性のある操作を見つけることをおすすめします。メインスレッドと他のスレッドの両方で、問題のある可能性がある操作を探します。
StrictMode.ThreadPolicy.Builder
を使用してスレッドごとのモニタリング ポリシーを設定し、detectAll()
を使用して ThreadPolicy
でサポートされているすべてのモニタリングを有効にできます。
ThreadPolicy
については、penaltyFlashScreen()
を使って、ポリシー違反のビジュアル通知を必ず有効にしてください。