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
tonionagauzzi
April 29, 2025
Programming
370
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
Kotlin2.3明示的バッキングフィールド
tonionagauzzi
1
350
【Android】テキスト選択色の問題修正で心がけたこと
tonionagauzzi
0
250
Android 15以上でPDFのテキスト検索を爆速開発!
tonionagauzzi
0
370
Googleの新しいコーディングAIエージェントJulesを使ってみた
tonionagauzzi
0
750
Compose におけるパスワード自動入力とパスワード保存
tonionagauzzi
0
490
Android Composeでの自動入力(作成:GPT-4o)
tonionagauzzi
0
150
Jetpack Composeで自動入力(Autofill)を実装しよう(作成:claude-3.7-sonnet)
tonionagauzzi
0
150
Jetpack Composeにおける自動入力の実装と注意点(作成者:Gemini 2.5 Pro Exp 03-25)
tonionagauzzi
0
170
Jetpack Composeで自動入力を完全攻略(作成:o3)
tonionagauzzi
0
150
Other Decks in Programming
See All in Programming
PHPで使える日時の表現と、その知り方 #frontend_phpcon_do
o0h
PRO
0
230
依存関係から依存物へ―Dependencyという言葉の歴史をひも解く
j_lee
0
110
3Dシーンの圧縮
fadis
1
720
DynamoDBには集計系のクエリがないけどなんとかしたい
musan
1
130
AI時代のUIはどこへ行く?その2!
yusukebe
21
7k
Make SRE Operations Easier with Azure SRE Agent
kkamegawa
0
5.3k
並列実装の現場、2ヶ月間実務でAIを使い倒したAIもPCも私も限界が近い
ming_ayami
0
120
運用エージェントは "作る" から "育てる" へ - 記憶と自己進化の3層設計パターン / self-evolving-agents-three-layer-agent-design
gawa
12
3.6k
The ROI of Quarkus for Spring Boot Applications
hollycummins
0
110
New "Type" system on PicoRuby
pocke
1
820
Modding RubyKaigi for Myself
yui_knk
0
920
技術記事、 専門家としてのプログラマ、 言語化
mizchi
4
1.8k
Featured
See All Featured
Unsuck your backbone
ammeep
672
58k
KATA
mclloyd
PRO
35
15k
Fireside Chat
paigeccino
42
3.9k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Building the Perfect Custom Keyboard
takai
2
790
Code Review Best Practice
trishagee
74
20k
A Tale of Four Properties
chriscoyier
163
24k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
140
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
610
Product Roadmaps are Hard
iamctodd
PRO
55
12k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
290
The agentic SEO stack - context over prompts
schlessera
0
810
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