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