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
Androidテスト基礎講義
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
tonionagauzzi
April 29, 2025
Programming
390
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Androidテスト基礎講義
tonionagauzzi
April 29, 2025
More Decks by tonionagauzzi
See All by tonionagauzzi
Androidエンジニアが大規模プロダクトのWebフロントエンドとバックエンドに越境して感じたギャップと習得したマインド
tonionagauzzi
0
86
Kotlin2.3明示的バッキングフィールド
tonionagauzzi
1
370
【Android】テキスト選択色の問題修正で心がけたこと
tonionagauzzi
0
260
Android 15以上でPDFのテキスト検索を爆速開発!
tonionagauzzi
0
380
Googleの新しいコーディングAIエージェントJulesを使ってみた
tonionagauzzi
0
830
Compose におけるパスワード自動入力とパスワード保存
tonionagauzzi
0
520
Android Composeでの自動入力(作成:GPT-4o)
tonionagauzzi
0
160
Jetpack Composeで自動入力(Autofill)を実装しよう(作成:claude-3.7-sonnet)
tonionagauzzi
0
170
Jetpack Composeにおける自動入力の実装と注意点(作成者:Gemini 2.5 Pro Exp 03-25)
tonionagauzzi
0
180
Other Decks in Programming
See All in Programming
Laravel Boostに学ぶ、AIにPHPを書かせる技術 〜OSSの実装から蒸留するエージェント制御の王道〜
kentaroutakeda
3
640
Go言語とトイモデルで学ぶTransformerの気持ち / fukuokago23-transformer
monochromegane
0
160
freee が目指す データ マネジメント戦略 AI-Ready 時代を支える 攻めのガバナンスとは
freee
PRO
0
150
ソフトウェア設計に溶けるインフラ ― AWS CDK のインフラ認識論
konokenj
3
740
Detecting Compromised CI with eBPF and Cilium Tetragon
lizrice
0
110
テーブルをDELETEした
yuzneri
0
130
PHP に部分適用が来るぞ!……ところで何それ?おいしいの? #phpcon / phpcon-2026
shogogg
0
510
為什麼你並不需要ViewModel / No, you don't need a ViewModel
lovee
1
470
音楽のための関数型プログラミング言語mimiumにおける多段階計算の活用
tomoyanonymous
1
380
PHP初心者セッション2026 〜生成AIでは見えない裏側を知る:今だからLAMPを通して仕組みを学ぶ〜
kashioka
0
800
改善しないと、タスクが回らない。 “てんこ盛りポジション” を引き継いだ情シスの、入社3ヶ月の業務改善録
krm963
0
250
使いながら育てる Claude Code — 開発フローの1コマンド化 × 繰り返し指摘の自動仕組み化
shiki_kakaku
0
1.6k
Featured
See All Featured
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
280
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
How Software Deployment tools have changed in the past 20 years
geshan
1
34k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.9k
Designing for humans not robots
tammielis
254
26k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
72
41k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
620
Side Projects
sachag
455
43k
Marketing to machines
jonoalderson
1
5.6k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
240
Transcript
Androidテスト基礎講義 1
登壇者情報 トニオ(@tonionagauzzi) Androidエンジニア 趣味はブログ 2
目次 1. テストとは何か 1-1. ソフトウェアテストの定義 1-2. テストの目的と利点 2. なぜテストが必要か 2-1.
失敗事例から学ぶ 2-2. プロジェクトとプロダクトのテストの違い 3. ワークショップ「もし、テストが不十分だったら…」 3-1. テストが無いときの解答例(失敗例) 3-2. テストがあるときの解答例(成功例) 3
目次 4. テストの種類 4-1. テストのスコープ 4-2. テストのサイズ 4-3. テストの分布 4-4.
テストダブル 5. Androidでテストを作るには 5-1. Androidテストの実行場所 5-2. Androidテストのツール 4
1. テストとは何か 5
1-1. ソフトウェアテストの定義 ソフトウェアテストとは、ソフトウェアが期待通りに動作するかを検証するプロ セスである システムや機能が仕様や要件を満たしているかを確認する バグや欠陥を発見し、品質を保証するための活動 テストプロセスは、特定の活動における開発成果物がその活動の要件を満たして いるかどうか、そしてシステムおよび/またはソフトウェアが意図された用途と ユーザーニーズを満たしているかどうかを判定します。 IEEE
829-2008 より 6
1-2. テストの目的と利点 欠陥の発見:早期にバグを見つけ、修正コストを削減 品質の保証:ソフトウェアが要求仕様を満たしていることを確認 リスクの低減:本番環境での問題発生を防止 信頼性の向上:継続的なテストによる安定したソフトウェアの提供 開発者の信頼:変更を加える際の安心感を提供 ドキュメントとしての役割:期待される動作を示す生きた仕様書 7
2. なぜテストが必要か 8
2-1. 失敗事例から学ぶ 個人的な話 「テスト無くていいじゃん!動いてるし!!」 → 環境の違いで重大バグ発生。ユーザー企業へ謝りに行った。 「機種ごとに違うんだ。新機種が出るたびに"手動"で検証しよう!」 → 莫大な費用と時間を費やした。 9
Googleウェブサーバーの物語 Googleウェブサーバーの規模と複雑性の膨張による生産性の劇的な低下 リリースはバグを含むようになり本番で初めて見つかることも 10
2-2. プロジェクトのテストとプロダクトのテストの違い プロジェクト:明確な終わりがある、目標は成果物の納品 テストの主な目的は、納品を成功させること プロダクト:明確な終わりはない、目標はユーザー価値の最大化や持続すること テストの主な目的は、プロダクト継続におけるリスクを最小化すること 11
3. ワークショップ「もし、テストが不十分だったら…」 12
問1:晴れ、曇り、雨を取得できる"WeatherApp"を、雪に対応してください。 https://github.com/tonionagauzzi/WeatherApp 13
3-1. テストが無いときの解答例(失敗例) 解答例 「雪のステータスコードに対応、文言も追加した。ヨシ!!」 そして、雪が降った。 雪のマークが出なかった!! 14
3-2. テストがあるときの解答例(成功例) 解答例 「雪のステータスコードに対応、文言も追加した。ヨシ!!」 でも、テストが通っていない… 「修正しよう!」 15
テストが通るようになった! そして、雪が降った。 問題なく表示された! 16
4. テストの種類 17
4-1. テストのスコープ ユニットテスト メソッドやクラスなどが対象 インテグレーションテスト 2つ以上のユニット間の統合部分が対象 E2Eテスト、UIテスト ユーザーシナリオや画面全体が対象 図:Android アプリのテストの基礎
18
4-2. テストのサイズ 小規模 単一プロセス 中規模 単一マシン 大規模 制約なし 参考: 【t-wada】自動テストの「嘘」をなくし、望ましい比率に近づける方法
【Developer eXperience Day 2024 レポート】 19
4-3. テストの分布 図:Test Automation Strategy Syllabus - ISTQB 問2:どれが最もバランスの取れたテスト配分でしょうか? 横軸はテストの実行数。
20
ピラミッド型が良いといわれることが多いが、すべてに通じる正解はない ピラミッド型は、低コスト、高速、決定性が高い Googleなど多くの企業が採用する一般的な考え方 アイスクリームコーン型は、E2Eテストを多く実施できる テストのないレガシーシステムをリファクタリングする際に効果的 複雑なシステム間連携、マイクロサービスなどの分散システムではインテグレーシ ョンテストが増えることもある 最適なテスト分布は、プロジェクトの特性、チームの規模、技術スタック、リスク許 容度などによって異なる。 21
4-4. テストダブル フェイク、モック、スタブ、スパイ、ダミー、シャドウ 詳細:Android でテストダブルを使用する Android公式はフェイクを強く推奨 詳細:Android アーキテクチャに関する推奨事項 フェイクは本物の実装と同様に振る舞う フレームワークを必要としない
書くのに労力はかかるが、修正の影響を受けやすいので保守に強い 忠実性の担保が大事 モックはフレームワークで本物を模倣して振る舞う 少ないコードで書けるが、修正の影響を受けにくいので保守に弱い 22
5. Androidでテストを作るには 23
5-1. Androidテストの実行場所 開発マシン、Androidでないサーバー ローカルテストに向いている 小〜中規模テストに向いている 実行速度と決定性が高い 実機、エミュレーター インストルメンテーションテス ト、E2Eテストに向いている 中〜大規模テストに向いている
忠実性が高い 24
5-2. Androidテストのツール JUnit4:Javaベースの標準的なテストフレームワーク AndroidJUnitRunner:Androidデバイス上でJUnitテストを実行するランナー JUnit Rules:テストの開始/終了処理を共通化できる Robolectric:実機を使わずAndroidコンポーネントをテストできる Compose UIテスト:Jetpack Composeで構築されたUIをテストできる
Espresso:AndroidアプリのUIと操作をテストできる UI Automator:AndroidアプリのUIと操作をテストできる(他アプリも操作可能) Screenshot Testing:UIの変化の有無を自動で検出できる MockK:Kotlinのモッキングフレームワーク 25
さいごに 自動テストは、テストのタスク全てに適しているわけではない。 よく理解されている挙動を扱うために自動テストを用いると、人間のテスタ ーの高コストかつ定性的な労力を、人間のテスターが最大の価値を提供でき る製品部位に集中させることができる。 ( 『Googleのソフトウェアエンジニアリング』 、オライリージャパン、268- 269頁、2021年) 26
補足:参考リンク Androidでアプリをテストする Android Studioでテストする Androidのテスト戦略 【動画】開発生産性の観点から考える自動テスト 27
補足:テストを学べるおすすめ本5選 28