スマホアプリテスト


# 概要
まずは、**どのようなテストを考えていくか**プランニングする
※手動で実施するのか、一部自動で対応するのかも含め。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55160/b2c44660-5d8b-9a2e-1e2d-5cd27a1760e6.png)


**アプリ品質向上**や**リリース時の作業効率**をどう改善し、リリース品質による**ユーザー離れ**や**クライアントの利益**を計画的に検知できる仕組みや検証端末の選定（サービスによって使われる端末も違うので日々調査することが大事）や検証台数、**テスト内容を検討**する。


※**UX**や**UI**も「**アプリ品質の1つ**」で使いやすさや見た目がユーザーに受け入れられないと、インストールすらされなくなる。レビュー評価も低い傾向になります。
**リテンション率（顧客維持率）** も日々見ていくことが大事になります。


| ホーム     |  トップ     |     詳細     | 画像 |
|:-----------------:|:------------------:|:------------------:|:------------------:|
| <img width="150" alt="IMG_0842.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55160/fdd42804-9d3d-62d9-1daf-9fdd0b4ff52c.png">             | <img width="150" alt="IMG_0C13D027261B-1.jpeg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55160/7cd7e6ef-e196-5086-9c2f-986bbf2a4348.jpeg">|  <img width="150" alt="IMG_0C13D027261B-1.jpeg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55160/7cd7e6ef-e196-5086-9c2f-986bbf2a4348.jpeg"> | <img width="150" alt="IMG_0C13D027261B-1.jpeg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55160/7cd7e6ef-e196-5086-9c2f-986bbf2a4348.jpeg"> |||


## テスト計画
スマートフォンの登場で、**PCからスマートフォン**へシフト。
また数多くのアプリの登場により、アプリ商圏は年を追うごとに大きくなっています。
その中で、どれだけ**高品質のアプリをリリース**出来るかが、提供サービスの中で大事になっています。
いくら短期間でリリースを繰り返しても、**不具合だらけのサービス**では使い物にならないばかりか、Churnによって損失が大きくなり、かつ顧客満足度が低下し競合他社へ顧客流出する結果に。

**企業を潰すこと**にもつながります。

ここでは、どのようにアプリのテストを実施し、**よりよいものを提供できるか**考えていきたいと思います。

**対象アプリ**

