[Phpカンファレンス関西2014 lt]動けばいいじゃない

118
動けばいいじゃない! PHPカンファレンス関西 2014 ウェブニウム株式会社 取締役CTO 田中康一 a.k.a MugeSo

Transcript of [Phpカンファレンス関西2014 lt]動けばいいじゃない

Page 1: [Phpカンファレンス関西2014 lt]動けばいいじゃない

動けばいいじゃない!PHPカンファレンス関西 2014

ウェブニウム株式会社 取締役CTO 田中康一 a.k.a MugeSo

Page 2: [Phpカンファレンス関西2014 lt]動けばいいじゃない

自己紹介• 職業: ウェブニウム株式会社 取締役 CTO

• 名前: 田中 康一

• Twitter: @mugeso

• 誰: PHPカンファレンス2013 実行委員長「やはり、お前らのMVCは間違っている」の人

Page 3: [Phpカンファレンス関西2014 lt]動けばいいじゃない

今日は割と • •

初心者向け

Page 4: [Phpカンファレンス関西2014 lt]動けばいいじゃない

まず、

Page 5: [Phpカンファレンス関西2014 lt]動けばいいじゃない

ソフトウェアの正義 について

言いたい事がある。

Page 6: [Phpカンファレンス関西2014 lt]動けばいいじゃない

すなわち!

Page 7: [Phpカンファレンス関西2014 lt]動けばいいじゃない

動く事が正義

Page 8: [Phpカンファレンス関西2014 lt]動けばいいじゃない

さて、

Page 9: [Phpカンファレンス関西2014 lt]動けばいいじゃない

テストコードのあるコード• •

VSテストコードの無いコード

• •

Page 10: [Phpカンファレンス関西2014 lt]動けばいいじゃない

あなたはどちらで 書きますか。

Page 11: [Phpカンファレンス関西2014 lt]動けばいいじゃない

「ある方!」

Page 12: [Phpカンファレンス関西2014 lt]動けばいいじゃない

と、答えたあなた!

Page 13: [Phpカンファレンス関西2014 lt]動けばいいじゃない

そう、あなた!

Page 14: [Phpカンファレンス関西2014 lt]動けばいいじゃない

正解です!

Page 15: [Phpカンファレンス関西2014 lt]動けばいいじゃない

……一般的にはね。

Page 16: [Phpカンファレンス関西2014 lt]動けばいいじゃない

実は、 さっきの質問には背景が抜け落ちてる。シチュエーション

Page 17: [Phpカンファレンス関西2014 lt]動けばいいじゃない

例①

Page 18: [Phpカンファレンス関西2014 lt]動けばいいじゃない

お遊びのハッカソン

Page 19: [Phpカンファレンス関西2014 lt]動けばいいじゃない

限られた時間で、 動くプロダクト を作る事が目的

Page 20: [Phpカンファレンス関西2014 lt]動けばいいじゃない

テストコードが 有っても

Page 21: [Phpカンファレンス関西2014 lt]動けばいいじゃない

動かなければ 意味が無い!

Page 22: [Phpカンファレンス関西2014 lt]動けばいいじゃない

テストコード <

動く事

Page 23: [Phpカンファレンス関西2014 lt]動けばいいじゃない

類例だと

Page 24: [Phpカンファレンス関西2014 lt]動けばいいじゃない

プロトタイピングが ある。

Page 25: [Phpカンファレンス関西2014 lt]動けばいいじゃない

例②

Page 26: [Phpカンファレンス関西2014 lt]動けばいいじゃない

保守しなくていい コード

Page 27: [Phpカンファレンス関西2014 lt]動けばいいじゃない

つまり

Page 28: [Phpカンファレンス関西2014 lt]動けばいいじゃない

使い捨てのコード

Page 29: [Phpカンファレンス関西2014 lt]動けばいいじゃない

保守しないなら

Page 30: [Phpカンファレンス関西2014 lt]動けばいいじゃない

当然、

Page 31: [Phpカンファレンス関西2014 lt]動けばいいじゃない

コードが動くかぎり テストコードを書くコストが無駄

Page 32: [Phpカンファレンス関西2014 lt]動けばいいじゃない

Gistにあげる程度の

Page 33: [Phpカンファレンス関西2014 lt]動けばいいじゃない

屁みたいなコードに

Page 34: [Phpカンファレンス関西2014 lt]動けばいいじゃない

テストコードは 不釣り合い

Page 35: [Phpカンファレンス関西2014 lt]動けばいいじゃない

テストコードなんて

Page 36: [Phpカンファレンス関西2014 lt]動けばいいじゃない

窓から投げ捨てろ!

Page 37: [Phpカンファレンス関西2014 lt]動けばいいじゃない

