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
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
terahide
September 30, 2023
Technology
1.3k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
テスト駆動開発でダイエットに挑戦して失敗した話
XP祭り2023 で発表した内容です
terahide
September 30, 2023
More Decks by terahide
See All by terahide
アニメに学ぶチームの多様性とコンピテンシー
terahide
0
670
コミュニケーション不全はなぜ起きるか
terahide
0
160
オレオレになりがちなテスト計画を見直した話
terahide
0
190
和服を普段着にするようになって気づいたアジャイルの心
terahide
0
48
Management3.0のワークを受けてから会社の偉い人へM3.0のワークショップをするまでにやったこと
terahide
0
160
一番アジャイルな料理人はソーマくんだと思うんだ
terahide
0
93
Att
terahide
0
42
受託開発でテストファーストしたらXXXを早期発見できてハイアジリティになったはなし
terahide
0
47
オフショアだから失敗したの?~誤解だらけのオフショアと、アジャイルの再発見~
terahide
0
66
Other Decks in Technology
See All in Technology
SIer20年! 培ったスキルがスタートアップで輝く時
shucho0103
0
590
Databricks における 生成AIガバナンスの実践
taka_aki
1
340
noUncheckedIndexedAccess、3時間、1万円。 / noUncheckedIndexedAccess, 3 Hours, 10,000 JPY.
kaonavi
1
330
AI フレンドリーなエラー監視を TypeScript で実現する
shinyaigeek
2
270
新規ゲーム開発におけるAI駆動開発のリアル
202409e2
0
2.8k
LLMと共に進化するプロセスを目指して
ymatsuwitter
12
3.5k
AIを「創る」と「使う」の循環 — HRテックが実践するリアルなAI組織実装
taketo957
0
1.7k
Oracle AI Database@Google Cloud:サービス概要のご紹介
oracle4engineer
PRO
6
1.5k
Claude code Orchestra
ozakiomumkj
3
1k
Ruby::Boxでできること、Refinementsでできること
joker1007
3
400
はじめてのDatadog
kairim0
0
290
マーケットプレイス版Oracle WebCenter Content For OCI
oracle4engineer
PRO
5
1.8k
Featured
See All Featured
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
0
1.6k
30 Presentation Tips
portentint
PRO
1
320
Exploring anti-patterns in Rails
aemeredith
3
400
Accessibility Awareness
sabderemane
1
130
Darren the Foodie - Storyboard
khoart
PRO
3
3.4k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
The Spectacular Lies of Maps
axbom
PRO
1
790
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.5k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
390
RailsConf 2023
tenderlove
30
1.5k
Everyday Curiosity
cassininazir
0
220
Become a Pro
speakerdeck
PRO
31
6k
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