SlideShare une entreprise Scribd logo
1  sur  58
アプリの不具合を少なくするために
2016/02/16 Sansan×SONYアプリ勉強会
Sansan株式会社 辰濱健一
Copyright © 2014 Sansan, Inc. All rights reserved.
> Agenda
1
• 自己紹介
• Sansanアプリについて
• 不具合を少なくするために
• 導入ツール
• 手動でのテスト
• 自動テスト
• まとめ
Copyright © 2014 Sansan, Inc. All rights reserved. 2
自己紹介
Copyright © 2014 Sansan, Inc. All rights reserved.
> 自己紹介
3
• 辰濱健一
• https://www.facebook.com/kenichi.tatsuhama
• http://www.slideshare.net/kenichitatsuhama
• 徳島県生まれ、徳島県勤務
• Tokushima.app というスマホアプリ勉強会を主催
• 趣味は音楽&旅行
Copyright © 2014 Sansan, Inc. All rights reserved.
> 自己紹介
4
• 業務経歴
• 1社目@徳島市
• Java, C++, MFC
• UWSC を使った Windows アプリの UI 自動テストの導入
• 性能改善チームにて、自動性能計測ツールを作成
• 2社目@徳島市
• iOS(Objective-C), Android(Java), Windows(C#)の
スマホ&タブレット向けアプリ開発
• 機能担当制、iOS で作った機能は作った人が他 OS に移植
• 3社目@徳島県神山町
• スマホアプリの自動テスト
• リモートワーク
開発&
品質担保と自動テスト
モバイル開発
モバイル開発での
品質担保と
自動テスト
Copyright © 2014 Sansan, Inc. All rights reserved.
> 自己紹介
5
• Sansan神山ラボ(勤務先)
Copyright © 2014 Sansan, Inc. All rights reserved. 6
Sansan アプリについて
Copyright © 2014 Sansan, Inc. All rights reserved.
> Sansan アプリについて
7
• 法人向け名刺管理サービスのクライアントアプリ
• 社員の名刺を検索・閲覧でき、社内の人脈を共有
Copyright © 2014 Sansan, Inc. All rights reserved.
> Sansan アプリについて
8
• iOS / Android ほぼ同一仕様、ネイティブ実装
• 安価な機能制限版(海外向け)もワンバイナリで実現
• アプリ内でモードによる分岐多々…
• 海外向けには色んな施策を試すべく、スピーディーに対
応する必要がある
• 日本語/英語に対応
• 名刺データ(個人情報)を扱っているので、
アプリの品質が悪いと、サービスだけでなく
会社の信用失墜に繋がる
Copyright © 2014 Sansan, Inc. All rights reserved.
> Sansan Android アプリについて
9
• 辰濱の入社前までは外注していた
• 辰濱の入社後も、早期リリースに迫られ外注さんの
コードベースで不具合修正&機能追加を余儀なくされ
る
• 直近まで、事業部内で Android エンジニアが1人だっ
たので事業要求に応えるだけで精一杯
(現在は2名体制)
• スピード感と品質が求められる
Copyright © 2014 Sansan, Inc. All rights reserved. 10
不具合を少なくするために
Copyright © 2014 Sansan, Inc. All rights reserved.
> 不具合を少なくするために
11
• 導入ツール
• 手動でのテスト
• 自動でのテスト
Copyright © 2014 Sansan, Inc. All rights reserved. 12
不具合を少なくするために
〜 導入ツール 〜
Copyright © 2014 Sansan, Inc. All rights reserved.
> 導入ツール
13
• Lint
• Android Studio Inspect Code
• Support Annotations
• Crashlytics
• Infer(Facebook)
• QARK(LinkedIn)
Copyright © 2014 Sansan, Inc. All rights reserved.
> Lint
14
• http://developer.android.com/intl/ja/tools/help/li
nt.html
• Android SDK tools に含まれている静的コード解析
ツール
• ./gradlew lint で実行
• 指摘内容
• UnuserdResources(未使用リソース)
• UselessParent(View の不要なネスト)
• HardcodedText(国際化非対応)
など…
Copyright © 2014 Sansan, Inc. All rights reserved.
> Lint
15
未使用文言
Notification icon の visual style
Copyright © 2014 Sansan, Inc. All rights reserved.
> Android Studio Inspect Code
16
• Android Studio から実行できる静的コード解析
• Analyze > Inspect Code で実行
• 指摘内容
• Deprecated API use (非推奨 API の利用)
• Field can be local (変数のスコープの指摘)
• Javadoc issues (Javadoc コメントと実体の乖離)
• Declaration can have final modifier(final にできる)
• Spelling (スペルミス)
• Actual method parameter is the same constant
(同じ値しか渡ってこない)
など…
Copyright © 2014 Sansan, Inc. All rights reserved.
> Android Studio Inspect Code
17
Android Studio 上でレポートを確認できる
自動補正もサポート!
Copyright © 2014 Sansan, Inc. All rights reserved.
> Support Annotations
18
• http://tools.android.com/tech-docs/support-
annotations
• アノテーションを使って、パラメータの nonnull /
nullable や値範囲を宣言できる
• Android Studio 上で警告してくれる
Copyright © 2014 Sansan, Inc. All rights reserved.
> Crashlytics
19
• https://try.crashlytics.com/
• クラッシュレポート収集&分析ツール
• ダッシュボードで、クラッシュの詳細を見ることがで
きる
• 時刻、端末情報、アプリバージョン、発生箇所、頻度…
• ProGuard をかけた apk でも、元のクラス名・関数名・
行数で確認できるのは嬉しい
Copyright © 2014 Sansan, Inc. All rights reserved.
> Crashlytics
20
Copyright © 2014 Sansan, Inc. All rights reserved.
> Infer
21
• http://fbinfer.com/
• Facebook 製、静的コード解析ツール
• 指摘内容
• CONTEXT_LEAK
• NULL_DEREFERENCE
• RESOURCE_LEAK
• 結果は CSV, Json で出力される
• Android Studio Inspect Code での内容と重複するとこ
ろもあるが、Inspect Code にない指摘もある
Copyright © 2014 Sansan, Inc. All rights reserved.
> QARK
22
• https://github.com/linkedin/qark
• LinkedIn 製、セキュリティチェックツール
• 指摘内容
• export されたコンポーネント
• WebView の設定
• Intent のセキュリティ
• 弱い暗号方式の利用
など…
• 結果は html で出力される
Copyright © 2014 Sansan, Inc. All rights reserved. 23
不具合を少なくするために
〜 手動でのテスト 〜
Copyright © 2014 Sansan, Inc. All rights reserved.
> 手動でのテストの観点
24
• アクティビティを保持しない
• さまざまな通信環境
• iOS 版や Web 版との比較
• 社内β版の配布
• リグレッションテスト
Copyright © 2014 Sansan, Inc. All rights reserved.
> 手動でのテストの観点
25
• アクティビティを保持しない
• さまざまな通信環境
• iOS 版や Web 版との比較
• 社内β版の配布
• リグレッションテスト
Copyright © 2014 Sansan, Inc. All rights reserved.
> アクティビティを保持しない
26
• 開発者向けオプションで設定
• この時に、
• 正しく画面遷移(行き来)できるか
• 最小化 → 復帰後の状態は適切か
• 各種変数の値
• 表示中のダイアログやメッセージが、
復帰後も正しく動作するか?
• これにより以下の確認になる
• on(Save/Restore)InstanceState 対応
• 適切な Fragment の扱い方
Copyright © 2014 Sansan, Inc. All rights reserved.
> 【コラム】適切な Fragment の扱い方
27
• デフォルトコンストラクタを使っているか?
• 外から渡したい値は、Bundle で渡しているか?
Copyright © 2014 Sansan, Inc. All rights reserved.
> 【コラム】適切な Fragment の扱い方
28
• setListener などしていないか?
• フラグメント再構築時に、setter は呼ばれない!
• ※onCreate は呼ばれます
• DialogFragment に setListener してると、再構築時に
Listener が set されず、意図した Listener の呼び出し
が行われない
• 詳しくは「Master of Fragment」を!
http://tatsu-zine.com/books/master-of-fragments
Copyright © 2014 Sansan, Inc. All rights reserved.
> 手動でのテストの観点
29
• アクティビティを保持しない
• さまざまな通信環境
• iOS 版や Web 版との比較
• 社内β版の配布
• リグレッションテスト
Copyright © 2014 Sansan, Inc. All rights reserved.
> さまざまな通信環境
30
• 安定した通信環境 (当然なので解説省略)
• 機内モードの時
• 通信が遅いとき
• Wi-Fi に繋がっているが、インターネットに繋がって
いない場合
Copyright © 2014 Sansan, Inc. All rights reserved.
> 機内モードの時
31
• 端末で予め判定できる
(ConnectivityManager)
• 事前のエラー表示ができているか?
(そもそも画面遷移させないなど)
• 通信処理を行った場合、エラーハンドリングできてい
るか?
• キャッシュで表示できるモノだけでも表示する?
• 送信処理を受け付け、オンラインになったら送信?
(Facebook などはオフライン投稿機能がある)
Copyright © 2014 Sansan, Inc. All rights reserved.
> 通信が遅いとき
32
• 再現方法は色々
• 通信ライブラリと interceptor で可能かも?
• 低速 SIM
• Android エミュレータの設定 など…
• UX は適切か? (ぐるぐる表示、進捗表示)
• 最小化や画面遷移後のコールバック処理は大丈夫か?
• Fragment#isAdded() で Activity に attach されているかチェック
• ViewPager 内の破棄された Fragment へのコールバックは忘れがち
• 可能であれば、前画面用の通信はキャンセル or 優先度を下げたい
Copyright © 2014 Sansan, Inc. All rights reserved.
> Wi-Fi にはつながってるが、ネットにつながってない
33
• 基本的には、前項の項目と同じ
• ※端末側での判定は難しい
• ただ、サーバからのレスポンスが帰ってこないので、
タイムアウトのエラーハンドリングが必要
• タイムアウトまで通信スレッドを占有するので、通信
キューが山積みになったり、いくつものスレッドを走
らせすぎる懸念
Copyright © 2014 Sansan, Inc. All rights reserved.
> 手動でのテストの観点
34
• アクティビティを保持しない
• さまざまな通信環境
• iOS 版や Web 版との比較
• 社内β版の配布
• リグレッションテスト
Copyright © 2014 Sansan, Inc. All rights reserved.
> iOS 版や Web 版との比較
35
• 同じ操作をしたり、同じデータを表示させて見比べる
• よくある差違
• 数値や日付の表示形式
• データのソート順
• 長い文字列の対応(末尾…、折り返し、スクロール)
Copyright © 2014 Sansan, Inc. All rights reserved.
> iOS 版や Web 版との比較
36
桁区切りの有無
数値の違い
Copyright © 2014 Sansan, Inc. All rights reserved.
> 手動でのテストの観点
37
• アクティビティを保持しない
• さまざまな通信環境
• iOS 版や Web 版との比較
• 社内β版の配布
• リグレッションテスト
Copyright © 2014 Sansan, Inc. All rights reserved.
> 社内β版の配布
38
• 社内ヘビーユーザにリリース前に配布
• 実データならではの問題が出る可能性がある
• 開発中に使っていない端末でも問題なく動作するか?
• なかなか気づかない操作の癖
• バックキー使い? ナビゲーションで戻る?
• キーボードの虫眼鏡ボタンで検索?
• 2点タップどっちから離すか
• A+B:A押下 → B押下 → どっちから離す??
• ↑前々職でどっちから離すかで再現が別れる問題があった
Copyright © 2014 Sansan, Inc. All rights reserved.
> 手動でのテストの観点
39
• アクティビティを保持しない
• さまざまな通信環境
• iOS 版や Web 版との比較
• 社内β版の配布
• リグレッションテスト
Copyright © 2014 Sansan, Inc. All rights reserved.
> リグレッションテスト
40
• リリース直前に必ず実施
• 主要機能のデグレードがないことを確認
• やる)
• 主要機能のワンパス
• ログイン、名刺登録、編集、削除、ログアウト など
• 過去の重大な不具合が再現しないこと
• やらない)
• 100文字制限のところに101文字入れたときのエラー
• アプリにサーバリリース前にも行っている
Copyright © 2014 Sansan, Inc. All rights reserved. 41
不具合を少なくするために
〜 自動テスト 〜
Copyright © 2014 Sansan, Inc. All rights reserved.
> Robotium を使った自動テスト
42
• ユニットテストではカバーしきれない
UI 操作を伴うテストを記述
• Robotium はアプリケーション内部オブジェクトを参
照できるため、柔軟なテストが記述できる
• DB のデータを参照して、ListView に表示されているか
• SharedPreference の値が意図通りかの確認
• ただし、デバッグ版でしか動作しない
(リリースバイナリでのテストは Appium を使う)
Copyright © 2014 Sansan, Inc. All rights reserved.
> テストコードの例
43
- ログイン処理
- メールアドレス入力欄を取得
- パスワード入力欄を取得
- メールアドレスを入力
- パスワードを入力
- ログインボタンを押す
テストライブラリをラッ
プして可読性確保!
Copyright © 2014 Sansan, Inc. All rights reserved.
> デモ動画
44
• 2014/11 時点の動画です
• http://youtu.be/scY_RPgfxeY
• 4分ぐらいありますが、発表時間の都合上ちょっとだ
け…
Copyright © 2014 Sansan, Inc. All rights reserved.
> 自動テストの適用
45
• 前述のリグレッションテストには適用済み
• 主要画面の詳細なテストも記述中
• エラーメッセージ
• サインアップ時に送られるメールをパースして、サイン
アップ処理を行う(MailCatcher API を利用)
• Jacoco によるカバレッジ計測
• 2016/02時点で 59% をカバー
• ※テストでコードが実行されているからといって、安心
ではない。
Copyright © 2014 Sansan, Inc. All rights reserved.
> 自動テスト導入してみて
46
• デグレードがないことを容易に確認できる
• メンテはそこまで大変じゃない
• テストでしっかりカバーしていれば、大規模なリファ
クタリングも安心!
• これから、通信ライブラリ・カメラ API・デザインパーツの差し替
え・DB の置き換え?などが控えている
• モックを使わないので、サーバの動作確認にもなる
Copyright © 2014 Sansan, Inc. All rights reserved.
> 自動テストの詳細は
47
• DroidKaigi 2016 で!
https://droidkaigi.github.io/2016/
Copyright © 2014 Sansan, Inc. All rights reserved.
> 自動テストの詳細は
48
と、思ったのですが、
CFP 通らなかったので…
Copyright © 2014 Sansan, Inc. All rights reserved.
> 自動テストの詳細は
49
• 2/20 DroidKaigi 2016 Reject Conf で!
http://connpass.com/event/24264/
Copyright © 2014 Sansan, Inc. All rights reserved.
> 自動テストの詳細は
50
• 3/23 Android Testing Bootcamp #1 でも!?
http://connpass.com/event/26911/
※抽選がまだ
Copyright © 2014 Sansan, Inc. All rights reserved.
> 調査中の Device Farm の内容ですが…
51
• 3/12 JAWS DAYS 2016 でも!
http://jawsdays2016.jaws-ug.jp/speaker/409
http://jawsdays2016.jaws-ug.jp/
Copyright © 2014 Sansan, Inc. All rights reserved. 52
効果
Copyright © 2014 Sansan, Inc. All rights reserved.
> 効果
53
• iOS / Android とも、前任者のコードベースの事情を
十分にカバーする品質担保ができている。
• 開発部内でサービスインシデントは 数十件/年 あるが、アプリ
においては 0件/年 と部内トップレベル
• 新しい OS や端末が出た場合のテストも容易
• テスト工数の削減
• コードレビュー時にこれらの観点でも見るので、チー
ムメンバーの品質意識・対応の底上げになる
Copyright © 2014 Sansan, Inc. All rights reserved. 54
まとめ
Copyright © 2014 Sansan, Inc. All rights reserved.
> まとめ
55
• 使えるツールは使おう!
• 色んな環境でテストしよう!
• テストの自動化に取り組もう!
Copyright © 2014 Sansan, Inc. All rights reserved. 56
質疑応答
Copyright © 2014 Sansan, Inc. All rights reserved.
> こちらもどうぞ
57
• Android アプリ品質ガイドライン【 Google Developers Japan 】
• http://googledevjp.blogspot.jp/2013/01/core.html
• Robotium を使った UI テストとレイアウト確認の効率化
• http://www.slideshare.net/kenichitatsuhama/robotium-ui
• Appium を使って iOS / Android の UI テストを共通化
• http://www.slideshare.net/kenichitatsuhama/appium-ios-android-ui
• UWSC を使った自動テスト(for Windows)
• http://qiita.com/tatsuhama/items/d6595050a13c5ed2de48
• Robotium で書いた Android アプリのテストを AWS Device
Farm で実行する
• http://qiita.com/tatsuhama/items/27d5e3ef1056e740b085

