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

Post on 22-Jun-2015

1.189 views 2 download

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

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

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

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

• 名前: 田中 康一

• Twitter: @mugeso

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

今日は割と • •

初心者向け

まず、

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

言いたい事がある。

すなわち!

動く事が正義

さて、

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

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

• •

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

「ある方!」

と、答えたあなた!

そう、あなた!

正解です!

……一般的にはね。

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

例①

お遊びのハッカソン

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

テストコードが 有っても

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

テストコード <

動く事

類例だと

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

例②

保守しなくていい コード

つまり

使い捨てのコード

保守しないなら

当然、

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

Gistにあげる程度の

屁みたいなコードに

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

テストコードなんて

窓から投げ捨てろ!

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

あっ。。。

睨まないで!

「今更そんな事」

とか

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

とか

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

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

CakePHP以外に触れないで

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

言う様なものですよ!

閑話休題

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

テストが いらない例を

出した訳ですが。。。

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

と、思われた方

鋭い!

コードが動く保証が • •

必要

つまり

テストが必要。

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

• • •

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

例えば

/** * 足し算

* @param int $a 足す数

* @param int $b 足される数

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

見りゃ分かる。

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

動作を保証できる

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

テストコードは • • •

いらない。

あと

この規模なら

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

手動テスト• • •

ただし、

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

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

の場合

に限ります。

もちろん、

逆説的に

見て把握できない場合

かつ

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

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

ならば

テストコードが必要

ユニットテストでも

振る舞いテストでも

なんでもいい。

兎に角

テストコードが必要。

お前らは

超人じゃない。

だから

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

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

なので

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

今一度、言いたい。

動く事が正義

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

テストコード書け。

以上。

以下、おまけ

ここで朗報です。

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

工夫一つで目視で • • •

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

/** * 価格計算

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

$b > 10ってなんだ。

0.9ってなんだ?

意味分からん。

/** * 価格計算

* @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); }

読める!

動くのが分かる!

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

ところで

もし、あなたが

プログラミング初心者 or

その指導者なら

TDDは有用です• •

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

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

学習には最適。