第3回Ques ここからはじめる!Androidアプリのテスト自動化

9,441 views

Published on

第3回Ques ~QAエンジニアのためのQA専門イベント~ 発表資料
http://atnd.org/event/ques3?vos=cpatnsoccap0111026001
http://quesqa.com/

iOSについても加筆、一部構成変更したものを公開しています
システムテスト自動化カンファレンス2013 発表資料
http://www.slideshare.net/nowsprinting/starcon2013-mobile-testautomationkeynote6

Published in: Technology
0 Comments
15 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
9,441
On SlideShare
0
From Embeds
0
Number of Embeds
3,429
Actions
Shares
0
Downloads
21
Comments
0
Likes
15
Embeds 0
No embeds

No notes for slide

第3回Ques ここからはじめる!Androidアプリのテスト自動化

  1. 1. ここからはじめる! Androidアプリの テスト自動化 第3回Ques 2013.11.14 http://quesqa.com/ 13年11月15日金曜日 長谷川 孝二
  2. 2. 自己紹介 長谷川 孝二 • • • @nowsprinting (twitter, github, etc...) テスト自動化研究会 Androidテスト部 iOS/Androidアプリ開発者 • • 13年11月15日金曜日 受託開発(フリーランス) 自社開発
  3. 3. 自己紹介 長谷川 孝二 • • • @nowsprinting (twitter, github, etc...) テスト自動化研究会 Androidテスト部 iOS/Androidアプリ開発者 • • 13年11月15日金曜日 受託開発(フリーランス) 自社開発
  4. 4. アジェンダ • Androidアプリにおける自動化の現状 • Androidアプリにおける自動化のROI • システムテストツールの紹介 • デモ • Tips 13年11月15日金曜日
  5. 5. Androidアプリにおける テスト自動化の現状 13年11月15日金曜日
  6. 6. ユニットテスト • Android Testing Framework(Android SDK 同梱/JUnit3ベース) • UI操作を補完するオープンソースフレー ムワーク(Robotiumなど) • Robolectric, Mockitoなど モデルのユニットテストは容易 13年11月15日金曜日
  7. 7. システムテスト • 自動化ツール/フレームワークは多数存在 する(後ほど紹介) • UI変更頻度が高い、トランジションアニ メーション等の重要度が高いが、そのテ ストは自動化しにくい 13年11月15日金曜日
  8. 8. システムテスト • 自動化ツール/フレームワークは多数存在 する(後ほど紹介) • UI変更頻度が高い、トランジションアニ メーション等の重要度が高いが、そのテ ストは自動化しにくい 自動化は(現実的に)可能なのか? 13年11月15日金曜日
  9. 9. Androidアプリにおける テスト自動化のROI 13年11月15日金曜日
  10. 10. 理想の高い利益 Return • テスト実行時間の短縮 • “正しい”画面表示のテスト(Judge) • 複数のOSバージョン/機種で実行できる • OS/機種依存問題を検出できる 13年11月15日金曜日
  11. 11. 理想の高い利益を 得るための 投資 Investment • 自動化ツールの選定/習得 • 自動化スクリプトの作成(高度なJudgeを 求められる) • 自動化スクリプトの保守(同上) • テストデータ、スタブサーバの準備 13年11月15日金曜日
  12. 12. 理想の高い利益 • テスト実行時間の短縮 • “正しい”画面表示のテスト(Judge) • 複数のOSバージョン/機種で実行できる • OS/機種依存バグを検出できる 13年11月15日金曜日
  13. 13. 現実的な利益に絞る • テスト実行時間の短縮 • “正しい”画面表示のテスト(Judge) • 複数のOSバージョン/機種で実行できる • OS/機種依存バグを検出できる 13年11月15日金曜日
  14. 14. “テストの目的”に立ち返る • 欠陥を摘出する • 対象ソフトウェアの品質レベルが十分で あることを確認する • 意思決定のための情報を示す • 欠陥の作り込みを防ぐ ※JSTQBシラバスより引用 13年11月15日金曜日
  15. 15. “テストの目的”に立ち返る スコープを“回帰テスト”に絞っても満たせるもの • 欠陥を摘出する • 対象ソフトウェアの品質レベルが十分で あることを確認する • 意思決定のための情報を示す • 欠陥の作り込みを防ぐ ※JSTQBシラバスより引用 13年11月15日金曜日
  16. 16. “テストの目的”に立ち返る 対象OS/機種で”とりあえず”動くことが確認できれば • 欠陥を摘出する • 対象ソフトウェアの品質レベルが十分で あることを確認する • 意思決定のための情報を示す • 欠陥の作り込みを防ぐ ※JSTQBシラバスより引用 13年11月15日金曜日
  17. 17. 欲張らないROI • 利益 • テスト実行時間の短縮 • 複数OSバージョン/機種で実行できる • 投資 • 自動化ツールの選定/習得 • 自動化スクリプトの作成/保守(高度な 頑張らないスクリプト) • テストデータ、スタブサーバの準備 13年11月15日金曜日
  18. 18. 頑張らないテストスクリプト • 日時、天気、株価、為替、乱数などに 起因するJudgeを無理にはしない • レイアウト崩れまでJudgeしようとしない • 機種依存の問題を狙ってテストしようと しない(OS/解像度のフラグメンテーシ ョンと、機種依存問題は分けて考える) 13年11月15日金曜日
  19. 19. 頑張らないテストスクリプト ユニットテストでモックを使って実施 • 日時、天気、株価、為替、乱数などに 起因するJudgeを無理にはしない • レイアウト崩れまでJudgeしようとしない • 機種依存の問題を狙ってテストしようと しない(OS/解像度のフラグメンテーシ ョンと、機種依存問題は分けて考える) 13年11月15日金曜日
  20. 20. 頑張らないテストスクリプト ユニットテストでモックを使って実施 • 日時、天気、株価、為替、乱数などに 起因するJudgeを無理にはしない スクリーンショットを目視確認 • レイアウト崩れまでJudgeしようとしない • 機種依存の問題を狙ってテストしようと しない(OS/解像度のフラグメンテーシ ョンと、機種依存問題は分けて考える) 13年11月15日金曜日
  21. 21. 頑張らないテストスクリプト ユニットテストでモックを使って実施 • 日時、天気、株価、為替、乱数などに 起因するJudgeを無理にはしない スクリーンショットを目視確認 • レイアウト崩れまでJudgeしようとしない • 機種依存の問題を狙ってテストしようと しない(OS/解像度のフラグメンテーシ ョンと、機種依存問題は分けて考える) 内容次第で手動で確認 13年11月15日金曜日
  22. 22. 押さえておきたいポイント • 全ての画面は網羅する(エラーケースの AlertViewなども含むことが望ましい) • CIなどで繰り返し行なう段階であれば、 スクリーンショットの比較はImageMagick などで自動化する • 実行時間も0ではないので、テストケー スの絞り込みは意識する 13年11月15日金曜日
  23. 23. 頑張らなくても ここまでできる事例 13年11月15日金曜日
  24. 24. iOSのUIAlertView iOS6 iOS7 13年11月15日金曜日
  25. 25. iOSのUIAlertView iOS6 iOS7 13年11月15日金曜日 CLASH!!!
  26. 26. iOSのUIPickerView iOS6 iOS7 13年11月15日金曜日
  27. 27. iOSのUIPickerView iOS6 iOS7 13年11月15日金曜日 CLASH!!!
  28. 28. AndroidのdrawRect() Canvas#drawRect(100,100,10,10); (10,10) Android 4.1 (100,100) Android 4.2 13年11月15日金曜日
  29. 29. AndroidのdrawRect() Canvas#drawRect(100,100,10,10); (10,10) Android 4.1 (100,100) Android 4.2 描画されない! ※left<=right, top<=bottomでないと描画されない仕様 13年11月15日金曜日
  30. 30. Android機種依存の例 1 一定量のViewヒエラルキー の上でソフトウェアキーボ ードが出現するときに StackOverflowErrorが発生 (某メーカーのAndroid 2.3 搭載端末のみ) 13年11月15日金曜日
  31. 31. Android機種依存の例 2 普通の端末 奇妙な端末 13年11月15日金曜日
  32. 32. Android機種依存の例 2 普通の端末 奇妙な端末 13年11月15日金曜日
  33. 33. 利益を拡大する 13年11月15日金曜日
  34. 34. 欲張らないROI • 利益 • テスト実行時間の短縮 • 複数OSバージョン/機種で実行できる 13年11月15日金曜日
  35. 35. 利益を拡大する • テスト実行時間の短縮 ➡時間と集中力を高度なテストに割り振る ➡リリース頻度の向上(4∼6週間ごとが理想) • 複数OSバージョン/機種で実行できる さらにテスト実行環境を増やす。端末の回 ➡転、ロケール、タイムゾーン、12h/24h表記、 IME(Android)、文字サイズ(Android 4.0) 13年11月15日金曜日
  36. 36. システムテストツール の紹介 13年11月15日金曜日
  37. 37. monkeyrunner • Android SDK同梱の自動テストツール。スクリプ トはPythonで記述。キャプチャツール有り • 座標を指定してタップ、ドラッグ • スクリーンショット、画像比較でのJudge • • http://developer.android.com/tools/help/monkeyrunner_concepts.html サンプル https://github.com/nowsprinting/nameko-harvest 13年11月15日金曜日
  38. 38. uiautomator • Android 4.1で利用できるSDK同梱の自動テスト ツール。端末の回転とスクリーンショットは 4.2から利用可能。JUnitベース • SeleniumのようにViewのヒエラルキーを って 画面要素を指定可能 • ラベル、Viewのdescriptionでも要素を指定可能 • • http://developer.android.com/tools/help/uiautomator/index.html サンプル https://gist.github.com/nowsprinting/4131415 13年11月15日金曜日
  39. 39. Robotium • Android Testing Frameworkのヘルパーで、 Seleniumライクなテスト記述が可能 (JUnitの知識が必要) • 端末回転、スクリーンショットなど必要 機能は • • 13年11月15日金曜日 っている https://code.google.com/p/robotium/ サンプル https://github.com/mike-neck/AllowLog
  40. 40. Espresso • 最近公開された、Google謹製のAndroid 向けテスティングフレームワーク • JUnitベース • 13年11月15日金曜日 https://code.google.com/p/android-test-kit/
  41. 41. Appium • iOS/Androidで利用できるオープンソースの テストツール。AndroidはAPI Level>=17 (JellyBean)以上が必要。 • テスト対象にAgentを組み込む必要がない • http://appium.io/ 13年11月15日金曜日
  42. 42. MonkeyTalk • Gorilla Logic社が開発/公開しているOSSで iOS/Androidで利用可。旧”FoneMonkey” • 専用の表形式IDEでテストを記述可能、 キャプチャ機能もあり • テスト対象にAgentを組み込む必要あり • 13年11月15日金曜日 https://www.gorillalogic.com/monkeytalk
  43. 43. Calabash • Cucumberのテスト(feature)を、iOS/ Androidデバイスで実行できる • iOSはテスト対象にAgentを組み込む必要 あり • • 13年11月15日金曜日 https://github.com/calabash/calabash-android https://github.com/calabash/calabash-ios
  44. 44. Tips 13年11月15日金曜日
  45. 45. テスト用ビルドを作る Agentの組み込みの他、接続先サーバ別など 自動生成できると便利です • 複数のTarget/Configurationを持つiOSプロジェクトの構 成Tips http://nowsprinting.hatenablog.com/entry/ 2012/11/18/031511 • Gradle+Androidプラグインでプロダクトフレーバーを 試してみた http://nowsprinting.hatenablog.com/entry/ 2013/05/23/153941 13年11月15日金曜日
  46. 46. UAT/ベータテスト On The Airでビルドを配布できるサービス • iOS/Android • TestFlight https://testflightapp.com/ • Android • deploy gate https://deploygate.com/ • Google Play Storeのベータ版配布機能 13年11月15日金曜日
  47. 47. まとめ 13年11月15日金曜日
  48. 48. まとめ • 欲張らない • 頑張らない 13年11月15日金曜日
  49. 49. まとめ • 欲張らないROI • 頑張らないテストスクリプト 13年11月15日金曜日

×