Contenu connexe

Tendances

Xcode 7におけるUIテストとカバレジ計測 #yidev 第20回勉強会
Xcode 7におけるUIテストとカバレジ計測 #yidev 第20回勉強会Xcode 7におけるUIテストとカバレジ計測 #yidev 第20回勉強会
Xcode 7におけるUIテストとカバレジ計測 #yidev 第20回勉強会
Koji Hasegawa
 
スマートフォンアプリの色々自動化をはじめよう - at SonyDNA Meisters Salon 特別編
スマートフォンアプリの色々自動化をはじめよう - at SonyDNA Meisters Salon 特別編スマートフォンアプリの色々自動化をはじめよう - at SonyDNA Meisters Salon 特別編
スマートフォンアプリの色々自動化をはじめよう - at SonyDNA Meisters Salon 特別編
Koji Hasegawa
 
Appiumを用いたwebブラウザ自動テスト
Appiumを用いたwebブラウザ自動テストAppiumを用いたwebブラウザ自動テスト
Appiumを用いたwebブラウザ自動テスト
yumi_chappy
 
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAAスマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
Koji Hasegawa
 
福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介
Mori Shingo
 

Tendances (20)

Xcode 7におけるUIテストとカバレジ計測 #yidev 第20回勉強会
Xcode 7におけるUIテストとカバレジ計測 #yidev 第20回勉強会Xcode 7におけるUIテストとカバレジ計測 #yidev 第20回勉強会
Xcode 7におけるUIテストとカバレジ計測 #yidev 第20回勉強会
 
