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

Más contenido relacionado

La actualidad más candente

iOSアプリ開発のCI環境 - Jenkins編 -
iOSアプリ開発のCI環境 - Jenkins編 -iOSアプリ開発のCI環境 - Jenkins編 -
iOSアプリ開発のCI環境 - Jenkins編 -Toshiyuki Hirata
 
Xcode10での テスト周りの進化をふりかえる
Xcode10での テスト周りの進化をふりかえるXcode10での テスト周りの進化をふりかえる
Xcode10での テスト周りの進化をふりかえるToshiyuki Hirata
 
UIテストの実行時間の短縮の方法
UIテストの実行時間の短縮の方法UIテストの実行時間の短縮の方法
UIテストの実行時間の短縮の方法Toshiyuki Hirata
 
バージョンアップの対応を軽減するためのサービスの構築
バージョンアップの対応を軽減するためのサービスの構築バージョンアップの対応を軽減するためのサービスの構築
バージョンアップの対応を軽減するためのサービスの構築Toshiyuki Hirata
 
Pull request時の画面差分取得の自動化
Pull request時の画面差分取得の自動化Pull request時の画面差分取得の自動化
Pull request時の画面差分取得の自動化Shunsuke Maeda
 
iOSアプリにおけるリリースフローとCI環境
iOSアプリにおけるリリースフローとCI環境iOSアプリにおけるリリースフローとCI環境
iOSアプリにおけるリリースフローとCI環境Toshiyuki Hirata
 
Xcodeの管理を楽に - Jenkins編 -
Xcodeの管理を楽に - Jenkins編 -Xcodeの管理を楽に - Jenkins編 -
Xcodeの管理を楽に - Jenkins編 -Toshiyuki Hirata
 
スマホアプリディレクターが考えていること
スマホアプリディレクターが考えていることスマホアプリディレクターが考えていること
スマホアプリディレクターが考えていることKazuaki KURIU
 
Androidアプリ開発のテスト環境
Androidアプリ開発のテスト環境Androidアプリ開発のテスト環境
Androidアプリ開発のテスト環境Toshiyuki Hirata
 
SEゼミ2015 - OSS Hack 4 Beginners - フィードバック
SEゼミ2015 - OSS Hack 4 Beginners - フィードバックSEゼミ2015 - OSS Hack 4 Beginners - フィードバック
SEゼミ2015 - OSS Hack 4 Beginners - フィードバックKouhei Sutou
 
iOSで利用できるデバイスファームのメリット・デメリットの紹介
iOSで利用できるデバイスファームのメリット・デメリットの紹介iOSで利用できるデバイスファームのメリット・デメリットの紹介
iOSで利用できるデバイスファームのメリット・デメリットの紹介Shunsuke Maeda
 
5minQues - SWET近況報告
5minQues - SWET近況報告5minQues - SWET近況報告
5minQues - SWET近況報告Masaki Nakagawa
 
あるゲームアプリケーションの構成とアップデートサイクル
あるゲームアプリケーションの構成とアップデートサイクルあるゲームアプリケーションの構成とアップデートサイクル
あるゲームアプリケーションの構成とアップデートサイクルKentaro Iizuka
 
ユーザテストのススメ
ユーザテストのススメユーザテストのススメ
ユーザテストのススメakatsuki174
 
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -Toshiyuki Hirata
 
Web制作者視点で理解するソフトェアテスト
Web制作者視点で理解するソフトェアテストWeb制作者視点で理解するソフトェアテスト
Web制作者視点で理解するソフトェアテスト祐磨 堀
 
Jenkinsで始める継続的デリバリーと実践の道程
Jenkinsで始める継続的デリバリーと実践の道程Jenkinsで始める継続的デリバリーと実践の道程
Jenkinsで始める継続的デリバリーと実践の道程Masanori Satoh
 
デザイン領域へiOS / Android開発
デザイン領域へiOS / Android開発デザイン領域へiOS / Android開発
デザイン領域へiOS / Android開発baroqueworksdev
 
組込みソフトウェアの品質の小噺
組込みソフトウェアの品質の小噺組込みソフトウェアの品質の小噺
組込みソフトウェアの品質の小噺Gou Sawada
 

La actualidad más candente (20)

iOSアプリ開発のCI環境 - Jenkins編 -
iOSアプリ開発のCI環境 - Jenkins編 -iOSアプリ開発のCI環境 - Jenkins編 -
iOSアプリ開発のCI環境 - Jenkins編 -
 
DroidKaigi_devicefarm
DroidKaigi_devicefarmDroidKaigi_devicefarm
DroidKaigi_devicefarm
 
Xcode10での テスト周りの進化をふりかえる
Xcode10での テスト周りの進化をふりかえるXcode10での テスト周りの進化をふりかえる
Xcode10での テスト周りの進化をふりかえる
 
UIテストの実行時間の短縮の方法
UIテストの実行時間の短縮の方法UIテストの実行時間の短縮の方法
UIテストの実行時間の短縮の方法
 
バージョンアップの対応を軽減するためのサービスの構築
バージョンアップの対応を軽減するためのサービスの構築バージョンアップの対応を軽減するためのサービスの構築
バージョンアップの対応を軽減するためのサービスの構築
 
