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
テスト駆動開発でダイエットに挑戦して失敗した話
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
terahide
September 30, 2023
Technology
0
1.2k
テスト駆動開発でダイエットに挑戦して失敗した話
XP祭り2023 で発表した内容です
terahide
September 30, 2023
Tweet
Share
More Decks by terahide
See All by terahide
アニメに学ぶチームの多様性とコンピテンシー
terahide
0
610
コミュニケーション不全はなぜ起きるか
terahide
0
150
オレオレになりがちなテスト計画を見直した話
terahide
0
180
和服を普段着にするようになって気づいたアジャイルの心
terahide
0
44
Management3.0のワークを受けてから会社の偉い人へM3.0のワークショップをするまでにやったこと
terahide
0
150
一番アジャイルな料理人はソーマくんだと思うんだ
terahide
0
85
Att
terahide
0
31
受託開発でテストファーストしたらXXXを早期発見できてハイアジリティになったはなし
terahide
0
44
オフショアだから失敗したの?~誤解だらけのオフショアと、アジャイルの再発見~
terahide
0
57
Other Decks in Technology
See All in Technology
The essence of decision-making lies in primary data
kaminashi
0
110
「お金で解決」が全てではない!大規模WebアプリのCI高速化 #phperkaigi
stefafafan
5
2.3k
脳が溶けた話 / Melted Brain
keisuke69
1
1.1k
GitHub Copilot CLI で Azure Portal to Bicep
tsubakimoto_s
0
240
FASTでAIエージェントを作りまくろう!
yukiogawa
4
110
PostgreSQL 18のNOT ENFORCEDな制約とDEFERRABLEの関係
yahonda
0
130
「捨てる」を設計する
kubell_hr
0
360
AI時代のIssue駆動開発のススメ
moongift
PRO
0
260
Embeddings : Symfony AI en pratique
lyrixx
0
340
FlutterでPiP再生を実装した話
s9a17
0
200
JEDAI認定プログラム JEDAI Order 2026 受賞者一覧 / JEDAI Order 2026 Winners
databricksjapan
0
370
やさしいとこから始めるGitHubリポジトリのセキュリティ
tsubakimoto_s
2
1.8k
Featured
See All Featured
Ethics towards AI in product and experience design
skipperchong
2
240
Typedesign – Prime Four
hannesfritz
42
3k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9k
It's Worth the Effort
3n
188
29k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
130
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
210
Code Review Best Practice
trishagee
74
20k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
Design in an AI World
tapps
0
180
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
310
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
61k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
150
Transcript
テスト駆動開発でダイエット に挑戦して失敗した話 てらひで 2023.9.30 XP祭り 2023 TrackB 14:25-14:45
だれ? てらひで @terahide27 • SIorを中心にアジャイルを叫んでいる • ふりかえりの人 • テスト駆動開発の人 •
着物ぐらし • 深夜アニメのカバレッジ90% • 初音ミク • 酒・ラーメン
はじめに • テスト駆動開発というものが あって大変すばらしいものだ • TDDBCなどテスト駆動開発を学 ぶコミュニティもたくさんある • 自分もテスト駆動飲み会という コミュニティの幹事の1人である
テスト駆動開発とは? • Red → Green → Refactor を繰り替えすサイクルで開発する 1. まずはテストを書く
(失敗させる) 2. テストが通るように プロダクションコードを直す 3.重複を排除する 上記のサイクルをくり返す
テスト駆動開発を行う利点 • プログラムの内部品質が高くなる • 凝集度があがって結合度がさがる • 開発を行う対象の理解が進む • 設計判断に迷うことが少なくなる •
安全にリファクタリングが可能 SQuaRE (ISO25000シリーズ) における品質特性 つながる世界のソフトウェア品質ガイド
こんなに素晴らしいものを 開発だけに 留めておいていいのか? • 生活の中で使えないか?
何があったか? • 健康診断で血圧が170 • その場で降圧剤を処方される • 医者に行ったところBMI値を 標準にせよ(10kg痩せろ) • コロナが始まって半年で5kg増加
• ダイエットに応用しよう!
と、その前に
テスト駆動開発のイロハ • TODOリストを作成する • テストを書く • Red テストを失敗させる • Green
最速でテストを通す • Refactor 重複を排除する • Red→Green→Refactor のサイクルを繰り返す 1. まずはテストを書く (失敗させる) 2. テストが通るように プロダクションコードを直す 3.重複を排除する
TODOリストを作成する • 書くべきテストをTODOリストへ追加する • [ ] 四則演算 • [ ]
クリア • [ ] 平方根 • [ ] べき乗 • [ ] メモリー
テストを書く • 足し算(四則演算の一部)の簡単な例 def testAdd1to1 { sut = Calculator.new() actual
= sut.add(1, 1) assert 2 == actual } テストコード
Red テストを失敗させる • 書いたテストを実行する • Calculatorが存在しないためシンタックスエラー def testAdd1to1 { sut
= Calculator.new() actual = sut.add(1, 1) assert 2 == actual } テストコード
Red コンパイルを通す • プロダクションコードを追加してコンパイルをとおす def testAdd1to1 { sut = Calculator.new()
actual = sut.add(1, 1) assert 2 == actual } テストコード class Calculator { def add(i, j){ } } プロダクションコード • 再び実行 • テスト失敗 • 2 を期待しているが null
Green 最速でテストを通す • 仮実装でテストを通す def testAdd1to1 { sut = Calculator.new()
actual = sut.add(1, 1) assert 2 == actual } テストコード class Calculator { def add(i, j){ return 2 } } プロダクションコード • 再び実行 • テスト成功!
Refactor 重複を排除する • ここでは変更の余地なし def testAdd1to1 { sut = Calculator.new()
actual = sut.add(1, 1) assert 2 == actual } テストコード class Calculator { def add(i, j){ return 2 } } プロダクションコード
Red テストを追加する • 三角測量のテストを追加 def testAdd1to1 { sut = Calculator.new()
actual = sut.add(1, 1) assert2 == actual } def testAdd2to1 { sut = Calculator.new() actual = sut.add(2, 1) assert 3 == actual } テストコード class Calculator { def add(i, j){ return 2 } } プロダクションコード • 再び実行 • 1件成功, 1件失敗 • testAdd2to1: 3 を期待しているが 2
Green 最速でテストを通す • 明白な実装でテストを通す class Calculator { def add(i, j){
return i+j } } プロダクションコード • 再び実行 • テスト成功! def testAdd1to1 { sut = Calculator.new() actual = sut.add(1, 1) assert 2 == actual } def testAdd2to1 { sut = Calculator.new() actual = sut.add(2, 1) assert 3 == actual } テストコード
Refactor 重複を排除する • テストコードのフィクスチャを共通化 class Calculator { def add(i, j){
return i+j } } プロダクションコード def sut def setup{ sut = Calculator.new() } def testAdd1to1 { assert 2 == sut.add(1, 1) } def testAdd2to1 { assert 3 == sut.add(2, 1) } テストコード • 再び実行 • テスト成功!
Red→Green→Refactor のサイクルを繰り返す 1. まずはテストを書く (失敗させる) 2. テストが通るように プロダクションコードを直す 3.重複を排除する
ところで テストってなんだっけ? なんのためにするの?
計測
ダイエットではどうなる? 1. Red: 小さな目標を決める (-1kgとか) 2. 最速でGreenに: 絶食してでも目標体重に 3. Refactor:
食生活やその他 の生活を見直す
結果どうなったか?
絶食とかムリ! サイクルを1回も廻せませんでした。。。
その後のはなし
地道な活動が重要と気がついた 変えなかったこと 変えたこと 筋トレみたいな運動しない ビールを低糖質に 酒を止めない 週末は1食 毎日のウォーキング(DQウォーク万歳!) 日本酒は減らした ちょっとしたストレッチ
ちょっとした糖質の制限 https://products.suntory.co.jp/d/4901777374270/
日々の食生活 豆腐、鶏むね あとちょっとの野菜
eXtreme Programming • Extreme • 極端な、過激な
ラーメンとか 普通に食べてます • 最近、近所がラーメン新店のラッシュでw
気が付いたこと • インプットとアウトプットのバランス • PFCバランス • 1kgくらいはすぐに減ったり増えたりする • 逆に食べても増えないときとかある •
夏の暑い日は食べられない
そしたら • 7月のある日目標へ!
その後 • 2-3kgの増減はありつつも リバウンドは今のところなし
まとめ ダイエットは • ちゃんと記録をして • 地道な活動が重要!
Be Happy