Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
オライリーサブスクで名著の原著に挑戦 読書シェア会 vol.4
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
akito hagio (おはぎ)
April 28, 2025
Programming
160
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
オライリーサブスクで名著の原著に挑戦 読書シェア会 vol.4
akito hagio (おはぎ)
April 28, 2025
More Decks by akito hagio (おはぎ)
See All by akito hagio (おはぎ)
どうすりゃいいんだ? こうすりゃいいんだ モバイルアプリの設計とテストコード
ohagi1014
0
67
Other Decks in Programming
See All in Programming
AI主導のプログラミング学習アプリを作ってみた
econanringo
0
180
Atomic Design, Enforced: Scaling Mobile Design Systems (next.app devCon / droidCon Berlin 2026)
steliosf
PRO
0
170
パスワード再設定メールのURLについて知っておこう
uyuki234
0
160
phperだってパンチカードでコーディングしたい
o0h
PRO
0
350
R8 の設定見直しでアプリサイズ削減
andpad
0
220
作れる、でも消せるか?──安全に「枯らして消す」機能削除術 / Drain, Then Delete
chobishiba
2
820
Apple Intelligence を用いた個人情報誤送信防止、及びユーザーリクエスト体験の改善について
yukiny
0
350
AWSに止められる覚悟してますか?
morizo_1984
2
540
コーディング自動化の次へ。人の介入をゼロにするファクトリーとサポートAIによる実践
timakin
5
4k
Workers Cache を知る
syumai
0
370
[JA] Domain Modeling with Vanilla Rails: 「操作」から再考するRailsの設計論
yasaichi
3
450
ソニーのクラウド共通基盤の変遷とAI時代の開発スタイルに合わせた進化 / The Journey of Sony’s Common Cloud Platform and Its Evolution for AI-Native Development
kenjiyoneyama
0
280
Featured
See All Featured
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.4k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.4k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
310
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
410
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
930
Product Roadmaps are Hard
iamctodd
55
13k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.4k
How to Think Like a Performance Engineer
csswizardry
28
2.9k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
A Tale of Four Properties
chriscoyier
163
24k
New Earth Scene 8
popppiees
4
2.7k
Transcript
オライリーサブスクで名著の原著に挑戦 読書シェア会 Vol.4 おはぎ @Voicy
自己紹介 - 萩尾亮斗 (おはぎ, ohagi) - Xアカウント: akeybako - 趣味
- 読書 - ゲーム - スポーツ観戦 - Androidエンジニア@Voicy (今年の2月から) - 音声プラットフォーム - 自分も音声発信やってます! - おはぎのたなぼたラジオ
オライリーサブスクにつ いて オライリーサブスクについて • O’reilly Learning Platform • 💰月額$49、年額$499 •
ACM会員のバンドルとして使うとちょっと安くなる • 日本語の本は比較的少ない • オライリー原著はもちろん多数、というか膨大 • オライリー以外の名著も多数読むことができる • 専用のReaderアプリ(Web・Mobile)もいい感じ こんな人におすすめ! • 英語を学びながら技術を学びたい人 • 原著ならではのニュアンスを掴みたい人 • オライリーの本をつまみ食いしたい人 • 今後和訳されるであろう名著を先読みしたい人
本の概要 • Unit Testing Principles, Practices, and Patterns ◦ 邦題:
単体テストの考え方 /使い方 ◦ ITエンジニア本大賞 2024 ベスト10 • マニング出版より 2020年1月に出版 • サンプルコードはC#で書かれている • 構成 ◦ 全体像 ◦ テストを役立てる ◦ 結合テスト ◦ アンチパターン この本から学べること • 単体・結合テストに関する体系的な知識 • 単体テストのアンチパターン • 単体テスト可能性を踏まえた設計論 本の概要 この本から学べること
なぜこの本を 読んだのか なぜこの本を読んだのか • 新しい環境に入ったが故の普遍的な不安 ◦ 変更が怖い...! ◦ 安心して変更をできる環境を作りたい •
チームの共通言語になっている ◦ 私が入社する前に輪読会があったとのこと ◦ 「UTPPPには〜」のように意見をくれる方がいる
学び① 二つの学派 ロンドン学派 London School クラス単体をテストする 二つの学派 学ぶ前の自分の考え(ロンドン学派?) • UT:
MockやStubを駆使した単一クラスのテスト • IT: 実際の多数のクラスを繋げて行う ロンドン学派 / London School クラス単体をテストする • テストダブル ◦ (不変なものを除いて)依存全て • メリット ◦ MockやStubを駆使することでテストしやすい 古典 or デトロイト 学派 / Classic School 振る舞いをテストする • テストダブル ◦ 共有される • メリット ◦ 非エンジニアでわかりやすい形の単位 ◦ 単体テストが難しい=設計を見直すサイン 古典 or デトロイト 学派 Classic School 単一の振る舞いをテストする
単体テストの4つの柱 学ぶ前の自分の考え • 単体テストがないことへの不安 ◦ 変更を行うことによる回帰への不安 • 単体テストそのものへの不安 ◦ なんか時間かかる
◦ なんか何もしてないのに壊れる 学び • この4つの柱でプラクティスを検証する • 偽陽性 ◦ 本当は壊れていないのに壊れたと言われる ◦ Resistance to refactoring • 偽陰性 ◦ 本当は壊れているのに大丈夫と言われる ◦ Protection against regressions 学び② 単体テストの4つの柱 Protection against regressions 回帰を防ぐ Resistance to refactoring リファクタリングに耐える Fast feedback 早いフィードバック Maintainability メンテナンス性
学び③ UTの3スタイル Output-based アウトプットベース y = f(x) の yが正しいか UTの3スタイル
学ぶ前の自分の考え • アウトプットベースが一番簡単 • ケースによって使い分ける? ◦ 状態を変化させるならそれを検証する時 ◦ Mockをちゃんと呼べているかを検証する時 学び • アウトプットベースが優れている ◦ 低い偽陽性 ◦ メンテナンス性 • 実装の詳細に立ち入らないようにする ◦ ドメインロジックを凝集する ◦ 副作用のない設計(関数型 Programmingなど) State-based 状態ベース 内部状態が正しく変わっているか Communication-based コミュニケーションベース AはBに正しく依存てきているか
UTPPPを 完走した感想 UTPPPを完走した感想 • もっと早く読めばよかった ◦ 単体テストについての多くの誤解 ◦ 今までの議論は空中戦だった...? •
結構読みやすかった ◦ だいたい2週間くらい ◦ 具体的な表現が多いから? ◦ 辞書引くような単語はだいたい繰り返される • テストを書いていく上での指針ができた • Androidの場合は↓とどう付き合っていくかが肝 ◦ PureなKotlinのコード ▪ テストしやすい・大好き ◦ 外部依存(APIなど)やライブラリ ▪ 本書で言及されているようにしたい ◦ Android SDK ▪ AndroidJUnitなどのサポートが必要 ▪ 継承するだけにしちゃいがち