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

49
ここからはじめる! Androidアプリの テスト自動化 3Ques 2013.11.14 長谷川 孝二 http://quesqa.com / 131115日金曜日

Upload: koji-hasegawa

Post on 13-Dec-2014

7.009 views

Category:

Technology


9 download

DESCRIPTION

第3回Ques ~QAエンジニアのためのQA専門イベント~ 発表資料 http://atnd.org/event/ques3?vos=cpatnsoccap0111026001 http://quesqa.com/ iOSについても加筆、一部構成変更したものを公開しています システムテスト自動化カンファレンス2013 発表資料 http://www.slideshare.net/nowsprinting/starcon2013-mobile-testautomationkeynote6

TRANSCRIPT

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

ここからはじめる!Androidアプリの

テスト自動化

第3回Ques 2013.11.14 長谷川 孝二http://quesqa.com/

13年11月15日金曜日

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

自己紹介長谷川 孝二 @nowsprinting (twitter, github, etc...)

• テスト自動化研究会

• Androidテスト部

• iOS/Androidアプリ開発者

• 受託開発(フリーランス)

• 自社開発

13年11月15日金曜日

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

自己紹介長谷川 孝二 @nowsprinting (twitter, github, etc...)

• テスト自動化研究会

• Androidテスト部

• iOS/Androidアプリ開発者

• 受託開発(フリーランス)

• 自社開発

13年11月15日金曜日

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

アジェンダ• Androidアプリにおける自動化の現状

• Androidアプリにおける自動化のROI

• システムテストツールの紹介• デモ• Tips

13年11月15日金曜日

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

Androidアプリにおけるテスト自動化の現状

13年11月15日金曜日

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

ユニットテスト• Android Testing Framework(Android SDK同梱/JUnit3ベース)

• UI操作を補完するオープンソースフレームワーク(Robotiumなど)

• Robolectric, Mockitoなど

モデルのユニットテストは容易

13年11月15日金曜日

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

システムテスト• 自動化ツール/フレームワークは多数存在する(後ほど紹介)

• UI変更頻度が高い、トランジションアニメーション等の重要度が高いが、そのテストは自動化しにくい

13年11月15日金曜日

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

システムテスト• 自動化ツール/フレームワークは多数存在する(後ほど紹介)

• UI変更頻度が高い、トランジションアニメーション等の重要度が高いが、そのテストは自動化しにくい

自動化は(現実的に)可能なのか?

13年11月15日金曜日

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

Androidアプリにおけるテスト自動化のROI

13年11月15日金曜日

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

理想の高い利益

• テスト実行時間の短縮• “正しい”画面表示のテスト(Judge)

• 複数のOSバージョン/機種で実行できる

• OS/機種依存問題を検出できる

Return

13年11月15日金曜日

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

投資• 自動化ツールの選定/習得

• 自動化スクリプトの作成(高度なJudgeを求められる)

• 自動化スクリプトの保守(同上)• テストデータ、スタブサーバの準備

理想の高い利益を得るための

Investment

13年11月15日金曜日

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

理想の高い利益

• テスト実行時間の短縮• “正しい”画面表示のテスト(Judge)

• 複数のOSバージョン/機種で実行できる

• OS/機種依存バグを検出できる

13年11月15日金曜日

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

現実的な利益に絞る

• テスト実行時間の短縮• “正しい”画面表示のテスト(Judge)

• 複数のOSバージョン/機種で実行できる

• OS/機種依存バグを検出できる

13年11月15日金曜日

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

“テストの目的”に立ち返る• 欠陥を摘出する• 対象ソフトウェアの品質レベルが十分であることを確認する

• 意思決定のための情報を示す• 欠陥の作り込みを防ぐ

※JSTQBシラバスより引用

13年11月15日金曜日

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

• 欠陥を摘出する• 対象ソフトウェアの品質レベルが十分であることを確認する

• 意思決定のための情報を示す• 欠陥の作り込みを防ぐ

※JSTQBシラバスより引用

スコープを“回帰テスト”に絞っても満たせるもの“テストの目的”に立ち返る

13年11月15日金曜日

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

• 欠陥を摘出する• 対象ソフトウェアの品質レベルが十分であることを確認する

• 意思決定のための情報を示す• 欠陥の作り込みを防ぐ

※JSTQBシラバスより引用

対象OS/機種で”とりあえず”動くことが確認できれば“テストの目的”に立ち返る

13年11月15日金曜日

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

欲張らないROI

• 利益• テスト実行時間の短縮• 複数OSバージョン/機種で実行できる

• 投資• 自動化ツールの選定/習得• 自動化スクリプトの作成/保守(高度な頑張らないスクリプト)• テストデータ、スタブサーバの準備

13年11月15日金曜日

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

頑張らないテストスクリプト

• 日時、天気、株価、為替、乱数などに

起因するJudgeを無理にはしない

• レイアウト崩れまでJudgeしようとしない

• 機種依存の問題を狙ってテストしようとしない(OS/解像度のフラグメンテーションと、機種依存問題は分けて考える)

13年11月15日金曜日

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

頑張らないテストスクリプト

• 日時、天気、株価、為替、乱数などに

起因するJudgeを無理にはしない

• レイアウト崩れまでJudgeしようとしない

• 機種依存の問題を狙ってテストしようとしない(OS/解像度のフラグメンテーションと、機種依存問題は分けて考える)

ユニットテストでモックを使って実施

13年11月15日金曜日

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

頑張らないテストスクリプト

• 日時、天気、株価、為替、乱数などに

起因するJudgeを無理にはしない

• レイアウト崩れまでJudgeしようとしない

