Your SlideShare is downloading. ×
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
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

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

1,009

Published on

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

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

×