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
tdd-hajime-no-ippo
Search
eiji.ienaga
January 15, 2025
230
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
tdd-hajime-no-ippo
eiji.ienaga
January 15, 2025
More Decks by eiji.ienaga
See All by eiji.ienaga
テストオートメーションと末長くお付き合いするための17のこと
haru01
3
930
20240913知識ポートフォリオ
haru01
0
66
Agile Studioウェビナー~モブプログラミング&テスト駆動開発はじめの一歩~
haru01
0
390
XP祭り2022 xUnit Test Patterns勉強会
haru01
0
980
心理的安全性とリファクタリングステップでモブプログラミングはめっちゃ輝く
haru01
4
2.2k
agile459-feedback
haru01
1
2.3k
書籍『テスト駆動開発』の紹介(みんなのPython勉強会#37 の発表資料)
haru01
2
8.1k
書籍『テスト駆動開発』7つの魅力のご紹介
haru01
1
1.3k
いえぴょんによる弾丸特急フィードバック講座
haru01
5
670
Featured
See All Featured
Odyssey Design
rkendrick25
PRO
2
700
Discover your Explorer Soul
emna__ayadi
2
1.1k
The Spectacular Lies of Maps
axbom
PRO
1
810
4 Signs Your Business is Dying
shpigford
187
22k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
530
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.3k
Agile that works and the tools we love
rasmusluckow
331
21k
How to build a perfect <img>
jonoalderson
1
5.7k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.5k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Google's AI Overviews - The New Search
badams
0
1k
Transcript
テスト駆動開発はじめの一歩 2024/01/16 家永英治
自己紹介 いえぴょん/家永英治 私とテスト駆動開発と運命的な出会い 2002年ごろ学生時代に平鍋さんのXP記事でペアプロ帽子の写真をネットで目 撃。楽しそうだなと思い門を叩いて、2003年に永和に運良く入社 2005年ごろに、チーム角谷にラッキーにもジョイン。twadaさんがTDDを含 めてXPコーチ。その時にテスト駆動開発のファンに 角谷さん、twadaさんがチームから卒業後、数年はメンテナンス修正のメイ ン担当。途中慌てるシーズンもあったが、テストとともにプロダクトを育て ることの大事さを改めて実感
現在はペアプロコーチ、アジャイルコーチ。ペアプロやTDDを含めて アジャイルの楽しさ嬉しさを伝えていくことを私のミッションに https://www.agile-studio.jp/people/ienaga ペアプロコーチ アジャイルコーチ
テスト駆動開発とは?
テスト駆動開発は プログラミング ワークフロー (Kent Beck)
実現し たいこ と ぼんやりしたのを 一度に変換するこ とは難しい! 動作するプロダクト(顧客 に価値があり開発者にとっ てメンテナンスできる)
仕様を まとめる 関数の インター フェース 設計する 実装& テスト&リ ファクタす る
仕様を まとめる 関数の インター フェース 設計する 実装& テスト&リ ファクタす る
何ができれば完成と言えるか 明瞭にするが難しい 一度に全てを見通して 計画通りつくるは難しい わかりやすい インタフェースと 実装の分離が難しい リファクタ余裕がなくなって 技術的負債がたまり、 ますますデバック地獄に 実態はエラーの連続で デバック地獄! 当初の設計では まずいにあとで気づく
そこで、TDDは問題を 小さく分割して ベイビーステップで 確実に1つ1つ完成させる
TDDは、小さくても 実際に手を動かして 得た学びを大事にする
動作するプロダクト(顧客 に価値があり開発者にとっ てメンテナンスできる) 実現 した いこ と
実現 した いこ と 動作するプロダクト(顧客 に価値があり開発者にとっ てメンテナンスできる) テストリスト Red Green
Refactor
https://bliki-ja.github.io/TestDrivenDevelopment
https://bliki-ja.github.io/TestDrivenDevelopment 1.テストケースの リストを書き出す テストリストを使って実現したいことを明確に するため どの順序でつくると良さそうかの初期計画をた てるため
https://bliki-ja.github.io/TestDrivenDevelopment 2.ひとつのテストを 選択する はじめの一歩目となる小さいテストを選んで実際に 手を動かし学びを得るスタートを切るため
https://bliki-ja.github.io/TestDrivenDevelopment 3.テストを書く (レッド) 何ができたらOKと言えるかをマシンで判定 できるほどに明確にするため 関数のインタフェース設計をするため
4.テストをパスさせる (グリーン) 難しいなら、ベタ書きの仮実装でも構わない https://bliki-ja.github.io/TestDrivenDevelopment
5.リファクタ 学びを生かして後から理解しやすく修正しやすくするため ベタ書きを一般化して本物に近づけるため https://bliki-ja.github.io/TestDrivenDevelopment
https://bliki-ja.github.io/TestDrivenDevelopment ひとつのテストを選択し 完成させる(繰り返し)
https://bliki-ja.github.io/TestDrivenDevelopment 6.学んだことがあれば リストを更新する 実際に手を動かすことで得た学びを計画に反映させるため
目的地 本命と思ってた 当初計画ルート 代案の 急がば回れルート に変更 後から 進めないと わかる
既存バグを発見し 先に対応が必要と わかった テストケースX1 が抜けていること がわかった 外部ライブラリー エラーXに 出会った 実際に手を動かすことで当初の計画通り進まない
と後から発見することもある (慌てないで。学んだことを生かして計画を更新し 続けるは、アジャイルの基本の型) 設計方針Aでは 実現できないこと がわかった 現状のままだと 機能修正が難しく 先にリファクタが必要とわかった 仕様を 誤解していたと わかった
15分、30分堂々めぐりして 先に進めないなら 仲間に相談しよう!
テスト駆動開発を学ぶには?
• 動画や実演を見て疑似体験する (事前視聴、今日) • 実際に手を動かして学ぶ(今日) ◦ 練習お題のリンク ▪ https://archive-devtesting-jp.github.io/tddbc/index_archive.html ▪
例えば、FizzBuzz、 スタック、 ボウリングゲーム、整数の区間、ライフゲーム ◦ 同僚とならペアやモブなどを組んで相互に学び合う ◦ 自主練習なら生成AIとペアプロしながらTDDについて学んでみる ◦ やったことをふりかえり、自分でわからなかったこと整理し、生成AIや同僚に質問してみる • 実際の案件でテスト自動化=>テストファースト=>TDDに取り組む ◦ 後でまとめてテストでデバック地獄ではなくて、早めにこまめにテストに取り組む ◦ テストファーストを試してみる ◦ テスト駆動開発を試してみる ◦ やったことをふりかえり、自分でわからなかったこと整理し、生成AIや同僚に質問してみる • 書籍で落ち着いて学んで、実務に応用する ◦ 「リファクタリング (マーチン・ファウラー)」 チュートリアルを実際に手を動かして学ぶはおすすめ ◦ 「Clean Code アジャイルソフトウェア達人の技(ロバート・C. マーチン)」 ◦ 「テスト駆動開発 (ケント・ベック)」 • 研修やTDDに関連する社内外部コミュニティで学んで、実務に応用する ◦ TDDBC、Coderetreat、TDDワイワイ会、テスト駆動飲み会 etc… ベイビーステップでテスト駆動開発を学んで実務で使うには?
動画で疑似体験で学ぶ https://www.youtube.com/watch?v=Q-FJ3XmFlT8
見て感じて欲しいポイントをいくつか テストリストに分解することでゴールや段取りが明瞭すっきり 頻繁にテスト実行し確認することの安心感 ベイビーステップで進めること、つまづいた時にリカバーしやすい テストのクラス名やメソッド名がドキュメントとして機能しなにができるか明確 etc… (他にも、たくさん見つけてね。)
https://agilejourney.uzabase.com/entry/2023/11/30/103000 動画見たら合わせて読むがおすすめ
手を動かして学ぶ https://www.agile-studio.jp/post/twop-refactor-tdd-ren
書籍から学ぶ
頻繁にテスト実行しながら 作っているデモ (15分程度)
改めて、テスト自動化や テスト駆動開発に取り組む 理由はなんだろうか?
https://www.agile-studio.jp/post/twop-test-goals
アジャイルな開発者として 私は、〇〇したい。 なぜなら、デバッグ地獄から抜け出し、 コードや設計に対して根拠ある自信をも ち、顧客に嬉しさを届けたいからだ TDD? CI/CD? ペアモブ? 小さい単位のプ ルリク?
関数型パラダイ ム? リファイメント? AIとの共同 ワーク? テスト自 動化? DDD? ATDD/ BDD?
私としては、 テスト駆動開発を気に入っているので、 ファンになってくれる人が 増えると嬉しい😀
補足1:リファクタリング
リファクタリング(名詞) 外部から見たときの振る舞いを保ちつつ、 理解や修正が簡単になるように、 ソフトウェアの内部構造を変化させること
なぜリファクタリングする? • ソフトウェアの設計改善のため • ソフトウェアを理解しやすくするため • 機能追加を容易にするため • バグ発見を助けるため •
プログラミングを速めるため
読みやすく、修正しやすい状態 を保ち、開発ペースを 維持や速める (デザインスタミナ仮説)
6章のリファクタリング始めの一歩を覚えよう 関数の抽出 変数名の変更 関数のインライン化 パラメータオブジェクトの導入 変数の抽出 関数群のクラスへの集約 変数のインライン化 関数群の変換への集約 関数宣言の変更
フェーズの分離 変数のカプセル化
今なら生成AIを使って、スマホで学べる時代 リファクタリングの関数の抽出 の例を知りたいです。
テスト駆動開発同様に、 実際に手を動かして学ぼう (1章はチュートリアルで、 手を動かして学ぶ教材になってます)