• 機種依存の問題を狙ってテストしようとしない(OS/解像度のフラグメンテーションと、機種依存問題は分けて考える)

ユニットテストでモックを使って実施

スクリーンショットを目視確認

13年11月15日金曜日

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

頑張らないテストスクリプト

• 日時、天気、株価、為替、乱数などに

起因するJudgeを無理にはしない

• レイアウト崩れまでJudgeしようとしない

• 機種依存の問題を狙ってテストしようとしない(OS/解像度のフラグメンテーションと、機種依存問題は分けて考える)

ユニットテストでモックを使って実施

内容次第で手動で確認

スクリーンショットを目視確認

13年11月15日金曜日

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

押さえておきたいポイント• 全ての画面は網羅する(エラーケースの

AlertViewなども含むことが望ましい)

• CIなどで繰り返し行なう段階であれば、スクリーンショットの比較はImageMagick

などで自動化する

• 実行時間も0ではないので、テストケースの絞り込みは意識する

13年11月15日金曜日

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

頑張らなくてもここまでできる事例

13年11月15日金曜日

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

iOSのUIAlertView

iOS6

iOS7

13年11月15日金曜日

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

iOSのUIAlertView

iOS6

iOS7 CLASH!!!

13年11月15日金曜日

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

iOSのUIPickerView

iOS6

iOS7

13年11月15日金曜日

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

iOSのUIPickerView

iOS6

iOS7 CLASH!!!

13年11月15日金曜日

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

AndroidのdrawRect()

Android 4.1

Canvas#drawRect(100,100,10,10);

(10,10)

(100,100)

Android 4.2

13年11月15日金曜日

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

AndroidのdrawRect()

Android 4.1

Canvas#drawRect(100,100,10,10);

(10,10)

(100,100)

描画されない!Android 4.2

※left<=right, top<=bottomでないと描画されない仕様

13年11月15日金曜日

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

Android機種依存の例 1一定量のViewヒエラルキーの上でソフトウェアキーボードが出現するときにStackOverflowErrorが発生(某メーカーのAndroid 2.3

搭載端末のみ)

13年11月15日金曜日

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

普通の端末

奇妙な端末

Android機種依存の例 2

13年11月15日金曜日

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

普通の端末

奇妙な端末

Android機種依存の例 2

13年11月15日金曜日

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

利益を拡大する

13年11月15日金曜日

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

欲張らないROI

• 利益• テスト実行時間の短縮• 複数OSバージョン/機種で実行できる

13年11月15日金曜日

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

利益を拡大する• テスト実行時間の短縮➡時間と集中力を高度なテストに割り振る➡リリース頻度の向上(4~6週間ごとが理想)

• 複数OSバージョン/機種で実行できる➡さらにテスト実行環境を増やす。端末の回転、ロケール、タイムゾーン、12h/24h表記、IME(Android)、文字サイズ(Android 4.0)

13年11月15日金曜日

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

システムテストツールの紹介

13年11月15日金曜日

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

monkeyrunner

• Android SDK同梱の自動テストツール。スクリプトはPythonで記述。キャプチャツール有り

• 座標を指定してタップ、ドラッグ• スクリーンショット、画像比較でのJudge

• http://developer.android.com/tools/help/monkeyrunner_concepts.html

• サンプル https://github.com/nowsprinting/nameko-harvest

13年11月15日金曜日

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

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日金曜日

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

Robotium• Android Testing Frameworkのヘルパーで、

Seleniumライクなテスト記述が可能(JUnitの知識が必要)

• 端末回転、スクリーンショットなど必要機能は揃っている

• https://code.google.com/p/robotium/

• サンプル https://github.com/mike-neck/AllowLog

13年11月15日金曜日

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

Espresso

• 最近公開された、Google謹製のAndroid

向けテスティングフレームワーク

• JUnitベース

• https://code.google.com/p/android-test-kit/

13年11月15日金曜日

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

Appium

• iOS/Androidで利用できるオープンソースのテストツール。AndroidはAPI Level>=17

(JellyBean)以上が必要。

• テスト対象にAgentを組み込む必要がない

• http://appium.io/

13年11月15日金曜日

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

MonkeyTalk

• Gorilla Logic社が開発/公開しているOSSでiOS/Androidで利用可。旧”FoneMonkey”

• 専用の表形式IDEでテストを記述可能、キャプチャ機能もあり

• テスト対象にAgentを組み込む必要あり

• https://www.gorillalogic.com/monkeytalk

13年11月15日金曜日

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

Calabash

• Cucumberのテスト(feature)を、iOS/

Androidデバイスで実行できる

• iOSはテスト対象にAgentを組み込む必要あり

• https://github.com/calabash/calabash-android

• https://github.com/calabash/calabash-ios

13年11月15日金曜日

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

Tips

13年11月15日金曜日

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

テスト用ビルドを作る

• 複数のTarget/Configurationを持つiOSプロジェクトの構成Tips http://nowsprinting.hatenablog.com/entry/

2012/11/18/031511

• Gradle+Androidプラグインでプロダクトフレーバーを試してみた http://nowsprinting.hatenablog.com/entry/

2013/05/23/153941

Agentの組み込みの他、接続先サーバ別など自動生成できると便利です

13年11月15日金曜日

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

UAT/ベータテスト

• iOS/Android

• TestFlight https://testflightapp.com/

• Android

• deploy gate https://deploygate.com/

• Google Play Storeのベータ版配布機能

On The Airでビルドを配布できるサービス

13年11月15日金曜日

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

まとめ

13年11月15日金曜日

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

まとめ

• 欲張らない• 頑張らない

13年11月15日金曜日

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

まとめ

• 欲張らないROI

• 頑張らないテストスクリプト

13年11月15日金曜日