Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

事例 アジャイルと自動化 後半(ヤフオク!アプリでの自動テストの事例紹介) at Ques vol.7( #ques7 ) 11/20/2015

31,282 views

Published on

2015/11/20 開催のQues vol.7( #ques7 )での講演「事例 アジャイルと自動化」の後半部分の資料です
ヤフオク!アプリでの自動テストの事例紹介です
This is a slide of "Example of Agile and Test Automation" that used by Ques vol.7( #ques7 ) 11/20/2015

Published in: Technology
  • Be the first to comment

事例 アジャイルと自動化 後半(ヤフオク!アプリでの自動テストの事例紹介) at Ques vol.7( #ques7 ) 11/20/2015

  1. 1. ヤフオク!アプリでの   ⾃自動テストの事例例紹介 ヤフー株式会社   ⻘青野彰太朗 1
  2. 2. ⾃自⼰己紹介 • ⻘青野彰太朗   • Androidエンジニア   • Webエンジニア   • 開発チームのスクラムマスター   • @shota_̲low 2
  3. 3. 今⽇日お話することの概要 1.⾃自動テストを導⼊入した経緯   2.導⼊入時のノウハウ   3.導⼊入後の結果   4.今後の予定 3
  4. 4. 4 http://topic.auctions.yahoo.co.jp/mobile/app/promo/
  5. 5. 本資料料での   ⾃自動テスト  =  UIテスト 5
  6. 6. 1.⾃自動テストを導⼊入した経緯 6
  7. 7. 2015年年4⽉月当時に困っていた問題 • 特定の画⾯面を開くと100%クラッシュ   • 古い端末やOSで起動すると100%クラッシュ 7 リリース後に発覚
  8. 8. アプリのリリース前テスト 8 • 関係者全員がアプリを実際に触ってテスト   • 1999年年からある歴史あるサービス   • -‐‑‒>画⾯面/条件/機能が多岐にわたり、確認漏漏れ がどうしても発⽣生してしまう状況
  9. 9. Androidの場合 • 即時に修正版をリリース可能   • 段階的公開機能を使⽤用(5%-‐‑‒>20%-‐‑‒>100%)   • リリースする割合をコントロールできる 9 被害は最⼩小限に留留めることが可能
  10. 10. iOSの場合 • 即時に修正しても審査が必要   • 審査期間は不不確実   • 公開範囲をAndroidのように指定できない 10 致命的
  11. 11. 困った… 11 写真:アフロ
  12. 12. そんなときに • 社内のテスト⽀支援チームからお声がけいただく 12 テスト⾃自動化   しませんか?
  13. 13. テスト⽀支援チームと   協⼒力力して導⼊入することに 13
  14. 14. 2.導⼊入時のノウハウ 14
  15. 15. 解決したいこと • まずはiOSにフォーカス   • 致命的なクラッシュはリリース前に検知したい   • 主要画⾯面は網羅羅してテストしたい   • 古いOSでのテストも実⾏行行したい   • iOS9対応に間に合うようにしたい 15
  16. 16. ⾃自動テストツールの選択 • UI  Automation   • UI  Testing   • Appium   • Calabash-‐‑‒iOS   • KIF   • Remote  TestKit 16
  17. 17. ⾃自動テストツールの選択 • UI  Automation   • UI  Testing   • Appium   • Calabash-‐‑‒iOS   • KIF   • Remote  TestKit 17
  18. 18. Appiumを選択 18 http://appium.io/
  19. 19. Appiumを選択した理理由(1) • OSSの更更新頻度度が⾼高い   • 企業サポートも付いているため、将来性がある   • ライセンスが社内でも使い易易い     • -‐‑‒>Apache  License,  Version  2.0 19
  20. 20. Appiumを選択した理理由(2) • クライントが複数⾔言語に対応している   • GUIツールがわかりやすくインスペクターがある   • iOS、Android両⽅方対応している   • テスト対象のアプリには⼿手を加える必要がない 20
  21. 21. 他のツールについて UI  Automation   • ⾔言語がJS固定  、instrument上での作業に慣れが必要   • 実際はAppiumはこれを内部で利利⽤用しているラッパー 21
  22. 22. 他のツールについて UI  Testing   • まだ実装間もないため、ノウハウが蓄積されておら ず、機能的にもまだ不不⼗十分。   • 新製品の宿命であるバグの懸念念があった 22
  23. 23. Calabash-‐‑‒iOS   • Xpath取得のために都度度コマンドを叩く必要がある   • 開発がほぼ⽌止まっており、iOS9サポートなどが期待で きなかった   • 公式リファレンスが不不⼗十分であり、込み⼊入ったことす るためにはソースを読む必要がある 23 他のツールについて
  24. 24. KIF   • objective-‐‑‒cで書けるためiOSエンジニアのみが使う場合 は良良いが、Androidエンジニアにはハードルが⾼高い   • 公式リファレンスが不不⼗十分であり、込み⼊入ったことする ためにはソースを読む必要がある   • nameで指定されていないと取れない.  xpath  で取るため の⽅方法が不不明 24 他のツールについて
  25. 25. Remote  TestKit   • テストフレームワークではないが、クラウド系に代表されるテス ト環境ツール   • これだけあっても⾃自動化はできない.  テスト実⾏行行+テスト環境を 揃える必要がある   • 実⾏行行モジュールを外部へ⼀一時的に送ることになるため、社内フ ローを作るところから始める必要があり、ミニマムスタートにそ ぐわない 25 他のツールについて
  26. 26. テストコードの⾔言語の選択 • Java   • JavaScript(Node.js)   • Python   • Ruby   • Perl   • PHP 26
  27. 27. テストコードの⾔言語の選択 • Java   • JavaScript(Node.js)   • Python   • Ruby   • Perl   • PHP 27
  28. 28. Pythonを選択 • チーム内で話し合って決定   • 経験者が多かった   • 誰が書いても読みやすそう   • とりあえずPythonでやってみよう 28
  29. 29. 対象画⾯面の決定 • 全画⾯面を対応するのは⾮非現実的   • 主要機能の画⾯面から優先度度をつけて対応   • -‐‑‒>出品、⼊入札、検索索など 29
  30. 30. ⾃自動テストの概要 30 github Mac ファイルサーバ シミュレータ 社内チャットツール
  31. 31. ⾃自動テストの概要 31 github Mac ファイルサーバ シミュレータ 社内チャットツール (1)gitからclone
  32. 32. ⾃自動テストの概要 32 github Mac ファイルサーバ シミュレータ 社内チャットツール (2)cloneしたファイルをビルド
  33. 33. ⾃自動テストの概要 33 github Mac ファイルサーバ シミュレータ 社内チャットツール (3)UIテストの実⾏行行
  34. 34. ⾃自動テストの概要 34 github Mac ファイルサーバ シミュレータ 社内チャットツール (3-‐‑‒1)シミュレータのスクリーン   ショットをファイルサーバに保存
  35. 35. ⾃自動テストの概要 35 github Mac ファイルサーバ シミュレータ 社内チャットツール (3-‐‑‒2)Appiumでシミュレーターに   表⽰示されているXMLを取得
  36. 36. ⾃自動テストの概要 36 github Mac ファイルサーバ シミュレータ 社内チャットツール (3-‐‑‒3)XMLを解析し、   表⽰示されている要素に対し、   クリックやテキスト⼊入⼒力力を⾏行行う
  37. 37. ⾃自動テストの概要 37 github Mac ファイルサーバ シミュレータ 社内チャットツール (3-‐‑‒1)シミュレータのスクリーン   ショットをファイルサーバに保存 (3-‐‑‒2)Appiumでシミュレーターに   表⽰示されているXMLを取得 (3-‐‑‒3)XMLを解析し、表⽰示されている要素に対し、   クリックやテキスト⼊入⼒力力を⾏行行う (4)(3-‐‑‒1)〜~(3-‐‑‒3)を繰り返す
  38. 38. ⾃自動テストの概要 38 github Mac ファイルサーバ シミュレータ 社内チャットツール (5)テスト結果とスクリーンショットを   社内チャットへ通知
  39. 39. 開発時の苦労話(1) • Appiumが不不安定   • -‐‑‒>UI要素の取得に失敗することが多々ある   • -‐‑‒>マシンによっては処理理の同期が取れず、テスト失 敗してしまうことがある  →  ⾃自前で同期処理理を書いて 対応 39
  40. 40. 開発時の苦労話(2) • デバッグに時間がかかる   • アプリのUI要素にIDが振られていなかったので、1つ 1つxpathを取得する作業が⼤大変   • 画⾯面の修正が⼊入ると、xpathが変わってしまう可能性 があり、その度度に修正が必要  →  覚悟はしていたがやっ ぱり⼤大変 40
  41. 41. 開発時の苦労話(3) • Pythonでの実装が結構⼤大変   • -‐‑‒>unit  testのドキュメントが少なく、実装⽅方法を試 ⾏行行錯誤   • -‐‑‒>デバッグしやすい⾔言語、使⽤用するライブラリのド キュメントが豊富な⾔言語等がないか、もう少し検討す るべきだった? 41
  42. 42. 開発時の苦労話(4) • Pythonでの実装が結構⼤大変   • -‐‑‒>結局⾃自分たちで「Appiumサーバー+unit  test」の フレームワークを作ることになった   • -‐‑‒>メタプログラミングをサポートしている⾔言語を使 うことで、ある程度度内部処理理を抽象化できた→ソース コードの可読性◯ 42
  43. 43. 開発時の苦労話(5) • iOS9で、アラートダイアログやキーボード⼊入⼒力力の xpath構造が変更更されてしまった  →  該当箇所を全て修 正   • AppiumのiOS9の対応が遅く(1週間程度度)、iOS9リ リース前に直接appiumのライブラリを修正しないとい けなかった 43
  44. 44. 3.導⼊入後の結果 44
  45. 45. 解決したかったことのおさらい • まずはiOSにフォーカス   • 致命的なクラッシュはリリース前に検知したい   • 主要画⾯面は網羅羅してテストしたい   • 古いOSでのテストも実⾏行行したい   • iOS9対応に間に合うようにしたい 45
  46. 46. まずはiOSにフォーカス iOSで⾃自動テストが実⾏行行できるようになった 46 できた
  47. 47. 致命的なクラッシュはリリース前に検知したい リリース後の致命的なクラッシュはゼロ 47 できた
  48. 48. 主要画⾯面は網羅羅してテストしたい 約9割の画⾯面を⾃自動テストでカバー 48 できた
  49. 49. 古いOSでのテストも実⾏行行したい サポート対象内のiOS7で実⾏行行できていない   XCode7からiOS7がdeprecated   ここは⼿手動での確認でカバーしている   49 できていない
  50. 50. iOS9対応に間に合うようにしたい ⾃自動テストを実⾏行行して動作を担保することができました   50 できた
  51. 51. やってよかった!! 51 写真:アフロ
  52. 52. 現状の運⽤用 • 毎⽇日1回定期実⾏行行   • ⽇日々更更新される開発⽤用ブランチが対象   • リリース前はリリース⽤用ブランチを対象に実⾏行行   • テストに失敗した場合   • 理理由はすぐに調査   • プロダクトバックログに積んでスプリント内で解消 52
  53. 53. 4.今後の予定 53
  54. 54. 今後の予定 • CIツールとの連携   • ⾃自動テストのバリエーションを増やす   • 任意タイミング/任意リポジトリ/任意シナリオ…   • 処理理の⾼高速化/並列列化   • Androidについても対応を進める(Espresso) 54
  55. 55. まとめ • ⽀支援という形で背中を押していただくことがきっかけ   • 形になるまでは試⾏行行錯誤の連続   • ⼿手動によるテスト+毎⽇日の⾃自動テスト  =  安⼼心   • より恩恵を受けるための作業はまだ沢⼭山ある   • 今回の事例例を、導⼊入のネタとして使ってください:) 55
  56. 56. 56 ⼀一緒に働く仲間募集中!

×