SlideShare a Scribd company logo
id:nobuoka (@nobuoka)
株式会社はてな
2014-04-03 android.casual.test #2
はてなにおける
Android アプリのソフトウェアテスト
こんにちは、id:nobuoka です
● 普段の仕事
– サーバーサイド: Perl
– クライアントサイド: Web (JS)、Android アプリ (Java)
● 去年の 5 月ぐらいから Android アプリ開発を学び
始めた。
– 『Android アプリ開発のための Java 入門』
http://vividcode.hatenablog.com/entry/release-notes
/java-for-android-app-text
最近は Presso のサーバーサイド
是非ご利用ください!!
概要
● Android アプリ開発とソフトウェアテスト
● はてなでの Android アプリのテスト
● 細かなプラクティス
● カジュアルに情報共有。
● 他の組織でどういうテストをしてるのか知りたい。
Android アプリ開発と
ソフトウェアテスト
何のためのソフトウェアテストか
● 製品品質の向上
– 欠陥検出
– 欠陥の作りこみを防ぐ
– 設計の向上
– などなど
Android アプリ開発における
テストの重要性
● 多様な端末のサポート。
– API level、画面解像度、...。
● 動作確認しづらい状況をテストで実行する。
– 特殊な状況で期待通り動作するのか。
● 早期に欠陥を発見する。
– アプリとして完成してからではデバッグが困難。
– サーバー側が未完成という状況。
● 『テストのないコードはレガシーコードだ』
ソフトウェアテストだけが
品質向上の手段ではない
● コードレビュー、ベータテスト、などなど。
– 欠陥検出率、コストの面でソフトウェアテストより有利。
– 『CODE COMPLETE 第 2 版 下』
● テストを書くだけ無駄じゃないの? → NO
– コードレビュー等とは異なる種類の欠陥を検出。
– 設計向上等欠陥検出以外の効果、回帰テスト、など。
●
様々な手段を組み合わせよう。
– ソフトウェアテストもやろう!
はてなにおける
Android アプリのテスト
はてなのテスト文化
● もともとテストを書こうという文化がある。
– サーバーサイドはわりとしっかり書いてきた。
● 単体テスト、結合テスト。
● Jenkins での CI。
● Android アプリのテストはこれまでなかったが、導
入に際して特に障壁はなし。
– 当然、テスト導入のために上司を説得、とかはない。
Gradle + Android Gradle plugin
● ビルドやテスト実行が手軽にできる。
– ./gradlew connectedAndroidTest
● Ant や Maven を導入するよりも楽。
– Gradle wrapper の存在。
– Android Studio の標準ということ。
● IDE は Android Studio。
– Eclipse からまだ乗り換えられない、というチームでも
(Eclipse と併用で) Gradle を導入は有りだと思う。
Gradle + Android Gradle plugin
● まだ開発版で不安定なところもある。
– バグがあったり、API が変わったり。
– プラグインの中身を読める人間がいると安心。
● Eclipse と比べてビルドが遅い。
– より正確には実行ボタンを押してからが長い。
● 乗り換えられるなら乗り換えて良さそう。
● http://vividcode.hatenablog.com/entry/android-
app/gradle-build-system
Jenkins + Android Emulator plugin
● 定期的なテスト実行。
– リリース版パッケージを生成させるとかはしてない。
● Jenkins の設定画面上でプラグインのインストー
ル、エミュレータの設定など可能。
● プラグインが Android SDK をインストールし、ビル
ド時に Android エミュレータを起動してくれる。
● http://vividcode.hatenablog.com/entry/android-a
pp/jenkins-test
テストの導入は難しくない
● ビルドシステムに Gradle を使えばテスト実行は容
易。
● Android テスティングフレームワークの存在。
– Activity のテストや Service のテストのための
TestCase クラスが容易されている。
● Jenkins でテストを自動実行することも容易。
どういうテストを書いているか
● あらゆるテストを書いているわけではない。
– もともとテストはなかったわけだし。
● 主に単体テスト。
● いわゆるビジネスロジック部分。
● API level により分岐しているメソッドのテスト。
●
ネットワーク通信周り。
– 動作確認しづらいところ。 エラーレスポンス時とか。
●
などなど。
テストを書いて変更する
● テストを書くことでエンバグを防ぐ。
● 変更箇所の理解が深まる。
● 『レガシーコード改善ガイド』
●
バグ修正。
– まずはバグを再現するテストコードを記述。
– それからテストを変更し、実装も変更。
● 仕様変更やパフォーマンス向上等。
– バグ修正と同様、最初にテストを書いて、変更する。
Android アプリのソフトウェアテスト
にまつわるプラクティス
Android SDK のセットアップが面倒?
● Jenkins でテストを実行する際に面倒なのが
Android SDK の準備。
● ビルドスクリプト内で Android SDK の準備をする
Gradle plugin を使うと良い。
– nobuoka/vc-gradle-android-sdk-manager ← 作った
– cookpad/gradle-android-sdk-manager
– JakeWharton/sdk-manager-plugin
● CI だけでなく手元で開発する際にも便利。
Espresso (UI のテスト)
● android-test-kit に含まれる。
● UI 操作に関する単体テスト (?) をするなら
Espresso が手軽で良い。
– 複数 Activity にまたがる操作などは別のものを使っ
た方が良いだろう。
● ボタンクリックで期待通りの結果になるか、とか。
● バッドノウハウ: 古い API level (API level 8 で確認) だ
と、リストを一度スクロールしないと画面上にない
項目をタップできない。 (TouchUtils とかで。)
Espresso で UI のテストをする例
// 対象の `ListView`。
ListView listView =
(ListView) settingActivity.findViewById(android.R.id.list);
// バッドノウハウ: ドラッグしないと隠れてる項目をタップできない
TouchUtils.dragViewToTop(this, listView, 10);
// `keyValue` のキーを持つ項目をタップ。
Matcher<Preference> keyAdvancedMatcher =
PreferenceMatchers.withKey(keyValue);
onData(Matchers.<Object>allOf(keyAdvancedMatcher)).
perform(click());
● せっかくなのでデモでも。
GoogleInstrumentationTestRunner
● android-test-kit に含まれるテストランナー。
● Espresso を使用するなら必須。
● Espresso とは関係なく使用することも可能。
●
Instrumentation 終了前に、その instrumentation
で起動されたすべての activity が終了することを
保証する。
● Mockit を API level 7 以前で動くようにする。
Volley を使っているコードのテスト
● リクエスト、レスポンスの処理をモックしたい。
● Volley を使用している処理自体を置き換える。
● 別の方法: Volley ではネットワーク通信の処理が
抽象化されている (Network インターフェイス) の
で、テスト用の Network を作り、それを使う Volley
オブジェクトを使用する。
– com.android.volley.RequestQueueTest.OrderChecking
Network が参考になる。
テスト時のみ値を変えたい!
● 例えば接続先サーバーのホスト名を変えるとか。
● Build type の使用が 1 つの方法。
– Android Gradle plugin の機能。
● デフォルトの release、debug の他に testtarget
build を作り、テスト対象に設定。
● Testtarget build 用のリソースファイルを作成。
●
BuildConfig を使用するというのも。
テスト時のみ値を変えたい!
buildTypes {
/* テスト用のビルドタイプ */
testtarget.initWith(buildTypes.debug)
/* テスト時のみ BuildConfig.XXX_DRY_RUN を false にする */
release { buildConfigField "boolean", XXX_DRY_RUN "false" }
debug { buildConfigField "boolean", XXX_DRY_RUN, "false" }
testtarget { buildConfigField "boolean", XXX_DRY_RUN, "true" }
}
/* テスト用のビルドタイプを指定 */
testBuildType "testtarget"
● 使いすぎるのも良くないけど一つの方法として。
まとめ
● Gradle + Jenkins で Android アプリのテスト環境
の構築、テストの継続的な実行が容易。
● ソフトウェアテストを導入しよう!
– コスト的にためらっている? → 導入は容易
– 手動での動作確認やコードレビューなどと併用するこ
とで、より品質を高められる。
● android-test-kit など、テストのためのツールはい
ろいろある。
エンジニア募集!
Android アプリエンジニアも
そうじゃないエンジニアも
京都・東京
http://hatenacorp.jp/recruit/

