スマートフォンアプリの テスト自動化をはじめよう
Upcoming SlideShare
Loading in...5
×
 

スマートフォンアプリの テスト自動化をはじめよう

on

  • 15,127 views

システムテスト自動化カンファレンス2013 発表資料

システムテスト自動化カンファレンス2013 発表資料
https://sites.google.com/site/testautomationresearch/event
http://togetter.com/li/597476

Statistics

Views

Total Views
15,127
Views on SlideShare
4,180
Embed Views
10,947

Actions

Likes
28
Downloads
59
Comments
0

13 Embeds 10,947

https://mj89sp3sau2k7lj1eg3k40hkeppguj6j-a-sites-opensocial.googleusercontent.com 4916
http://nowsprinting.hatenablog.com 4043
http://gihyo.jp 1944
http://s.deeeki.com 13
https://pyxis.sega.co.jp 9
http://49.212.34.189 7
http://192.168.33.10 5
https://twitter.com 4
http://geechscamp.lovepop.jp 2
https://www.facebook.com 1
http://cache.yahoofs.jp 1
https://kcw.kddi.ne.jp 1
http://plus.url.google.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

スマートフォンアプリの テスト自動化をはじめよう スマートフォンアプリの テスト自動化をはじめよう Presentation Transcript

  • スマートフォンアプリの テスト自動化をはじめよう システムテスト自動化カンファレンス2013 2013.12.1 #stac2013
  • 自己紹介 長谷川 孝二 • • • @nowsprinting (twitter, github, etc...) テスト自動化研究会 Androidテスト部 iOS/Androidアプリ開発者 • • 受託開発(フリーランス) 自社開発
  • 自己紹介 長谷川 孝二 • • • @nowsprinting (twitter, github, etc...) テスト自動化研究会 Androidテスト部 iOS/Androidアプリ開発者 • • 受託開発(フリーランス) 自社開発
  • アジェンダ • テスト自動化の現状 • システムテスト自動化のROI • システムテスト自動化フレームワークの紹介 • デモ • Tips
  • テスト自動化の現状
  • ユニットテスト/iOS • Xcode標準のOCUnit(SenTestingKit) • Xcode5ではXCTest、テスト実行の強化 • Mac OS 10.9でX Server(Bot)によるCI • GHUnit, OCMockなど モデルのユニットテストは容易
  • ユニットテスト/Android • Android Testing Framework(Android SDK 同梱/JUnit3ベース) • UI操作を補完するオープンソースフレー ムワーク(Robotiumなど) • Mockito, EasyMock, Robolectricなど モデルのユニットテストは容易
  • システムテスト • iOS/Androidとも自動化ツール/フレーム ワークは多数存在する(後ほど紹介) • UI変更頻度が高い、トランジションアニ メーション等の重要度が高いが、そのテ ストは自動化しにくい
  • システムテスト • iOS/Androidとも自動化ツール/フレーム ワークは多数存在する(後ほど紹介) • UI変更頻度が高い、トランジションアニ メーション等の重要度が高いが、そのテ ストは自動化しにくい 自動化は(現実的に)可能なのか?
  • システムテスト自動化の ROI
  • 理想の高い利益 Return • テスト実行時間の短縮 • “正しい”画面表示のテスト(Judge) • 複数のOSバージョン/機種で実行できる • OS/機種依存問題を検出できる
  • 理想の高い利益を 得るための 投資 Investment • 自動化ツールの選定/習得 • 自動化スクリプトの作成(高度なJudgeを 求められる) • 自動化スクリプトの保守(同上) • テストデータ、スタブサーバの準備
  • 理想の高い利益を 得るための 投資 Investment • 自動化ツールの選定/習得 • 自動化スクリプトの作成(高度なJudgeを 求められる) • 自動化スクリプトの保守(同上) • テストデータ、スタブサーバの準備 コストの増大、工程遅延、保守の放棄
  • 理想の高い利益 Return • テスト実行時間の短縮 • “正しい”画面表示のテスト(Judge) • 複数のOSバージョン/機種で実行できる • OS/機種依存バグを検出できる
  • 現実的な利益に絞る Return • テスト実行時間の短縮 • “正しい”画面表示のテスト(Judge) • 複数のOSバージョン/機種で実行できる • OS/機種依存バグを検出できる
  • “テストの目的”に立ち返る • 欠陥を摘出する • 対象ソフトウェアの品質レベルが十分で あることを確認する • 意思決定のための情報を示す • 欠陥の作り込みを防ぐ ※JSTQBシラバスより引用
  • “テストの目的”に立ち返る スコープを“回帰テスト”に絞っても満たせるもの • 欠陥を摘出する • 対象ソフトウェアの品質レベルが十分で あることを確認する • 意思決定のための情報を示す • 欠陥の作り込みを防ぐ ※JSTQBシラバスより引用
  • “テストの目的”に立ち返る 対象OS/機種で”とりあえず”動くことが確認できれば • 欠陥を摘出する • 対象ソフトウェアの品質レベルが十分で あることを確認する • 意思決定のための情報を示す • 欠陥の作り込みを防ぐ ※JSTQBシラバスより引用
  • 欲張らないROI • 利益 • テスト実行時間の短縮 • 複数OSバージョン/機種で実行できる • 投資 • 自動化ツールの選定/習得 • 自動化スクリプトの作成/保守(高度な 頑張らないテストスクリプト) • テストデータ、スタブサーバの準備
  • 頑張らないテストスクリプト • 日時、天気、株価、為替、乱数などに 起因するJudgeを無理にはしない • レイアウト崩れまでJudgeしようとしない • 機種依存の問題を狙ってテストしようと しない(OS/解像度のフラグメンテー ションと、機種依存問題は分けて考える)
  • 頑張らないテストスクリプト ユニットテストでモックを使って実施 • 日時、天気、株価、為替、乱数などに 起因するJudgeを無理にはしない • レイアウト崩れまでJudgeしようとしない • 機種依存の問題を狙ってテストしようと しない(OS/解像度のフラグメンテー ションと、機種依存問題は分けて考える)
  • 頑張らないテストスクリプト ユニットテストでモックを使って実施 • 日時、天気、株価、為替、乱数などに 起因するJudgeを無理にはしない スクリーンショットを目視確認 • レイアウト崩れまでJudgeしようとしない • 機種依存の問題を狙ってテストしようと しない(OS/解像度のフラグメンテー ションと、機種依存問題は分けて考える)
  • 頑張らないテストスクリプト ユニットテストでモックを使って実施 • 日時、天気、株価、為替、乱数などに 起因するJudgeを無理にはしない スクリーンショットを目視確認 • レイアウト崩れまでJudgeしようとしない • 機種依存の問題を狙ってテストしようと しない(OS/解像度のフラグメンテー ションと、機種依存問題は分けて考える) 内容次第で手動で確認
  • 頑張らなくても ここまでできる事例
  • iOSのUIAlertView iOS6 iOS7
  • iOSのUIAlertView iOS6 iOS7 CLASH!!!
  • iOSのUIPickerView iOS6 iOS7
  • iOSのUIPickerView iOS6 iOS7 CLASH!!!
  • その他 iOSの事例 1 CLASH!!! UIAlertViewを非UIスレッドから表示できてしまっていた が、正しく例外となるようになった例 ( アプリの潜在不良が顕在化 /iOS3前後くらい?)
  • その他 iOSの事例 2 何か操作 CLASH!!! 開放/上書きされるはずのインスタンスを参照していた が、iOSバージョンアップでインスタンスが正しく開放 されるようになった (アプリの潜在不良が顕在化)
  • AndroidのdrawRect() Canvas#drawRect(100,100,10,10); (10,10) Android 4.1 (100,100) Android 4.2
  • AndroidのdrawRect() Canvas#drawRect(100,100,10,10); (10,10) Android 4.1 (100,100) Android 4.2 描画されない! ※left<=right, top<=bottomでないと描画されない仕様
  • Android機種依存の例 1 一定量のViewヒエラルキー の上でソフトウェアキーボー ドが出現するときに StackOverflowErrorが発生 (某メーカーのAndroid 2.3 搭載端末のみ)
  • Android機種依存の例 2 普通の端末 奇妙な端末
  • Android機種依存の例 2 普通の端末 奇妙な端末
  • 押さえておきたいポイント • 全ての画面は網羅する(エラーケースの AlertView表示等も含むことが望ましい) • CIなどで繰り返し行なう段階であれば、スク リーンショットの比較はImageMagickなどで 自動化する(但し全てCI化は目指さない) • 実行時間も0ではないので、テストケースの 絞り込みは意識する
  • 利益を拡大する Return
  • 欲張らないROI • テスト実行時間の短縮 ➡時間と集中力を高度なテストに割り振る ➡リリース頻度の向上(4∼6週間ごとが理想) • 複数OSバージョン/機種で実行できる さらにテスト実行環境を増やす。端末の回転、 ➡ロケール、タイムゾーン、12h/24h表記、IME (Android)、文字サイズ(Android 4.0)
  • 利益を拡大する Return • テスト実行時間の短縮 ➡時間と集中力を高度なテストに割り振る ➡リリース頻度の向上(4∼6週間ごとが理想) • 複数OSバージョン/機種で実行できる さらにテスト実行環境を増やす。端末の回転、 ➡ロケール、タイムゾーン、12h/24h表記、IME (Android)、文字サイズ(Android 4.0)
  • 手動ではできないことができる • ロードテスト(ヒートラン) • メモリリークの調査 • 低メモリ状態での動作 • コンカレンシーテスト • 再現率の低い(タイミングがシビアな) 問題の確認テスト
  • システムテスト自動化 フレームワークの紹介
  • monkeyrunner • Android SDK同梱の自動テストツール。スクリプ トはPythonで記述。キャプチャツール有り • 座標を指定してタップ、ドラッグ • スクリーンショット、画像比較でのJudge • • http://developer.android.com/tools/help/monkeyrunner_concepts.html サンプル https://github.com/nowsprinting/nameko-harvest
  • Robotium • Android Testing Frameworkのヘルパーで、 Seleniumライクなテスト記述が可能 (JUnitの知識が必要) • 端末回転、スクリーンショットなど必要 機能は • • っている https://code.google.com/p/robotium/ サンプル https://github.com/mike-neck/AllowLog
  • 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
  • Espresso • 10月に公開された、Google謹製のAndroid 向けテスティングフレームワーク • Android 2.2以上で利用可能 • テスト記述は JUnitベース • https://code.google.com/p/android-test-kit/
  • UIAutomation • Xcodeに同梱のInstrumentツールで自動実行を 行なうフレームワーク • スクリプトはJavaScriptで記述 • 標準でassert機能が無いのでJSのライブラリを 使う( tuneup_js等)
  • Appium • iOS/Androidで利用できるオープンソースの テストツール • 複数のスクリプト言語で記述可能 • テスト対象にAgentを組み込む必要がない • AndroidはAPI Level 17 (JellyBean)以上が必要 • http://appium.io/
  • Calabash • Cucumberのテスト(feature)を、iOS/ Androidデバイスで実行できる • iOS版はテスト対象にAgentを組み込む必要 あり • https://github.com/calabash/calabash-android • https://github.com/calabash/calabash-ios
  • MonkeyTalk • Gorilla Logic社が開発/公開しているOSSで iOS/Androidで利用可。旧”FoneMonkey” • 専用の表形式IDEでテストを記述可能 • テスト対象にAgentを組み込む必要あり • ATI 2012 Awards iOS/Android部門winner • https://www.gorillalogic.com/monkeytalk
  • その他 iOS向けフレームワーク • Franc • Cucumber系、 ATI 2012 Awards iOS部門 finalists • http://www.testingwithfrank.com/ • Zucchini • DSL系、ATI 2012 Awards iOS部門finalists • http://www.zucchiniframework.org/ • KIF • https://github.com/kif-framework/KIF
  • ツール選定のポイント • スクリプトを書けるチームかどうか
 (将来も保守していけるのか) • iOS/Androidでテストを共有したいのか
 (但しUIが異なるので期待しすぎない) • 「何が実行できるか」は余り重視しない
 (ツールの実行機能の差は縮まる)
  • デモ
  • Tips
  • テスト用ビルドを作る 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
  • UAT/ベータテスト On The Airでビルドを配布できるサービス • iOS/Android • TestFlight https://testflightapp.com/ • Android • deploy gate https://deploygate.com/ • Google Play Storeのベータ版配布機能
  • リモートテストサービス • AppKit Box Remote TestKit • インターネット経由で実機をレンタル し、テストできるサービス • Android向けサービスだったが、9月に iOSデバイスも利用可能に • http://appkitbox.com/testkit
  • まとめ
  • まとめ • 欲張らない • 頑張らない
  • まとめ • 欲張らないROI • 頑張らないテストスクリプト