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

46
スマートフォンアプリ開発 と自動化 ~なじむ。実に!なじむぞ!~ 2014.06.28 Asian Automation Alliance @nowsprinting/Koji Hasegawa

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

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

スマートフォンアプリ開発 と自動化

~なじむ。実に!なじむぞ!~

2014.06.28 Asian Automation Alliance

@nowsprinting/Koji Hasegawa

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

自己紹介• @nowsprinting/Koji Hasegawa

• フリーランス (iOS/Androidアプリ受託開発)

• テスト自動化研究会、Androidテスト部

• 山吹色の茸疾走(Android)、フットサルルールと雑学(iOS)、電エースQuiz(iOS)

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

著書

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

アジェンダ

• アプリ開発における課題 • ビルド、デリバリの自動化 • テストの自動化 • まとめ

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

アプリ開発における課題

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

アプリ開発における課題

• テスト対象OSバージョン、機種が多い(古いものがなかなか切れない)

• 新OSバージョン、新機種への対応

• ビルドの種類が多い

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

ビルドの種類が多い• ステージング、プロダクションアプリの接続先ごとに識別子を変え、別アプリとして端末にインストールしたい

• Debug、Releaseログ出力、証明書などの切り替え

• テストツールのエージェントをバンドル

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

手動ビルドの限界

• 入門書にはIDE(GUI)でのビルド方法が書かれている

• 設定を切り替えてビルドを繰り返す? • 手順書を作っても、IDEのGUIが変わるし、人間はオペミスする

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

手動デリバリの限界• QA担当者、顧客のUAT担当者、ベータテスター向けのビルドを配布

• 端末をUSBでつないでインストール、端末をUSBでつないでインストール、端末をUSBでつないでインストール、…

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

手動回帰テストの限界• エンハンス時の回帰テスト • 複数OS/機種でのテスト実行(ISTQBによるとこれも回帰テスト)

• 手作業での同じテストの繰り返し、オペミス、見落とし→人間の(集中力の)限界

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

ビルド、デリバリの自動化

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

ビルドの自動化

• iOS

• Build Target/Configurationで設定の異なるビルドを定義できる

• xcodebuildコマンドでビルド

• JenkinsではXcodeプラグイン

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

ビルドの自動化

• Android

• 新ビルドシステム(Gradle plugin for

Android)では、Build Flavor/Typeで設定の異なるビルドを定義できる

• gradleコマンドでビルド

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

CIツール• Jenkins

• OS X Server/Bots(複数OS/機種での実行もサポート)

• Travis CI

• language: objective-cでMac OS X

• language: androidでAndroid(beta)

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

OS X Server/Bots

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

デリバリの自動化

• QA担当者、顧客のUAT担当者、ベータテスター向けのビルドをAPIでアップロード、OTAでデリバリ

• TestFlight(iOSのみ)

• DeployGate(iOS/Android)

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

ただし、リリースの自動化は…

• App Store/Google Play Storeへのリリースは自動化できていない(APIは無く、UI

も突然変更される)

• ビルドスクリプトでファイル名の中にバージョン番号を入れるなど、オペミスを防ぐ工夫はするべき

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

テストの自動化

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

ユニットテスト• iOS

• XCTest, Kiwi(SpecBDD)

• OCMock, OCMockit

• Android

• JUnit 3 or JUnit 4 + JavaVM + Robolectric

• Mockito, EasyMockのDalvikサポート

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

ユニットテスト• iOS

• XCTest, Kiwi(SpecBDD)

• OCMock, OCMonkit

• Android

• JUnit 3 or JUnit 4 + JavaVM + Robolectric

• Mockito, EasyMockのDalvikサポート

自動化しない理由は無い

“L”はARTなので動かない

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

システムテスト• 機能テスト(回帰テスト)向けツール • ViewのツリーからUIコンポーネントを扱える、ロバストなテストを書ける

• Cucumber系(Scenario BDD)

• ユーザビリティテストは除外(機種ごとの表示ズレ、トランケートなども含め)

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

機能テスト向けツール

• iOS

• XCTestベース:KIF

• Instrumentsベース:UI Automation, Appium

• エージェントをバンドル:Frank,

MonkeyTalk

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

機能テスト向けツール

• Android

• Unit Testの拡張:Robotium

• Instrumentベース:uiautomator, Espresso,

Appium

• エージェントをバンドル:MonkeyTalk

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

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

MonkeyTalkの例

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

ユーザビリティテスト• このあたりから「自動化ハイ」の危険

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

ユーザビリティテスト• このあたりから「自動化ハイ」の危険 • アプリのレイアウト変更、OSバージョンアップ、機種によって容易に壊れるテストは自動化するメリットが少ない

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

ユーザビリティテスト• このあたりから「自動化ハイ」の危険 • アプリのレイアウト変更、OSバージョンアップ、機種によって容易に壊れるテストは自動化するメリットが少ない

吸血鬼は日光に弱いッッ!のと同じです

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

ユーザビリティテスト• 使い心地は、実機を人間が操作して評価 • 機種ごとの表示ズレ、トランケートも、機能テストとは分けて評価する

• ショーストッパーではない • スクリーンショットは自動で撮って、目視確認するなどの工夫はする

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

メンテナンスコストの意識

• テストのメンテナンスコストまで考えて無理のない自動化を

• テスト自動化全般のROI(投資利益率)については、午後のテスト自動化研究会セッションをぜひご聴講ください

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

機能テストでだいたいまかなえる事例

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

iOSのUIAlertView

iOS6

iOS7

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

iOSのUIAlertView

iOS6

iOS7 CLASH!!!

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

iOSのUIPickerView

iOS6

iOS7

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

iOSのUIPickerView

iOS6

iOS7 CLASH!!!

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

その他 iOSの事例 1

CLASH!!!

UIAlertViewを非UIスレッドから表示できてしまっていたが、正しく例外となるようになった例

( アプリの潜在不良が顕在化 /iOS3前後くらい?)

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

AndroidのdrawRect()

Android 4.1

Canvas#drawRect(100,100,10,10);

(10,10)

(100,100)

Android 4.2

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

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

Android機種依存の例 1一定量のViewヒエラルキーの上でソフトウェアキーボードが出現するときにStackOverflowErrorが発生(某メーカーのAndroid 2.3

搭載端末のみ)

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

普通の端末

奇妙な端末

Android機種依存の例 2

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

普通の端末

奇妙な端末

Android機種依存の例 2

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

まとめ

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

まとめ

• おれは人間を超越するッ!自動テストでだァーッ!!

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

• 最高に「ハイ!」tt 慢心ダメ絶対

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

まとめ

• おれは人間を超越するッ!自動テストでだァーッ!!

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

• 最高に「ハイ!」tt 慢心ダメ絶対

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

まとめ

• おれは人間を超越するッ!自動テストでだァーッ!!

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

• 最高に「ハイ!」tt 慢心ダメ絶対

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

まとめ今日お話したこと、iOS

についてはだいたい載ってます。 !また、某Web媒体でiOS/

Android自動化ツールに関する連載を準備中です