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
terahide
September 30, 2023
Technology
0
1.1k
テスト駆動開発でダイエットに挑戦して失敗した話
XP祭り2023 で発表した内容です
terahide
September 30, 2023
Tweet
Share
More Decks by terahide
See All by terahide
アニメに学ぶチームの多様性とコンピテンシー
terahide
0
370
コミュニケーション不全はなぜ起きるか
terahide
0
120
オレオレになりがちなテスト計画を見直した話
terahide
0
120
和服を普段着にするようになって気づいたアジャイルの心
terahide
0
36
Management3.0のワークを受けてから会社の偉い人へM3.0のワークショップをするまでにやったこと
terahide
0
72
一番アジャイルな料理人はソーマくんだと思うんだ
terahide
0
48
Att
terahide
0
23
受託開発でテストファーストしたらXXXを早期発見できてハイアジリティになったはなし
terahide
0
36
オフショアだから失敗したの?~誤解だらけのオフショアと、アジャイルの再発見~
terahide
0
33
Other Decks in Technology
See All in Technology
Amazon CloudWatch を使って NW 監視を行うには
o11yfes2023
0
170
LLM as プロダクト開発のパワードスーツ
layerx
PRO
1
240
Classmethod AI Talks(CATs) #21 司会進行スライド(2025.04.17) / classmethod-ai-talks-aka-cats_moderator-slides_vol21_2025-04-17
shinyaa31
0
600
白金鉱業Meetup_Vol.18_AIエージェント時代のUI/UX設計
brainpadpr
1
140
Mastraに入門してみた ~AWS CDKを添えて~
tsukuboshi
0
270
Goの組織でバックエンドTypeScriptを採用してどうだったか / How was adopting backend TypeScript in a Golang company
kaminashi
6
6.2k
AI AgentOps LT大会(2025/04/16) Algomatic伊藤発表資料
kosukeito
0
140
Dynamic Reteaming And Self Organization
miholovesq
3
550
DuckDB MCPサーバーを使ってAWSコストを分析させてみた / AWS cost analysis with DuckDB MCP server
masahirokawahara
0
1.3k
2025-04-24 "Manga AI Understanding & Localization" Furukawa Arata (CyberAgent, Inc)
ornew
1
200
От ручной разметки к LLM: как мы создавали облако тегов в Lamoda. Анастасия Ангелова, Data Scientist, Lamoda Tech
lamodatech
0
750
クラウド開発環境Cloud Workstationsの紹介
yunosukey
0
180
Featured
See All Featured
A Tale of Four Properties
chriscoyier
158
23k
Product Roadmaps are Hard
iamctodd
PRO
52
11k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
[RailsConf 2023] Rails as a piece of cake
palkan
54
5.4k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.6k
Fontdeck: Realign not Redesign
paulrobertlloyd
83
5.5k
Git: the NoSQL Database
bkeepers
PRO
430
65k
A Modern Web Designer's Workflow
chriscoyier
693
190k
The Cult of Friendly URLs
andyhume
78
6.3k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
41
2.2k
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