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.

Androidのテストを効率的にするために考えたこと

439 views

Published on

Android Test Night #1 発表資料

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

Androidのテストを効率的にするために考えたこと

  1. 1. Androidのテストを 効率的にするために考えたこと Android Test Night #1
  2. 2. ⾃⼰紹介 •  ⼤坂 陽(おおさか あたる) •  社会⼈歴:3年⽬ –  リクルートテクノロジーズ –  兼 リクルートジョブズ •  Androidエンジニア歴:3年⽬ – フロムエーナビ・はたらいく Android Test Night #1 -2017/9/21-
  3. 3. 今⽇のお話 Android Test Night #1 -2017/9/21- Androidにおける テスト効率化について 考えてみたお話
  4. 4. 背景 Android Test Night #1 -2017/9/21- ⾃分 上司 テストの⾃動化よろしく! わかりました!
  5. 5. 考えたこと Android Test Night #1 -2017/9/21- ⾃分 JUnitを動かせるよう に環境整備
  6. 6. 考えたこと Android Test Night #1 -2017/9/21- ⾃分 JUnitを動かせるよう に環境整備 どこのテストを ⾃動化するか選定
  7. 7. 考えたこと Android Test Night #1 -2017/9/21- ⾃分 JUnitを動かせるよう に環境整備 コーディング規約決め どこのテストを ⾃動化するか選定
  8. 8. フィードバック Android Test Night #1 -2017/9/21- ⾃分 上司 概ねやることはOK
  9. 9. フィードバック Android Test Night #1 -2017/9/21- ⾃分 上司 概ねやることはOK いつまで⾃動テスト書くの?
  10. 10. フィードバック Android Test Night #1 -2017/9/21- ⾃分 上司 概ねやることはOK いつまで⾃動テスト書くの? Androidって⾃動化しづらい ところあるけど、そこはどう するの?
  11. 11. フィードバック Android Test Night #1 -2017/9/21- ⾃分 上司 概ねやることはOK いつまで⾃動テスト書くの? Androidって⾃動化しづらい ところあるけど、そこはどう するの? 効率的にテストするための⼀つの⼿段
  12. 12. 結論 Android Test Night #1 -2017/9/21- Howしか考えていない 実際に使われるシーンや ⽬的まで考えれていない
  13. 13. 今回⾃動化が求められた理由 Android Test Night #1 -2017/9/21- 効率的にテストを実施 するための⽅法の⼀つ
  14. 14. 今⽇のお話 Android Test Night #1 -2017/9/21- テスト⾃動化を軸に Androidにおける テスト効率化について 考えてみたお話
  15. 15. そもそも •  全てのテストを⾃動化すれば良いのか •  何故なら – ⾃動化しづらいところ・できないところ •  無理やり作っても、メンテナンスコストが⾼い – ⾃動化しても意味が無いところ •  頑張って作ったけど、何も利点が⽣まれない •  ⼈⼒テストを回避することはできない Android Test Night #1 -2017/9/21- NO、というか無理
  16. 16. 重要 テストを⾃動化する箇所を精査 Android Test Night #1 -2017/9/21- ⾃動テスト ⼈⼒テスト 境 界 線 どこまで ⾃動化するのか
  17. 17. 重要 テストを⾃動化する箇所を精査 Android Test Night #1 -2017/9/21- ⾃動テスト ⼈⼒テスト 境 界 線 どこまで ⾃動化するのか どのように 効率的に⾏うか
  18. 18. Android Test Night #1 -2017/9/21- ⾃動テスト
  19. 19. 既存の⾃動テストのコード •  すでにJUnitは導⼊されていたけど、、、 – 1テストメソッドに複数アサーション – ランダムに引数を⽣成して、たまに失敗 – エンハンスの修正が反映されていない – 先⽇JUnit5が出た世の中、JUnit3のコード Android Test Night #1 -2017/9/21-
  20. 20. 既存のテストコード Android Test Night #1 -2017/9/21- 全削除
  21. 21. どこまで⾃動化するのか •  今回の⽬的 – テストを効率的に⾏うために、機械でテストで きるところは⾃動化する •  現在のフェーズ – テストコードが0からのスタート Android Test Night #1 -2017/9/21- ROI優先 ⾃動化できるところを無理なく実施
  22. 22. ⾃動テスト •  単体レベルのテスト •  UI(振る舞いレベル)のテスト Android Test Night #1 -2017/9/21-
  23. 23. 単体テストのターゲット •  基本はJUnit4で書ける範囲で書く – Espressoとかは使わない •  MVCでわけた場合のModel層にあたると ころのテストコードを増やしていく Android Test Night #1 -2017/9/21-
  24. 24. ⾃動テストの実⾏タイミング •  PRのタイミングで実⾏ – PRが作成されたとき – PRに対する修正が⾏われたとき Android Test Night #1 -2017/9/21- このタイミングfeatureブランチ developブランチ
  25. 25. ⾃動テストの環境構築 •  iOSのCI環境はあった ので、Androidの設定 を追加する Android Test Night #1 -2017/9/21- https://techblog.recruitjobs.net/development/jenkins-pipeline-fastlane-slack
  26. 26. Contextの扱い •  Androidの場合、メソッドの引数に Contextを使う場合がある •  例えば Android Test Night #1 -2017/9/21-
  27. 27. Android標準のテスト •  Local Unit Tests – app/src/test/java/ディレクトリに配置 •  Instrumented Unit Tests •  app/src/androidTest/java/ディレクトリに配置 Android Test Night #1 -2017/9/21-
  28. 28. Android標準のテスト •  Local Unit Tests – app/src/test/java/ディレクトリに配置 •  Instrumented Unit Tests •  app/src/androidTest/java/ディレクトリに配置 Android Test Night #1 -2017/9/21- Contextも扱いたいので Instrumented Unit Testsに統⼀ Context context = InstrumentationRegistory.getTargetContext
  29. 29. Android Developerのサイトでは •  なるべくLocal Unit Testsを使うように推 奨されている – ローカルのJVMで実⾏でき、⾼速だから •  今のところ、Instrumented Unit Testsで⼗ 分だと判断している – 理由 •  現在の単体テストの実⾏環境はCI上だから、気にな るほどの速度差は出ない Android Test Night #1 -2017/9/21-
  30. 30. ⾃動テスト •  単体レベルのテスト •  UI(振る舞いレベル)のテスト Android Test Night #1 -2017/9/21-
  31. 31. UIテストの⾃動化 •  UIテストを⾃動化する際の懸念点 – 修正するメンテナンスコストが⾼い •  ROIを考慮し、次の条件に当てはまる箇所 を対象とする – 修正が発⽣しづらい箇所(コストが低い) – ⼈⼒のテストで毎回確認している項⽬(リター ンが⼤きい) Android Test Night #1 -2017/9/21-
  32. 32. UIテスト⾃動化のターゲット •  主要導線は避けたほうが良さそう – 画⾯のデザインが変わりやすい – ABテストの制御も考慮が必要 Android Test Night #1 -2017/9/21- ⼀覧画⾯ 詳細画⾯ 応募画⾯ 設定画⾯
  33. 33. UIテスト⾃動化のターゲット •  しかし、主要導線ほどテスト⾃動化の効 果はある – メンテナンスコストを考えて、都度判断 Android Test Night #1 -2017/9/21- ⼀覧画⾯ 詳細画⾯ 応募画⾯ 設定画⾯
  34. 34. Android Test Night #1 -2017/9/21- ⼈⼒テスト
  35. 35. ⼈⼒テストに対する戦略 •  実施頻度は多いけど、⾃動化しづらい、 テストしづらい、テストを効率化する •  デバッグモードを⽤意 – ⼈⼒でテストする際の補助機能 Android Test Night #1 -2017/9/21-
  36. 36. どんなデバックモードか •  データを修正する機能が便利そう •  どのフェーズのテストを効率化するのか 意識 – 開発中のデバッグテスト – 機能テスト •  例えば、 – キープリストの最⼤件数の確認テスト •  キープリストに求⼈を⾃動で追加する機能を⽤意 Android Test Night #1 -2017/9/21-
  37. 37. さいごに •  重要なのは⾃動テストの⽬的のすり合わせ •  今回の⽬的は⾃動テストによるテスト効率化 •  ⾃動テストと⼈⼒テストの境界線を考える – 現状のプロジェクトに対して現実的に実⾏できる 範囲で、⾃動化するところを決める •  ⾃動化できないところへの対策も考える Android Test Night #1 -2017/9/21-

×