Rubyを使ったスマホアプリのUIテスト
Rubyを使ったスマホアプリのUIテストRubyを使ったスマホアプリのUIテスト
Rubyを使ったスマホアプリのUIテスト
 
fastlane触ってみた
fastlane触ってみたfastlane触ってみた
fastlane触ってみた
 
STFとAppiumをもちいたAndroidアプリの自動テスト
STFとAppiumをもちいたAndroidアプリの自動テストSTFとAppiumをもちいたAndroidアプリの自動テスト
STFとAppiumをもちいたAndroidアプリの自動テスト
 
JaSST'16 Tokyo モバイルセッション
JaSST'16 Tokyo モバイルセッションJaSST'16 Tokyo モバイルセッション
JaSST'16 Tokyo モバイルセッション
 
VRの入力デバイス #JAGVR
VRの入力デバイス #JAGVRVRの入力デバイス #JAGVR
VRの入力デバイス #JAGVR
 
Appiumのテスト結果レポートをsahaginで作ってみる
Appiumのテスト結果レポートをsahaginで作ってみるAppiumのテスト結果レポートをsahaginで作ってみる
Appiumのテスト結果レポートをsahaginで作ってみる
 
スマートフォンアプリの色々自動化をはじめよう - at SonyDNA Meisters Salon 特別編
スマートフォンアプリの色々自動化をはじめよう - at SonyDNA Meisters Salon 特別編スマートフォンアプリの色々自動化をはじめよう - at SonyDNA Meisters Salon 特別編
スマートフォンアプリの色々自動化をはじめよう - at SonyDNA Meisters Salon 特別編
 
