「とりあえず動く」を卒業するためのアーキテクチャ入門編(3)

皆さんこんにちは。株式会社コスモルートでアンドロイドアプリの請け負い開発をしているT.Mです。

前回までの記事はこちら
「とりあえず動く」を卒業するためのアーキテクチャ入門編(1)
「とりあえず動く」を卒業するためのアーキテクチャ入門編(2)

前回は「どのようにプロジェクトの変化に対応するか」を説明しました。
今回はテストコードなど、テストに関係した内容に触れていきます。

2.3 テストコードとは?

テストコードとは、コードが仕様通り動いているか確認するために書くコードのことです。単体テストだったり、たまに納品前に行う人力のテストと混同する方がいますが別物です。(単体テストはテストコードの狭義で使われます)

テストコードの概念自体は言語に依存するものではないですが、いざコードを書こうとすると結構難しいものです。
=- なにをテストすればいいのかわからない
=- テストフレームワークの使い方が分からない
=- コードが入り組んでいてテストするのが難しい
など様々な疑問が湧いてきます。次第にテストを書くためにコードを修正する羽目になり、嫌気がさしテストコードを諦めるようになります。

正直な話、テストを書くには勉強が必要で、開発スピードも多少落ちます。テスト駆動開発といって、テストコードを先に書いて振る舞いを定義し、テストが通るようにコードを書くという手法もありますが、難易度が高くプロジェクトに関わる全員に強要するのは無理があると思っています。
またテストコードは全体的なメリットは大きいですが、開発初期フェーズや小規模プロジェクトではバグが少ないこともありテストを疎かにしてしまう傾向があるようです。

そうならないためにも、前章でコードを役割単位に分けて、テストを意識しました。前章のバズツイートを取得して表示するというアプリにテストコードを書いていきましょう。

その前にAndroidのテスト関係した内容に触れていきます。

フレームワークを簡単に紹介します。それぞれ勉強が必要なので公式ドキュメントを参考にしてください。

=- AndroidJUnitRunner 単体テストに使用,アプリの機能をテストする。
=- Robolectric Android依存のテストをJVM上で行うことで高速なテストが可能になる。
=- Espresso UIテストに特化。アプリの振る舞いをテストする。

またテストの規模としては、
=- 小規模テスト クラス単位や機能単位に関わるテスト。単体テストとも言う
=- 中規模テスト DBやAPIのテストや,モジュール単位の振る舞いのテスト。
=- 大規模テスト UIテスト。画面操作を通じて結果を得るテスト。E2Eテストとも言われます。

に分かれます。小規模テストでAndroidに依存しないコードは動作時間が少なくて済みますが、大規模テストになるほど動作時間もかかります。公式には、小規模テストが70%、中規模テストが20%、大規模テストが10%の割合が望ましいとされています。

次回は実際にテストコードを書いてみます。

お楽しみに!