More Related Content

PDF
AndroidJUnitRunner で JUnit 4 形式のテストに移行
Yu Nobuoka
 
PDF
Androidテスティング実践 基礎編
株式会社 NTTテクノクロス
 
PDF
Androidアプリケーション開発中級研修 後編
株式会社 NTTテクノクロス
 
PDF
Androidテスティング実践2 システムテスト編
株式会社 NTTテクノクロス
 
PDF
多分怖くない, Androidとハードウェア
Yoshihiro Kobayashi
 
PDF
Androidアプリケーション開発中級研修 前編
株式会社 NTTテクノクロス
 
PDF
Androidテスティング実践3 ユニットテスト・CI編
株式会社 NTTテクノクロス
 
PPTX
Sansan における Android アプリ自動テスト導入事例
Kenichi Tatsuhama
 
AndroidJUnitRunner で JUnit 4 形式のテストに移行
Yu Nobuoka
 
Androidテスティング実践 基礎編
株式会社 NTTテクノクロス
 
Androidアプリケーション開発中級研修 後編
株式会社 NTTテクノクロス
 
Androidテスティング実践2 システムテスト編
株式会社 NTTテクノクロス
 
多分怖くない, Androidとハードウェア
Yoshihiro Kobayashi
 
Androidアプリケーション開発中級研修 前編
株式会社 NTTテクノクロス
 
