20150715 『続・断捨離』tddの心得編

90
続続続続 ・』 TDD 続続 続続続 Natsuki Nishino

Upload: nackypon

Post on 16-Aug-2015

142 views

Category:

Engineering


0 download

TRANSCRIPT

Page 1: 20150715 『続・断捨離』TDDの心得編

『続・断捨離』~ TDD 実践&心得編~

Natsuki Nishino

Page 2: 20150715 『続・断捨離』TDDの心得編

TestDriven

Development

Page 3: 20150715 『続・断捨離』TDDの心得編

テスト駆動開発

Page 4: 20150715 『続・断捨離』TDDの心得編

TDD は

『動作する、キレイなコード』

を目指す手法のひとつ

Page 5: 20150715 『続・断捨離』TDDの心得編

動くコードって?

Page 6: 20150715 『続・断捨離』TDDの心得編

普段書いているコードは

大半が動いているハズ( ・ _ ・ ;) デスヨネ ?

Page 7: 20150715 『続・断捨離』TDDの心得編

キレイなコードって?

Page 8: 20150715 『続・断捨離』TDDの心得編

バグ対応や改修が簡単にできる!

Page 9: 20150715 『続・断捨離』TDDの心得編

実装者の意図がわかる!

Page 10: 20150715 『続・断捨離』TDDの心得編

変えてみたらアレ… ?( ・ _ ・ ;)

が起きにくい

Page 11: 20150715 『続・断捨離』TDDの心得編

