$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
私のTDD
Search
Fujimura Daisuke
November 09, 2011
Programming
4
820
私のTDD
Fujimura Daisuke
November 09, 2011
Tweet
Share
More Decks by Fujimura Daisuke
See All by Fujimura Daisuke
現役スタートアップCTOが解説する、ソフトウェア開発という仕事の理論・実践・キャリア
fujimura
0
89
庭と負債
fujimura
4
2.4k
AIの時代で我々はどのようにコードを書くのか
fujimura
4
1k
SaaSを作るという仕事について
fujimura
13
6.4k
一文字エイリアスのすすめ
fujimura
0
470
現役CTOが語る!RubyKaigiの楽しみ方
fujimura
0
1.3k
いかにして文系新卒エンジニアが「大きな問い」を大事にするCTOになったのか
fujimura
2
780
Kaigi on Rails 2022 - 既存Railsアプリ攻略法 CTOが見ること・やること・考えること
fujimura
14
5.4k
SimpleDelegator活用のご提案
fujimura
0
1.7k
Other Decks in Programming
See All in Programming
非同期処理の迷宮を抜ける: 初学者がつまづく構造的な原因
pd1xx
1
720
【CA.ai #3】ワークフローから見直すAIエージェント — 必要な場面と“選ばない”判断
satoaoaka
0
240
DSPy Meetup Tokyo #1 - はじめてのDSPy
masahiro_nishimi
1
170
俺流レスポンシブコーディング 2025
tak_dcxi
14
8.8k
組み合わせ爆発にのまれない - 責務分割 x テスト
halhorn
1
150
AIの誤りが許されない業務システムにおいて“信頼されるAI” を目指す / building-trusted-ai-systems
yuya4
6
3.6k
Findy AI+の開発、運用におけるMCP活用事例
starfish719
0
440
手が足りない!兼業データエンジニアに必要だったアーキテクチャと立ち回り
zinkosuke
0
700
20251212 AI 時代的 Legacy Code 營救術 2025 WebConf
mouson
0
160
ViewファーストなRailsアプリ開発のたのしさ
sugiwe
0
470
テストやOSS開発に役立つSetup PHP Action
matsuo_atsushi
0
150
AIコーディングエージェント(skywork)
kondai24
0
170
Featured
See All Featured
The Illustrated Children's Guide to Kubernetes
chrisshort
51
51k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
34k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.6k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.2k
Designing for Performance
lara
610
69k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Statistics for Hackers
jakevdp
799
230k
Testing 201, or: Great Expectations
jmmastey
46
7.8k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Thoughts on Productivity
jonyablonski
73
5k
Bash Introduction
62gerente
615
210k
Rebuilding a faster, lazier Slack
samanthasiow
84
9.3k
Transcript
私のTDD 藤村大介 / @ffu_
TDDとは "プログラムに必要な各機能について、最初にテストを書き(これをテスト ファーストと言う)、そのテストが動作する必要最低限な実装をとりあえず行っ た後、コードを洗練させる、という短い工程を繰り返すスタイル” http://ja.wikipedia.org/wiki/テスト駆動開発
実演してみます
レコードバイヤーを実装します • 最初に予算をもらう • レコードは予算があるだけ買える
None
だめ
なんでもいいのでまずはテストを書いて、
失敗させる(儀式)
それから、希望する挙動を示すコードをテストとして書く 1000円渡すと予算 1000円のバイヤーが できますように…
失敗する メソッドがないそ うです
Buyer#budget を実装(”がわ”だけ)
失敗する 1000が欲しかったのにnilが返りました(当たり前)
コンストラクタで予算を渡し、#budgetで返すようにする (ちょっと端折りました)
できました
というふうに 最小の粒度でテストを流して開発していきます。 普段は手動で流すのは面倒なので、ファイルの変更を監視して自 動でテストを流すツール(watchrとか)を使ってます。 結果を見るためにウインドウを切り替えるのも面倒なので、常にテ ストの結果が画面の片隅に出ているようにしています。
ノートPCの場合はこんな感じでターミナルを重ねている
時は流れ
現在レコード購入機能を実装しています。これから予算制限をつけると ころ。(今は無制限に買える)まずはテストを書きます 予算を超えてたらレコー ドが増えないようにして ください
もちろん まず失敗 させる
実装簡単だし、 いちいち失敗させるのはアホらしいと思いますよね? しかし、
条件分岐を実装する際は、まずすべての 分岐を通るテストを書きます 面倒かもしれませんが、どうせあとで全部手で動かすんですよね? だったら再現できるようにしたほうがお得です。 さらに、正常系(もしくはその時動かしたい分岐)のみ通るコードを書 き、他の実装に進んでしまい…アッ気がついたら異常系の想定が漏 れてた、みたいなケースも起こりにくくなります。なぜならテストを書く 際に全パスの処理を想定する必要があり、それを実装するようテス トが示してくれるから。 (本当にやってます)
実装に戻ります
分岐を入れました。
通りました これで安心の条件分岐が実現された。
これを少しずつ進めていきます ちなみにソフトウェアテストそのものの技法をしっかり身につけておく とテストは書きやすくなり、また堅牢なコードになると思います。 この本がおすすめ はじめて学ぶソフトウェアのテスト技法 リー・コープランド (著), 宗 雅彦 (翻訳)
最後に、私のTDD 私、ソフトウェア開発の技法の中で何が好きか、と言うと、断然TDD です。夢中とまでは言いませんが、今更離れるのはあまりに辛い ツールであります。 そんなTDDとは私にとって一体何なのだろうのか?の話。
私は面倒くさがり、しかも仕事が雑です 更に落ち着きがなく、極めて散漫な性格です。仕事に時間がかかる のも嫌いです。 だからこそのTDD。最初はウザかったけど、 • 手戻りがない(常に再帰テストされる) • ミスが少なくなる(事前に全分岐のテストケースを想定) • やるべきことが示される(まず失敗させて、それから実装)
• 必要ないことをやらないで済む(テストが通れば実装完了) と、気がついたらTDDは自分の弱点をそっとカバーしてくれるのでし た。
みなさんも騙されたと思ってやってみてください。 最初は面倒かもしれません。慣れは必要です。 ツールや環境を整備すると、かなり負担は減ります。 開発環境でCIを動かす感覚で常にテストを流しておくとかなり楽で す。 watchrあたりを活用するとよいです。 watchr: https://github.com/mynyml/watchr
終わり