Androidテスティング実践3 ユニットテスト・CI編
株式会社 NTTテクノクロス
 
Sansan における Android アプリ自動テスト導入事例
Kenichi Tatsuhama
 

What's hot (20)

PDF
What is tested by pre-launch (security) reports?
ak_shio_555
 
PDF
minneにおけるテスト〜リリース〜リリース後にやっている事の紹介
Masataka Kono
 
PDF
Jenkinsを用いたAndroidアプリビルド作業効率化
Kenichi Kambara
 
PDF
Android lint-srp-practice
cch-robo
 
PDF
Xcode 7におけるUIテストとカバレジ計測 #yidev 第20回勉強会
Koji Hasegawa
 
PPTX
GBDC 勉強会 #2 Android Studio 実践レポート
Yutaka Kato
 
PDF
Android Studioの魅力
Keiji Ariyama
 
PPTX
Androidアプリ開発のテスト環境
Toshiyuki Hirata
 
PDF
iOSアプリ UIテスト自動化入門
Shingo Tamaki
 
PPTX
Androidアプリケーション開発入門
OESF Education
 
PDF
快適・簡単・安心なアプリE2Eテストの実行環境 #stac2017
Yahoo!デベロッパーネットワーク
 
PDF
【Unite 2018 Tokyo】エディター拡張マニアクス2018
Unity Technologies Japan K.K.
 
PPTX
iOSにおけるUIテスト@potetotips
Yusuke Kita
 
PDF
JUnit5とAndroidのテスト
Hiroshi Kikuchi
 
PPTX
Win7 * appium * androidで実機自動テストやってみた。
Naoto Kishino
 