テストコード・⌒ ヾ(*́ー`) ポイ

Page 38: [Phpカンファレンス関西2014 lt]動けばいいじゃない

あっ。。。

Page 39: [Phpカンファレンス関西2014 lt]動けばいいじゃない

睨まないで!

Page 40: [Phpカンファレンス関西2014 lt]動けばいいじゃない

「今更そんな事」

Page 41: [Phpカンファレンス関西2014 lt]動けばいいじゃない

とか

Page 42: [Phpカンファレンス関西2014 lt]動けばいいじゃない

「それでもテストは 必要だ!!!」

Page 43: [Phpカンファレンス関西2014 lt]動けばいいじゃない

とか

Page 44: [Phpカンファレンス関西2014 lt]動けばいいじゃない

言いたそうに、 睨まないで!

Page 45: [Phpカンファレンス関西2014 lt]動けばいいじゃない

話の途中で邪険にするなんて

Page 46: [Phpカンファレンス関西2014 lt]動けばいいじゃない

CakePHP以外に触れないで

Page 47: [Phpカンファレンス関西2014 lt]動けばいいじゃない

「PHPを窓から投げ捨てる」 とか

言う様なものですよ!

Page 48: [Phpカンファレンス関西2014 lt]動けばいいじゃない

閑話休題

Page 49: [Phpカンファレンス関西2014 lt]動けばいいじゃない

コードが動作する と言う条件下で

Page 50: [Phpカンファレンス関西2014 lt]動けばいいじゃない

テストが いらない例を

出した訳ですが。。。

Page 51: [Phpカンファレンス関西2014 lt]動けばいいじゃない

コードの動作は 誰が保証するんだ?

Page 52: [Phpカンファレンス関西2014 lt]動けばいいじゃない

と、思われた方

Page 53: [Phpカンファレンス関西2014 lt]動けばいいじゃない

鋭い!

Page 54: [Phpカンファレンス関西2014 lt]動けばいいじゃない

コードが動く保証が • •

必要

Page 55: [Phpカンファレンス関西2014 lt]動けばいいじゃない

つまり

Page 56: [Phpカンファレンス関西2014 lt]動けばいいじゃない

テストが必要。

Page 57: [Phpカンファレンス関西2014 lt]動けばいいじゃない

だからって、テストコードが

• • •

必要なのでは無い• • • •

Page 58: [Phpカンファレンス関西2014 lt]動けばいいじゃない

例えば

Page 59: [Phpカンファレンス関西2014 lt]動けばいいじゃない

/** * 足し算

* @param int $a 足す数

* @param int $b 足される数

*/ function sum($a, $b) { return $a + $b; }

Page 60: [Phpカンファレンス関西2014 lt]動けばいいじゃない

見りゃ分かる。

Page 61: [Phpカンファレンス関西2014 lt]動けばいいじゃない

Page 62: [Phpカンファレンス関西2014 lt]動けばいいじゃない

目視による脳内テストで • • • • •

動作を保証できる

Page 63: [Phpカンファレンス関西2014 lt]動けばいいじゃない

つまり、 先にあげた背景なら

Page 64: [Phpカンファレンス関西2014 lt]動けばいいじゃない

テストコードは • • •

いらない。

Page 65: [Phpカンファレンス関西2014 lt]動けばいいじゃない

あと

Page 66: [Phpカンファレンス関西2014 lt]動けばいいじゃない

この規模なら

Page 67: [Phpカンファレンス関西2014 lt]動けばいいじゃない

実際に動かして動作確認してもいい。

Page 68: [Phpカンファレンス関西2014 lt]動けばいいじゃない

Page 69: [Phpカンファレンス関西2014 lt]動けばいいじゃない

手動テスト• • •

Page 70: [Phpカンファレンス関西2014 lt]動けばいいじゃない

ただし、

Page 71: [Phpカンファレンス関西2014 lt]動けばいいじゃない

テストコードを書く時間 >

手動のテスト時間のトータル

Page 72: [Phpカンファレンス関西2014 lt]動けばいいじゃない

の場合

Page 73: [Phpカンファレンス関西2014 lt]動けばいいじゃない

に限ります。

Page 74: [Phpカンファレンス関西2014 lt]動けばいいじゃない

もちろん、

Page 75: [Phpカンファレンス関西2014 lt]動けばいいじゃない

逆説的に

Page 76: [Phpカンファレンス関西2014 lt]動けばいいじゃない

見て把握できない場合

Page 77: [Phpカンファレンス関西2014 lt]動けばいいじゃない

かつ

Page 78: [Phpカンファレンス関西2014 lt]動けばいいじゃない

テストコードを書く時間 <

手動のテスト時間のトータル

Page 79: [Phpカンファレンス関西2014 lt]動けばいいじゃない

ならば

Page 80: [Phpカンファレンス関西2014 lt]動けばいいじゃない

テストコードが必要

Page 81: [Phpカンファレンス関西2014 lt]動けばいいじゃない

ユニットテストでも

Page 82: [Phpカンファレンス関西2014 lt]動けばいいじゃない

振る舞いテストでも

Page 83: [Phpカンファレンス関西2014 lt]動けばいいじゃない

なんでもいい。

Page 84: [Phpカンファレンス関西2014 lt]動けばいいじゃない

兎に角

Page 85: [Phpカンファレンス関西2014 lt]動けばいいじゃない

テストコードが必要。

Page 86: [Phpカンファレンス関西2014 lt]動けばいいじゃない

お前らは

Page 87: [Phpカンファレンス関西2014 lt]動けばいいじゃない

超人じゃない。

Page 88: [Phpカンファレンス関西2014 lt]動けばいいじゃない

だから

Page 89: [Phpカンファレンス関西2014 lt]動けばいいじゃない

見て把握できるのには限度がある。

Page 90: [Phpカンファレンス関西2014 lt]動けばいいじゃない

超高速で手動テスト できない。

Page 91: [Phpカンファレンス関西2014 lt]動けばいいじゃない

なので

Page 92: [Phpカンファレンス関西2014 lt]動けばいいじゃない

多くのケースで テストコードが必要。

Page 93: [Phpカンファレンス関西2014 lt]動けばいいじゃない

今一度、言いたい。

Page 94: [Phpカンファレンス関西2014 lt]動けばいいじゃない

動く事が正義

Page 95: [Phpカンファレンス関西2014 lt]動けばいいじゃない

動く事を 己で保証できぬなら

Page 96: [Phpカンファレンス関西2014 lt]動けばいいじゃない

テストコード書け。

Page 97: [Phpカンファレンス関西2014 lt]動けばいいじゃない

以上。

Page 98: [Phpカンファレンス関西2014 lt]動けばいいじゃない
Page 99: [Phpカンファレンス関西2014 lt]動けばいいじゃない

以下、おまけ

Page 100: [Phpカンファレンス関西2014 lt]動けばいいじゃない

ここで朗報です。

Page 101: [Phpカンファレンス関西2014 lt]動けばいいじゃない

ちょっと複雑な コードでも

Page 102: [Phpカンファレンス関西2014 lt]動けばいいじゃない

工夫一つで目視で • • •

動作を保証できる ようになります

Page 103: [Phpカンファレンス関西2014 lt]動けばいいじゃない

/** * 価格計算

* @param int $a 価格 * @param int $b 個数 * @return int */ function calc($a, $b) { return intval($a * $b * ( $b > 10 ? 0.9 : 1)); }

Page 104: [Phpカンファレンス関西2014 lt]動けばいいじゃない

$b > 10ってなんだ。

Page 105: [Phpカンファレンス関西2014 lt]動けばいいじゃない

0.9ってなんだ?

Page 106: [Phpカンファレンス関西2014 lt]動けばいいじゃない

意味分からん。

Page 107: [Phpカンファレンス関西2014 lt]動けばいいじゃない

/** * 価格計算

* @param int $price 価格 * @param int $quantity 個数 * @return int */ function calcAmount($price, $quantity) { $amount = $price * $quantity; if ($quantity < self::PRICE_DOWN_THRESHOLD) { return $amount; } ! return intval($amount * self::PRICE_DOWN_RATE); }

Page 108: [Phpカンファレンス関西2014 lt]動けばいいじゃない

読める!

Page 109: [Phpカンファレンス関西2014 lt]動けばいいじゃない

動くのが分かる!

Page 110: [Phpカンファレンス関西2014 lt]動けばいいじゃない

これが、 可読詩片リーダブルコード

Page 111: [Phpカンファレンス関西2014 lt]動けばいいじゃない
Page 112: [Phpカンファレンス関西2014 lt]動けばいいじゃない

ところで

Page 113: [Phpカンファレンス関西2014 lt]動けばいいじゃない

もし、あなたが

Page 114: [Phpカンファレンス関西2014 lt]動けばいいじゃない

プログラミング初心者 or

その指導者なら

Page 115: [Phpカンファレンス関西2014 lt]動けばいいじゃない

TDDは有用です• •

Page 116: [Phpカンファレンス関西2014 lt]動けばいいじゃない

どんな背景でもシチュエーション

Page 117: [Phpカンファレンス関西2014 lt]動けばいいじゃない

まず、テストを書いて 実装を始めるといいよ。

Page 118: [Phpカンファレンス関西2014 lt]動けばいいじゃない

学習には最適。