Slide 1

Slide 1 text

テスト駆動開発はいいぞ。 September 4, 2019 | #engineers_lt #残暑に負けるな!自由研究LT大会 明日からやれる、現在も未来も支える開発手法 脱脂綿 ( @anchor_cable )

Slide 2

Slide 2 text

#engineers_lt 2 About Me 脱脂綿 ( @anchor_cable ) 東京都内に住む脱脂綿(=Twitter名)系エンジニア ● 株式会社ゆめみ ○ サーバーサイドエンジニア ● テスト駆動開発歴2ヶ月

Slide 3

Slide 3 text

#engineers_lt 3 テスト駆動開発とは テスト駆動開発 (てすとくどうかいはつ、test-driven development; TDD) とは、プログラム開発手法の一種 で、プログラムに必要な各機能について、最初にテス トを書き(これをテストファーストと言う)、そのテ ストが動作する必要最低限な実装をとりあえず行った 後、コードを洗練させる、という短い工程を繰り返す スタイルである。 Wikipedia より引用

Slide 4

Slide 4 text

4 アジェンダ #engineers_lt TDDによる私の変化 TDDがもたらす恩恵 TDDの簡単な説明 1 2 3

Slide 5

Slide 5 text

TDDの簡単な説明 1

Slide 6

Slide 6 text

#engineers_lt 6 TDDの目指す所:動く綺麗なコード 動かない 動く 綺 麗 汚 い

Slide 7

Slide 7 text

#engineers_lt 7 TDDの流れ Red Green Refactor

Slide 8

Slide 8 text

#engineers_lt 8 TDDの流れ 動かない 動く 綺 麗 汚 い ①Red: 動作しないテストを書く ②Green: テストを通すコードを書く ③Refactor: 動きを変えない事をテストしながら 安心してリファクタできる ④次のテストコードを書く

Slide 9

Slide 9 text

#engineers_lt 9 TDDの流れ 動かない 動く 綺 麗 汚 い ①Red: 動作しないテストを書く ②Green: テストを通すコードを書く ③Refactor: 動きを変えない事をテストしながら 安心してリファクタできる ④次のテストコードを書く

Slide 10

Slide 10 text

#engineers_lt 10 TDDの流れ 動かない 動く 綺 麗 汚 い ①Red: 動作しないテストを書く ②Green: テストを通すコードを書く ③Refactor: 動きを変えない事をテストしながら 安心してリファクタできる ④次のテストコードを書く

Slide 11

Slide 11 text

#engineers_lt 11 TDDの流れ 動かない 動く 綺 麗 汚 い ①Red: 動作しないテストを書く ②Green: テストを通すコードを書く ③Refactor: 動きを変えない事をテストしながら 安心してリファクタできる ④次のテストコードを書く

Slide 12

Slide 12 text

#engineers_lt 12 TDDの流れ 動かない 動く 綺 麗 汚 い ①Red: 動作しないテストを書く ②Green: テストを通すコードを書く ③Refactor: 動きを変えない事をテストしながら 安心してリファクタできる ④次のテストコードを書く

Slide 13

Slide 13 text

#engineers_lt 13 TDDの流れサンプル(資料のみ) ex.FizzBuzz 1. 作ろうとしているコードからToDoリストを作る 「1を渡されたら1を返す」 「3を渡されたらFizzを返す」.... 2. ToDoリストの中の1つを選び、これを満たすテストコードを書く assertEqual(1,judgeFizzBuzz(1)) 3. テストコードの失敗を確認する(レッド) 4. テストコードを満たすプロダクションコードを書く(グリーン) return 1; 5. コードの重複を排除したり、綺麗にしたりする(リファクタリング) ToDoの粒度は最初は細かくした方 が良いが、確信を持っている部分に 関してはまとめても良い。

Slide 14

Slide 14 text

TDDによる私の変化 2

Slide 15

Slide 15 text

#engineers_lt 15 TDDでコードを書き始めたことによる変化

Slide 16

Slide 16 text

#engineers_lt 16 TDDを知るまでの実装 一発で目標に届かせようとする

Slide 17

Slide 17 text

#engineers_lt 17 TDDによる実装 堅実に目標に向かって進む

Slide 18

Slide 18 text

#engineers_lt 18 TDDはあくまで手段 一発で到達する武器があるならOK

Slide 19

Slide 19 text

#engineers_lt 19 既に武器がある人向け:歩幅の調節 目的のコードにたどり着くためのTDD以外のスマートな方法を知っていて何の不安も無いなら、 テストは不要。一抹の不安がある部分にだけテストを書けば良い。 何をテストすべきか? → 「不安が退屈に変わるまで」(「テスト駆動開発」第32章) 武器と併用して確認しながら進める

Slide 20

Slide 20 text

TDDがもたらす恩恵 3

Slide 21

Slide 21 text

#engineers_lt 21 TDDによる開発が一段落すると残るもの 「動作する綺麗なコード」と「動作を担保するテストコード」 手動テストは、同じコードに手を加えた時に再度行わなければならない テストコードはチームの資産となり、以後修正やリファクタをする時の支えになる  ↓ プロダクションコードが「動作する綺麗なコード」であり続ける

Slide 22

Slide 22 text

#engineers_lt 22 TDDが目指すもの 私の目標は、プロジェクトが1年経っても開始直後の ようにキラキラした目でいられるようにすることだ。 TDDならそれができると考えている。 Kent Beck. テスト駆動開発 (Japanese Edition) 第32章 TDDを身につける より引用

Slide 23

Slide 23 text

23 まとめ #engineers_lt ● TDDによる変化:小さなステップで確実に進める ● TDDの恩恵:動く綺麗なコードが維持される ● TDDの流れ:Red→Green→Refactor

Slide 24

Slide 24 text

ご清聴ありがとうございました 興味を持ったら明日からやってみよう!

Slide 25

Slide 25 text

#engineers_lt 25 Appendix 書籍:テスト駆動開発 Kent Beck (著), 和田 卓人 (翻訳) https://www.amazon.co.jp/dp/4274217884/ref=cm_sw_r_tw_dp_U_x_BWLBDb7XS8 DYV (特に付録Cがオススメです!) Qiita:初心者プログラマーの僕が、テスト駆動開発を愛する5つの理由 https://qiita.com/anchor-cable/items/4b7b73bc1a2163ded6b6 (私の書いた記事です...内容が一部重複しています)