PDF
事例 アジャイルと自動化 後半(ヤフオク!アプリでの自動テストの事例紹介) at Ques vol.7( #ques7 ) 11/20/2015
Yahoo!デベロッパーネットワーク
 
PDF
2015年のAndroidアプリ開発入門 - ABCD 2015 Kanazawa
Keiji Ariyama
 
PPTX
JaSST'16 Tokyo モバイルセッション
mirer
 
PPTX
Android6.0新しいパーミッションモデルへの対応_DevFest Kyoto LT
Katsuki Nakatani
 
PPTX
Androidプログラミング入門
OESF Education
 
What is tested by pre-launch (security) reports?
ak_shio_555
 
minneにおけるテスト〜リリース〜リリース後にやっている事の紹介
Masataka Kono
 
Jenkinsを用いたAndroidアプリビルド作業効率化
Kenichi Kambara
 
Android lint-srp-practice
cch-robo
 
Xcode 7におけるUIテストとカバレジ計測 #yidev 第20回勉強会
Koji Hasegawa
 
GBDC 勉強会 #2 Android Studio 実践レポート
Yutaka Kato
 
Android Studioの魅力
Keiji Ariyama
 
Androidアプリ開発のテスト環境
Toshiyuki Hirata
 
iOSアプリ UIテスト自動化入門
Shingo Tamaki
 
Androidアプリケーション開発入門
OESF Education
 
快適・簡単・安心なアプリE2Eテストの実行環境 #stac2017
Yahoo!デベロッパーネットワーク
 
【Unite 2018 Tokyo】エディター拡張マニアクス2018
Unity Technologies Japan K.K.
 
iOSにおけるUIテスト@potetotips
Yusuke Kita
 
JUnit5とAndroidのテスト
Hiroshi Kikuchi
 
Win7 * appium * androidで実機自動テストやってみた。
Naoto Kishino
 
事例 アジャイルと自動化 後半(ヤフオク!アプリでの自動テストの事例紹介) at Ques vol.7( #ques7 ) 11/20/2015
Yahoo!デベロッパーネットワーク
 
2015年のAndroidアプリ開発入門 - ABCD 2015 Kanazawa
Keiji Ariyama
 
JaSST'16 Tokyo モバイルセッション
mirer
 
Android6.0新しいパーミッションモデルへの対応_DevFest Kyoto LT
Katsuki Nakatani
 
Androidプログラミング入門
OESF Education
 
Ad

Viewers also liked (20)

PDF
JUnitテストを1日やってみた
Mima Yuki
 
PPT
テストプラットフォームサービスの舞台裏
Yuto Tachibana
 
PDF
悩める金融系SEの軌跡
Fumiyasu Sumiya
 
PPTX
没セッション 知識ゼロから学んだソフトウェアテスト
伸男 伊藤
 
PDF
HTML5 for Designers (HTML5 時代の Web デザイナーの新常識)
dynamis
 
PPTX
20150717 これからプログラミングを勉強する人へ
SEED310
 
PPTX
九州ソフトウェアテスト勉強会Vol.16 発表資料 150810
Takayoshi Sakaino
 
PDF
JS history
badatmath
 
PDF
Qaアーキテクチャの話
Kosuke Fujisawa
 
PDF
第3回Ques ここからはじめる!Androidアプリのテスト自動化
Koji Hasegawa
 
PDF
ソフトウェアテスト入門
Preferred Networks
 
PDF
はじめてのソフトウェアテスト
Rina Fukuda
 
PDF
Androidにおけるテストに関して 2014/11
Hiroshi Hashimoto
 
PPTX
OpenStack管理者入門 - OpenStack最新情報セミナー 2014年12月
VirtualTech Japan Inc.
 
PDF
未来の情報の可視化について - Future share
Motoki Ohno
 
PDF
DBにseedするライブラリつくった
Joe_noh
 
PDF
デザイナーの私と サービスをつくる私
Shizuka Yamada
 
PDF
ソフトウェアテストことはじめ
Kosuke Fujisawa
 
PDF
管理画面のアクセスコントロール
Masao Maeda
 
PDF
Isucon makers casual talks
Masahiro Nagano
 
JUnitテストを1日やってみた
Mima Yuki
 
テストプラットフォームサービスの舞台裏
Yuto Tachibana
 
悩める金融系SEの軌跡
Fumiyasu Sumiya
 
没セッション 知識ゼロから学んだソフトウェアテスト
伸男 伊藤
 
HTML5 for Designers (HTML5 時代の Web デザイナーの新常識)
dynamis
 
20150717 これからプログラミングを勉強する人へ
SEED310
 
九州ソフトウェアテスト勉強会Vol.16 発表資料 150810
Takayoshi Sakaino
 
JS history
badatmath
 
Qaアーキテクチャの話
Kosuke Fujisawa
 
第3回Ques ここからはじめる!Androidアプリのテスト自動化
Koji Hasegawa
 
ソフトウェアテスト入門
Preferred Networks
 
はじめてのソフトウェアテスト
Rina Fukuda
 
Androidにおけるテストに関して 2014/11
Hiroshi Hashimoto
 
OpenStack管理者入門 - OpenStack最新情報セミナー 2014年12月
VirtualTech Japan Inc.
 
未来の情報の可視化について - Future share
Motoki Ohno
 
DBにseedするライブラリつくった
Joe_noh
 
デザイナーの私と サービスをつくる私
Shizuka Yamada
 
ソフトウェアテストことはじめ
Kosuke Fujisawa
 
管理画面のアクセスコントロール
Masao Maeda
 
Isucon makers casual talks
Masahiro Nagano
 
Ad

Similar to はてなにおける Android アプリのソフトウェアテスト (20)

KEY
Androidリリース作業の効率化(2)
Kenichi Kambara
 
PPTX
FriendlyによるWindowsアプリテスト自動化手法 基礎技術編
Kenji Fukumoto
 
PDF
Android studio で行ってみよう!!
Kazuaki Ueda
 
PPTX
コードレビューをより良くする Danger x Android
Toshiyuki Hirata
 
PPTX
自動テストとJenkinsの活用 公開版
baroqueworksdev
 
PDF
Sansan Tech Meetup Androidエンジニアが振り返る Google I/O
Kenichi Tatsuhama
 
PPT
デブサミ 2013 日本App Inventorユーザー会
Takeaki Tada
 
PPTX
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
Toshiyuki Hirata
 
PPTX
Friendlyを使ったwindowsアプリテスト自動化
Tatsuya Ishikawa
 
PDF
5 年続く 「はてなブックマーク」 アプリを継続開発する技術
Yu Nobuoka
 
PPTX
Visual Studio App Centerを公式サンプルアプリから学ぼうiOS(swift),Android(java)
Shinya Nakajima
 
ODP
Jenkins導入ライブ
Hiasyoshi Suehiro
 
PDF
テストがあればなんとかなる〜効率化までの道程〜
Takao Sumitomo
 
PDF
「最強」のチームを「造る」技術基盤 ディレクターズ・カット
Rakuten Group, Inc.
 
PDF
アプリリリース後に後悔しないための20のこと
leverages_event
 
PDF
20150802 codeal androidアプリを作ろう(おみくじアプリ編)
codeal
 
PDF
smartphone test (know how & tools)
Yukio Andoh
 
PPTX
Device Farm を使ったスマホアプリの自動テスト
Kenichi Tatsuhama
 
PDF
「Camelog」Android開発秘話
Shoya Tsukada
 
PPTX
Cordovaコトハジメ( Html5fun×senchUG )
Masayuki Abe
 
Androidリリース作業の効率化(2)
Kenichi Kambara
 
FriendlyによるWindowsアプリテスト自動化手法 基礎技術編
Kenji Fukumoto
 
Android studio で行ってみよう!!
Kazuaki Ueda
 
コードレビューをより良くする Danger x Android
Toshiyuki Hirata
 
自動テストとJenkinsの活用 公開版
baroqueworksdev
 
Sansan Tech Meetup Androidエンジニアが振り返る Google I/O
Kenichi Tatsuhama
 
デブサミ 2013 日本App Inventorユーザー会
Takeaki Tada
 
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
Toshiyuki Hirata
 
Friendlyを使ったwindowsアプリテスト自動化
Tatsuya Ishikawa
 
5 年続く 「はてなブックマーク」 アプリを継続開発する技術
Yu Nobuoka
 
Visual Studio App Centerを公式サンプルアプリから学ぼうiOS(swift),Android(java)
Shinya Nakajima
 
Jenkins導入ライブ
Hiasyoshi Suehiro
 
テストがあればなんとかなる〜効率化までの道程〜
Takao Sumitomo
 
「最強」のチームを「造る」技術基盤 ディレクターズ・カット
Rakuten Group, Inc.
 
アプリリリース後に後悔しないための20のこと
leverages_event
 
20150802 codeal androidアプリを作ろう(おみくじアプリ編)
codeal
 
smartphone test (know how & tools)
Yukio Andoh
 
Device Farm を使ったスマホアプリの自動テスト
Kenichi Tatsuhama
 
「Camelog」Android開発秘話
Shoya Tsukada
 
Cordovaコトハジメ( Html5fun×senchUG )
Masayuki Abe
 

More from Yu Nobuoka (9)

PDF
Android アプリを Jenkins でビルドして GitHub に “リリース” を作る
Yu Nobuoka
 
PDF
はてなにおける継続的デプロイメントの現状と Docker の導入
Yu Nobuoka
 
PDF
Android アプリ開発における Gradle ビルドシステム
Yu Nobuoka
 
PDF
Java による Web アプリケーションのプロトタイプのために最近使っている構成
Yu Nobuoka
 
PDF
GIF と LZW 圧縮と GifWriter.js
Yu Nobuoka
 
PDF
Windows ストアアプリのつくりかた (JS + HTML + CSS)
Yu Nobuoka
 
PDF
GUI アプリケーションにおける MVC
Yu Nobuoka
 
PDF
TypeScript 言語処理系ことはじめ
Yu Nobuoka
 
PDF
WebSocket Protocol と Plack::Middleware::WebSocket
Yu Nobuoka
 
Android アプリを Jenkins でビルドして GitHub に “リリース” を作る
Yu Nobuoka
 
はてなにおける継続的デプロイメントの現状と Docker の導入
Yu Nobuoka
 
Android アプリ開発における Gradle ビルドシステム
Yu Nobuoka
 
Java による Web アプリケーションのプロトタイプのために最近使っている構成
Yu Nobuoka
 
GIF と LZW 圧縮と GifWriter.js
Yu Nobuoka
 
Windows ストアアプリのつくりかた (JS + HTML + CSS)
Yu Nobuoka
 
GUI アプリケーションにおける MVC
Yu Nobuoka
 
TypeScript 言語処理系ことはじめ
Yu Nobuoka
 
WebSocket Protocol と Plack::Middleware::WebSocket
Yu Nobuoka
 

はてなにおける Android アプリのソフトウェアテスト