Pull request時の画面差分取得の自動化
Pull request時の画面差分取得の自動化Pull request時の画面差分取得の自動化
Pull request時の画面差分取得の自動化
 
iOSアプリにおけるリリースフローとCI環境
iOSアプリにおけるリリースフローとCI環境iOSアプリにおけるリリースフローとCI環境
iOSアプリにおけるリリースフローとCI環境
 
Xcodeの管理を楽に - Jenkins編 -
Xcodeの管理を楽に - Jenkins編 -Xcodeの管理を楽に - Jenkins編 -
Xcodeの管理を楽に - Jenkins編 -
 
スマホアプリディレクターが考えていること
スマホアプリディレクターが考えていることスマホアプリディレクターが考えていること
スマホアプリディレクターが考えていること
 
Androidアプリ開発のテスト環境
Androidアプリ開発のテスト環境Androidアプリ開発のテスト環境
Androidアプリ開発のテスト環境
 
SEゼミ2015 - OSS Hack 4 Beginners - フィードバック
SEゼミ2015 - OSS Hack 4 Beginners - フィードバックSEゼミ2015 - OSS Hack 4 Beginners - フィードバック
SEゼミ2015 - OSS Hack 4 Beginners - フィードバック
 
iOSで利用できるデバイスファームのメリット・デメリットの紹介
iOSで利用できるデバイスファームのメリット・デメリットの紹介iOSで利用できるデバイスファームのメリット・デメリットの紹介
iOSで利用できるデバイスファームのメリット・デメリットの紹介
 
5minQues - SWET近況報告
5minQues - SWET近況報告5minQues - SWET近況報告
5minQues - SWET近況報告
 
あるゲームアプリケーションの構成とアップデートサイクル
あるゲームアプリケーションの構成とアップデートサイクルあるゲームアプリケーションの構成とアップデートサイクル
あるゲームアプリケーションの構成とアップデートサイクル
 
ユーザテストのススメ
ユーザテストのススメユーザテストのススメ
ユーザテストのススメ
 
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
 
Web制作者視点で理解するソフトェアテスト
Web制作者視点で理解するソフトェアテストWeb制作者視点で理解するソフトェアテスト
Web制作者視点で理解するソフトェアテスト
 
Jenkinsで始める継続的デリバリーと実践の道程
Jenkinsで始める継続的デリバリーと実践の道程Jenkinsで始める継続的デリバリーと実践の道程
Jenkinsで始める継続的デリバリーと実践の道程
 
デザイン領域へiOS / Android開発
デザイン領域へiOS / Android開発デザイン領域へiOS / Android開発
デザイン領域へiOS / Android開発
 
組込みソフトウェアの品質の小噺
組込みソフトウェアの品質の小噺組込みソフトウェアの品質の小噺
組込みソフトウェアの品質の小噺
 

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

Practical Android scripting with Ruby
Practical Android scripting with RubyPractical Android scripting with Ruby
Practical Android scripting with RubyMasahiro Kawato
 
10分ユーザテストのすすめ
10分ユーザテストのすすめ10分ユーザテストのすすめ
10分ユーザテストのすすめShingo Katsushima
 
入門者用Android Studio Hands on
入門者用Android Studio Hands on入門者用Android Studio Hands on
入門者用Android Studio Hands onShintaro Yamasaki
 
Prott user meetup 16 効率よく、品質良く、アプリを育てよう。
Prott user meetup 16 効率よく、品質良く、アプリを育てよう。Prott user meetup 16 効率よく、品質良く、アプリを育てよう。
Prott user meetup 16 効率よく、品質良く、アプリを育てよう。Musashi Kobayashi
 
Google I/O 2013に行ったついでにラスベガス戦果報告
Google I/O 2013に行ったついでにラスベガス戦果報告Google I/O 2013に行ったついでにラスベガス戦果報告
Google I/O 2013に行ったついでにラスベガス戦果報告Shoya Tsukada
 
Android dev summit 2019 recap
Android dev summit 2019 recapAndroid dev summit 2019 recap
Android dev summit 2019 recapfurusin
 

Similar a Androidのテストを効率的にするために考えたこと (6)

Practical Android scripting with Ruby
Practical Android scripting with RubyPractical Android scripting with Ruby
Practical Android scripting with Ruby
 
10分ユーザテストのすすめ
10分ユーザテストのすすめ10分ユーザテストのすすめ
10分ユーザテストのすすめ
 
入門者用Android Studio Hands on
入門者用Android Studio Hands on入門者用Android Studio Hands on
入門者用Android Studio Hands on
 
Prott user meetup 16 効率よく、品質良く、アプリを育てよう。
Prott user meetup 16 効率よく、品質良く、アプリを育てよう。Prott user meetup 16 効率よく、品質良く、アプリを育てよう。
Prott user meetup 16 効率よく、品質良く、アプリを育てよう。
 
Google I/O 2013に行ったついでにラスベガス戦果報告
Google I/O 2013に行ったついでにラスベガス戦果報告Google I/O 2013に行ったついでにラスベガス戦果報告
Google I/O 2013に行ったついでにラスベガス戦果報告
 
Android dev summit 2019 recap
Android dev summit 2019 recapAndroid dev summit 2019 recap
Android dev summit 2019 recap
 

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