海外のSeleniumカンファレンスではどんな発表がされているのか2014
海外のSeleniumカンファレンスではどんな発表がされているのか2014海外のSeleniumカンファレンスではどんな発表がされているのか2014
海外のSeleniumカンファレンスではどんな発表がされているのか2014
 
Androidアプリ開発のテスト環境
Androidアプリ開発のテスト環境Androidアプリ開発のテスト環境
Androidアプリ開発のテスト環境
 
Appiumを用いたwebブラウザ自動テスト
Appiumを用いたwebブラウザ自動テストAppiumを用いたwebブラウザ自動テスト
Appiumを用いたwebブラウザ自動テスト
 
「スプラトゥーン」リアルタイム画像解析ツール 「IkaLog」の裏側
「スプラトゥーン」リアルタイム画像解析ツール 「IkaLog」の裏側「スプラトゥーン」リアルタイム画像解析ツール 「IkaLog」の裏側
「スプラトゥーン」リアルタイム画像解析ツール 「IkaLog」の裏側
 
Selenium boot campの紹介
Selenium boot campの紹介Selenium boot campの紹介
Selenium boot campの紹介
 
Lt 20150711
Lt 20150711Lt 20150711
Lt 20150711
 
事例 アジャイルと自動化 後半(ヤフオク!アプリでの自動テストの事例紹介) at Ques vol.7( #ques7 ) 11/20/2015
事例 アジャイルと自動化 後半(ヤフオク!アプリでの自動テストの事例紹介) at Ques vol.7( #ques7 ) 11/20/2015事例 アジャイルと自動化 後半(ヤフオク!アプリでの自動テストの事例紹介) at Ques vol.7( #ques7 ) 11/20/2015
事例 アジャイルと自動化 後半(ヤフオク!アプリでの自動テストの事例紹介) at Ques vol.7( #ques7 ) 11/20/2015
 
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAAスマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
 
福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介
 
去年のデブサミの「日本Seleniumユーザーコミュニティ」のLTが真面目すぎてイマイチだったので、今年は何とかしようと色々がんばった結果ww
去年のデブサミの「日本Seleniumユーザーコミュニティ」のLTが真面目すぎてイマイチだったので、今年は何とかしようと色々がんばった結果ww去年のデブサミの「日本Seleniumユーザーコミュニティ」のLTが真面目すぎてイマイチだったので、今年は何とかしようと色々がんばった結果ww
去年のデブサミの「日本Seleniumユーザーコミュニティ」のLTが真面目すぎてイマイチだったので、今年は何とかしようと色々がんばった結果ww
 
Firebase Test Lab 無料枠を使ってみました。
Firebase Test Lab 無料枠を使ってみました。Firebase Test Lab 無料枠を使ってみました。
Firebase Test Lab 無料枠を使ってみました。
 
ディープラーニングとAppiumでモバイルテスト自動化
ディープラーニングとAppiumでモバイルテスト自動化ディープラーニングとAppiumでモバイルテスト自動化
ディープラーニングとAppiumでモバイルテスト自動化
 

En vedette

Android & the Web of Things: Bluetooth Low Energy, Bluetooth 4.0, iBeacons, B...
Android & the Web of Things: Bluetooth Low Energy, Bluetooth 4.0, iBeacons, B...Android & the Web of Things: Bluetooth Low Energy, Bluetooth 4.0, iBeacons, B...
Android & the Web of Things: Bluetooth Low Energy, Bluetooth 4.0, iBeacons, B...
EVRYTHNG
 

En vedette (11)

iOSアプリ開発でコンフリクトした話
iOSアプリ開発でコンフリクトした話iOSアプリ開発でコンフリクトした話
iOSアプリ開発でコンフリクトした話
 
in in der 響應式編程
in in der 響應式編程in in der 響應式編程
in in der 響應式編程
 
Interfacing BLE with android based device
Interfacing BLE with android based device  Interfacing BLE with android based device
Interfacing BLE with android based device
 
Ble android
Ble androidBle android
Ble android
 
Android & the Web of Things: Bluetooth Low Energy, Bluetooth 4.0, iBeacons, B...
Android & the Web of Things: Bluetooth Low Energy, Bluetooth 4.0, iBeacons, B...Android & the Web of Things: Bluetooth Low Energy, Bluetooth 4.0, iBeacons, B...
Android & the Web of Things: Bluetooth Low Energy, Bluetooth 4.0, iBeacons, B...
 
Connect your Android to the real world with Bluetooth Low Energy
Connect your Android to the real world with Bluetooth Low EnergyConnect your Android to the real world with Bluetooth Low Energy
Connect your Android to the real world with Bluetooth Low Energy
 
BTLE (Bluetooth Low Energy) and CoreBluetooth
BTLE (Bluetooth Low Energy) and CoreBluetooth BTLE (Bluetooth Low Energy) and CoreBluetooth
BTLE (Bluetooth Low Energy) and CoreBluetooth
 
Retrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃん
Retrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃんRetrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃん
Retrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃん
 
Android Bluetooth Introduction
Android Bluetooth IntroductionAndroid Bluetooth Introduction
Android Bluetooth Introduction
 
Introduction to Bluetooth Low Energy
Introduction to Bluetooth Low EnergyIntroduction to Bluetooth Low Energy
Introduction to Bluetooth Low Energy
 
RxSwiftのデータバインディングだけ
RxSwiftのデータバインディングだけRxSwiftのデータバインディングだけ
RxSwiftのデータバインディングだけ
 

Similaire à アプリの不具合を少なくするために

DevOpsのはじめの一歩 〜監視の変遷〜
DevOpsのはじめの一歩 〜監視の変遷〜DevOpsのはじめの一歩 〜監視の変遷〜
DevOpsのはじめの一歩 〜監視の変遷〜
Akihiro Kuwano
 
Jasst12九州 倉貫資料:アジャイル・Ruby・クラウド(ARC)を活用したビジネスにおけるテストの実践 #jasst12Q
Jasst12九州 倉貫資料:アジャイル・Ruby・クラウド(ARC)を活用したビジネスにおけるテストの実践 #jasst12QJasst12九州 倉貫資料:アジャイル・Ruby・クラウド(ARC)を活用したビジネスにおけるテストの実践 #jasst12Q
Jasst12九州 倉貫資料:アジャイル・Ruby・クラウド(ARC)を活用したビジネスにおけるテストの実践 #jasst12Q
Yoshihito Kuranuki
 

Similaire à アプリの不具合を少なくするために (20)

Android 開発, 運用時に使いたいライブラリやサービスの紹介
Android 開発, 運用時に使いたいライブラリやサービスの紹介Android 開発, 運用時に使いたいライブラリやサービスの紹介
Android 開発, 運用時に使いたいライブラリやサービスの紹介
 
アプリ開発作業の効率改善
アプリ開発作業の効率改善アプリ開発作業の効率改善
アプリ開発作業の効率改善
 
Device Farm を使ったスマホアプリの自動テスト
Device Farm を使ったスマホアプリの自動テストDevice Farm を使ったスマホアプリの自動テスト
Device Farm を使ったスマホアプリの自動テスト
 
Espresso と Firebase Test Lab で Android アプリのテストを自動化する
Espresso と Firebase Test Lab で Android アプリのテストを自動化するEspresso と Firebase Test Lab で Android アプリのテストを自動化する
Espresso と Firebase Test Lab で Android アプリのテストを自動化する
 
DroidKaigi_devicefarm
DroidKaigi_devicefarmDroidKaigi_devicefarm
DroidKaigi_devicefarm
 
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
 
デブサミ2014【13-E-3】クラウド時代の環境構築・デプロイ自動化戦略
デブサミ2014【13-E-3】クラウド時代の環境構築・デプロイ自動化戦略デブサミ2014【13-E-3】クラウド時代の環境構築・デプロイ自動化戦略
デブサミ2014【13-E-3】クラウド時代の環境構築・デプロイ自動化戦略
 
Voicepic@FukuiMASeminar
Voicepic@FukuiMASeminarVoicepic@FukuiMASeminar
Voicepic@FukuiMASeminar
 
おすすめインフラ! for スタートアップ
おすすめインフラ! for スタートアップおすすめインフラ! for スタートアップ
おすすめインフラ! for スタートアップ
 
リモート・スマホ・レンタル(第2回 Androidテスト祭り)
リモート・スマホ・レンタル(第2回 Androidテスト祭り)リモート・スマホ・レンタル(第2回 Androidテスト祭り)
リモート・スマホ・レンタル(第2回 Androidテスト祭り)
 
DELPHI BOOT CAMP / DELPHIでビジュアル開発に挑戦しよう ◆ DAY2: DELPHIでUI設計のポイントを学ぼう
DELPHI BOOT CAMP / DELPHIでビジュアル開発に挑戦しよう ◆ DAY2: DELPHIでUI設計のポイントを学ぼうDELPHI BOOT CAMP / DELPHIでビジュアル開発に挑戦しよう ◆ DAY2: DELPHIでUI設計のポイントを学ぼう
DELPHI BOOT CAMP / DELPHIでビジュアル開発に挑戦しよう ◆ DAY2: DELPHIでUI設計のポイントを学ぼう
 
密着!わたしのコンソールアプリ開発環境
密着!わたしのコンソールアプリ開発環境密着!わたしのコンソールアプリ開発環境
密着!わたしのコンソールアプリ開発環境
 
快適・簡単・安心なアプリE2Eテストの実行環境 #stac2017
快適・簡単・安心なアプリE2Eテストの実行環境 #stac2017快適・簡単・安心なアプリE2Eテストの実行環境 #stac2017
快適・簡単・安心なアプリE2Eテストの実行環境 #stac2017
 
OSC福岡 20111203
OSC福岡 20111203OSC福岡 20111203
OSC福岡 20111203
 
Azure VMを検証に使う - 便利なHyper-Vスナップショットを使う方法
Azure VMを検証に使う - 便利なHyper-Vスナップショットを使う方法Azure VMを検証に使う - 便利なHyper-Vスナップショットを使う方法
Azure VMを検証に使う - 便利なHyper-Vスナップショットを使う方法
 
これ以上ソースコードの負債を増やさないためにVisual Studioの静的解析とAzure PipelinesでCIを回す
これ以上ソースコードの負債を増やさないためにVisual Studioの静的解析とAzure PipelinesでCIを回すこれ以上ソースコードの負債を増やさないためにVisual Studioの静的解析とAzure PipelinesでCIを回す
これ以上ソースコードの負債を増やさないためにVisual Studioの静的解析とAzure PipelinesでCIを回す
 
DevOpsのはじめの一歩 〜監視の変遷〜
DevOpsのはじめの一歩 〜監視の変遷〜DevOpsのはじめの一歩 〜監視の変遷〜
DevOpsのはじめの一歩 〜監視の変遷〜
 
Session2:「グローバル化する情報処理」/伊藤敬彦
Session2:「グローバル化する情報処理」/伊藤敬彦Session2:「グローバル化する情報処理」/伊藤敬彦
Session2:「グローバル化する情報処理」/伊藤敬彦
 
Jasst12九州 倉貫資料:アジャイル・Ruby・クラウド(ARC)を活用したビジネスにおけるテストの実践 #jasst12Q
Jasst12九州 倉貫資料:アジャイル・Ruby・クラウド(ARC)を活用したビジネスにおけるテストの実践 #jasst12QJasst12九州 倉貫資料:アジャイル・Ruby・クラウド(ARC)を活用したビジネスにおけるテストの実践 #jasst12Q
Jasst12九州 倉貫資料:アジャイル・Ruby・クラウド(ARC)を活用したビジネスにおけるテストの実践 #jasst12Q
 
前任者から引き継いだ Eight Android アプリ内部の改善
前任者から引き継いだ Eight Android アプリ内部の改善前任者から引き継いだ Eight Android アプリ内部の改善
前任者から引き継いだ Eight Android アプリ内部の改善
 

Plus de 健一 辰濱

Plus de 健一 辰濱 (20)

地方創生ワカモノ会合
地方創生ワカモノ会合地方創生ワカモノ会合
地方創生ワカモノ会合
 
Google Analytics のデータ分析ハンズオン
Google Analytics のデータ分析ハンズオンGoogle Analytics のデータ分析ハンズオン
Google Analytics のデータ分析ハンズオン
 
Sansan Tech Meetup Androidエンジニアが振り返る Google I/O
 Sansan Tech Meetup Androidエンジニアが振り返る Google I/O   Sansan Tech Meetup Androidエンジニアが振り返る Google I/O
Sansan Tech Meetup Androidエンジニアが振り返る Google I/O
 
知っておきたいFirebase の色んな上限について
知っておきたいFirebase の色んな上限について知っておきたいFirebase の色んな上限について
知っておきたいFirebase の色んな上限について
 
Android 開発の昔と今
Android 開発の昔と今Android 開発の昔と今
Android 開発の昔と今
 
Firebase Extensions はじめの一歩
Firebase Extensions はじめの一歩Firebase Extensions はじめの一歩
Firebase Extensions はじめの一歩
 
Firebase & BigQuery で Android アプリの成⻑を支える
Firebase & BigQuery で Android アプリの成⻑を支えるFirebase & BigQuery で Android アプリの成⻑を支える
Firebase & BigQuery で Android アプリの成⻑を支える
 
GDG DevFest Tokyo 2019 Day2 Special Hands-on
GDG DevFest Tokyo 2019 Day2 Special Hands-onGDG DevFest Tokyo 2019 Day2 Special Hands-on
GDG DevFest Tokyo 2019 Day2 Special Hands-on
 
Firebase Summit 2019 Recap
Firebase Summit 2019 RecapFirebase Summit 2019 Recap
Firebase Summit 2019 Recap
 
Cloud Firestore を使って、Polling をやめたい話
Cloud Firestore を使って、Polling をやめたい話Cloud Firestore を使って、Polling をやめたい話
Cloud Firestore を使って、Polling をやめたい話
 
Firebase hands on in Matsuyama
Firebase hands on in MatsuyamaFirebase hands on in Matsuyama
Firebase hands on in Matsuyama
 
インドのインターネット環境 との戦い方
インドのインターネット環境との戦い方インドのインターネット環境との戦い方
インドのインターネット環境 との戦い方
 
インドの低速なネットワーク環境の攻略法
インドの低速なネットワーク環境の攻略法インドの低速なネットワーク環境の攻略法
インドの低速なネットワーク環境の攻略法
 
DroidKaigi 2018 参加報告会 Closing
DroidKaigi 2018 参加報告会 ClosingDroidKaigi 2018 参加報告会 Closing
DroidKaigi 2018 参加報告会 Closing
 
企業スポンサー
企業スポンサー企業スポンサー
企業スポンサー
 
参加したセッションの ピックアップ
参加したセッションのピックアップ参加したセッションのピックアップ
参加したセッションの ピックアップ
 
CFP(Call For Paper) を出す話
CFP(Call For Paper)を出す話CFP(Call For Paper)を出す話
CFP(Call For Paper) を出す話
 
DroidKaigi 2018 参加報告会
DroidKaigi 2018 参加報告会DroidKaigi 2018 参加報告会
DroidKaigi 2018 参加報告会
 
DroidKaigi アプリの内部を見る
DroidKaigi アプリの内部を見るDroidKaigi アプリの内部を見る
DroidKaigi アプリの内部を見る
 
Java で書かれた Android アプリに Kotlin を適用させていく
Java で書かれた Android アプリに Kotlin を適用させていくJava で書かれた Android アプリに Kotlin を適用させていく
Java で書かれた Android アプリに Kotlin を適用させていく
 

アプリの不具合を少なくするために

  • 2. Copyright © 2014 Sansan, Inc. All rights reserved. > Agenda 1 • 自己紹介 • Sansanアプリについて • 不具合を少なくするために • 導入ツール • 手動でのテスト • 自動テスト • まとめ
  • 3. Copyright © 2014 Sansan, Inc. All rights reserved. 2 自己紹介
  • 4. Copyright © 2014 Sansan, Inc. All rights reserved. > 自己紹介 3 • 辰濱健一 • https://www.facebook.com/kenichi.tatsuhama • http://www.slideshare.net/kenichitatsuhama • 徳島県生まれ、徳島県勤務 • Tokushima.app というスマホアプリ勉強会を主催 • 趣味は音楽&旅行
  • 5. Copyright © 2014 Sansan, Inc. All rights reserved. > 自己紹介 4 • 業務経歴 • 1社目@徳島市 • Java, C++, MFC • UWSC を使った Windows アプリの UI 自動テストの導入 • 性能改善チームにて、自動性能計測ツールを作成 • 2社目@徳島市 • iOS(Objective-C), Android(Java), Windows(C#)の スマホ&タブレット向けアプリ開発 • 機能担当制、iOS で作った機能は作った人が他 OS に移植 • 3社目@徳島県神山町 • スマホアプリの自動テスト • リモートワーク 開発& 品質担保と自動テスト モバイル開発 モバイル開発での 品質担保と 自動テスト
  • 6. Copyright © 2014 Sansan, Inc. All rights reserved. > 自己紹介 5 • Sansan神山ラボ(勤務先)
  • 7. Copyright © 2014 Sansan, Inc. All rights reserved. 6 Sansan アプリについて
  • 8. Copyright © 2014 Sansan, Inc. All rights reserved. > Sansan アプリについて 7 • 法人向け名刺管理サービスのクライアントアプリ • 社員の名刺を検索・閲覧でき、社内の人脈を共有
  • 9. Copyright © 2014 Sansan, Inc. All rights reserved. > Sansan アプリについて 8 • iOS / Android ほぼ同一仕様、ネイティブ実装 • 安価な機能制限版(海外向け)もワンバイナリで実現 • アプリ内でモードによる分岐多々… • 海外向けには色んな施策を試すべく、スピーディーに対 応する必要がある • 日本語/英語に対応 • 名刺データ(個人情報)を扱っているので、 アプリの品質が悪いと、サービスだけでなく 会社の信用失墜に繋がる
  • 10. Copyright © 2014 Sansan, Inc. All rights reserved. > Sansan Android アプリについて 9 • 辰濱の入社前までは外注していた • 辰濱の入社後も、早期リリースに迫られ外注さんの コードベースで不具合修正&機能追加を余儀なくされ る • 直近まで、事業部内で Android エンジニアが1人だっ たので事業要求に応えるだけで精一杯 (現在は2名体制) • スピード感と品質が求められる
  • 11. Copyright © 2014 Sansan, Inc. All rights reserved. 10 不具合を少なくするために
  • 12. Copyright © 2014 Sansan, Inc. All rights reserved. > 不具合を少なくするために 11 • 導入ツール • 手動でのテスト • 自動でのテスト
  • 13. Copyright © 2014 Sansan, Inc. All rights reserved. 12 不具合を少なくするために 〜 導入ツール 〜
  • 14. Copyright © 2014 Sansan, Inc. All rights reserved. > 導入ツール 13 • Lint • Android Studio Inspect Code • Support Annotations • Crashlytics • Infer(Facebook) • QARK(LinkedIn)
  • 15. Copyright © 2014 Sansan, Inc. All rights reserved. > Lint 14 • http://developer.android.com/intl/ja/tools/help/li nt.html • Android SDK tools に含まれている静的コード解析 ツール • ./gradlew lint で実行 • 指摘内容 • UnuserdResources(未使用リソース) • UselessParent(View の不要なネスト) • HardcodedText(国際化非対応) など…
  • 16. Copyright © 2014 Sansan, Inc. All rights reserved. > Lint 15 未使用文言 Notification icon の visual style
  • 17. Copyright © 2014 Sansan, Inc. All rights reserved. > Android Studio Inspect Code 16 • Android Studio から実行できる静的コード解析 • Analyze > Inspect Code で実行 • 指摘内容 • Deprecated API use (非推奨 API の利用) • Field can be local (変数のスコープの指摘) • Javadoc issues (Javadoc コメントと実体の乖離) • Declaration can have final modifier(final にできる) • Spelling (スペルミス) • Actual method parameter is the same constant (同じ値しか渡ってこない) など…
  • 18. Copyright © 2014 Sansan, Inc. All rights reserved. > Android Studio Inspect Code 17 Android Studio 上でレポートを確認できる 自動補正もサポート!
  • 19. Copyright © 2014 Sansan, Inc. All rights reserved. > Support Annotations 18 • http://tools.android.com/tech-docs/support- annotations • アノテーションを使って、パラメータの nonnull / nullable や値範囲を宣言できる • Android Studio 上で警告してくれる
  • 20. Copyright © 2014 Sansan, Inc. All rights reserved. > Crashlytics 19 • https://try.crashlytics.com/ • クラッシュレポート収集&分析ツール • ダッシュボードで、クラッシュの詳細を見ることがで きる • 時刻、端末情報、アプリバージョン、発生箇所、頻度… • ProGuard をかけた apk でも、元のクラス名・関数名・ 行数で確認できるのは嬉しい
  • 21. Copyright © 2014 Sansan, Inc. All rights reserved. > Crashlytics 20
  • 22. Copyright © 2014 Sansan, Inc. All rights reserved. > Infer 21 • http://fbinfer.com/ • Facebook 製、静的コード解析ツール • 指摘内容 • CONTEXT_LEAK • NULL_DEREFERENCE • RESOURCE_LEAK • 結果は CSV, Json で出力される • Android Studio Inspect Code での内容と重複するとこ ろもあるが、Inspect Code にない指摘もある
  • 23. Copyright © 2014 Sansan, Inc. All rights reserved. > QARK 22 • https://github.com/linkedin/qark • LinkedIn 製、セキュリティチェックツール • 指摘内容 • export されたコンポーネント • WebView の設定 • Intent のセキュリティ • 弱い暗号方式の利用 など… • 結果は html で出力される
  • 24. Copyright © 2014 Sansan, Inc. All rights reserved. 23 不具合を少なくするために 〜 手動でのテスト 〜
  • 25. Copyright © 2014 Sansan, Inc. All rights reserved. > 手動でのテストの観点 24 • アクティビティを保持しない • さまざまな通信環境 • iOS 版や Web 版との比較 • 社内β版の配布 • リグレッションテスト
  • 26. Copyright © 2014 Sansan, Inc. All rights reserved. > 手動でのテストの観点 25 • アクティビティを保持しない • さまざまな通信環境 • iOS 版や Web 版との比較 • 社内β版の配布 • リグレッションテスト
  • 27. Copyright © 2014 Sansan, Inc. All rights reserved. > アクティビティを保持しない 26 • 開発者向けオプションで設定 • この時に、 • 正しく画面遷移(行き来)できるか • 最小化 → 復帰後の状態は適切か • 各種変数の値 • 表示中のダイアログやメッセージが、 復帰後も正しく動作するか? • これにより以下の確認になる • on(Save/Restore)InstanceState 対応 • 適切な Fragment の扱い方
  • 28. Copyright © 2014 Sansan, Inc. All rights reserved. > 【コラム】適切な Fragment の扱い方 27 • デフォルトコンストラクタを使っているか? • 外から渡したい値は、Bundle で渡しているか?
  • 29. Copyright © 2014 Sansan, Inc. All rights reserved. > 【コラム】適切な Fragment の扱い方 28 • setListener などしていないか? • フラグメント再構築時に、setter は呼ばれない! • ※onCreate は呼ばれます • DialogFragment に setListener してると、再構築時に Listener が set されず、意図した Listener の呼び出し が行われない • 詳しくは「Master of Fragment」を! http://tatsu-zine.com/books/master-of-fragments
  • 30. Copyright © 2014 Sansan, Inc. All rights reserved. > 手動でのテストの観点 29 • アクティビティを保持しない • さまざまな通信環境 • iOS 版や Web 版との比較 • 社内β版の配布 • リグレッションテスト
  • 31. Copyright © 2014 Sansan, Inc. All rights reserved. > さまざまな通信環境 30 • 安定した通信環境 (当然なので解説省略) • 機内モードの時 • 通信が遅いとき • Wi-Fi に繋がっているが、インターネットに繋がって いない場合
  • 32. Copyright © 2014 Sansan, Inc. All rights reserved. > 機内モードの時 31 • 端末で予め判定できる (ConnectivityManager) • 事前のエラー表示ができているか? (そもそも画面遷移させないなど) • 通信処理を行った場合、エラーハンドリングできてい るか? • キャッシュで表示できるモノだけでも表示する? • 送信処理を受け付け、オンラインになったら送信? (Facebook などはオフライン投稿機能がある)
  • 33. Copyright © 2014 Sansan, Inc. All rights reserved. > 通信が遅いとき 32 • 再現方法は色々 • 通信ライブラリと interceptor で可能かも? • 低速 SIM • Android エミュレータの設定 など… • UX は適切か? (ぐるぐる表示、進捗表示) • 最小化や画面遷移後のコールバック処理は大丈夫か? • Fragment#isAdded() で Activity に attach されているかチェック • ViewPager 内の破棄された Fragment へのコールバックは忘れがち • 可能であれば、前画面用の通信はキャンセル or 優先度を下げたい
  • 34. Copyright © 2014 Sansan, Inc. All rights reserved. > Wi-Fi にはつながってるが、ネットにつながってない 33 • 基本的には、前項の項目と同じ • ※端末側での判定は難しい • ただ、サーバからのレスポンスが帰ってこないので、 タイムアウトのエラーハンドリングが必要 • タイムアウトまで通信スレッドを占有するので、通信 キューが山積みになったり、いくつものスレッドを走 らせすぎる懸念
  • 35. Copyright © 2014 Sansan, Inc. All rights reserved. > 手動でのテストの観点 34 • アクティビティを保持しない • さまざまな通信環境 • iOS 版や Web 版との比較 • 社内β版の配布 • リグレッションテスト
  • 36. Copyright © 2014 Sansan, Inc. All rights reserved. > iOS 版や Web 版との比較 35 • 同じ操作をしたり、同じデータを表示させて見比べる • よくある差違 • 数値や日付の表示形式 • データのソート順 • 長い文字列の対応(末尾…、折り返し、スクロール)
  • 37. Copyright © 2014 Sansan, Inc. All rights reserved. > iOS 版や Web 版との比較 36 桁区切りの有無 数値の違い
  • 38. Copyright © 2014 Sansan, Inc. All rights reserved. > 手動でのテストの観点 37 • アクティビティを保持しない • さまざまな通信環境 • iOS 版や Web 版との比較 • 社内β版の配布 • リグレッションテスト
  • 39. Copyright © 2014 Sansan, Inc. All rights reserved. > 社内β版の配布 38 • 社内ヘビーユーザにリリース前に配布 • 実データならではの問題が出る可能性がある • 開発中に使っていない端末でも問題なく動作するか? • なかなか気づかない操作の癖 • バックキー使い? ナビゲーションで戻る? • キーボードの虫眼鏡ボタンで検索? • 2点タップどっちから離すか • A+B:A押下 → B押下 → どっちから離す?? • ↑前々職でどっちから離すかで再現が別れる問題があった
  • 40. Copyright © 2014 Sansan, Inc. All rights reserved. > 手動でのテストの観点 39 • アクティビティを保持しない • さまざまな通信環境 • iOS 版や Web 版との比較 • 社内β版の配布 • リグレッションテスト
  • 41. Copyright © 2014 Sansan, Inc. All rights reserved. > リグレッションテスト 40 • リリース直前に必ず実施 • 主要機能のデグレードがないことを確認 • やる) • 主要機能のワンパス • ログイン、名刺登録、編集、削除、ログアウト など • 過去の重大な不具合が再現しないこと • やらない) • 100文字制限のところに101文字入れたときのエラー • アプリにサーバリリース前にも行っている
  • 42. Copyright © 2014 Sansan, Inc. All rights reserved. 41 不具合を少なくするために 〜 自動テスト 〜
  • 43. Copyright © 2014 Sansan, Inc. All rights reserved. > Robotium を使った自動テスト 42 • ユニットテストではカバーしきれない UI 操作を伴うテストを記述 • Robotium はアプリケーション内部オブジェクトを参 照できるため、柔軟なテストが記述できる • DB のデータを参照して、ListView に表示されているか • SharedPreference の値が意図通りかの確認 • ただし、デバッグ版でしか動作しない (リリースバイナリでのテストは Appium を使う)
  • 44. Copyright © 2014 Sansan, Inc. All rights reserved. > テストコードの例 43 - ログイン処理 - メールアドレス入力欄を取得 - パスワード入力欄を取得 - メールアドレスを入力 - パスワードを入力 - ログインボタンを押す テストライブラリをラッ プして可読性確保!
  • 45. Copyright © 2014 Sansan, Inc. All rights reserved. > デモ動画 44 • 2014/11 時点の動画です • http://youtu.be/scY_RPgfxeY • 4分ぐらいありますが、発表時間の都合上ちょっとだ け…
  • 46. Copyright © 2014 Sansan, Inc. All rights reserved. > 自動テストの適用 45 • 前述のリグレッションテストには適用済み • 主要画面の詳細なテストも記述中 • エラーメッセージ • サインアップ時に送られるメールをパースして、サイン アップ処理を行う(MailCatcher API を利用) • Jacoco によるカバレッジ計測 • 2016/02時点で 59% をカバー • ※テストでコードが実行されているからといって、安心 ではない。
  • 47. Copyright © 2014 Sansan, Inc. All rights reserved. > 自動テスト導入してみて 46 • デグレードがないことを容易に確認できる • メンテはそこまで大変じゃない • テストでしっかりカバーしていれば、大規模なリファ クタリングも安心! • これから、通信ライブラリ・カメラ API・デザインパーツの差し替 え・DB の置き換え?などが控えている • モックを使わないので、サーバの動作確認にもなる
  • 48. Copyright © 2014 Sansan, Inc. All rights reserved. > 自動テストの詳細は 47 • DroidKaigi 2016 で! https://droidkaigi.github.io/2016/
  • 49. Copyright © 2014 Sansan, Inc. All rights reserved. > 自動テストの詳細は 48 と、思ったのですが、 CFP 通らなかったので…
  • 50. Copyright © 2014 Sansan, Inc. All rights reserved. > 自動テストの詳細は 49 • 2/20 DroidKaigi 2016 Reject Conf で! http://connpass.com/event/24264/
  • 51. Copyright © 2014 Sansan, Inc. All rights reserved. > 自動テストの詳細は 50 • 3/23 Android Testing Bootcamp #1 でも!? http://connpass.com/event/26911/ ※抽選がまだ
  • 52. Copyright © 2014 Sansan, Inc. All rights reserved. > 調査中の Device Farm の内容ですが… 51 • 3/12 JAWS DAYS 2016 でも! http://jawsdays2016.jaws-ug.jp/speaker/409 http://jawsdays2016.jaws-ug.jp/
  • 53. Copyright © 2014 Sansan, Inc. All rights reserved. 52 効果
  • 54. Copyright © 2014 Sansan, Inc. All rights reserved. > 効果 53 • iOS / Android とも、前任者のコードベースの事情を 十分にカバーする品質担保ができている。 • 開発部内でサービスインシデントは 数十件/年 あるが、アプリ においては 0件/年 と部内トップレベル • 新しい OS や端末が出た場合のテストも容易 • テスト工数の削減 • コードレビュー時にこれらの観点でも見るので、チー ムメンバーの品質意識・対応の底上げになる
  • 55. Copyright © 2014 Sansan, Inc. All rights reserved. 54 まとめ
  • 56. Copyright © 2014 Sansan, Inc. All rights reserved. > まとめ 55 • 使えるツールは使おう! • 色んな環境でテストしよう! • テストの自動化に取り組もう!
  • 57. Copyright © 2014 Sansan, Inc. All rights reserved. 56 質疑応答
  • 58. Copyright © 2014 Sansan, Inc. All rights reserved. > こちらもどうぞ 57 • Android アプリ品質ガイドライン【 Google Developers Japan 】 • http://googledevjp.blogspot.jp/2013/01/core.html • Robotium を使った UI テストとレイアウト確認の効率化 • http://www.slideshare.net/kenichitatsuhama/robotium-ui • Appium を使って iOS / Android の UI テストを共通化 • http://www.slideshare.net/kenichitatsuhama/appium-ios-android-ui • UWSC を使った自動テスト(for Windows) • http://qiita.com/tatsuhama/items/d6595050a13c5ed2de48 • Robotium で書いた Android アプリのテストを AWS Device Farm で実行する • http://qiita.com/tatsuhama/items/27d5e3ef1056e740b085