スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA

1,885 views

Published on

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

No Downloads
Views
Total views
1,885
On SlideShare
0
From Embeds
0
Number of Embeds
297
Actions
Shares
0
Downloads
11
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA

  1. 1. スマートフォンアプリ開発 と自動化 ∼なじむ。実に!なじむぞ!∼ 2014.06.28 Asian Automation Alliance @nowsprinting/Koji Hasegawa
  2. 2. 自己紹介 • @nowsprinting/Koji Hasegawa • フリーランス (iOS/Androidアプリ受託開発) • テスト自動化研究会、Androidテスト部 • 山吹色の茸疾走(Android)、フットサル ルールと雑学(iOS)、電エースQuiz(iOS)
  3. 3. 著書
  4. 4. アジェンダ • アプリ開発における課題 • ビルド、デリバリの自動化 • テストの自動化 • まとめ
  5. 5. アプリ開発における 課題
  6. 6. アプリ開発における課題 • テスト対象OSバージョン、機種が多い
 (古いものがなかなか切れない) • 新OSバージョン、新機種への対応 • ビルドの種類が多い
  7. 7. ビルドの種類が多い • ステージング、プロダクション
 アプリの接続先ごとに識別子を変え、別 アプリとして端末にインストールしたい • Debug、Release
 ログ出力、証明書などの切り替え • テストツールのエージェントをバンドル
  8. 8. 手動ビルドの限界 • 入門書にはIDE(GUI)でのビルド方法が 書かれている • 設定を切り替えてビルドを繰り返す? • 手順書を作っても、IDEのGUIが変わる し、人間はオペミスする
  9. 9. 手動デリバリの限界 • QA担当者、顧客のUAT担当者、ベータ テスター向けのビルドを配布 • 端末をUSBでつないでインストール、
 端末をUSBでつないでインストール、
 端末をUSBでつないでインストール、
 …
  10. 10. 手動回帰テストの限界 • エンハンス時の回帰テスト • 複数OS/機種でのテスト実行(ISTQBによ るとこれも回帰テスト) • 手作業での同じテストの繰り返し、オペ ミス、見落とし
 →人間の(集中力の)限界
  11. 11. ビルド、デリバリの 自動化
  12. 12. ビルドの自動化 • iOS • Build Target/Configurationで設定の異な るビルドを定義できる • xcodebuildコマンドでビルド • JenkinsではXcodeプラグイン
  13. 13. ビルドの自動化 • Android • 新ビルドシステム(Gradle plugin for Android)では、Build Flavor/Typeで設定 の異なるビルドを定義できる • gradleコマンドでビルド
  14. 14. CIツール • Jenkins • OS X Server/Bots(複数OS/機種での実行 もサポート) • Travis CI • language: objective-cでMac OS X • language: androidでAndroid(beta)
  15. 15. OS X Server/Bots
  16. 16. デリバリの自動化 • QA担当者、顧客のUAT担当者、ベータ テスター向けのビルドをAPIでアップ ロード、OTAでデリバリ • TestFlight(iOSのみ) • DeployGate(iOS/Android)
  17. 17. ただし、リリースの自動化は… • App Store/Google Play Storeへのリリース は自動化できていない(APIは無く、UI も突然変更される) • ビルドスクリプトでファイル名の中にバー ジョン番号を入れるなど、オペミスを防 ぐ工夫はするべき
  18. 18. テストの自動化
  19. 19. ユニットテスト • iOS • XCTest, Kiwi(SpecBDD) • OCMock, OCMockit • Android • JUnit 3 or JUnit 4 + JavaVM + Robolectric • Mockito, EasyMockのDalvikサポート
  20. 20. ユニットテスト • iOS • XCTest, Kiwi(SpecBDD) • OCMock, OCMonkit • Android • JUnit 3 or JUnit 4 + JavaVM + Robolectric • Mockito, EasyMockのDalvikサポート 自動化しない理由は無い “L”はARTなので動かない
  21. 21. システムテスト • 機能テスト(回帰テスト)向けツール • ViewのツリーからUIコンポーネントを 扱える、ロバストなテストを書ける • Cucumber系(Scenario BDD) • ユーザビリティテストは除外(機種ごと の表示ズレ、トランケートなども含め)
  22. 22. 機能テスト向けツール • iOS • XCTestベース:KIF • Instrumentsベース:UI Automation,Appium • エージェントをバンドル:Frank, MonkeyTalk
  23. 23. 機能テスト向けツール • Android • Unit Testの拡張:Robotium • Instrumentベース:uiautomator, Espresso, Appium • エージェントをバンドル:MonkeyTalk
  24. 24. FrankのFeature例 Given I should see a navigation bar titled "Detail" When I type "Newton Geizler" into the "name" text field using the keyboard And I select gender to "男性" And I select age to "35" And I navigate back Then I wait to see a navigation bar titled "Master" And I should see a cell name "Newton Geizler” and division "M2層"
  25. 25. MonkeyTalkの例
  26. 26. ユーザビリティテスト • このあたりから「自動化ハイ」の危険
  27. 27. ユーザビリティテスト • このあたりから「自動化ハイ」の危険 • アプリのレイアウト変更、OSバージョン アップ、機種によって容易に壊れるテス トは自動化するメリットが少ない
  28. 28. ユーザビリティテスト • このあたりから「自動化ハイ」の危険 • アプリのレイアウト変更、OSバージョン アップ、機種によって容易に壊れるテス トは自動化するメリットが少ない 吸血鬼は日光に弱いッッ! のと同じです
  29. 29. ユーザビリティテスト • 使い心地は、実機を人間が操作して評価 • 機種ごとの表示ズレ、トランケートも、 機能テストとは分けて評価する • ショーストッパーではない • スクリーンショットは自動で撮って、 目視確認するなどの工夫はする
  30. 30. メンテナンスコストの意識 • テストのメンテナンスコストまで考えて 無理のない自動化を • テスト自動化全般のROI(投資利益率) については、午後のテスト自動化研究会 セッションをぜひご聴講ください
  31. 31. 機能テストでだいたい まかなえる事例
  32. 32. iOSのUIAlertView iOS6 iOS7
  33. 33. iOSのUIAlertView iOS6 iOS7 CLASH!!!
  34. 34. iOSのUIPickerView iOS6 iOS7
  35. 35. iOSのUIPickerView iOS6 iOS7 CLASH!!!
  36. 36. その他 iOSの事例 1 CLASH!!! UIAlertViewを非UIスレッドから表示できてしまっていた が、正しく例外となるようになった例 ( アプリの潜在不良が顕在化 /iOS3前後くらい?)
  37. 37. AndroidのdrawRect() Android 4.1 Canvas#drawRect(100,100,10,10); (10,10) (100,100) Android 4.2
  38. 38. AndroidのdrawRect() Android 4.1 Canvas#drawRect(100,100,10,10); (10,10) (100,100) 描画されない!Android 4.2 ※left<=right, top<=bottomでないと描画されない仕様
  39. 39. Android機種依存の例 1 一定量のViewヒエラルキー の上でソフトウェアキーボー ドが出現するときに StackOverflowErrorが発生 (某メーカーのAndroid 2.3 搭載端末のみ)
  40. 40. 普通の端末 奇妙な端末 Android機種依存の例 2
  41. 41. 普通の端末 奇妙な端末 Android機種依存の例 2
  42. 42. まとめ
  43. 43. まとめ • おれは人間を超越するッ!
 自動テストでだァーッ!! • スマートフォンアプリ開発と自動化は
 なじむ。実に!なじむぞ! • 最高に「ハイ!」tt 慢心ダメ絶対
  44. 44. まとめ • おれは人間を超越するッ!
 自動テストでだァーッ!! • スマートフォンアプリ開発と自動化は
 なじむ。実に!なじむぞ! • 最高に「ハイ!」tt 慢心ダメ絶対
  45. 45. まとめ • おれは人間を超越するッ!
 自動テストでだァーッ!! • スマートフォンアプリ開発と自動化は
 なじむ。実に!なじむぞ! • 最高に「ハイ!」tt 慢心ダメ絶対
  46. 46. まとめ 今日お話したこと、iOS についてはだいたい載っ てます。 ! また、某Web媒体でiOS/ Android自動化ツールに 関する連載を準備中です

×