(レポート) MBL315: Etsy と iHS は AWS Device Farm の自動テストによってモバイルアプリの品質をどのように改善しているか #reinvent

aws-reinvent2015

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

AWS Device Farm の導入事例の紹介

この記事は、re:Invent 2015 のセッション「MBL315 - How Etsy and IHS Are Improving The Quality of Their Mobile Apps With Automated Testing on AWS Device Farm」のレポートです。

スピーカーは以下の方々です。

  • Trent Peterson - Product Mgr, Amazon Web Services
  • Shawn Castrianni - Principal Mobile Architect, IHS Global Inc.
  • Nassim Kammah - Software Engineer, Etsy

IMG_3962

Device Farm とは

Android, iOS 向けのアプリをクラウドでテストすることができるサービス。

  • Scale : 100以上のユニークな実機、多くのインスタンスでスケール
  • Security : フルHW、SWのisolation
  • Flexixibility : ポピュラーなフレームワークのサポート
  • Reports : テスト結果、スクショ、ログ、パフォーマンスが出力可能
  • Integration : Jenkins, Android Studio, SDKs, CLI を組み合わせて利用

iHS事例

iHS の Shawn Castrianni 氏による、ので Device Farm を使用した、事例と採用している各種自動化ツール/サービスの紹介。

IMG_3951

IMG_3952

モバイルアプリのテストの自動化の必要性

以下の課題を解決するため、モバイルアプリのテストの「自動化」を採用しています。

  • QAリソースの制限
  • テストのリグレッション
  • マニュアルテストのヒューマンエラー
  • OSバージョンの変更によるクラッシュ
  • 異なるモデル間でのクラッシュ (Androidは4.0以上で7,000機種ある)

開発/テストのプロセス

下図のフローでモバイルアプリの開発およびテストを行っています。

mbl202-02

  • アプリは Xamarin で開発
  • Beta deployをマニュアルのテスターに配信
    • Hockey App
      • Android, iOS でベータ配信可能
      • iOS は Development の Provisioning Profile が必要
    • TestFlight Beta Distribution
      • iOS のみ
      • Distribution の Provisioning Profile で利用可能
  • Automated UI Test (Simulators)
    • Appium
      • Ruby, Python, Java, JS, PHP, C# でテストが書ける
      • Test runner は JUnit, NUnit
      • iOS は UIAutomation, Android は UIAutomator
      • 特別なビルドやinstrumentationは不要
      • より良いプログラミングスキルは必要 JBehave
    • Appium Inspector
      • GUI でインタラクティブなテスティングツール
      • テスト中のアプリが表示される
      • UI の階層が見れる
  • Automated UI Test (Device Farm)
    • OSバージョン、デバイスの種類が豊富(100種類以上)
    • テストを自動で生成する機能 (Fuzz testing)
    • UI テストのサポート
    • CI 連係を考慮した SDK の提供
    • フラットな料金体系
  • CI
    • PMEase QuickBuild
      • Javaベースのクロスプラットフォームのビルドサーバー
      • アプリのビルドの自動化

IMG_3954

まとめ

Xamarin や Appium などを採用することにより、マルチプラットフォーム向けのアプリを効率的に開発されているようです。Device Farm は Appium のテストコードも利用できますし、iOS と Android の両方をサポートしているので、非常に相性が良さそうです。

ビルドサーバーの PMEase QuickBuild は初めて知りました。とても便利そうですね。

Etsy事例

Nassim Kammah 氏による Etsy の事例紹介。

IMG_3955

Etsy

  • グッズのマーケットプレース
  • 世界中の人からモバイルアプリでダイレクトにお買い物
  • 安全な取引

モバイルアプリ

  • 4つのアプリ
  • 週単位のリリース
  • 2つのリリースビルド、8 の QA スタッフ

開発フロー

  • アプリは push をトリガーに、Web 開発チームへアプリを自動配信
  • origin/master に push すると CI でテストとビルドを実行
  • コードレビュー
    • Pull Req を作る Script を作って自動化
  • ビルドと配信
    1. bit.ly/trylib
    2. HEADでビルドを実行して配信

IMG_3957

CI インフラ

  • 10~20のジョブがパラレルで動作
  • Build, Lint, Unit Test, Functional Test
  • 8~10分のビルド
  • iOS は 50 の Mac mini と MBP, Android は 26 の Linux コンテナ

ネイティブアプリのテスト

  • 開発者からの Push キュー
  • エンプロイはナイトリービルドをドッグフーディング
  • ボランティアのエンプロイはAdminをローテーション
  • QAチームはプレリリースアプリで審査

下図はテスト結果の様子です。

IMG_3958

テスト

  • Android は Espresso + Genymotion
  • iOS は Simulator で KIF
  • 1つのビルドジョブ
  • Build Flow は Jenkins の Job で行う

Device Farm の活用

  • Schedule テストで使用、Jenkins Pligin を通して
  • GA (Google Analytics) でよく使われている OS、Device、Resolution を確認してテスト対象を選定
  • 4アプリ * 10 デバイス * 30分ごと = めっちゃ結果出る
  • Reality チェックは、機能テストが flaky か、デバイスで flaky か

IMG_3959

Device Farmを使ったテスト結果の様子。

IMG_3961

パフォーマンスのモニタリング

  • デバイスログからのログのメトリクスを API 経由で取得
  • ログをパースして graphite に送信
  • パフォーマンスグラフを作成

まとめ

Pull Req の自動化など、最近の主流の開発ワークフローを出来る限り自動化しようとしているところに好感が持てました。また、ユニットテストが通ったとしてもバグが残ることはよくあるので、ボランティアのテスターにも継続的に配信し、意見をもらう体制が取れているところが品質を高めているポイントですね。

Device Farm もかなりヘビーに活用されているようでした。デバイスもすべて対象にするのではなく、GA の情報を元によりシェア率が高いデバイスを対象にしているところも良い選定基準だと思います。

Webinarが開催

2015年11月17日に Device Farm の Webinar が開催されます。興味のある方はぜひ!