仲間や明日の自分がなんだこれ… ( ; ´Д

` )って

頭を抱えないコードのこと

Page 12: 20150715 『続・断捨離』TDDの心得編

まず動くようにしてからキレイにお掃除する

キレイに変更していく間に“壊していないこと”は

テストコードが担保するコレが TDD

Page 13: 20150715 『続・断捨離』TDDの心得編

どうやってやるの?

Page 14: 20150715 『続・断捨離』TDDの心得編

1.目標を考える2.その目標を示すテストを書く

3.実行して失敗させる (Red)4.テストを成功させるコードを書く (Green)

5.テストの成功を維持したまま リファクタリングする

6.1 ~ 5 を繰り返す…

Page 15: 20150715 『続・断捨離』TDDの心得編
Page 16: 20150715 『続・断捨離』TDDの心得編

ここまで前回のあらすじ

詳しくは Web で

Page 17: 20150715 『続・断捨離』TDDの心得編

TDD をやること自体は

目的ではない

Page 18: 20150715 『続・断捨離』TDDの心得編

TDD の目的はテスト自動化でもな

Page 19: 20150715 『続・断捨離』TDDの心得編

仕様通りに動いてキレイなコードを目

指す

Page 20: 20150715 『続・断捨離』TDDの心得編

TDD の心得

Page 21: 20150715 『続・断捨離』TDDの心得編

• 1 歩ずつ、少しずつ•素早く、とりあえず動かす•同時に複数を相手にしない•自分が最初のユーザーになる•テストは動くドキュメント• TDD はスキル

Page 22: 20150715 『続・断捨離』TDDの心得編

• 1 歩ずつ、少しずつ•素早く、とりあえず動かす•同時に複数を相手にしない•自分が最初のユーザーになる•テストは動くドキュメント• TDD はスキル

Page 23: 20150715 『続・断捨離』TDDの心得編

1 歩ずつ、少しずつ

Page 24: 20150715 『続・断捨離』TDDの心得編

一気にやるとどこで踏み外し

たかわからなくなる

Page 25: 20150715 『続・断捨離』TDDの心得編

• 1 歩ずつ、少しずつ•素早く、とりあえず動かす•同時に複数を相手にしない•自分が最初のユーザーになる•テストは動くドキュメント• TDD はスキル

Page 26: 20150715 『続・断捨離』TDDの心得編

動くかなぁ…

Page 27: 20150715 『続・断捨離』TDDの心得編

不安をテストに

Page 28: 20150715 『続・断捨離』TDDの心得編

動かしてみる

Page 29: 20150715 『続・断捨離』TDDの心得編

まだ動かないコードより

動いているコードに価値がある

Page 30: 20150715 『続・断捨離』TDDの心得編

動いていればバグが見つかる

Page 31: 20150715 『続・断捨離』TDDの心得編

キレイに動くように

設計にキリがなくなる

Page 32: 20150715 『続・断捨離』TDDの心得編

キレイに動くように

並行で書くのは相当なスキルが必

Page 33: 20150715 『続・断捨離』TDDの心得編

同時に 2 つ考えるのは大変

Page 34: 20150715 『続・断捨離』TDDの心得編

• 1 歩ずつ、少しずつ•素早く、とりあえず動かす•同時に複数を相手にしない•自分が最初のユーザーになる•テストは動くドキュメント• TDD はスキル

Page 35: 20150715 『続・断捨離』TDDの心得編

複数のテストを同時に書かない

Page 36: 20150715 『続・断捨離』TDDの心得編

テストコードとプロダクトコードを

同時に書かない

Page 37: 20150715 『続・断捨離』TDDの心得編

書いたテストが成功するまで

次のテストは書かない

Page 38: 20150715 『続・断捨離』TDDの心得編

書いたテストが成功するまで

次のプロダクトコードも書かない

Page 39: 20150715 『続・断捨離』TDDの心得編
Page 40: 20150715 『続・断捨離』TDDの心得編

複数同時に考えると混乱しやすい

Page 41: 20150715 『続・断捨離』TDDの心得編

テストコードにミスがあったら気付くのが遅

れる

Page 42: 20150715 『続・断捨離』TDDの心得編

Page 43: 20150715 『続・断捨離』TDDの心得編

タイマン勝負

Page 44: 20150715 『続・断捨離』TDDの心得編

• 1 歩ずつ、少しずつ•素早く、とりあえず動かす•同時に複数を相手にしない•自分が最初のユーザーになる•テストは動くドキュメント• TDD はスキル

Page 45: 20150715 『続・断捨離』TDDの心得編

そのメソッドの使い方を

テストに表現する

Page 46: 20150715 『続・断捨離』TDDの心得編

もし使いづらくても早い段階で気付ける

Page 47: 20150715 『続・断捨離』TDDの心得編

• 1 歩ずつ、少しずつ•素早く、とりあえず動かす•同時に複数を相手にしない•自分が最初のユーザーになる•テストは動くドキュメント• TDD はスキル

Page 48: 20150715 『続・断捨離』TDDの心得編

コードの仕様を動作を持って表現す

Page 49: 20150715 『続・断捨離』TDDの心得編

メソッドの使い方を動作を持って表現す

Page 50: 20150715 『続・断捨離』TDDの心得編

• 1 歩ずつ、少しずつ•素早く、とりあえず動かす•同時に複数を相手にしない•自分が最初のユーザーになる•テストは動くドキュメント• TDD はスキル

Page 51: 20150715 『続・断捨離』TDDの心得編

Page 52: 20150715 『続・断捨離』TDDの心得編

練習すれば上達する

Page 53: 20150715 『続・断捨離』TDDの心得編

• 1 歩ずつ、少しずつ•素早く、とりあえず動かす•同時に複数を相手にしない•自分が最初のユーザーになる•テストは動くドキュメント• TDD はスキル

Page 54: 20150715 『続・断捨離』TDDの心得編

ちょいテク

Page 55: 20150715 『続・断捨離』TDDの心得編

テストは動くドキュメント

Page 56: 20150715 『続・断捨離』TDDの心得編

テストは動けばそれで OK ?

Page 57: 20150715 『続・断捨離』TDDの心得編

// テストパターン 1public void test_1()…// テストパターン 2public void test_2()…// テストパターン 3public void test_3()…

Page 58: 20150715 『続・断捨離』TDDの心得編

何を確認したいテストなのか、コードをじっくり

読まないとわからない

Page 59: 20150715 『続・断捨離』TDDの心得編

テストもリファクタリングでき

Page 60: 20150715 『続・断捨離』TDDの心得編

メソッド名を日本語で書いちゃう

@Testpublic void testGetLargeNum_ 第 1 引数が大きい () { TwoNumber twoNum = new TwoNumber(6, 2); assertThat(twoNum.getLargeNum(), is(6));}

Page 61: 20150715 『続・断捨離』TDDの心得編

期待値も書いちゃう

@Testpublic void testGetLargeNum_ 第 1 引数が大きい _ 第 1 引数を返す () { TwoNumber twoNum = new TwoNumber(6, 2); assertThat(twoNum.getLargeNum(), is(6));}

Page 62: 20150715 『続・断捨離』TDDの心得編

全てのテストの共通処理

@Beforepublic void before() { System.out.println(“ テストメソッドはじめるよ");}

@Afterpublic void after() { System.out.println(“ テストメソッドおわったよ");}

Page 63: 20150715 『続・断捨離』TDDの心得編
Page 64: 20150715 『続・断捨離』TDDの心得編

全テストの最初と最後の処理

@BeforeClasspublic static void beforeClass() { System.out.println(“ テストはじめるよ ");}

@AfterClasspublic static void afterClass() { System.out.println(“ テストぜんぶおわったよ ");}

Page 65: 20150715 『続・断捨離』TDDの心得編
Page 66: 20150715 『続・断捨離』TDDの心得編

パターンテストもお掃除できる

Page 67: 20150715 『続・断捨離』TDDの心得編
Page 68: 20150715 『続・断捨離』TDDの心得編

@DataPoints で宣言したデータで@Theory のシナリオを実行する

Page 69: 20150715 『続・断捨離』TDDの心得編

テストシナリオ

テストパターン

Page 70: 20150715 『続・断捨離』TDDの心得編

( ・ `ω ・ ´)b

