Slide 1

Slide 1 text

テスト駆動開発を実践しよう September 25, 2019 | #phpstudy たった3つだけ覚えればテスト駆動開発は始められる! 脱脂綿 ( @anchor_cable )

Slide 2

Slide 2 text

#phpstudy 2 About Me 鈴木智也 ( 脱脂綿 @anchor_cable ) 東京都内に住む脱脂綿(=Twitter名)系エンジニア ● 株式会社ゆめみ ○ サーバーサイドエンジニア ● テスト駆動開発歴3ヶ月 ● 自由に空を飛ぶのが夢 先週パラグライダーに乗って少し叶えました!

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

#phpstudy 4 今回の話のターゲット層 やったことない人向けに、まず何から始めれば良いのかを話します!

Slide 5

Slide 5 text

#phpstudy 5 アジェンダ TDDの実践に必要な3つのこと 実例を出してみる FizzBuzzの場合 なぜTDDをやるのか 1 2 3 まとめ 4

Slide 6

Slide 6 text

なぜTDDをやるのか 1

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

TDDの実践に必要な3つのこと 2

Slide 11

Slide 11 text

#phpstudy 11 必要なものはたった3つ ● 仮実装 ● 三角測量 ● ToDoリスト

Slide 12

Slide 12 text

#phpstudy 12 なぜこれでTDDができるの? TDDは「開発手法」 プログラミングは複雑な問題を小さく分解して解いていく行為 TDDはこれを強力にサポートしてくれる 3つのテクニックに沿って粛々と手を動かすだけ ToDoリスト によってタスクは分解され、 仮実装 によって日本語だったタスクがプログラミング言語となり、 三角測量 によって動作するきれいなコードへ辿り着く

Slide 13

Slide 13 text

#phpstudy 13 TDDの考え方 動作するきれいなコードは、偉大なプログラマでもす ぐには書けないことがあるし、普通のプログラマなら なおさらだ(私もそうだ)。ここは分割統治しよう。 最初に「動作する」に取り組み、その後で「きれい な」に取り組む。 Kent Beck. テスト駆動開発 (Japanese Edition) 第2章 明白な実装 より引用

Slide 14

Slide 14 text

実例を出してみる FizzBuzzの場合 3

Slide 15

Slide 15 text

#phpstudy 15 ToDoリストを作る ● 1の時1を返す ● 3の時Fizzを返す ● 4の時4を返す ● 5の時Buzzを返す ● 6の時Fizzを返す ● 10の時Buzz ● 15の時FizzBuzzを返す ● 30の時FizzBuzzを返す ToDoの粒度は 「テストが書きやすくなるくらいまで」 タスクの全てを網羅できなくても良い

Slide 16

Slide 16 text

#phpstudy 16 ToDoからテストを書く 「1の時1を返す」テスト 設計をここでやっている ・judgeFizzBuzzメソッドを作ると決める ・1を渡すと1を返すメソッドを作ると決める

Slide 17

Slide 17 text

#phpstudy 17 想定した理由で失敗する事を確認する テストが失敗するのは当然、 失敗を確認するのが大事 意図した理由で失敗しているか?

Slide 18

Slide 18 text

#phpstudy 18 仮実装を行う 本当に仮 テストを通すコード ここでは「1を渡されて1を返す」が 満たされれば良い。これでいい。

Slide 19

Slide 19 text

#phpstudy 19 仮実装でテストを通す 本当に仮 テストは通ることを確認する

Slide 20

Slide 20 text

#phpstudy 20 三角測量 仮実装では通らないパターンのテストを書く 「3の時はFizzを返す」なら仮実装のままではテストが通らないだろう 失敗する事を確認しましょう

Slide 21

Slide 21 text

#phpstudy 21 三角測量 ここで考える ● 3の時にFizzを返すには、引数を見て分岐が必要そうだ。 ● Fizz(文字列)を返すメソッドが、1(数字)を返すのは変だな、1は文字列にしよう ・$inputを定義できた ・返り値を文字列に固定できた

Slide 22

Slide 22 text

まとめ 4

Slide 23

Slide 23 text

#phpstudy 23 まとめ ● ToDoリスト、仮実装、三角測量についての説明 ● FizzBuzzで実例を見てみた ● TDDは堅実な進捗が出る

Slide 24

Slide 24 text

ご清聴ありがとうございました