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