Page 71: 20150715 『続・断捨離』TDDの心得編

1 つだけ失敗したときにどれが失敗したかがわかりにくい

Page 72: 20150715 『続・断捨離』TDDの心得編
Page 73: 20150715 『続・断捨離』TDDの心得編

テストコードのテストコードは

プロダクトコード

Page 74: 20150715 『続・断捨離』TDDの心得編

テストのリファクタリングと

同時にプロダクトコードを変えてはいけない

Page 75: 20150715 『続・断捨離』TDDの心得編
Page 76: 20150715 『続・断捨離』TDDの心得編
Page 77: 20150715 『続・断捨離』TDDの心得編

断捨離の心得

Page 78: 20150715 『続・断捨離』TDDの心得編

継続することが大事♡

Page 79: 20150715 『続・断捨離』TDDの心得編

コピペやっつけ

動くからいっか…

時間がない変えるのが怖

Page 80: 20150715 『続・断捨離』TDDの心得編
Page 81: 20150715 『続・断捨離』TDDの心得編

TDD をやると書くコード量は増え

Page 82: 20150715 『続・断捨離』TDDの心得編

But !

Page 83: 20150715 『続・断捨離』TDDの心得編

かかる時間はそんなに変わらな

い※当人比です。

Page 84: 20150715 『続・断捨離』TDDの心得編

動いてキレイなプロダクトコードが

できる

Page 85: 20150715 『続・断捨離』TDDの心得編

改修が簡単なコードになる

Page 86: 20150715 『続・断捨離』TDDの心得編

コピペやっつけ

動くからいっか…

時間がない変えるのが怖

Page 87: 20150715 『続・断捨離』TDDの心得編
Page 88: 20150715 『続・断捨離』TDDの心得編
Page 89: 20150715 『続・断捨離』TDDの心得編

計画的に、継続的に

Page 90: 20150715 『続・断捨離』TDDの心得編

バイバイ (^_^)/~れがしーこーど