マンガ読書管理アプリの設計メモ(25) -最後の仕上げのテストをする-
前回の記事でストア審査の話をすると言いましたが、その前に大事なテストの話を書こうかと思います。
もしアプリをリリースした後、アプリが頻繁に異常終了(クラッシュ)することがあるとユーザー側は使えないアプリだという判断をしてしまい、利用をやめてしまう恐れがあります。
せっかくダウンロードしてくれたユーザーはクラッシュで失うのはとても勿体ないですよね?
(もちろん、クラッシュは0にはできないので、Firebase Crashlyticsを導入して備えることもあわせて重要です)
ということで、今回リリースしたアプリに対しては、どのような考え方でテストしていったかを記載できればと思います。個人開発ですしスピード優先だったので、かなり最低限のことしかしていません。実務で使うにはあまり参考にならない点ご了承頂ければと思います。
1.そもそもプログラムのテストとは?
よくあるテストの考え方として使われるのが「単体テスト」「結合テスト」「システムテスト」といったテストを工程に分けて考える方法です。
超ざっくり言うと
「単体テスト」・・・プログラム単位のテスト
「結合テスト」・・・画面単位のテスト
「システムテスト」・・・アプリ単位のテスト
というイメージが近いかなと思います。
テストについて詳しくはこちらをみてください。ソフトウェアのテストについては、テスト専門の会社が生まれるくらい奥深いので、簡単には理解できないかなとは思ったりします。プログラミングと同じで雰囲気で掴んでいくのも大事かな。
2.単体テストの考え方
おそらく実践的なプログラム開発においては、テストコードなるものを書き、単体テスト(プログラムレベル)は自動化していく、というのがスタンダートな気がします。(SIerはその限りではない笑
ですが、今回はテストコードは書いてないし、チェックリストも書いてません。上述したように個人開発ですしスピード優先すると、このあたりはある程度楽するほうが良いかなーと思ってます。
(自分の自動化するスキルがないだけかも汗
最低限の考え方としては、以下のような点を抑えていくことで、大まかなエラーは減らせると思っています。まずはプログラムを実装したタイミングで「こういうケースは満たせているか?」というのを確認するようにしています。
・値が0、""、nilとなるようなケースって大丈夫?
・分岐のパターンはすべて網羅できてる?
・エラーや例外が起きたときはちゃんとエラーメッセージ出る?
とかです。
(Swiftのカバレージ取得方法はあまり理解していません。
なにかいい方法があるのだろうけど・・・)
3.結合テストの考え方
次に画面単位のテストを考えていきます。
ここからはテスト管理ツールとして「Qangaroo」を使いました。googleのスプレットシートでも良いのですが、テスト管理ツールを使うほうがやる気がでそうだったので、初めて使ってみています。
もちろん、テストで使用するチェックリストは結合テストあたりからドキュメント化しておくと、アプリの修正時にもう一度テストを流してみるといったこともできるようになりますので、ここは頑張って資料化するようにしました。
なお、XcodeにおいてもUIテストができる自動テスト機能が備わっていると聞いてますが、このあたりも使ってないです。(まだ勉強不足です・・)
話は戻して、テストケースですが、Qangarooでこんな感じで作りました。
チェックリストといっても、要は、「この画面で、どういう操作したら、どういう結果になる?」というのをひたすら書いていく感じです。プログラミングと比べると楽しさは半減しますが、ユーザーのためを思って頑張ってやってください。笑
ちなみにすでに正常な動きしているものもサボらず書いていくと「こういう操作したらってどうなるんだっけ?」という閃きがあります。それももれずに書いておくことが重要です。だいたい、ここで不具合がでますのでw
これをアプリの画面単位に作っていきます。
すべてのチェックリストを確認して、出た不具合はすべて取り除いていきます。大きな修正をした場合は、最初からやり直す覚悟も重要です。
すべてのテストが消化できれば、結合テストは完了となります。
4.システムテストの考え方
ここからはアプリの利用時のテストケースを考えていきます。とはいえ利用時のケースといっても実は以下のような幅広い観点があります。
・ユーザの利用シーンに沿ったシナリオテスト
・高負荷や性能・バッテリーの消化状況等のテスト
・セキュリティ面で問題ないか確認するテスト などなど
どのようなテストをすべきかは難しく、アプリやサービスの特性によって考えていくところとなります。ツール系だけであれば、シナリオテストくらいでも良いでしょうし、ゲームのようなものだと性能は見るでしょうし、SNSみたいなサービスだとセキュリティ面も見たい感じはします。
自分で実機で1週間使い倒すというのもアリです。
今回は、ツール系のものなのでシナリオテストをやりました。このアプリでは3パターンを準備してます。
少し3点補足すると
「アプリ初回利用時」では初めてアプリを使うときのシナリオを中心に書いています。もちろん初めて使うのでDB等も空の状態にしてテストしています。
「正常サイクルシナリオ」では、すべての関連する機能が流れるような操作をした場合の挙動を確認しています。
「運用テスト」としては、今回FirebaseAnalytics等を使っているので、それが正しく統計が取れているか?ログは出力されているか?を確認しています。
これらのテスト項目をすべて確認して、すべて成功すれば、テスト完了として、リリースの準備に入っていくことになります!
かなり長くなりましたが、これでアプリテストの説明は以上となります。
テストも終わり、次回はストア申請まわりをかければなーと思っています。
また今回の部分、もしくは今までのところでも良いので、この辺りはもっと詳しく、という話があれば、コメントいただければと思います!
ではまた!
素敵なアプリやサービスが作れるようにひとりで開発を頑張っています。応援してくれると嬉しいです!