<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>ISOROOT Tech Blog</title><link href="http://techblog.isoroot.jp/" rel="alternate"></link><link href="http://techblog.isoroot.jp/feeds/androidios.atom.xml" rel="self"></link><id>http://techblog.isoroot.jp/</id><updated>2016-10-20T12:00:00+09:00</updated><entry><title>今すぐ実践すべきモバイルアプリの注意すべきテスト観点</title><link href="http://techblog.isoroot.jp/mobile_test_items.html" rel="alternate"></link><published>2016-10-20T12:00:00+09:00</published><author><name>imai.k</name></author><id>tag:techblog.isoroot.jp,2016-10-20:mobile_test_items.html</id><summary type="html">&lt;p&gt;こんにちは！現場では、主にAndroidの開発をしている今井です！&lt;/br&gt;
今回は、弊社で実践しているモバイルアプリのテスト手法に関してご紹介をします。&lt;/p&gt;
&lt;h1&gt;テストをする上でもっとも重要なこと&lt;/h1&gt;
&lt;p&gt;以前の記事で、
テストにおいて一番重要な部分は、&lt;strong&gt;要求仕様書、設計書から試験項目を起こして実施&lt;/strong&gt;と書きました。
&lt;/br&gt;
&lt;/br&gt;
なぜこのフェーズが一番重要かというと、&lt;strong&gt;アプリが仕様通り動くことを担保するのは試験項目書&lt;/strong&gt;だからです。
&lt;/br&gt;
&lt;/br&gt;&lt;/p&gt;
&lt;p&gt;試験を行う前にはコードレビューといった工程を通過することで、アプリの不具合などを減らしていきますが、
試験項目書はアプリをリリースする前の最後の砦になります。
&lt;/br&gt;
&lt;/br&gt;
そこで試験項目書にはバグの検出率が求められますが、どういったことに気をつければいいのでしょうか？
&lt;/br&gt;&lt;/p&gt;
&lt;h1&gt;モバイルアプリのテストで気をつけるべき観点&lt;/h1&gt;
&lt;p&gt;アプリによって発生するバグも様々ですが、モバイルアプリには良く起きるバグにいくつかパターンがあります。
&lt;/br&gt;
&lt;/br&gt;
そういったパターンを試験項目が押さえておくことでバグの検出率が高まると思います。
&lt;/br&gt;
&lt;/br&gt;
ここでいくつか紹介させていただきます。
&lt;/br&gt;&lt;/p&gt;
&lt;h3&gt;画面遷移のパターンは網羅できてるか？&lt;/h3&gt;
&lt;p&gt;状態が復元されるかどうかというは、例えばスクロールできる画面の場合、
画面Aをスクロール -&amp;gt; 画面Bに遷移 -&amp;gt; 画面Aに戻るという操作をしたときに、
画面Aに戻ってきたときに元のスクロール位置に戻っているといったことです。
&lt;/br&gt;
&lt;/br&gt;
また、表示していたデータが元のまま表示されることも重要です。
&lt;/br&gt;
&lt;/br&gt;
アプリによっては、画面が表示されるたびにデータの更新が必要なものもあると思いますが、
その場合を除き、気をつけておくべきです。
&lt;/br&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="transition.png" src="/images/transition.png" /&gt;&lt;/p&gt;
&lt;h3&gt;通信エラーのパターンは網羅できてるか？&lt;/h3&gt;
&lt;p&gt;通信エラー時の挙動にも気をつけなくてはなりません。
通信エラーと一口に言っても、ネットワークが悪い場合、
サーバーが悪い場合などいくつかパターンがあります。
&lt;/br&gt;
&lt;/br&gt;
違うエラーにはそれぞれにあったメッセージや、エラー時の挙動を起こす必要があります。
&lt;/br&gt;
&lt;/br&gt;
特に&lt;strong&gt;ステータスコードごとの挙動&lt;/strong&gt;には注意を払う必要があります。
&lt;/br&gt;
&lt;/br&gt;
こういった場合を細かくチェックすることもバグを減らす重要な観点になります。
&lt;/br&gt;&lt;/p&gt;
&lt;h3&gt;データがある場合、ない場合の表示&lt;/h3&gt;
&lt;p&gt;意外に見落としがちなことですが、表示すべきデータがない場合(エンプティステート)の表示を確認する必要があります。
&lt;/br&gt;
&lt;/br&gt;
表示すべきものがある前提で画面は作られがちです。
&lt;/br&gt;
&lt;/br&gt;
そのため、エンプティステートの場合、表示しなくてはいけないメッセージが抜け落ちていたりする場合があります。
&lt;/br&gt;
&lt;/br&gt;
例えば、ユーザーを表示する画面でデータが一件もない場合、「登録されているユーザーは0件です。」
&lt;/br&gt;
&lt;/br&gt;&lt;/p&gt;
&lt;p&gt;といった具合です。
&lt;/br&gt;&lt;/p&gt;
&lt;h3&gt;サポート対象の端末にインストールできるか&lt;/h3&gt;
&lt;p&gt;この問題はAndroidでよく発生します。
&lt;/br&gt;
&lt;/br&gt;
Androidは非常に多くの端末で採用されているため、アプリが対象にする端末にインストールできること、
動作することを担保する必要があります。
&lt;/br&gt;
&lt;/br&gt;
しかし、インストール対象の端末を全て手に入れるのは困難なため、
ストアに公開した後にインストールできない端末が発覚する場合があります。
&lt;/br&gt;
&lt;/br&gt;
Androidであれば、manifestファイルの定義を確認するなど、そういった観点も必要になります。
&lt;/br&gt;&lt;/p&gt;
&lt;h1&gt;まとめ&lt;/h1&gt;
&lt;p&gt;いかがでしたでしょうか。
&lt;/br&gt;
&lt;/br&gt;
今回は、試験項目を作成する上で気をつけるべき観点をいくつか紹介させていただきました。
&lt;/br&gt;
&lt;/br&gt;
それぞれの観点は試験を作成する上でも重要ですが、仕様を定める段階でも気をつけておくといいです。
&lt;/br&gt;
&lt;/br&gt;
仕様が明確であればあるほど、「この時はこうなる」ということがはっきりするため試験項目の精度も高まります。
&lt;/br&gt;
&lt;/br&gt;
試験の精度を高め、品質の高いアプリを作っていきましょう。&lt;/p&gt;</summary></entry><entry><title>今すぐ実践すべきモバイルアプリの開発フロー改善</title><link href="http://techblog.isoroot.jp/mobile_test_flow.html" rel="alternate"></link><published>2016-10-10T12:00:00+09:00</published><author><name>imai.k</name></author><id>tag:techblog.isoroot.jp,2016-10-10:mobile_test_flow.html</id><summary type="html">&lt;p&gt;こんにちは！現場では、主にAndroidの開発をしている今井です！&lt;/br&gt;
今回は、弊社で実践しているモバイルアプリの開発フローに関してご紹介をします。&lt;/p&gt;
&lt;p&gt;日々進化するモバイル端末に対して、モバイルアプリ開発で以下のような悩みを抱えてませんか？&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;iOS/AndroidなどOS、端末が複数ある&lt;/li&gt;
&lt;li&gt;OSも、開発するアプリもアップデートが頻繁でテストが大変&lt;/li&gt;
&lt;li&gt;アプリの設計が悪く、バグがたくさん！&lt;/li&gt;
&lt;li&gt;などなど&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;/br&gt;
こういった課題に関して、弊社が&lt;strong&gt;モバイルアプリ開発&lt;/strong&gt;で実践しているノウハウを数回に分けてご紹介していきます。
&lt;/br&gt;&lt;/p&gt;
&lt;h1&gt;開発のフローはどんな形？&lt;/h1&gt;
&lt;p&gt;全体的なフローは、
&lt;/br&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;コードを書く・レビューするを繰り返す（開発）&lt;/li&gt;
&lt;li&gt;テスト用のバイナリをデプロイする&lt;/li&gt;
&lt;li&gt;試験項目を作成し、テストを行う&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;です。
&lt;/br&gt;
&lt;/br&gt;&lt;/p&gt;
&lt;p&gt;上記のフローのうち、テストにおいて一番重要な部分は、&lt;strong&gt;要求仕様書、設計書から試験項目を起こして実施&lt;/strong&gt;です。
&lt;/br&gt;
&lt;/br&gt;
何とも素朴かもしれませんが、&lt;strong&gt;これが基本&lt;/strong&gt;なのです。
&lt;/br&gt;
&lt;/br&gt;
プロジェクトによっては自動テストを導入したりしますが、試験項目書の作成は必須ですね。&lt;/p&gt;
&lt;h1&gt;バージョン管理はGitを使うこと！&lt;/h1&gt;
&lt;p&gt;&lt;img src="/images/gitlab.png" width="50%"&gt;&lt;/p&gt;
&lt;p&gt;開発中のバージョン管理システムは主に&lt;a href="https://about.gitlab.com/"&gt;GitLab&lt;/a&gt;を使用しています。&lt;/br&gt;
Gitを使った開発では、どんな風にブランチを運用するかが重要です。
&lt;/br&gt;
&lt;/br&gt;
弊社では、GitLabとGit Flow(&lt;a href="http://nvie.com/posts/a-successful-git-branching-model/"&gt;a successgull git branching model&lt;/a&gt;)を部分的に取り入れたフローで運用しています。
&lt;/br&gt;&lt;/p&gt;
&lt;h3&gt;コードレビュー&lt;/h3&gt;
&lt;p&gt;実際の開発では、GitLabのMerge Requestという仕組みにより開発者同士がコードレビューを行っています。
&lt;/br&gt;
&lt;/br&gt;
開発時は専用のブランチを作成し、開発が完了したら、本流と合流してもらうように、Merge Requestを出します。
&lt;/br&gt;
&lt;/br&gt;
コードレビューの結果、問題なければ本流にMergeされるのですが、ここで、必ず意識していることがあります。それは、
&lt;/br&gt;
&lt;/br&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;テストコードが書かれていること&lt;/strong&gt;です。
&lt;/br&gt;&lt;/p&gt;
&lt;h3&gt;テストコードを作ること！&lt;/h3&gt;
&lt;p&gt;「テストがないコードは古い」とまで言われる昨今、
テストコードは可能な限り記述するようにしています。
&lt;/br&gt;
&lt;/br&gt;
テストコードがあることによって、機能・メソッド一つ一つの信頼度が上がり、
人力の試験だけでは補えない部分までカバーすることができます。
&lt;/br&gt;
&lt;/br&gt;
テストコードを書くことは、開発者のスキル向上にも直接つながりますしね！&lt;/p&gt;
&lt;p&gt;また、品質の担保は最終的には人力頼みとなりますが、
開発中からできる限り見落としや考慮漏れを排除するために、
テストコードを書かないとMargeしないなど、
ルールを設けるようにして運用しています。
&lt;/br&gt;&lt;/p&gt;
&lt;h1&gt;テストアプリのデプロイはDeployGateを使うべし！&lt;/h1&gt;
&lt;p&gt;&lt;/br&gt;
&lt;strong&gt;まだケーブルを使って転送してませんか？&lt;/strong&gt;
&lt;/br&gt;&lt;/p&gt;
&lt;p&gt;開発が終わり、テスト用のバイナリを端末にデプロイするのですが、
弊社では、バイナリをインストールする手段として、
&lt;/br&gt;
&lt;/br&gt;
&lt;a href="https://deploygate.com"&gt;DeployGate&lt;/a&gt;を使用しています。
&lt;/br&gt;
&lt;/br&gt;
DeployGateは、アプリインストールを効率化するツールで、
こちらも開発環境に依存したバグ等を防ぐとともに、
実機にインストールするためのオーバーヘッドを下げることで、
試験の効率化を図っています。
&lt;/br&gt;
&lt;/br&gt;&lt;/p&gt;
&lt;p&gt;また、テスト用のバイナリ作成は必ずCIツールで生成されたものを用いるようにしています。
&lt;/br&gt;
&lt;/br&gt;
これは、開発環境に依存した不具合などを防止するために有効な手段となっています。&lt;/p&gt;
&lt;h1&gt;試験項目を作成する際に注意すべき点を洗い出すべし！&lt;/h1&gt;
&lt;p&gt;さて、テスト対象のアプリが用意され、試験できる準備が整いましたが、
肝心の試験項目はどういったことに気をつけて作成するべきなのでしょうか。
&lt;/br&gt;
&lt;/br&gt;&lt;/p&gt;
&lt;p&gt;アプリの世界観や要求にもよりますが、以下の点に気をつけると、不具合が発生しづらくなるかと思います。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;画面が再表示されたとき、状態が復元されるかどうか&lt;/li&gt;
&lt;li&gt;通信エラー時の挙動に気をつける&lt;/li&gt;
&lt;li&gt;データがない時(エンプティステート)の表示は問題ないか&lt;/li&gt;
&lt;li&gt;サポート対象の端末にインストールできるかどうか&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;モバイルアプリのテストは、アプリの状態だけでなく、端末の状態や外的要因（ネットワーク等）にも気を配る必要があります。
&lt;/br&gt;
&lt;/br&gt;
また、OSバージョンの違いなどにも注意しないといけないため、できるだけモバイルアプリに最適化されたテスト項目が準備されなくてはいけません。
&lt;/br&gt;
&lt;/br&gt;
テスト観点に関して、次回以降にさらに詳しく紹介させていこうと思います。&lt;/p&gt;
&lt;h1&gt;まとめ&lt;/h1&gt;
&lt;p&gt;いかがでしたでしょうか。
&lt;/br&gt;
&lt;/br&gt;&lt;/p&gt;
&lt;p&gt;モバイルアプリ開発において、様々なOS・端末への対応は必須事項ですが、
だからこそバグの混入を防ぐことは困難です。
&lt;/br&gt;
&lt;/br&gt;&lt;/p&gt;
&lt;p&gt;テストコードの準備や、試験項目の精度を高めるなど、
何重にも保険をかけることで品質の高いアプリ開発を行っていきたいものですね。&lt;/p&gt;</summary></entry></feed>