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
Yuichi Goto
December 05, 2017
Programming
2.3k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
テスト駆動開発と私 / 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
580
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
480
Effectで作る堅牢でスケーラブルなAPIゲートウェイ / Robust and Scalable API Gateway Built on Effect
yasaichi
9
2.5k
あるRailsエンジニアがビジネスリーダーに転身するまで
yasaichi
9
3.4k
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
490
Ruby on Railsの正体と向き合い方 / What is Ruby on Rails and how to deal with it?
yasaichi
147
95k
Other Decks in Programming
See All in Programming
これって Effect でできたのでは? / TSKaigi Mashup Kansai #2
susisu
0
250
ソフトウェアエンジニアにとっての生成AI - 特性を知って使い倒す / generative ai for software enginner
kishida
7
2.1k
My Marp Sample
sinoue0108
0
110
人間の目はかわらない、だからJPEGは30年もつ
yuzneri
12
19k
Go 1.27 における memory allocation の高速化
andpad
0
300
AI Readyの正体はデータマネジメントだ メダリオン2.0の最前線
freee
PRO
0
350
いまどきの Codex で開発する visionOS アプリの開発スタイルについて
karad
0
160
Cloudflare is Agents
chimame
0
180
Gmail/Google DriveをトリガーにAIエージェントを動かそう! / Run AI agents with Gmail/Google Drive as triggers!
har1101
2
410
楽しそうなつよつよエンジニアと目が死んでる僕/A brilliant engineer having a blast, and dead-eyed me.
3l4l5
2
230
Pythonの実行はどこまで賢くなったのか? CPythonとPyPyから見る最適化のしくみ
curekoshimizu
3
1.5k
30年振りにコンパイラの定数整数除算を改善した
herumi
9
4k
Featured
See All Featured
Side Projects
sachag
455
43k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
300
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
570
Amusing Abliteration
ianozsvald
1
260
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Practical Orchestrator
shlominoach
191
12k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
64
56k
GraphQLとの向き合い方2022年版
quramy
50
15k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
500
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
500
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
280
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