Android Meets
    Testing(low)

Android Bazaar and Conference 2011 winter
                2011.1.9
           テスト部(宮田友美)
自己紹介
宮田友美(みやたゆみ)
TwitterID:@miyatay




                株式会社オープンストリーム
                     業務でAndroidアプリを作ってます
                     http://www.opst.co.jp/


へんなガジェット持ってますw ↑
日本アンドロイドの会

テスト部部長
テスト部とは?
2010年9月発足でメンバー154名
Androidのテストについて情報共有
 公式サイト翻訳
 Androidアプリのテストについてノウハウの
  蓄積および公開
 月1回のペースでMTG開催(次回2/5開催!)
目標は・・・・
ぶっちぎりのテスト力
 を世界へ



http://www.flickr.com/photos/jaffathecake/2675559042
本日のお題


http://www.flickr.com/photos/tamaiyuya/2633149321/
もちろん、   テスト
なぜ、テスト?



出典: http://www.flickr.com/photos/fboyd/2897598148/
Android開発
は大変!
なぜ大変かを分類すると

1.マーケットの評価
2.複数端末対応
3.SDKバージョンアップ対応
これらの解決方法を、
テスト部議論+宮田の私見
 を交えつつお話しします
1.マーケットの評価
ユーザレビューでアプリを
評価する仕組み
強制終了→評価が下がる
ユーザからの
フィードバック
マーケットの評価を
 生かすには・・・
強制終了させない
テストを書いて、ありがちな丌具合を残さない
ユーザからの
フィードバックにこたえる
テストを書いて、大胆にアプリを進化させる
2.複数端末対応
世界には150種類超の
Android端末
フラグメンテーション
(機種の多様性)問題
•    トラックボール/ハードボタンの有無
•    センサーの有無
•    解像度の違い
    など。。
機種の多様性に対応する仕組み
は「一応」ある
解像度/キーボード有無/地域の違いなどで
切り替え
<参考>
http://thinkit.co.jp/book/2010/05/06/
1535
しかし結局、
実機でのテストは丌可欠
150種類以上の端末で
テスト・・・?
解決策




http://www.flickr.com/photos/xshamx/4156762827/in/photostream/
テストの自動化
3.SDKの
バージョンアップ対応
2009年は6回、2010年は
5回のバージョンアップ
       2008           2009           2010
 1             1              1   2.1 r1
 2             2   1.1 r1     2
 3             3              3
 4             4   1.5 r1     4
 5             5   1.5 r2     5   2.1 r2   2.2 r1
 6             6              6
 7             7   1.6 r1     7   2.2 r2
 8             8              8
 9 1.0 r1      9              9
10            10   2.0 r1    10
11 1.0 r2     11             11
12            12   2.0.1r1   12   2.3 r1
頻繁なバージョンアップに
追随するのは大変
解決策




http://www.flickr.com/photos/xshamx/4156762827/in/photostream/
テストの自動化
では「テストの自動化」を
するにはどうすればいい
の?
Android
   +
 JUnit
でも、
     JUnitでAndroidのテストは
     やりづらい


http://www.flickr.com/photos/proimos/4199675334/
AndroidアプリケーションFWに
         依存しないコード
          のテストの場合




       http://www.flickr.com/photos/_lev_/136318262/sizes/z/in/photostream/
普通にJUnitのテストコードを書けば
よい・・・と思うのだが、
公開されている
android.jar の実装がコレ・・・

    throw new
     RuntimeException("Stub!");


※android.jarはJavaアプリでいうところのJDKと同じ。
Eclipse上で実行すると、
すべてのメソッドで
RuntimeExceptionが発生
エミュレータ/実機に実行コード&テ
ストコードをデプロイしないと実行で
きない
遅い・・・


出典: http://www.flickr.com/photos/dcysurfer/2897532891
解決策




http://www.flickr.com/photos/xshamx/4156762827/in/photostream/
• テストプロジェクトを作成して、
  JDKにパスを通す
• android.jarを自分でビルド・・・?
Androidの
アプリケーションFWに
依存するコード
の場合



http://www.flickr.com/photos/tomas_sobek/4199796850/
通常のJUnitテストが
    実施できない
http://www.flickr.com/photos/proimos/4199675334/
• SDK付属のテスト用APIを利用

• 提供されているテストクラス
 – ActivityInstrumentationTestCase2
 – ProviderTestCase2
 – ServiceTestCase
テスト部でActivityのテストを書いて
みた
テストコードの紹介(デモ)
https://atec.googlecode.com/svn/testter/trunk/testter
https://atec.googlecode.com/svn/testter/trunk/testterTest
テスト部が考えるActivityのテスト
 1.    Viewの表示されている値が正しく設定されているか
 2.    必要なコンポーネントがあるか
 3.    状態のテスト(disabledが設定されているかとか)
 4.    明示的に設定したプロパティ値が設定されているかどうか
 5.    サイズ/色/位置
 6.    ライフサイクルにしたがって状態が変化しているか
 7.    イベント発生後の処理が正しく行われているか
 8.    Activityが破棄されても(画面の縦横が変わった際の)処理が
       正しく行れているか
 9.    端末自体のメモリが丌足した場合の処理
 10.   例外処理
 11.   マルチスレッド
 12.   Intent(呼び先、Bundleのキーと値の確認)
まとめ
                                                       Android + JUnit
                                                       でみんなハッピー

                                                       つづきはテスト部で


http://www.flickr.com/photos/pinksherbet/2977652113/

ABC2011w_テスト部