**Google**
![FireShot Capture 9 - 「Google アプリ」の検索結果 - Yahoo!検索_ - https___search.yahoo.co.jp_search.png](https://qiita-image-store.s3.amazonaws.com/0/55160/6fda9861-cc17-7f05-b523-b8799a44ae51.png)
**Apple**
![FireShot Capture 7 - 「Apple アプリ」の検索結果 - Yahoo!検索_ - https___search.yahoo.co.jp_search.png](https://qiita-image-store.s3.amazonaws.com/0/55160/fc3c1352-fa5b-b75f-6fc2-58784637a47b.png)

**対象端末とOSバージョン**
・推奨端末がどれだけあるかにもよります。
・OSのバージョンも。
どこまで見るのか。サービスによりけりでは。

**テスト環境**
・Develop環境
・Staging環境
・Production環境

**テストスケジュール**
・開発規模や修正規模による。
・QAの内容や人材リソース・スキルにも考慮。
・何を優先とするのか。最優先でやるべきことを精査。
・リリース予定日をどこにおくか。無理のないリリース日の設定。

**注意点**
・アプリを使うユーザー層によってもテスト項目は変わってきます。
・企画仕様書が無い場合、テスト設計すらできないので、どこまで担保するかは決める。リリース後に不具合が見つかるとQAの責任となってしまうため。

## テスト設計

**テストの手順**を考えてみます。まだまだありますが、重要な箇所になります。
**テスト設計** を作成してみます。まずは、**テスト準備チェックシート**

![無題.jpg](https://qiita-image-store.s3.amazonaws.com/0/55160/2252a000-7057-0d56-cb6c-f199b70f0b9e.jpeg)

単体テストの　**「テスト設計」** をしてみます。広告をタップしたときのテストを想定します。
必ず単体テストは実施して下さい。開発活動の一環に単体テストがあるので、きちんと実施する。

```lang:単体テストの「テスト設計」になります。
1.DBアクセステスト
2.通信できない状態の例外インスタンス
3.広告取得、広告画像失敗テスト
4.nilをセットした場合のテスト
5.対象テーブルに値がセットされているテスト
6.成果をあげるパラメータテスト
7.成果があがらないパラメータテスト
8.cookie計測の場合は削除するテスト
9.例外処理の場合にError.logが出力する
10.config.propertiesのサーバへの接続情報が正しいことを確認
11.インタースティシャル広告でのクリックテスト
12.ローテーション広告でのクリックテスト
13.ネイティブ広告でのクリックテスト
14.AndroidManifest.xmlファイル設定テスト
15.コンバージョン送信のテスト
```
```lang:機能テストの「テスト設計」
1.操作テスト（アプリ起動、バックグラウンド復帰、スクロール、スワイプ、タブ切り替え、フリック、ボタンタップ、アプリ再起動、アプリキル）
2.入力テスト（境界値、同値分割）
3.エラーテスト（正常系以外）
4.プッシュ通知確認
5.メール受信、送信、メール受信メールのリンク確認
6.PC版とアプリ版の機能が同じであること（※アプリ版の場合、仕様通り）
7.UIButtonに対してシングルタップ、ダブルタップを割り付け確認
8.権限回り（見えてよいユーザーと見えてはいけないユーザー）
9.ログイン回り
10.簡単なログ確認
```
## 認証機能（SSO）

サードパーティでサインインできるか、問題なく利用することができるか。
※サードパーティから情報が流出する恐れもあるので（セキュリティには注意）


1.**Googleでログイン**
2.**FaceBookでログイン**
3.**Appleでログイン**（Sign in with Apple)

## 多端末やイレギュラー検証テスト設計
簡単に「テスト設計」をしてみます。どんなことが想定されるのか。


```lang:多端末やイレギュラー検証
1.ある特定の機種、特定のバージョンのOSでのみでの確認。
2.Wifi接続からモバイルネットワーク（LTE/4G/5G)に切り替えた場合の確認
3.モバイルネットワーク（LTE/4G/5G)からwifi接続に切り替えた場合の確認
4.画面が縦向き、または横向きでの利用、または画面回転ロック状態での動作確認
5.キー入力。入力必要なフィールドに実際に必要な文字／数値や、間違った文字／数値を入力
6.バッテリが残り20%未満の確認
7.バッテリが残り10%未満の確認
8.バッテリが残り5%未満の確認
9.ネットワーク接続、遮断した場合の確認
10.他アプリを10個インストールした場合
11.他アプリを20個インストールした場合
12.他アプリを30個インストールした場合
13.1,2,3時間端末を放置した場合
14.端末を再起動した場合のアプリの動作
15.電源を切り、数分置いたあと電源を入れる
16.機内モードに設定したのアプリの動作
17.節電モードに設定した場合のアプリの動作
18.アプリアイコンタップ、アプリキルを2回繰り返し
19.アプリアイコンタップ、アプリキル3回繰り返し
20.アプリアイコンタップ、アプリキル4回繰り返し
21.マナーモード設定した場合のアプリの動作
22.端末の初期化後、アプリインストールした場合
23.アプリアイコンを連続タップした場合
24.アプリアイコンを長押しした場合
```

```lang:SDKの一連のテスト
1.機能実装後の動作テスト★単体テスト
2.実機にテストアプリ(apkファイルを入れて実際に使ってみる★結合、システムテスト
3.ユーザーに試用してもらうベータテスト★導入テスト(仕様とあっているかも含め)
4.本番リリーステスト（モンキーテストや探索的テスト）
5.リリース後、バグフィックス後の、アップデートリリーステスト
```

1．機能実装後の動作テスト★単体テスト（アフィリエイト広告の場合）

| テスト項目 | 前提条件 | 期待値 |
|:-----------|------------:|:------------:|
|広告サイズがディスプレイサイズよりも大きい      |  ログ出力      |    エラーログが出力すること     |
| 不明な広告ビュータイプ         |          ログ出力 |     エラーログが出力すること      |
| 広告取得失敗       |       ログ出力 |    エラーログが出力すること     |
| 広告画像の取得失敗    |     ログ出力 |    エラーログが出力すること     |
| リクエストしたサイズと取得したサイズが異なる    |     ログ出力 |    エラーログが出力すること     |
| nilをセットしない場合     |     ログ出力 |    エラーログが出力すること     |


2．実機にテストアプリ(apkファイルを入れて実際に使ってみる★結合、システムテスト

| テスト項目 | 前提条件 | 期待値 |
|:-----------|------------:|:------------:|
|アプリ起動後の広告確認 | invisibleIconAd() |アイコン型広告が非表示であること  |
|アプリ起動後の広告確認 | invisibleIconAd() |アイコン型広告が非表示であること  |
|アプリ起動の広告確認  |  visibleIconAd() |    アイコン型広告が表示する     |
|ボタンをタップする    |        |    画面が表示する     |
|画面をスワイプする     |        |         |
|画面をピンチまたはストレッチ     |        |         |
|画面を回転     |        |         |
|入力項目、表示初期値の確認  |        |         |
|入力欄にスペース     |        |         |
|入力欄null     |        |         |
|入力欄に最大値     |        |         |
|入力欄に最大値     |        |         |

3．ユーザーに試用してもらうベータテスト★導入テスト

| テスト項目 | 前提条件 | 期待値 |
|:-----------|------------:|:------------:|
|アプリ起動後の広告確認 | invisibleIconAd() |アイコン型広告が非表示であること  |
|アプリ起動後の広告確認 | invisibleIconAd() |アイコン型広告が非表示であること  |
|アプリ起動の広告確認  |  visibleIconAd() |    アイコン型広告が表示する     |

4．本番リリーステスト（★システムテスト時のテストケースと「モンキーテスト」や「探索的テスト」）

| テスト項目 | 前提条件 | 期待値 |
|:-----------|------------:|:------------:|
|アプリ起動後の広告確認 | invisibleIconAd() |アイコン型広告が非表示であること  |
|アプリ起動後の広告確認 | invisibleIconAd() |アイコン型広告が非表示であること  |
|アプリ起動の広告確認  |  visibleIconAd() |    アイコン型広告が表示する     |

5．リリース後、バグフィックス後の、アップデートリリーステスト(※ここは随時)

| テスト項目 | 前提条件 | 期待値 |
|:-----------|------------:|:------------:|
|アプリ起動後の広告確認 | invisibleIconAd() |アイコン型広告が非表示であること  |
|アプリ起動後の広告確認 | invisibleIconAd() |アイコン型広告が非表示であること  |
|アプリ起動の広告確認  |  visibleIconAd() |    アイコン型広告が表示する     |

## テスト実施
テストする上で必要なツールを用意する。

実機はもちろん、プロキシでの確認やログの確認のため。


### XcodeとAndroidStudioを準備する
[Xcode](https://developer.apple.com/jp/xcode/)

[AndroidStudio](https://developer.android.com/studio/)

### CharlesとFireBases

Charlesは、AndroidやiOSのスマホアプリテストでJSONファイルを書き換えで、リクエストやレスポンス確認にちょっと使っております。

![FireShot Capture 2 - Charles Web Debugging Proxy • HTTP Monitor _ H_ - https___www.charlesproxy.com_.png](https://qiita-image-store.s3.amazonaws.com/0/55160/8f95260b-891f-b331-617e-28307b54b754.png)

https://www.charlesproxy.com/

ライセンスが無い場合は30分しか使えないのが。。。

また、**「FireBase」** を使用してログを確認する。**イベントログ**など。
DebugViewでリアルタイムにログ確認

https://console.firebase.google.com/?hl=ja
![FireShot Capture 21 - test – DebugView – Firebase console_ - https___console.firebase.google.co.png](https://qiita-image-store.s3.amazonaws.com/0/55160/25a69fca-480e-810e-bf64-863ec98e41f7.png)

## テストアプリ申請

・テストの前に、テストアプリ申請のための確認
・承認されなければ、そもそもテストができないですね。


## Androidアプリ申請

Androidアプリを公開するには　**「Google Play」** デベロッパーへの登録が必要になります。
**「初回登録料25ドル」** になります。
https://play.google.com/apps/publish/signup/
<img width="509" alt="スクリーンショット 2020-01-23 0.55.46.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55160/2b4cbf1e-ab34-a1df-0d49-a5e1cebcebed.png">
1.アプリを登録する
2.apkファイルをアップロード
3.アプリを公開する。ドラフトボタンをクリックし数時間待ちます。

ここでリジェクトされないためのチェックシート(※最低限の項目になります）

```lang:アプリの申請確認：Androidアプリ審査リジェクトされないためのチェックシート
1.カテゴリーが正しくないアプリではないこと
2.著作権・商標権侵害していないアプリであること
3.不正広告アプリではないこと(※アダルト系は注意です)
```
※参照元です。
https://play.google.com/intl/ALL_jp/about/developer-content-policy.html
※Androidの場合は公開後も突然リジェクトされるので要注意です。

## iPhoneアプリ申請

**「iTune Connect」** でのアカウント登録
・順番に登録します。
https://itunesconnect.apple.com
<img width="680" alt="スクリーンショット 2020-01-23 1.06.46.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55160/39f65080-1b97-402f-bcae-5f8cfc9a2b6d.png">

```lang:アプリの申請確認：iPhoneアプリ審査リジェクトされないためのチェックシート
1.クラッシュするアプリではないこと
2.アプリにバグがないこと
3.インストールや起動の前に、iOSデバイスの再起動を推奨するアプリではないこと
4.個人情報を有するアプリではないこと
5.プッシュ通知を使って、個人情報を送信するアプリではないこと
6.空のiAdを含んだアプリではないこと
7.広告表示のためだけに設計されているアプリではないこと
8.急激にバッテリーを消費したり、過度の熱を発生させるアプリではないこと
9.政治批判やユーモアは誹謗、中傷なコメントではないこと
10.非公開APIを使用するアプリではないこと
11.初回起動時ブラウザ立ち上げがないアプリであること
12.IDFAを使っているかどうか(※最近、申請時に聞かれるのでYES)
```

※一部分です。けっこうな割合でリジェクトされるので申請時は、注意すること。
※参照元です。
https://developer.apple.com/app-store/review/guidelines/