Slide 1

Slide 1 text

テスト駆動開発でダイエット に挑戦して失敗した話 てらひで 2023.9.30 XP祭り 2023 TrackB 14:25-14:45

Slide 2

Slide 2 text

だれ? てらひで @terahide27 • SIorを中心にアジャイルを叫んでいる • ふりかえりの人 • テスト駆動開発の人 • 着物ぐらし • 深夜アニメのカバレッジ90% • 初音ミク • 酒・ラーメン

Slide 3

Slide 3 text

はじめに • テスト駆動開発というものが あって大変すばらしいものだ • TDDBCなどテスト駆動開発を学 ぶコミュニティもたくさんある • 自分もテスト駆動飲み会という コミュニティの幹事の1人である

Slide 4

Slide 4 text

テスト駆動開発とは? • Red → Green → Refactor を繰り替えすサイクルで開発する 1. まずはテストを書く (失敗させる) 2. テストが通るように プロダクションコードを直す 3.重複を排除する 上記のサイクルをくり返す

Slide 5

Slide 5 text

テスト駆動開発を行う利点 • プログラムの内部品質が高くなる • 凝集度があがって結合度がさがる • 開発を行う対象の理解が進む • 設計判断に迷うことが少なくなる • 安全にリファクタリングが可能 SQuaRE (ISO25000シリーズ) における品質特性 つながる世界のソフトウェア品質ガイド

Slide 6

Slide 6 text

こんなに素晴らしいものを 開発だけに 留めておいていいのか? • 生活の中で使えないか?

Slide 7

Slide 7 text

何があったか? • 健康診断で血圧が170 • その場で降圧剤を処方される • 医者に行ったところBMI値を 標準にせよ(10kg痩せろ) • コロナが始まって半年で5kg増加 • ダイエットに応用しよう!

Slide 8

Slide 8 text

と、その前に

Slide 9

Slide 9 text

テスト駆動開発のイロハ • TODOリストを作成する • テストを書く • Red テストを失敗させる • Green 最速でテストを通す • Refactor 重複を排除する • Red→Green→Refactor のサイクルを繰り返す 1. まずはテストを書く (失敗させる) 2. テストが通るように プロダクションコードを直す 3.重複を排除する

Slide 10

Slide 10 text

TODOリストを作成する • 書くべきテストをTODOリストへ追加する • [ ] 四則演算 • [ ] クリア • [ ] 平方根 • [ ] べき乗 • [ ] メモリー

Slide 11

Slide 11 text

テストを書く • 足し算(四則演算の一部)の簡単な例 def testAdd1to1 { sut = Calculator.new() actual = sut.add(1, 1) assert 2 == actual } テストコード

Slide 12

Slide 12 text

Red テストを失敗させる • 書いたテストを実行する • Calculatorが存在しないためシンタックスエラー def testAdd1to1 { sut = Calculator.new() actual = sut.add(1, 1) assert 2 == actual } テストコード

Slide 13

Slide 13 text

Red コンパイルを通す • プロダクションコードを追加してコンパイルをとおす def testAdd1to1 { sut = Calculator.new() actual = sut.add(1, 1) assert 2 == actual } テストコード class Calculator { def add(i, j){ } } プロダクションコード • 再び実行 • テスト失敗 • 2 を期待しているが null

Slide 14

Slide 14 text

Green 最速でテストを通す • 仮実装でテストを通す def testAdd1to1 { sut = Calculator.new() actual = sut.add(1, 1) assert 2 == actual } テストコード class Calculator { def add(i, j){ return 2 } } プロダクションコード • 再び実行 • テスト成功!

Slide 15

Slide 15 text

Refactor 重複を排除する • ここでは変更の余地なし def testAdd1to1 { sut = Calculator.new() actual = sut.add(1, 1) assert 2 == actual } テストコード class Calculator { def add(i, j){ return 2 } } プロダクションコード

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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 } テストコード

Slide 18

Slide 18 text

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) } テストコード • 再び実行 • テスト成功!

Slide 19

Slide 19 text

Red→Green→Refactor のサイクルを繰り返す 1. まずはテストを書く (失敗させる) 2. テストが通るように プロダクションコードを直す 3.重複を排除する

Slide 20

Slide 20 text

ところで テストってなんだっけ? なんのためにするの?

Slide 21

Slide 21 text

計測

Slide 22

Slide 22 text

ダイエットではどうなる? 1. Red: 小さな目標を決める (-1kgとか) 2. 最速でGreenに: 絶食してでも目標体重に 3. Refactor: 食生活やその他 の生活を見直す

Slide 23

Slide 23 text

結果どうなったか?

Slide 24

Slide 24 text

絶食とかムリ! サイクルを1回も廻せませんでした。。。

Slide 25

Slide 25 text

その後のはなし

Slide 26

Slide 26 text

地道な活動が重要と気がついた 変えなかったこと 変えたこと 筋トレみたいな運動しない ビールを低糖質に 酒を止めない 週末は1食 毎日のウォーキング(DQウォーク万歳!) 日本酒は減らした ちょっとしたストレッチ ちょっとした糖質の制限 https://products.suntory.co.jp/d/4901777374270/

Slide 27

Slide 27 text

日々の食生活 豆腐、鶏むね あとちょっとの野菜

Slide 28

Slide 28 text

eXtreme Programming • Extreme • 極端な、過激な

Slide 29

Slide 29 text

ラーメンとか 普通に食べてます • 最近、近所がラーメン新店のラッシュでw

Slide 30

Slide 30 text

気が付いたこと • インプットとアウトプットのバランス • PFCバランス • 1kgくらいはすぐに減ったり増えたりする • 逆に食べても増えないときとかある • 夏の暑い日は食べられない

Slide 31

Slide 31 text

そしたら • 7月のある日目標へ!

Slide 32

Slide 32 text

その後 • 2-3kgの増減はありつつも リバウンドは今のところなし

Slide 33

Slide 33 text

まとめ ダイエットは • ちゃんと記録をして • 地道な活動が重要!

Slide 34

Slide 34 text

Be Happy