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
テスト駆動開発と私 / TechBookWalk TDD
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Yuichi Goto
December 05, 2017
Programming
2.2k
3
Share
テスト駆動開発と私 / TechBookWalk TDD
技術書の歩き方勉強会「テスト駆動開発」編(2017/12/05)
Yuichi Goto
December 05, 2017
More Decks by Yuichi Goto
See All by Yuichi Goto
[Teaser] Type-Safe Lightweight DDD with Effect Schema
yasaichi
3
540
Google Cloud を用いたソフトウェア開発の内製化組織の早期立ち上げの実現 / Rapid Establishment of In-House Software Development Teams Using Google Cloud
yasaichi
1
1.7k
[EN] Robust and Scalable API Gateway Built on Effect
yasaichi
3
460
Effectで作る堅牢でスケーラブルなAPIゲートウェイ / Robust and Scalable API Gateway Built on Effect
yasaichi
9
2.5k
あるRailsエンジニアがビジネスリーダーに転身するまで
yasaichi
9
3.3k
Active Recordから考える次の10年を見据えた技術選定 / Architecture decision for the next 10 years at PIXTA
yasaichi
50
23k
Active Recordから考える次世代のRuby on Railsの方向性 / Directions for the next generation of Ruby on Rails: From the viewpoint of its Active Record
yasaichi
38
22k
ピクスタのエンジニアリングとCircleCI / Software Engineering with CircleCI at PIXTA
yasaichi
1
480
Ruby on Railsの正体と向き合い方 / What is Ruby on Rails and how to deal with it?
yasaichi
146
95k
Other Decks in Programming
See All in Programming
運用エージェントは "作る" から "育てる" へ - 記憶と自己進化の3層設計パターン / self-evolving-agents-three-layer-agent-design
gawa
12
3.4k
生成AI時代にこそ効くGo | Why Go Works in the Age of Generative AI
mom0tomo
8
3.1k
Composerを使ったサプライチェーン攻撃の様子を眺めてみる #phpstudy
o0h
PRO
2
220
Java × distroless で 軽量なコンテナイメージを / Java on Distroless
contour_gara
0
480
技術記事、AIに書かせるか、自分で書くか? 〜それでも私が自分の手で書く理由〜 / #QiitaConference
jnchito
2
1.3k
ADKを使って簡単にAIエージェントを作ってみよう
k1mu21
0
200
OSもどきOS
arkw
0
400
Lemonade + Foundry Toolkit でお手軽アプリ開発
seosoft
1
270
AIとASP.NET Coreで雑Webアプリを作った話
mayuki
0
260
さぁV100、メモリをお食べ・・・
nilpe
0
130
oxlintはeslint/typescript-eslintを置き換えられるのか
shomafujita
2
310
Claspは野良GASの夢をみるか
takter00
0
160
Featured
See All Featured
Joys of Absence: A Defence of Solitary Play
codingconduct
1
380
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
How to Talk to Developers About Accessibility
jct
2
220
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
190
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
71
40k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
220
Art, The Web, and Tiny UX
lynnandtonic
304
22k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
It's Worth the Effort
3n
188
29k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
52k
Transcript
テスト駆動開発と私 Yuichi Goto (@_yasaichi) Dec 5, 2017 @ 技術書の歩き方勉強会「テスト駆動開発」編
self.inspect • ピクスタ株式会社 技術推進チームリーダー • Twitter: @_yasaichi • GitHub: yasaichi
• Blog: http://web-salad.hateblo.jp 2 他社さんにおける技術基盤の ようなチームです
https://pixta.jp クリエイターと購入者をつなぐデジタル素材のマーケットプレイス 3
Agenda テスト駆動開発(本)との関わり テスト駆動開発との出会い テスト駆動開発に対するスタンス まとめ 4
テスト駆動開発(本)との関わり • 原書(2002年)・旧訳版(2003年)ともに未読 • 原書の発売時は小学生 • 2013年のピアソンショックにより旧訳版は絶版に • 新訳版のレビュアー •
付録C 「訳者解説:テスト駆動開発の現在」を担当 5
付録Cについて • ざっくり言うと、和田さんによる良質なサーベイ論文 • 過去: テスト駆動開発の進化と普及の歴史 • 現在: 教条主義化と意味の希薄化 •
未来: これからのテスト駆動開発の学び方 • このためだけに本書を買ってもいいくらいの質の高さ 6
本文を読んで感じたこと • Kent Beckの思考過程を追える感覚、プライスレス • 思考過程は特定言語によらないので価値がある • ペアプロではなく書籍で伝えているのがすごい • 和田さんの訳注の質が高い
• 古くなった記述に「今はこうです」という補足がある 7
Agenda テスト駆動開発(本)との関わり テスト駆動開発との出会い テスト駆動開発に対するスタンス まとめ 8
テスト駆動開発との出会い • ≒ 和田さんとの出会い • 2013年、大学院生になって始めたエンジニアの アルバイト先(ピクスタ)で出会う • 当時の認識: 「Wikipediaに載ってるすごい人に
技術コンサルティングをお願いしているらしい」 • しばらくは特に関わりがなかった 9 現在も引き続きお世話に なっています
初めてのペアプログラミング • 2014年の春休みに大きめのリファクタ案件を任される • それまでは小さな改善タスクだけやっていたので、 テストを書く必要がなかった • 和田さんの「RSpecの入門とその一歩先へ」を写経し、 本文中の知らない単語を調べて下準備 •
人生初のペアプロを和田さんと行う(with RSpec) 10
テストにまつわる当初の認識 • 意味の希薄化(付録C参照)したTDD/BDDそのもの • テスト駆動開発 = テストを先に書くこと? • テストの書き方にはassertionとexpectationの 2つのスタイルがあり、RSpecは後者に属する
• double, stub, mockの違いがよくわからない 11
そして今日に至る • ペアプロを通じて和田さんに話しかけやすくなる • 曖昧な認識が議論・質問を通じて矯正されていく • DbC, DB設計, REST, キャリア設計など、テスト
駆動開発以外のことも和田さんから学ぶ • 今回書籍のレビュアーになり、少し恩返しできた感 12 和田さんに伺った話を再現する ことを「和田芸」と呼んでいます
Agenda ɹ テスト駆動開発(本)との関わり ɹ テスト駆動開発との出会い テスト駆動開発に対するスタンス まとめ 13
https://twitter.com/_yasaichi/status/936832539427094528 “テスト駆動開発は、「コードで記 述されたロジックや振る舞いを変更 する際に、フィードバックサイクル を⾼速で回すための現時点で最良の ⼿段」である” ― Yuichi Goto (
) 14
フィードバックサイクルという観点 • テストを書く・書いてあると個人的に嬉しいケース • テストを書く→仮実装→本実装の過程で • レガシーコード改善のお供として • Railsアップグレードの際の命綱として •
「変更の影響をすぐ知りたい」という点で目的が同じ 15
「ロジックや振る舞い」以外の場合は? • 例: コードで記述された「見た目」を変更する場合 • そもそも「どう見えるか?」をコードで記述できない • DOMやclass名などを使えば「見た目がどのように 構築されるか?」は記述できるが、壊れやすい •
より高速なフィードバックサイクルを達成するための 別の手段があるのでは? 16
https://medium.com/nulogy/storybook-driven-development-a3c517276c07 17 例えば、Storybook Driven Development (SDD)
SDDの実装・テストの流れ 1. 実装対象のUIコンポーネントの状態を全て列挙し、 Storyとして記述する 2. 各Storyで期待する見た目ができるまで、ブラウザ 上のレンダリング結果を目視確認しつつ実装する 3. 実装がひと通り終わったら、Snapshotを作成する 4.
以降はSnapshotを使って回帰テストを行う 18
目的を達成する手段はひとつではない • 実装の対象によって最良の手段は異なる • ロジックや振る舞い: これらのテストコードを使って 実装を進める(または変更する)TDD • UIコンポーネントの見た目: 最初は目視確認で
実装を進め、回帰テストにSnapshotを使うSDD • 今後状況が変化すれば、また別の手段が出てくる 19
Agenda ɹ テスト駆動開発(本)との関わり テスト駆動開発との出会い テスト駆動開発に対するスタンス まとめ 20
まとめ • 新訳版「テスト駆動開発」は原書の価値+和田さんの 訳・付録により現在においても手に取る価値のある本 • テスト駆動開発に対する私のスタンス • ロジックや振る舞いを変更する際に、フィードバック サイクルを高速で回すための現時点で最良の手段 •
銀の弾丸ではない(例: UIコンポーネントの見た目) 21
ご清聴ありがとうございました 22