Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
2年半ぶりのプロダクト開発であらためて感じた自動テストの大切さ / realized the ...
Search
tkmnzm
April 20, 2021
Programming
1
750
2年半ぶりのプロダクト開発であらためて感じた自動テストの大切さ / realized the importance of automatic testing with product development for the first time in two and a half years
Android Test Online #1の発表資料です
tkmnzm
April 20, 2021
Tweet
Share
More Decks by tkmnzm
See All by tkmnzm
AndroidアプリのUIバリエーションをあの手この手で確認する / Check UI variations of Android apps by various means
tkmnzm
1
730
Androidアプリの良いユニットテストを考える / Thinking about good unit tests for Android apps
tkmnzm
5
7.5k
Google I:O 2023 Androidの自動テストアップデートまとめ / Google I:O 2023 Android Testing Update Recap
tkmnzm
0
570
コルーチンのエラーをテストするためのTips / Tips for testing Kotlin Coroutine errors
tkmnzm
0
890
Androidのモダンな技術選択にあわせて自動テストも アップデートしよう / Update your automated tests to match Android's modern technology choices
tkmnzm
3
2.1k
SWET dev-vitalチームによるプロジェクトの健康状態可視化の取り組み / SWET dev-vital team's efforts to visualize the health of the project
tkmnzm
1
1.2k
モバイルアプリテスト入門 / Getting Started with Mobile App Testing
tkmnzm
1
470
25分で作るAndroid Lint / Android Lint made in 25 minutes
tkmnzm
0
840
Android スクリーンショットテスト 3つのプロダクトに導入する中で倒してきた課題 / Android Screenshot Test Problems solved by introducing into 3 products
tkmnzm
2
1.2k
Other Decks in Programming
See All in Programming
GCCのプラグインを作る / I Made a GCC Plugin
shouth
1
150
go.mod、DockerfileやCI設定に分散しがちなGoのバージョンをまとめて管理する / Go Connect #3
arthur1
10
2.4k
役立つログに取り組もう
irof
27
8.7k
Generative AI Use Cases JP (略称:GenU)奮闘記
hideg
0
160
外部システム連携先が10を超えるシステムでのアーキテクチャ設計・実装事例
kiwasaki
1
230
色々なIaCツールを実際に触って比較してみる
iriikeita
0
270
Server Driven Compose With Firebase
skydoves
0
400
ECSのサービス間通信 4つの方法を比較する 〜Canary,Blue/Greenも添えて〜
tkikuc
11
2.3k
Synchronizationを支える技術
s_shimotori
1
150
PLoP 2024: The evolution of the microservice architecture pattern language
cer
PRO
0
1.7k
qmuntal/stateless のススメ
sgash708
0
120
LLM生成文章の精度評価自動化とプロンプトチューニングの効率化について
layerx
PRO
2
140
Featured
See All Featured
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Intergalactic Javascript Robots from Outer Space
tanoku
268
27k
Art, The Web, and Tiny UX
lynnandtonic
296
20k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
228
52k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
664
120k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
37
1.8k
Reflections from 52 weeks, 52 projects
jeffersonlam
346
20k
BBQ
matthewcrist
85
9.3k
Build The Right Thing And Hit Your Dates
maggiecrowley
32
2.4k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
3
370
Building Applications with DynamoDB
mza
90
6.1k
VelocityConf: Rendering Performance Case Studies
addyosmani
325
24k
Transcript
2年半ぶりのプロダクト開発で あらためて感じた 自動テストの大切さ Nozomi Takuma Android Test Online#1
自己紹介 • Nozomi Takuma • DeNA SWETグループ ◦ 兼務: Pococha事業部システム部
• Androidとテストが好き
自己紹介 • Nozomi Takuma • DeNA SWETグループ ◦ 兼務: Pococha事業部システム部
• Androidとテストが好き 自動テスト導入サポート等(50%)
自己紹介 • Nozomi Takuma • DeNA SWETグループ ◦ 兼務: Pococha事業部システム部
• Androidとテストが好き プロダクトの開発(50%)
今日話したいこと
今日話したいこと • 2年半ぶりにプロダクト開発をしたら、 自動テストに助けられる場面がありました • 改めて自動テストの大切さを実感すること ができたので、その体験を共有したいと思 います
• 2年半ぶりにプロダクト開発をしたら、 自動テストに助けられる場面がありました • 改めて自動テストの大切さを実感すること ができたので、その体験を共有したいと思 います 今日話したいこと まずはこの期間の話をします 主にSWETで事業部への自動テスト導入を
行っていました
プロダクト開発から離れていた2年半
プロダクト開発から離れていた2年半 2018/3〜 SWETにjoin. 2019/2〜 自動テスト導入サポートの 取り組みを開始 2020/7〜 Pococha事業部システム部 兼務開始 メトリクス収集ツールの開発
2020/12〜 Pocochaのプロダクト開発
プロダクト開発から離れていた2年半 2018/3〜 SWETにjoin. 2019/2〜 自動テスト導入サポートの 取り組みを開始 2020/7〜 Pococha事業部システム部 兼務開始 メトリクス収集ツールの開発
2020/13〜 Pocochaのプロダクト開発
自動テスト導入サポートの取り組み • 自動テストのないプロダクトに自動テスト を導入する • 自動テストを導入することで、不具合の 早期発見や開発効率の向上を目指す
自動テスト導入サポートの取り組み • 自動テストのないプロダクトに自動テスト を導入する • 自動テストを導入することで、不具合の 早期発見や開発効率の向上を目指す
Androidプロダクトへの取り組み • 開発者テストの整備をスコープ • ユニットテストと インテグレーションテストの導入 ◦ UIのテストもAPIとの連携はスタブ化している • E2Eテストには手を出していない
自動テスト導入サポートの取り組み • 自動テストのないプロダクトに自動テスト を導入する • 自動テストを導入することで、不具合の 早期発見や開発効率の向上を目指す
自動テストによる不具合の早期発見 • 開発段階で問題を発見できるように • とはいっても、自動テスト導入がすぐに QAフェーズであがってくる不具合の減少に つながるとは限らない
プロダクトで発生する様々な不具合 • 実際にAPIや外部サービスと結合しないと 発見が難しい • 問題を再現するのにある程度UI操作が必要 ◦ 自動テストやっても費用対効果が見合わない • 仕様の認識ずれ
自分の心境 • 現在スコープとしているテストでは発見が 難しい不具合も多い • 自動テストの導入が開発チームの利益に きちんと繋がるか不安を感じていた
プロダクト開発から離れていた2年半 2018/3〜 SWETにjoin. 2019/2〜 自動テスト導入サポートの 取り組みを開始 2020/7〜 Pococha事業部システム部 兼務開始 メトリクス収集ツールの開発
2020/12〜 Pocochaのプロダクト開発
Pocochaでのプロダクト開発
改修を担当した機能 • アイテム機能 ◦ 視聴者はコインを消費することでライブ中に アイテムを送信できる ◦ アイテムを送信することで画面にエフェクト を表示しライブを視覚的に盛り上げる
改修内容 アイテム素材はアプリ起動時に一括でDLされる ライブの中では基本的にはDLが完了している状態 旧仕様 新仕様 ライブ中にアイテムが利用されたタイミングで アイテム素材をDLする
自分がやったこと 1. 既存実装のリファクタリング 2. アイテム機能の不具合修正 3. 新仕様への改修
自分がやったこと 1. 既存実装のリファクタリング 2. アイテム機能の不具合修正 3. 新仕様への改修 3つのタイミング全てで 自動テストに助けられた
自分がやったこと 1. 既存実装のリファクタリング 2. アイテム機能の不具合修正 3. 新仕様への改修
既存実装のリファクタリング • アイテム利用の実装がほとんどActivityに 書かれていた ◦ 自動テストはない • 新仕様に改修する前にユニットテストを書 けるようにするためリファクタリング
既存実装のリファクタリング Activityから処理の 切り出し ユニットテスト整備 繰り返し
既存実装のリファクタリング 既存実装の振る舞いが細かく わかっていなくてもある程度できる Activityから処理の 切り出し ユニットテスト整備
既存実装のリファクタリング テストパターンを作成するために 既存実装の振る舞いを把握する必要がある Activityから処理の 切り出し ユニットテスト整備
ユニットテストで振る舞いを理解する • 内部処理がシンプルとは言い難いかつ コメントやドキュメントもほとんどなく、 自分の理解があっているか不安 • 想定する挙動をテストケースにして、認識 があっているか検証する
ユニットテストで振る舞いを理解する • 内部処理がシンプルとは言い難いかつ コメントやドキュメントもほとんどなく、 自分の理解があっているか不安 • 想定する挙動をテストケースにして、認識 があっているか検証する 仕様化テスト
自動テストに何を助けられた? • 既存実装の振る舞いを理解するのを助けて もらった ◦ ユニットテストを動かしてみて、ああ〜そう いうことなのか!となることもしばしば
自分がやったこと 1. 既存実装のリファクタリング 2. アイテム機能の不具合修正 3. 新仕様への改修
アイテム機能の不具合 • アイテムが押せなくなるというお問い合わ せが複数件あった • 一度発生するといったんライブを出ないと 解消されない • 通信エラー起因で発生している可能性
既存実装の不具合調査でやったこと • 実装を読んでもパッと原因はわからない • リファクタリングでユニットテストを実装 できるようになっていたので、各APIリク エストでエラーが発生するパターンを追加
既存実装の不具合調査でやったこと • 実装を読んでもパッと原因はわからない • リファクタリングでユニットテストを実装 できるようになっていたので、各APIリク エストでエラーが発生するパターンを追加 結果がおかしいやつがある! 原因を特定して修正
既存実装の不具合調査でやったこと • 実装を読んでもパッと原因はわからない • リファクタリングでユニットテストを実装 できるようになっていたので、各APIリク エストでエラーが発生するパターンを追加 不具合の再現テスト
自動テストに何を助けられた? • 不具合の原因特定を助けてもらった ◦ あやしいケースのテストを書いてOK/NGを確認 • もう1つ別の要因でアイテムが利用できな くなる不具合の問い合わせもあったが、 そちらもユニットテストで再現 →
修正
自分がやったこと 1. 既存実装のリファクタリング 2. アイテム機能の不具合修正 3. 新仕様への改修
改修内容 アイテム素材はアプリ起動時に一括でDLされる ライブの中では基本的にはDLが完了している状態 旧仕様 新仕様 ライブ中にアイテムが利用されたタイミングで アイテム素材をDLする
機能改修時に実装した自動テスト • 動作するか不安を感じる部分 • 手動で動作確認をするのが面倒な部分
動作するか不安を感じる部分 • 処理がそこそこ複雑なところ • RxJavaであれこれやっているところ • 自分は初歩的なミスをしやすいので、 そこまで複雑でなくても条件分岐が複数あ るところ
手動で動作確認をするのが面倒な部分 • 様々なデータパターンで確認したいところ • 連続する処理の中でピンポイントに動作を みたいところ • 時間経過によって処理が変わるところ • 状況を作り出すのが面倒なところ
実装したテストを具体的に • 例:アイテムのダウンロード処理 ◦ ファイルの解凍と保存 ◦ 素材がDL済みの場合のスキップ処理 ◦ 素材が変更された場合のファイル更新処理 ◦
ダウンロードが並列で走るときの排他制御 ◦ 一定期間使用されなかった素材の削除処理
自動テストに何を助けられた? • 動作するか不安な気持ちを払拭できた • 手動で動作確認するコストを減らせた • 機能改修の中で再度修正を入れることが あっても安心感を持って修正できた
自動テストに何を助けられた? • 動作するか不安な気持ちを払拭できた • 手動で動作確認するコストを減らせた • 機能改修の中で再度修正を入れることが あっても安心感を持って修正できた 精神的な治安を維持できた
自動テストに何を助けられた? • 動作するか不安な気持ちを払拭できた • 手動で動作確認するコストを減らせた • 機能改修の中で再度修正を入れることが あっても安心感を持って修正できた 良い開発体験を得られた 自分にとっては一番大きなモチベーション
精神的な治安を維持できた
自動テストに助けられたこと まとめ 1. 既存実装のリファクタリング ⇢ 振る舞いの理解を助けてもらった 2. アイテム機能の不具合修正 ⇢ 不具合の原因特定を助けてもらった
3. 新仕様への改修 ⇢ 精神的な治安を維持しながら開発ができた
いくつかの観点で自問自答
Q. 自動テストで発見できな かった不具合はあった?
A. あった
自動テストで見つけられなかった不具合 • 認識ずれ • 観点の見落とし • スレッドの設定ミス • リファクタリングがやりきれなくて、自動 テスト書けるはずなのに書けていない箇所
自動テストで見つけられなかった不具合 • 認識ずれ • 観点の見落とし • スレッドの設定ミス • リファクタリングがやりきれなくて、自動 テスト書けるはずなのに書けていない箇所
もっと自動テストが活用できた部分
Q. 開発していて不安に感じ ることが少ない場合は?
A. そういうときもある チームですり合わせは したほうがよさそう
開発していて不安に感じない問題 • 不安に感じるレベルは人それぞれ ◦ ズレを感じる場面はしばしばある • PRレビューでも不安を感じたら提案して 不安感のすり合わせをするのがよさそう ◦ 動作する自動テストがあるとレビュアーも安
心できる
Q. QAでも不安は払拭できる のでは?
A. できる ただ、自分が不安なパス を通るとは限らない
QAと自動テスト • E2Eかつ手動の検証だと特定のケースを 発生させるのが難しい場合がある • 内部の処理がどうなっているかをよく 知っている人による動作確認も重要
Q. 自動テストを実装するの は時間がかかる?
A. かかった
自動テストの実装に時間がかかる問題 • テストコード上での設定ミスに気が付かず 時間を浪費してしまい断念しそうになった • 自動テストをあきらめた場合の正常系〜 異常系の動作確認のコストを鑑みてテスト コードのデバッグを続けた
自動テストの実装に時間がかかる問題 • テストコード上での設定ミスに気が付かず 時間を浪費してしまい断念しそうになった • 自動テストをあきらめた場合の正常系〜 異常系の動作確認のコストを鑑みてテスト コードのデバッグを続けた 一時的に時間がかかるけど、 短期的に見てもその分のコストがペイすると踏んだ
まとめ
まとめ • 自動テストで見つけられない不具合はある が、それでも自動テストはいいものだった • 自動テストはいいものと感じられたのは、 マイナスの気持ちを自動テストを通じて 払拭できたのが大きい
宣伝
Androidエンジニアの採用始まりました • PocochaではAndroidエンジニアを募集中 ◦ ライブ配信サービスや技術に興味あるかた よかったら是非に ◦ https://career.dena.jp/job.phtml?job_code=1573
ご清聴ありがとうございました!