minneにおける
テスト〜リリース〜
リリース後
にやっている事の紹介
SmartDrive
Masataka Kono
2017-3-9
DroidKaigi 2017
自己紹介
● PHP/Android
● minne(〜2016年12月)
● 株式会社スマートドライブ
● Twitter @mapyo
● GitHub @mapyo
minneとは?
minneとは
minneでのAndroid開発
● 2013年11月リリース
● Androidチーム 3人
● 3人で1つのアプリを開発
● 2週間に1回定期的にリリー
ス
今日伝えたい事
● 複数人数のアプリ開発事例
● フローを整えましょう
● いろいろと議論したい
目次
● 開発開始からリリースまで
● テスト・CI
● リリース前の検証
● リリース
● リリース後のフォロー
開発開始からリ
リースまで
開発からリリースまで
1. スプリント計画
2. 開発(Unit test, UI test)
3. 検証シート作成
4. 検証
5. 段階的リリース
6. リリース後のフォロー
開発からリリースまで
1. スプリント計画
2. 開発(Unit test, UI test)
3. 検証シート作成
4. 検証
5. 段階的リリース
6. リリース後のフォロー
開発からリリースまで
1. スプリント計画
2. 開発(Unit test, UI test)
3. 検証シート作成
4. 検証
5. 段階的リリース
6. リリース後のフォロー
2週間
テスト・CI
1. テストの種類と説明
2. CIで使用するツールと
サービス
3. CIの流れ
minneでのテスト
● Unit test
● UI test
● 検証時の手動テスト
minneでのテスト
● Unit test
● UI test
● 検証時の手動テスト
その前にAndroidのテストタ
イプの説明をします
Androidのテストタイプ
● Local unit test
(test)
● Instrumented test
(androidTest)
https://developer.android.com/studio/test/index.html
Local unit test
● JVM上で動くテスト
● Instrumented testに比べて
早い
● Androidフレームワークに依
存するテストはモックが必要
Instrumented test
● 実機・エミュレータ上で動くテ
スト
● Local unit testに比べて遅い
● Androidフレームワークに依
存しててもOK
minneでのテスト
● Unit test
● UI test
Unit test
● Local unit testで実行
● Robolectricでモック
● UIのテストはしない
※モックが難しい場合は
Instrumented test
Unit testでやってた事
● 単純なモデルのテスト
● MVPのPのテスト
● APIをモックしたテスト
● ディープリンクのテスト
● SharedPreferencesまわり
● Instrumented testで実行
● Espressoで記述
UI test
● 実行タイミングによって謎の
落ち方
● 実行時間が長い
● Espressoの書き方
MVPで書いてPのテストをUnit
testでやっていく!!
UI test 辛い。。
テスト・CI
1. テストの種類と説明
2. CIで使用するツールと
サービス
3. CIの流れ
● Drone
● AWS Device Farm
CIで使用するツール・サービス
● Travis CI, CircleCI, Wercker
と並ぶCIツール
● Docker
CIまわりの機能とUnit test
Drone
open source edition
Drone
詳しくはこちら。
https://speakerdeck.com/gs3/pepabowozhi-eruda-tong-ciji-pan-toren
AWS Device Farm
● クラウド上で実機を使ったテ
スト
● apkをアップし手動テスト
UI testを実行
テスト・CI
1. テストの種類と説明
2. CIで使用するツールと
サービス
3. CIの流れ
CIの流れ 〜Unit test〜
PUSH
CIの流れ 〜Unit test〜
PUSH
Unit test!
CIの流れ 〜Unit test〜
PUSH
Unit test!
CIの流れ 〜UI test〜
PUSH
Unit testを実行後に動
く
CIの流れ 〜UI test〜
PUSH
Device
Farm
web hookの仕組みが
ない...
CIの流れ 〜UI test〜
PUSH
Device
Farm
監視
サーバ
polling
テスト実行タイミング
● Unit test
→PUSH毎に実行
● Ui test
→develop, master, release
ブランチ
リリース前の
検証
1. リリース担当を事前に決める
2. リリース用issue立てる
3. 検証シート作成
4. 検証
5. 検証で出たバグを修正する
流れ
1. リリース担当を事前に決める
2. リリース用issue立てる
3. 検証シート作成
4. 検証
5. 検証で出たバグを修正する
流れ
● 検証シートへのリンク
● 検証開始〜リリースまで流れ
● 今回のリリースのメモ
随時修正・追記して
次回のリリース時にも使う
リリース用issue
1. リリース担当を事前に決める
2. リリース用issue立てる
3. 検証シート作成
4. 検証
5. 検証で出たバグを修正する
流れ
● どの画面?
● ログイン/ログアウト?
● どういう操作?
● 結果どうなればいい?
他の人が検証するために必要な
情報を書く
検証シートとは?
1. リリース担当を事前に決める
2. リリース用issue立てる
3. 検証シート作成
4. 検証
5. 検証で出たバグを修正する
流れ
検証 〜検証する人〜
● Androidエンジニア1〜2人
● ディレクター 1人
● 合計3人くらい
iOSエンジニアも検証しよう!
という流れも。
検証する!
● 検証シートに沿って粛々とやる
● バグを見つけたら再現手順や
スクショなどを貼る
● 機能開発した人に伝えた直して
もらう
● 再度検証
リリース
段階的な公開
● 20%リリース
● 2営業日後50%リリース
● 2営業日後100%リリース
休日の前日はなるべくリリースし
ない
リリース後の
フォロー
リリース後のフォロー
● クラッシュの監視
● アプリレビューの監視と対応
● ふりかえり
クラッシュの監視
● Crashlytics
● Slackと連携
● 毎朝Slackでリマインダ
アプリレビューの監視
● Slackに1日1回流す
● google-play-review-watcher
アプリレビューの監視と対応
https://github.com/Konboi/go-google-play-review-watcher
レビューの様子
レビューの対応について
● 当初はエンジニアが選定して
CSさんに依頼
● 現在はCSさんが直接返信
ふりかえり
● ふりかえりissueを立てる
● Androidチームの3人
● リリース後(20%)に実施
● 1時間程度
● Keep・Good/Problem/Try
まとめ
まとめ
● テスト・検証・リリース・リリース
後について話した
● チームによってそれぞれ違う
● ふりかえり重要
● 少しでも皆さんの参考になれば
幸いです
ありがとうござ
いました!!
ふろく
CIの流れ 〜UI test〜
PUSH
Device
Farm
監視
サーバ
polling
AWS Device Farm Gradle Plugin
https://github.com/awslabs/aws-device-far
m-gradle-plugin

minneにおけるテスト〜リリース〜リリース後にやっている事の紹介