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
アジャイルソフトウェア開発の奥義勉強会 4-5章
Search
k-kohey
June 19, 2019
Programming
0
120
アジャイルソフトウェア開発の奥義勉強会 4-5章
ロバート・C・マーチン著「アジャイルソフトウェア開発の奥義」の勉強会にて使用した資料.
k-kohey
June 19, 2019
Tweet
Share
More Decks by k-kohey
See All by k-kohey
ゲームボーイアドバンスでSwiftを動かそう
k_koheyi
0
1.1k
Swift Package Mangerのバグを直した話
k_koheyi
2
1.5k
swift-async-algorithms...? へえ…面白そうじゃん…?
k_koheyi
3
1.6k
[社内勉強会]Parchment-swiftの実装説明
k_koheyi
0
130
[社内勉強会]Combineの説明
k_koheyi
0
36
あるインスタンスの取る値が 何パターンあるか数えてみるンゴ!
k_koheyi
1
170
Tuistを用いた Xcode Project管理の紹介
k_koheyi
0
210
SwiftでわかるSOLID原則 iOSDC 2020
k_koheyi
3
2.8k
Visitorパターン
k_koheyi
0
190
Other Decks in Programming
See All in Programming
XP, Testing and ninja testing
m_seki
2
150
来たるべき 8.0 に備えて React 19 新機能と React Router 固有機能の取捨選択とすり合わせを考える
oukayuka
2
830
Enterprise Web App. Development (2): Version Control Tool Training Ver. 5.1
knakagawa
1
120
KotlinConf 2025 現地で感じたServer-Side Kotlin
n_takehata
1
220
CursorはMCPを使った方が良いぞ
taigakono
0
150
iOSアプリ開発で 関数型プログラミングを実現する The Composable Architectureの紹介
yimajo
2
210
つよそうにふるまい、つよい成果を出すのなら、つよいのかもしれない
irof
1
300
Azure AI Foundryではじめてのマルチエージェントワークフロー
seosoft
0
100
Claude Codeの使い方
ttnyt8701
1
130
Perplexity Slack Botを作ってAI活用を進めた話 / AI Engineering Summit プレイベント
n3xem
0
670
A comprehensive view of refactoring
marabesi
0
970
今ならAmazon ECSのサービス間通信をどう選ぶか / Selection of ECS Interservice Communication 2025
tkikuc
13
2.9k
Featured
See All Featured
A better future with KSS
kneath
239
17k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
31
1.2k
StorybookのUI Testing Handbookを読んだ
zakiyama
30
5.8k
Statistics for Hackers
jakevdp
799
220k
How STYLIGHT went responsive
nonsquared
100
5.6k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
20
1.3k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
What's in a price? How to price your products and services
michaelherold
246
12k
Mobile First: as difficult as doing things right
swwweet
223
9.7k
Code Review Best Practice
trishagee
68
18k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
790
GitHub's CSS Performance
jonrohan
1031
460k
Transcript
ΞδϟΠϧιϑτΣΞ։ൃͷԞٛ ษڧձ ষ ஜେֶ ใϝσΟΞֶྨ ޱ ߤฏ 1
ࠓճͷಡΉൣғ • 4章 テスティング • P33-P42 • 5章 リファクタリング •
P43-56 2
ষ ςεςΟϯά • テスト主導型の開発がプロダクト開発に与える影響について述 べている章である. • 特にプロダクトのコードを書く前にテストコードを書くメリッ トについて述べている 3
ςετίʔυΛ࠷ॳʹॻ͘ϝϦοτ • テストが成功する限り,プログラムの変更を気軽に⾏える • 呼び出し側の⽴場からコーディングをするので,呼び出しやすい形 式の設計になりやすい • テストそのものがドキュメントとして機能する • テスト可能な設計を強いられることにより,ソフトウェアの分離が
促進される 4
ςετओಋܕιϑτΣΞ։ൃͷྫ • 未実装なテスト対象が存在することを前提としてテストコードを書く⼿ 法(Intention programing)がある. • ⾃分の意図することをコードを書く前にテストコードの中に記述してお く • このとき,⾃分の意図を単純かつ明瞭にしておくことによって,良い構
造のプログラムが書ける 5 テストを最初に書くことによって,設計上の判断にふるいをかけられる
۩ମྫ • あるゲームの実装におけるテストコードを考えてみる • このゲームは下記のような仕様を持つ • プレイヤーはダンジョンの中を探検する • ダンジョンには複数の部屋が有る •
部屋には東⻄南北それぞに1つ以上の通路があり,その通路は他の部屋と繋 がれいてる 6
*OUFOUJPO QSPHSBNNJOHΛ༻͍ͯॻ͍ͨ ςετίʔυ 7 ※ 本書にて記述されているコードに若⼲の修正を加えています
ςετίʔυ͕ॏཁͳʹޫΛ͋ͯΔ • 著者はテストコードを書く際にRoomクラスを⽤意する必要は無いと判断をした (数値を⽤いて表現できるから) • Roomクラスを⽤いないことが良い⽅法であることを主張したいわけではない • 最初にテストコードを書くことによって,⾮常に早い段階で設計上の重要な問 題に光を当てた事ができた 8
テストを最初に書くことによって,設計上の判断にふるいをかけられる つまり
ιϑτΣΞʹΛڧ͍Δྫ • 給料詳細(Payroll)アプリケーション 9 本書のp36から引⽤
ςετίʔυΛॻ͘ࡍͷ͍ • 次のような問いが⽣まれる • どのDBを⽤いるか? • どのようなデータを⽤意しておくか? • どのように正しいデータが登録されているかを調べるか? 10
Mock Objectパターンを⽤いよう!
.PDL 0CKFDUύλʔϯΛదԠ 11 結果的に周囲のモジュールが分離され設計の質が⾼まった! • Payrollが抽象に依存するように変更 した • モックを⽤いたテストが可能となっ た
本書のp37から引⽤
ड͚ೖΕςετ • システム全体の動作確認をするためにはユニットテストだけではな く,受け⼊れテストが必要 • UIテストなどを⾏う場合は,より⾼度な分離が求められるのでアー キテクチャに⼤きな影響を与える • 早期から受け⼊れテストを許容する設計にすることで,分離が促進 される
12 具体例では,XMLにてUIを表現することによりユニットテストを許容するような例があった.→ 設計に影響を与える
ষ ·ͱΊ • テストを書くメリット • 動作検証,および保証 • ⼀度あるレベルにて実⾏されれば,それ以降はそのレベルを下回ることはない • コンパイルと実⾏が可能なドキュメントとして機能する.
• コンパイルと実⾏が可能なことにより,信頼できる • ⾮常に明確な⾔語にて記述されている. • アーキテクチャや設計に良いインパクトを与える • テスト可能な状態にするためには,対象を周囲から分離する必要がある. • テストしやすくすればするほどその分離性が促進される 13
ষ ϦϑΝΫλϦϯά • リファクタリングの意義とリファクタリングを⾏う過程について⽰ している章である. • リファクタリングの定義 • ソフトウェアシステムを変えるプロセスとは,そのコードの外部への振る舞 いを全く変えずににその内部構造を改善すること
• 正常に動くコードを改善する必要はあるのか?? 14 正常に動作しているコードをリファクタリングする意味は?
Ϟδϡʔϧͷػೳ • モジュールは下記に⽰す3つの(満たすべき)機能がある • 特定の処理を実⾏する機能 • モジュールの存在理由そのもの • 変化を許容する機能 •
変化を簡単にするのは開発者の責任 • 変更が⼤変なモジュールは動いたとしても壊れているのと同義(著者⽈く • 読み⼿にモジュールの意図を伝える機能 • 詳細を知らない⼈であっても無理なく読めるようにする必要がある. • 意図を伝えられないモジュールは動いたとしても壊れているのと同義(著者⽈く 15 モジュールのの読みやすさや変更しやすさを追求するためにリファクタリングしよう
·ͱΊ • リファクタリングの⽬的はコードを⽇々こまめに整理することにあ る • システムの拡張や修正は最⼩限の努⼒で済ませたい • コードが汚ければすべての原則やパターンが全く役に⽴たない 16
ಡΜͩײ ষ テストを始めに書く⼿法はテスト駆動開発などから知っていた ⼀⽅で,テストを書くことによって設計が洗礼されるといった視点は無く勉強となった. ষ リファクタリングの概要については今回学ぶことができたが,具体的にリファクタリングを⾏う 際に⽤いる指標が分からなかった.つまり,どのように既存のコードにメスを⼊れると良いかが 分からなかった. 今後の章からそれらを学ぶことができることを期待する. 17
Ҿ༻ • ロバート・C・マーチンほか.アジャイルソフトウェア開発の奥義 第 2版 オブジェクト指向開発の神髄と匠の技. SBクリエイティブ, 2008 18