Your SlideShare is downloading. ×
スマートフォンアプリの色々自動化をはじめよう - at SonyDNA Meisters Salon 特別編
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

スマートフォンアプリの色々自動化をはじめよう - at SonyDNA Meisters Salon 特別編

757
views

Published on

http://meisters.doorkeeper.jp/events/11134

http://meisters.doorkeeper.jp/events/11134

Published in: Technology

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
757
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
5
Comments
0
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. スマートフォンアプリの テスト自動化をはじめよう Meisters Salon 特別編 2014.05.23 @nowsprinting/Koji Hasegawa 色々
  • 2. 自己紹介 • @nowsprinting/Koji Hasegawa • フリーランス (iOS/Androidアプリ受託開発) • テスト自動化研究会、Androidテスト部 • 著書『iOSアプリ テスト自動化入門』   『Androidアプリテスト技法』(共著)
  • 3. 著書
  • 4. アジェンダ • テストレベルと自動化 • システムテスト自動化のROI • システムテスト自動化フレームワークの紹介 • ビルド・静的解析の自動化 • まとめ
  • 5. テストレベルと自動化
  • 6. テストレベル
  • 7. テストレベル • テストフェーズ(工程)とは必ずしも
 一致しない • プロダクト(アプリ)の結合度 • 担当者の変わり目
  • 8. ユニットテスト • MVCのM(モデル、ビジネスロジック) を中心に行なう • XCTest, GHUnit, Kiwi, OCMock, … • JUnit, Robolectric, Mockito, EasyMock, …
  • 9. ユニットテスト • MVCのM(モデル、ビジネスロジック) を中心に行なう • XCTest, GHUnit, Kiwi, OCMock, … • JUnit, Robolectric, Mockito, EasyMock, … 小さな単位でテスト、検証を厳密に行なう ことができ、自動化の恩恵が大きい
  • 10. 統合(結合)テスト • 個々のクラス間の統合(結合) • iOS/Android SDKとの統合 • UI(StoryBoard, nib, Layout XML)との統合 • サーバAPIとの統合
  • 11. 統合(結合)テスト • 個々のクラス間の統合(結合) • iOS/Android SDKとの統合 • UI(StoryBoard, nib, Layout XML)との統合 • サーバAPIとの統合 網羅的に、結合箇所に着眼。この観点で UT/STにテスト項目があれば良いはず
  • 12. システムテスト • QA担当者が実施する、エンド・ツー・ エンドのテスト • アプリを実機にインストールして実施 • サーバAPIはステージング以上 • 機能テスト、非機能テストなど色々
  • 13. システムテスト • QA担当者が実施する、エンド・ツー・ エンドのテスト • アプリを実機にインストールして実施 • サーバAPIはステージング以上 • 機能テスト、非機能テストなど色々 機能テストは自動化できるが、ユーザビリ ティや厳密な検証を欲張らないこと
  • 14. システムレベルの 機能テスト • 近年のテスト自動化ツールは、Selenium のようにViewのツリー構造を利用してオ ブジェクト指定が可能 • レイアウトや座標に左右されないテスト が可能。(ただし機能テストに限る)
  • 15. システムテスト自動化の ROI(投資利益率)
  • 16. 理想の高い利益 • テスト実行時間の短縮 • “正しい”画面表示のテスト(Judge/Assert) • 複数のOSバージョン/機種で実行できる • OS/機種依存問題を検出できる(表示崩 れなども) Return
  • 17. 投資 • 自動化ツールの選定/習得 • 自動化スクリプトの作成(高度なJudge/ Assertを求められる) • 自動化スクリプトの保守(同上) • テストデータ、スタブサーバの準備 理想の高い利益を 得るための Investment
  • 18. 投資 理想の高い利益を 得るための Investment コストの増大、工程遅延、保守の放棄 • 自動化ツールの選定/習得 • 自動化スクリプトの作成(高度なJudge/ Assertを求められる) • 自動化スクリプトの保守(同上) • テストデータ、スタブサーバの準備
  • 19. 理想の高い利益 Return • テスト実行時間の短縮 • “正しい”画面表示のテスト(Judge/Assert) • 複数のOSバージョン/機種で実行できる • OS/機種依存問題を検出できる(表示崩 れなども)
  • 20. 現実的な利益に絞る Return • テスト実行時間の短縮 • “正しい”画面表示のテスト(Judge/Assert) • 複数のOSバージョン/機種で実行できる • OS/機種依存問題を検出できる(表示崩 れなども)
  • 21. “テストの目的”に立ち返る • 欠陥を摘出する • 対象ソフトウェアの品質レベルが十分で あることを確認する • 意思決定のための情報を示す • 欠陥の作り込みを防ぐ ※JSTQBシラバスより引用
  • 22. • 欠陥を摘出する • 対象ソフトウェアの品質レベルが十分で あることを確認する • 意思決定のための情報を示す • 欠陥の作り込みを防ぐ ※JSTQBシラバスより引用 スコープを“回帰テスト”に絞っても満たせるもの “テストの目的”に立ち返る
  • 23. • 欠陥を摘出する • 対象ソフトウェアの品質レベルが十分で あることを確認する • 意思決定のための情報を示す • 欠陥の作り込みを防ぐ ※JSTQBシラバスより引用 対象OS/機種で”とりあえず”動くことが確認できれば “テストの目的”に立ち返る
  • 24. 欲張らないROI • 利益 • テスト実行時間の短縮 • 複数OSバージョン/機種で実行できる • 投資 • 自動化ツールの選定/習得 • 自動化スクリプトの作成/保守(高度な 頑張らないテストスクリプト) • テストデータ、スタブサーバの準備
  • 25. 頑張らないテストスクリプト • 日時、天気、株価、為替、乱数などに 起因するJudgeを無理にはしない • レイアウト崩れまでJudgeしようとしない • 機種依存の問題を狙ってテストしようと しない(OS/解像度のフラグメンテー ションと、機種依存問題は分けて考える)
  • 26. 頑張らないテストスクリプト • 日時、天気、株価、為替、乱数などに 起因するJudgeを無理にはしない • レイアウト崩れまでJudgeしようとしない • 機種依存の問題を狙ってテストしようと しない(OS/解像度のフラグメンテー ションと、機種依存問題は分けて考える) ユニットテストでモックを使って実施
  • 27. 頑張らないテストスクリプト • 日時、天気、株価、為替、乱数などに 起因するJudgeを無理にはしない • レイアウト崩れまでJudgeしようとしない • 機種依存の問題を狙ってテストしようと しない(OS/解像度のフラグメンテー ションと、機種依存問題は分けて考える) ユニットテストでモックを使って実施 スクリーンショットを目視確認
  • 28. 頑張らないテストスクリプト • 日時、天気、株価、為替、乱数などに 起因するJudgeを無理にはしない • レイアウト崩れまでJudgeしようとしない • 機種依存の問題を狙ってテストしようと しない(OS/解像度のフラグメンテー ションと、機種依存問題は分けて考える) スクリーンショットを目視確認 ユニットテストでモックを使って実施 内容次第で手動で確認
  • 29. 頑張らなくても ここまでできる事例
  • 30. iOSのUIAlertView iOS6 iOS7
  • 31. iOSのUIAlertView iOS6 iOS7 CLASH!!!
  • 32. iOSのUIPickerView iOS6 iOS7
  • 33. iOSのUIPickerView iOS6 iOS7 CLASH!!!
  • 34. AndroidのdrawRect() Android 4.1 Canvas#drawRect(100,100,10,10); (10,10) (100,100) Android 4.2
  • 35. AndroidのdrawRect() Android 4.1 Canvas#drawRect(100,100,10,10); (10,10) (100,100) 描画されない!Android 4.2 ※left<=right, top<=bottomでないと描画されない仕様
  • 36. Android機種依存の例 1 一定量のViewヒエラルキー の上でソフトウェアキーボー ドが出現するときに StackOverflowErrorが発生 (某メーカーのAndroid 2.3 搭載端末のみ)
  • 37. 普通の端末 奇妙な端末 Android機種依存の例 2
  • 38. 普通の端末 奇妙な端末 Android機種依存の例 2
  • 39. 利益を拡大する Return
  • 40. 欲張らないROI • テスト実行時間の短縮 ➡時間と集中力を高度なテストに割り振る ➡リリース頻度の向上(4∼6週間ごとが理想) • 複数OSバージョン/機種で実行できる ➡さらにテスト実行環境を増やす。端末の回転、 ロケール、タイムゾーン、12h/24h表記、IME (Android)、文字サイズ(Android 4.0)
  • 41. 利益を拡大する • テスト実行時間の短縮 ➡時間と集中力を高度なテストに割り振る ➡リリース頻度の向上(4∼6週間ごとが理想) • 複数OSバージョン/機種で実行できる ➡さらにテスト実行環境を増やす。端末の回転、 ロケール、タイムゾーン、12h/24h表記、IME (Android)、文字サイズ(Android 4.0) Return
  • 42. 利益を拡大する • テスト実行時間の短縮 ➡時間と集中力を高度なテストに割り振る ➡リリース頻度の向上(4∼6週間ごとが理想) • 複数OSバージョン/機種で実行できる ➡さらにテスト実行環境を増やす。端末の回転、 ロケール、タイムゾーン、12h/24h表記、IME (Android)、文字サイズ(Android 4.0) Return ROIにとどまらず、製品の価値を 上げられる!
  • 43. 手動ではできないことができる • ロードテスト(ヒートラン) • メモリリークの調査 • 低メモリ状態での動作 • コンカレンシーテスト • 再現率の低い(タイミングがシビアな) 問題の確認テスト
  • 44. システムテスト自動化 フレームワークの紹介
  • 45. monkeyrunner • Android SDK同梱の自動テストツール。スクリプ トはPythonで記述。キャプチャツール有り • 座標を指定してタップ、ドラッグ • スクリーンショット、画像比較でのJudge • http://developer.android.com/tools/help/monkeyrunner_concepts.html • サンプル https://github.com/nowsprinting/nameko-harvest
  • 46. Robotium • Android Testing Frameworkのヘルパーで、 Seleniumライクなテスト記述が可能 (JUnitの知識が必要) • 端末回転、スクリーンショットなど必要 機能は っている • https://code.google.com/p/robotium/ • サンプル https://github.com/mike-neck/AllowLog
  • 47. 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
  • 48. Espresso • 10月に公開された、Google謹製のAndroid 向けテスティングフレームワーク • Android 2.2以上で利用可能 • テスト記述は JUnitベース • https://code.google.com/p/android-test-kit/
  • 49. UIAutomation • Xcodeに同梱のInstrumentツールで自動実行を 行なうフレームワーク • スクリプトはJavaScriptで記述 • 標準でassert機能が無いのでJSのライブラリを 使う( tuneup_js等)
  • 50. Appium • iOS/Androidで利用できるオープンソースの テストツール • 複数のスクリプト言語で記述可能 • テスト対象にAgentを組み込む必要がない • AndroidはAPI Level 17 (JellyBean)以上が必要 • http://appium.io/
  • 51. Calabash • Cucumberのテスト(feature)を、iOS/ Androidデバイスで実行できる • iOS版はテスト対象にAgentを組み込む必要 あり • https://github.com/calabash/calabash-android • https://github.com/calabash/calabash-ios
  • 52. MonkeyTalk • Gorilla Logic社が開発/公開しているOSSで iOS/Androidで利用可。旧”FoneMonkey” • 専用の表形式IDEでテストを記述可能 • テスト対象にAgentを組み込む必要あり • ATI 2012 Awards iOS/Android部門winner • https://www.gorillalogic.com/monkeytalk
  • 53. その他 iOS向けフレームワーク • Frank • 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
  • 54. ツール選定のポイント • スクリプトを書けるチームかどうか
 (将来も保守していけるのか) • iOS/Androidでテストを共有したいのか
 (但しUIが異なるので期待しすぎない) • 「何が実行できるか」は余り重視しない
 (ツールの実行機能の差は縮まる) • 仕様化、BDD
  • 55. ビルド・静的解析の 自動化
  • 56. テスト用ビルドを作る • 複数の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の組み込みの他、接続先サーバ別など 自動生成できると便利です
  • 57. UAT/ベータテスト • iOS/Android • TestFlight https://testflightapp.com/ • Android • deploy gate https://deploygate.com/ • Google Play Storeのベータ版配布機能 On The Airでビルドを配布できるサービス
  • 58. 継続的インテグレーション • OS X Server/Bots • Xcodeとの統合。自由度は低め • Jenkins • 豊富なプラグイン、コードカバレジ、 静的解析 • Travis CI • クラウドサービス、Immutable
  • 59. OS X Server/Bots
  • 60. OS X Server/Bots
  • 61. Jenkins
  • 62. Jenkins
  • 63. Jenkins
  • 64. ビルド・静的解析を  自動化するメリット • 手作業によるオペミスを減らす • 内部品質の低いプロダクトを改善する  足がかり • ひとりでも寂しくない!
  • 65. まとめ
  • 66. まとめ •欲張らない •頑張らない
  • 67. まとめ •欲張らないROI •頑張らないテストスクリプト